diff --git a/.vscode/launch.json b/.vscode/launch.json index 3c61a0aea1..c4084e2cb3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,12 +1,31 @@ { - "version": "0.2.0", - "configurations": [ + "version": "0.2.0", + "configurations": [ + { + "type": "byond", + "request": "launch", + "name": "Launch and Build TGUI and DM", + "preLaunchTask": "TGUI Compile", + "dmb": "${workspaceFolder}/${command:CurrentDMB}" + }, + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "c:/Users/MLGTASTIC/Desktop/Eris-SS13/CEV-Eris/tgui/.yarn/unplugged/ttf2woff2-npm-4.0.4-e71f070912/node_modules/ttf2woff2/csrc/woff2", + "program": "c:/Users/MLGTASTIC/Desktop/Eris-SS13/CEV-Eris/tgui/.yarn/unplugged/ttf2woff2-npm-4.0.4-e71f070912/node_modules/ttf2woff2/csrc/woff2/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ { - "type": "byond", - "request": "launch", - "name": "Launch and Build TGUI and DM", - "preLaunchTask": "TGUI Compile", - "dmb": "${workspaceFolder}/${command:CurrentDMB}" + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true } - ] + ] + } + ] } \ No newline at end of file diff --git a/cev_eris.dme b/cev_eris.dme index 216850f691..324e13ec64 100644 --- a/cev_eris.dme +++ b/cev_eris.dme @@ -15,7 +15,9 @@ #include "code\hub.dm" #include "code\stylesheet.dm" #include "code\world.dm" +#include "code\__DEFINES\___byondbase.dm" #include "code\__DEFINES\__atomFlags.dm" +#include "code\__DEFINES\_bullets.dm" #include "code\__DEFINES\_compile_options.dm" #include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_hydro_setup.dm" @@ -89,6 +91,7 @@ #include "code\__DEFINES\verb_manager.dm" #include "code\__DEFINES\weapons.dm" #include "code\__DEFINES\ZAS.dm" +#include "code\__DEFINES\dcs\_attachmentFlags.dm" #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" @@ -227,6 +230,7 @@ #include "code\controllers\subsystems\alarm.dm" #include "code\controllers\subsystems\assets.dm" #include "code\controllers\subsystems\atoms.dm" +#include "code\controllers\subsystems\bullets.dm" #include "code\controllers\subsystems\chat.dm" #include "code\controllers\subsystems\chemistry.dm" #include "code\controllers\subsystems\chunks.dm" @@ -2410,6 +2414,7 @@ #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\gun_firemode.dm" #include "code\modules\projectiles\gun_hud_actions.dm" +#include "code\modules\projectiles\hitbox_datums.dm" #include "code\modules\projectiles\projectile.dm" #include "code\modules\projectiles\ammunition\ammo_kits.dm" #include "code\modules\projectiles\ammunition\boxes.dm" diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 99ff2a29df..12c9a599aa 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -33,6 +33,10 @@ Pipelines + Other Objects -> Pipe network var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 +/// Pending a full implementation of hitbox for every atom +/obj/machinery/atmospherics/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + /obj/machinery/atmospherics/Initialize(mapload, d) if(!icon_manager) icon_manager = new() @@ -58,6 +62,15 @@ Pipelines + Other Objects -> Pipe network return ..() +/// Yes this is necesarry due to how atmos is handled +/// In a perfect world this wouldn't be necesarry +/// and i do not have the willpower to rework all of atmos yet +/// SPCR - 2024 +/obj/machinery/atmospherics/proc/getHitboxData() + if(invisibility == 101) + return null + return initialize_directions + /obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) if(node) if(T && !T.is_plating() && node.level == BELOW_PLATING_LEVEL && istype(node, /obj/machinery/atmospherics/pipe)) diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 8efb6748e2..dabb6b1306 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -53,6 +53,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on use_power = IDLE_POWER_USE icon_state = "map_vent_out" + hitbox = /datum/hitboxDatum/atom/atmosphericVentScrubber /obj/machinery/atmospherics/unary/vent_pump/siphon pump_direction = 0 diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 6489833d43..63507250d9 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -40,6 +40,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on use_power = IDLE_POWER_USE icon_state = "map_scrubber_on" + hitbox = /datum/hitboxDatum/atom/atmosphericVentScrubber /obj/machinery/atmospherics/unary/vent_scrubber/Initialize(mapload, d) . = ..() diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 95ae2292d0..fb675e498b 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -7,9 +7,19 @@ layer = GAS_PIPE_HIDDEN_LAYER use_power = NO_POWER_USE + hitbox = /datum/hitboxDatum/atom/polygon/atmosphericPipe + var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called +/// Pending a full implementation of hitbox for every atom +/obj/machinery/atmospherics/pipe/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + take_damage(P.get_structure_damage()) + if(QDELETED(src)) + return PROJECTILE_CONTINUE + return PROJECTILE_STOP + + /obj/machinery/atmospherics/pipe/Initialize(mapload, d) . = ..() AddComponent(/datum/component/buckling, buckleFlags = BUCKLE_MOB_ONLY | BUCKLE_REQUIRE_RESTRAINTED | BUCKLE_REQUIRE_NOT_BUCKLED | BUCKLE_FORCE_LIE) @@ -191,6 +201,11 @@ invisibility = i ? 101 : 0 update_icon() +/obj/machinery/atmospherics/pipe/simple/getHitboxData() + if(invisibility == 101) + return null + return initialize_directions + /obj/machinery/atmospherics/pipe/simple/Process() if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle ..() diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index 5cf615c32a..8f3a186200 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -242,6 +242,6 @@ obj/item/check_airflow_movable(n) . = list() for(var/turf/T in contents) for(var/atom/movable/A in T) - if(!A.simulated || A.anchored || istype(A, /obj/effect) || isobserver(A)) + if(A.anchored || istype(A, /obj/effect) || isobserver(A)) continue . += A diff --git a/code/__DEFINES/___byondbase.dm b/code/__DEFINES/___byondbase.dm new file mode 100644 index 0000000000..4a635cfe47 --- /dev/null +++ b/code/__DEFINES/___byondbase.dm @@ -0,0 +1,8 @@ +#define NORTH 1 +#define SOUTH 2 +#define EAST 4 +#define WEST 8 +#define LISTNORTH "1" +#define LISTSOUTH "2" +#define LISTEAST "4" +#define LISTWEST "8" diff --git a/code/__DEFINES/__atomFlags.dm b/code/__DEFINES/__atomFlags.dm index d88215cb30..0f2424df9d 100644 --- a/code/__DEFINES/__atomFlags.dm +++ b/code/__DEFINES/__atomFlags.dm @@ -1,6 +1,17 @@ /// This ATOM gets its proper icon after update icon / new has been called . This makes path2icon instantiate it and grab it from there -#define AF_ICONGRABNEEDSINSTANTATION 1<<1 +#define AF_ICONGRABNEEDSINSTANTATION (1<<1) /// This atom's layer shouldn't adjust itself -#define AF_LAYER_UPDATE_HANDLED 1<<2 +#define AF_LAYER_UPDATE_HANDLED (1<<2) /// This atom's plane shouldn't adjust itself -#define AF_PLANE_UPDATE_HANDLED 1<<3 +#define AF_PLANE_UPDATE_HANDLED (1<<3) +/// This atom should be able to always move however it wants with no restrictions(used for bullets after they hit.) It also isn't counted for any interactions regarding crossing , etc. +#define AF_VISUAL_MOVE (1<<4) +/// Our hitbox is offset by an attachment. +#define AF_HITBOX_OFFSET_BY_ATTACHMENT (1<<5) +#define AF_IGNORE_ON_BULLETSCAN (1<<6) +/// This atom will get ignored by explosions +#define AF_EXPLOSION_IGNORANT (1<<8) +/// Uses the aiming level for shooting at the shooter instead. +#define AF_PASS_AIMING_LEVEL (1<<9) +/// This is a wall-mounted atom and should be treated as such on initialization. +#define AF_WALL_MOUNTED (1<<10) diff --git a/code/__DEFINES/_bullets.dm b/code/__DEFINES/_bullets.dm new file mode 100644 index 0000000000..65e7ae4a4b --- /dev/null +++ b/code/__DEFINES/_bullets.dm @@ -0,0 +1,41 @@ +/// These define the MAXIMUM height for a level (as in a standing human height is considered) +#define LEVEL_BELOW 0 +#define LEVEL_TURF 3 +#define LEVEL_LYING 6 +#define LEVEL_LOWWALL 9 +#define LEVEL_TABLE 15 +#define LEVEL_LEGS 15 +#define LEVEL_GROIN 20 +#define LEVEL_CHEST 28 +#define LEVEL_HEAD 30 +#define LEVEL_ABOVE 32 + +// update these , using max() on defines wont give you constants +#define LEVEL_MAX 3 +#define LEVEL_MIN 0 + +// return flags for aimingLevels ,this makes it so it uses the shooter's default aiming level , be it by their current level or def zone they are aiming at. +#define HBF_NOLEVEL -99999 +#define HBF_USEMEDIAN -100000 + +#define PIXEL_FUDGE (1/1024) + +proc/snapNum(n) + . = n + n = round(n,1) + if(abs(.-n) < PIXEL_FUDGE) . = n + + +// return flags for the hitboxDatum , with functionality implemented in bullet_act. passed under hitboxFlags +// these have no excuse to be general , add them for any object you want to add special functonality to with regards to where it is hit. +/// GENERAL +#define HB_AIMED 1<<1 +/// mob/living/carbon/human and any subtypes +#define HB_HEAD 1<<2 +#define HB_CHESTARMS 1<<3 +#define HB_GROIN 1<<4 +#define HB_LEGS 1<<5 +// barricades and whatever object implements this +#define HB_WEAKPOINT 1<<6 + + diff --git a/code/__DEFINES/dcs/_attachmentFlags.dm b/code/__DEFINES/dcs/_attachmentFlags.dm new file mode 100644 index 0000000000..e7d85e1b2f --- /dev/null +++ b/code/__DEFINES/dcs/_attachmentFlags.dm @@ -0,0 +1,36 @@ + +/// This denotes that we are attached to a supporting atom +#define ATFA_ATTACHED (0<<0) +/// This denotes that we are a supporting atom to the thing attached to us +#define ATFS_SUPPORTER (1<<0) + +/// ATFS - Attachment flags for the supporting atom +/// DEPENDING on wheter its an attached or a supporter, the bitflags change meaning +/// If the supporter is marked for deletion/deleted , also delete the attached atoms. Default behaviour +#define ATFS_DELETE_RECURSIVE (1<<1) +/// Will detach all attached atoms and drop them on the turf +#define ATFS_DROP_ATTACHED (1<<2) +/// The supporting atom shall relay signals to all its attached atoms +#define ATFS_RELAY_SIGNALS (1<<3) +/// This will cause all attached atoms to be checked first for hitbox collisions instead of us +#define ATFS_PRIORITIZE_ATTACHED_FOR_HITS (1<<4) +/// This will make all bullets ignore the attached atom +#define ATFS_IGNORE_HITS (1<<5) + +/// ATFA - Attachment flags for the attached atom +/// This denotes that we are holding onto the supporting atom. +#define ATFA_HOLDING (1<<1) +/// We can be detached from the wall(either through a interaction or verb) +#define ATFA_DETACHABLE (1<<2) +/// This is embedded into the wall , removeable using surgical clamps or pliers, and not by normal means. +#define ATFA_EMBEDDED (1<<3) +/// The player must be next to the wall to interact with the attached +#define ATFA_CLOSE_INTERACTIVE (1<<4) +/// Player has to be near the turf the attached is facing to interact with it. Default behaviour +#define ATFA_EASY_INTERACTIVE (1<<5) +/// This can only be hit if the bullets come from the direction it is facing or if they are penetrating ,but otherwise not. +#define ATFA_DIRECTIONAL_HITTABLE_STRICT (1<<6) +/// The bullet can come from any axis that shares a direction bit-flag with ourselves +#define ATFA_DIRECTIONAL_HITTABLE (1<<7) +/// Will force any hit-checking to be relatively offset by our position compared to the supporting atom. +#define ATFA_CENTER_ON_SUPPORTER (1<<8) diff --git a/code/__DEFINES/error_handler.dm b/code/__DEFINES/error_handler.dm index 05edb294cb..c2fcb0866f 100644 --- a/code/__DEFINES/error_handler.dm +++ b/code/__DEFINES/error_handler.dm @@ -4,4 +4,4 @@ #define ERROR_MAX_COOLDOWN (ERROR_COOLDOWN * ERROR_LIMIT) #define ERROR_SILENCE_TIME 6000 // How long a unique error will be silenced for // How long to wait between messaging admins about occurrences of a unique error -#define ERROR_MSG_DELAY 50 \ No newline at end of file +#define ERROR_MSG_DELAY 50 diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index 718bb84af4..f9ce770f6f 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -18,7 +18,11 @@ #define CEILING(x, y) ( -round(-(x) / (y)) * (y) ) -#define DIST_EUCLIDIAN(x1,y1,x2,y2) (sqrt((x1-x2)**2 + (y1-y2)**2)) +#define DIST_EUCLIDIAN_2D(x1,y1,x2,y2) (sqrt((x1-x2)**2 + (y1-y2)**2)) + +#define DIST_EUCLIDIAN_3D(x1,y1,z1,x2,y2,z2) (sqrt((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2)) + + // round() acts like floor(x, 1) by default but can't handle other values #define FLOOR(x, y) ( round((x) / (y)) * (y) ) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index f8754b2393..2f4fec3f94 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -157,10 +157,10 @@ // Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. -#define PROJECTILE_STOP 1 //if the projectile should stop flying after calling bullet_act() -#define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() -#define PROJECTILE_FORCE_MISS -2 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. -#define PROJECTILE_FORCE_MISS_SILENCED -2.5 //if the projectile should do the same thing as above, but not give the miss message +#define PROJECTILE_STOP 1 //if the projectile should stop flying after calling bullet_act() +#define PROJECTILE_CONTINUE 2//if the projectile should continue flying after calling bullet_act() +#define PROJECTILE_FORCE_MISS 4 //if the projectile should treat the attack as a miss (suppresses attack and admin logs) - only applies to mobs. +#define PROJECTILE_FORCE_MISS_SILENCED 8//if the projectile should do the same thing as above, but not give the miss message //Camera capture modes #define CAPTURE_MODE_REGULAR 0 //Regular polaroid camera mode @@ -228,6 +228,10 @@ #define EMAIL_BROADCAST "broadcast@internal-services.net" #define EMAIL_PAYROLL "payroll@internal-services.net" +#ifdef BULLETDEBUG +GLOBAL_LIST_EMPTY(initVis) +#endif + #define LEGACY_RECORD_STRUCTURE(X, Y) GLOBAL_LIST_EMPTY(##X);/datum/computer_file/data/##Y/var/list/fields[0];/datum/computer_file/data/##Y/New(){..();GLOB.##X.Add(src);}/datum/computer_file/data/##Y/Destroy(){. = ..();GLOB.##X.Remove(src);} //Number of slots a modular computer has which can be tweaked via gear tweaks. @@ -367,3 +371,7 @@ #define TTS_SEED_DEFAULT_FEMALE "Female_1" #define TTS_SEED_DEFAULT_MALE "Male_1" #define TTS_SEED_ANNOUNCER "Robot_2" + +#define BBOX(x1,y1,x2,y2, minLevel, maxLevel, flags) list(x1,y1,x2,y2, minLevel, maxLevel, flags) +#define BLINE(x1,y1,x2,y2, minLevel, maxLevel, flags) list(x1,y1,x2,y2, minLevel, maxLevel, flags) +#define TRIGSLOPE(x1,y1,x2,y2) ((y2-y1)/(x2-x1)) diff --git a/code/__DEFINES/projectile_defines.dm b/code/__DEFINES/projectile_defines.dm index a8b430a965..ed2395eb38 100644 --- a/code/__DEFINES/projectile_defines.dm +++ b/code/__DEFINES/projectile_defines.dm @@ -41,7 +41,3 @@ #define SLOT_UNDERBARREL "underbarrel" #define SLOT_MECHANICS "mechanics" #define SLOT_BAYONET "bayonet slot" - -#define HEIGHT_LOW 1 -#define HEIGHT_CENTER 0 -#define HEIGHT_HIGH 2 diff --git a/code/__DEFINES/subsystems-priority.dm b/code/__DEFINES/subsystems-priority.dm index 2b93e42456..c4181e6670 100644 --- a/code/__DEFINES/subsystems-priority.dm +++ b/code/__DEFINES/subsystems-priority.dm @@ -15,6 +15,7 @@ var/list/bitflags = list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 #define FIRE_PRIORITY_TIMER 700 #define SS_PRIORITY_TICKER 200 // Gameticker processing. #define FIRE_PRIORITY_TGUI 110 +#define SS_PRIORITY_BULLETS 102 #define FIRE_PRIORITY_EXPLOSIONS 105 // Explosions! #define FIRE_PRIORITY_THROWING 106 // Throwing! after explosions since they influence throw direction #define SS_PRIORITY_HUMAN 101 // Human Life(). diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index ffdf98f5c5..dcae2ffc14 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -117,12 +117,13 @@ #define INIT_ORDER_XKEYSCORE -10 #define INIT_ORDER_STICKY_BAN -10 #define INIT_ORDER_TICKETS -10 +#define INIT_ORDER_BULLETS -11 +#define INIT_ORDER_LIGHTING -20 #define INIT_ORDER_JAMMING -22 #define INIT_ORDER_SQUEAK -40 #define INIT_ORDER_XENOARCH -50 #define INIT_ORDER_PERSISTENCE -100 #define INIT_OPEN_SPACE -150 -#define INIT_ORDER_LIGHTING -160 #define INIT_ORDER_LATELOAD -180 #define INIT_ORDER_CHAT -185 #define INIT_ORDER_SHUTTLE -190 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index a345b27d0c..dd6551235e 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -27,6 +27,44 @@ #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) #define reverseList(L) reverseRange(L.Copy()) +/// L - List, I - Item , K = Key . For associative lists +#define ASSLADD(L, I, K) \ + if(!length(L))\ + L = list();\ + L[K] = I;\ + +/// L - List, K = Key . For associative lists +#define ASSLREMOVE(L, K)\ + if(length(L)){\ + L -= K;\ + if(length(L) == 0){\ + del(L);};\ + }; + +/// L - List, I - Item , K = Key . For lists indexed by associative +#define ASSLLADD(L, I, K) \ + if(length(L)){\ + if(!length(L[K])){\ + L[K] = list(I);}\ + else{\ + L[K] += I;};\ + }\ + else\ + L = list();\ + L[K] = list(I);\ + +/// L - List, I - Item , K = Key . For lists indexed by associtive +#define ASSLLREMOVE(L, I, K)\ + if(length(L))\ + if(length(L[K]) > 1)\ + L[K] -= I;\ + else\ + L -= K;\ + if(length(L) == 0)\ + del(L);\ + + + //Sets the value of a key in an assoc list #define LAZYSET(L,K,V) if(!L) { L = list(); } L[K] = V; diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 7eb9642197..fbecfca2ed 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -101,8 +101,7 @@ new_turf.transport_properties_from(source) for(var/obj/O in source) - if(O.simulated) - O.forceMove(new_turf) + O.forceMove(new_turf) for(var/mob/M in source) if(isEye(M)) continue // If we need to check for more mobs, I'll add a variable diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 87032a6320..b4697a0667 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -45,6 +45,19 @@ else if(dx<0) .+=360 +/// First 2 are for the start, last 2 for the end +/proc/getAngleCoordinates(x1,y1,x2,y2) + var/dy = y2-y1 + var/dx = x2-x1 + if(dy == 0) + return (dx >= 0) ? 90 : 270 + . = arctan(dx/dy) + if(dy < 0) + . += 180 + else if(dx < 0) + . += 360 + + //Returns location. Returns null if no location was found. /proc/get_teleport_loc(turf/location, mob/target, distance = 1, density = FALSE, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0) /* @@ -158,18 +171,22 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/DirBlocked(turf/loc, var/dir) - for(var/obj/structure/window/D in loc) - if(!D.density) continue - if(D.dir == SOUTHWEST) return 1 - if(D.dir == dir) return 1 - - for(var/obj/machinery/door/D in loc) - if(!D.density) continue - if(istype(D, /obj/machinery/door/window)) - if((dir & SOUTH) && (D.dir & (EAST|WEST))) return 1 - if((dir & EAST ) && (D.dir & (NORTH|SOUTH))) return 1 - else return 1 // it's a real, air blocking door - return 0 + for(var/obj/gameObject in loc) + if(!gameObject.density) + continue + if(istype(gameObject, /obj/structure/window)) + if(gameObject.dir == dir || gameObject.dir == SOUTHWEST) + return TRUE + /// bypass rest of the loop fast, no need to cehck the other type.(unless more are added) SPCR-2024 + continue + if(istype(gameObject, /obj/machinery/door)) + if(!istype(gameObject, /obj/machinery/door/window)) + return TRUE + if((dir & SOUTH) && (gameObject.dir & (EAST|WEST))) + return TRUE + if((dir & EAST) && (gameObject.dir & (NORTH|SOUTH))) + return TRUE + return FALSE /proc/TurfBlockedNonWindow(turf/loc) for(var/obj/O in loc) @@ -559,6 +576,13 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/between(var/low, var/middle, var/high) return max(min(middle, high), low) +/proc/int_range(value,limit1,limit2) + if(limit1 > limit2) + var/temp = limit2 + limit2 = limit1 + limit1 = temp + return !(valuelimit2) + //returns random gauss number proc/GaussRand(var/sigma) var/x, y, rsq @@ -1251,7 +1275,6 @@ var/list/FLOORITEMS = list( density = FALSE anchored = TRUE - simulated = FALSE see_in_dark = 1e6 diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 6a88d4af66..c73fd50e0e 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -46,11 +46,9 @@ #define PRELOAD_RSC 2 // 0 to allow using external resources or on-demand behaviour; #endif // 1 to use the default behaviour; // 2 for preloading absolutely everything; -//#define LOWMEMORYMODE 1 +#define LOWMEMORYMODE 1 -#ifdef LOWMEMORYMODE -#define FORCE_MAP "_maps/runtimestation.json" -#endif +//#define BULLETDEBUG 1 //Update this whenever you need to take advantage of more recent byond features #define MIN_COMPILER_VERSION 514 diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index ad7fe4f6fd..f99dd4a0de 100755 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -28,15 +28,22 @@ if (CH) if (!CH.MouseUp(object,location,control,params)) return - .=..() -/client/MouseDrag(over_object,src_location,over_location,src_control,over_control,params) +/client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) if (CH) - if (!CH.MouseDrag(over_object,src_location,over_location,src_control,over_control,params)) + if (!CH.MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params)) + return + .=..() + + +/client/MouseMove(object, location, control, params) + if(CH) + if(!CH.MouseMove(object, location, control, params)) return .=..() + /client/Click(atom/target, location, control, params) var/list/L = params2list(params) //convert params into a list var/dragged = L["drag"] //grab what mouse button they are dragging with, if any. diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm index 255866a7a2..bca75b7286 100644 --- a/code/controllers/hooks.dm +++ b/code/controllers/hooks.dm @@ -32,7 +32,7 @@ var/caller = new hook_path var/status = 1 for(var/P in typesof("[hook_path]/proc")) - world.log<<"Calling from hooks , [P]" + world.log<<"Calling from hooks [P]" if(!call(caller, P)(arglist(args))) error("Hook '[P]' failed or runtimed.") status = 0 diff --git a/code/controllers/subsystems/bullets.dm b/code/controllers/subsystems/bullets.dm new file mode 100644 index 0000000000..07b49731f8 --- /dev/null +++ b/code/controllers/subsystems/bullets.dm @@ -0,0 +1,397 @@ +/// Pixels per turf +#define PPT 32 +#define HPPT (PPT/2) +/// the higher you go the higher you risk trajectories becoming wobbly and inaccurate. +/// 16 is the absolute lowest which guarantees maximum accuracy. +/// 20 is a safe bet between 24 and 16 +/// the higher this is ,the more performant the system is , since more of the math is done at once instead of in stages +/// it is also more inaccurate the higher you go.. +#define MAXPIXELS 16 +/// Define this / uncomment it if you want to see bullet debugging data for trajectories & chosen paths. +//#define BULLETDEBUG 1 +SUBSYSTEM_DEF(bullets) + name = "Bullets" + wait = 1 + priority = SS_PRIORITY_BULLETS + init_order = INIT_ORDER_BULLETS + + var/list/datum/bullet_data/current_queue = list() + var/list/datum/bullet_data/bullet_queue = list() + +/// You might ask why use a bullet data datum, and not store all the vars on the bullet itself, honestly its to keep track and initialize firing relevant vars only when needed +/// This data is guaranteed to be of temporary use spanning 15-30 seconds or how long the bullet moves for. Putting them on the bullet makes each one take up more ram +/// And ram is not a worry , but its better to initialize less and do the lifting on fire. +/datum/bullet_data + var/obj/item/projectile/referencedBullet = null + var/atom/firer + var/aimedZone = "" + var/globalX = 0 + var/globalY = 0 + var/globalZ = 0 + var/originalX = 0 + var/originalY = 0 + var/originalZ = 0 + var/targetX = 0 + var/targetY = 0 + var/targetZ = 0 + var/pixelSpeed = 0 + var/ratioX = 0 + var/ratioY = 0 + var/angle = 0 + var/lifetime = 30 + var/traveledPixels = 0 + var/distanceToTarget = 0 + var/list/cannotHit = list() + +/datum/bullet_data/New(obj/item/projectile/referencedBullet, aimedZone, atom/firer, list/currentCoordinates, list/targetCoordinates, pixelsPerTick, angleOffset, lifetime) + referencedBullet.dataRef = src + src.referencedBullet = referencedBullet + src.aimedZone = aimedZone + src.lifetime = lifetime + src.firer = firer + pixelSpeed = pixelsPerTick + globalX = currentCoordinates[1] + globalY = currentCoordinates[2] + globalZ = currentCoordinates[3] + originalX = globalX + originalY = globalY + originalZ = globalZ + targetX = targetCoordinates[1] + targetY = targetCoordinates[2] + targetZ = targetCoordinates[3] + angle = getAngleByPosition() + angle += angleOffset + distanceToTarget = distStartToFinish2D() + cannotHit.Add(firer) + updatePathByAngle() + #ifdef BULLETDEBUG + message_admins("Bullet created with Z-target at [targetZ] and starting at [globalZ]") + #endif + SSbullets.bullet_queue.Add(src) + +/datum/bullet_data/proc/redirect(currentX, currentY, currentZ, targetX, targetY, targetZ) + globalX = currentX + globalY = currentY + globalZ = currentZ + src.targetX = targetX + src.targetY = targetY + src.targetZ = targetZ + angle = getAngleByPosition() + updatePathByPosition() + +/datum/bullet_data/proc/bounce(bounceAxis, angleOffset) + switch(bounceAxis) + if(1) + ratioX *= -1 + if(2) + ratioY *= -1 + angle = arctan(ratioY, ratioX) + angleOffset + updatePathByAngle() + +/datum/bullet_data/proc/getAngleByPosition() + return ATAN2(targetY - originalY, targetX - originalX) + +/datum/bullet_data/proc/updatePathByAngle() + var/matrix/rotation = matrix() + ratioX = sin(angle) + ratioY = cos(angle) + rotation.Turn(angle + 180) + referencedBullet.transform = rotation + +/datum/bullet_data/proc/updatePathByPosition() + var/matrix/rotation = matrix() + angle = getAngleByPosition() + ratioX = sin(angle) + ratioY = cos(angle) + rotation.Turn(angle + 180) + referencedBullet.transform = rotation + +/datum/bullet_data/proc/distStartToFinish2D() + return DIST_EUCLIDIAN_2D(targetX,targetY,originalX,originalY) + +/datum/controller/subsystem/bullets/proc/reset() + current_queue = list() + bullet_queue = list() + +/datum/controller/subsystem/bullets/fire(resumed) + /// processing variables + var/turf/movementTurf + var/turf/currentTurf + var/currentX + var/currentY + var/currentZ + var/pixelTotal + var/pixelStep + var/bulletDir + var/stepX + var/stepY + var/stepZ + var/obj/item/projectile/projectile + var/canContinue + current_queue = bullet_queue.Copy() + if(!resumed) + current_queue = bullet_queue.Copy() + #ifdef BULLETDEBUG + var/list/colored = list() + #endif + for(var/datum/bullet_data/dataReference in current_queue) + current_queue.Remove(dataReference) + projectile = dataReference.referencedBullet + if(QDELETED(projectile)) + bullet_queue.Remove(dataReference) + continue + currentX = dataReference.globalX + currentY = dataReference.globalY + currentZ = dataReference.globalZ + bulletDir = (EAST*(dataReference.ratioX>0)) | (WEST*(dataReference.ratioX<0)) | (NORTH*(dataReference.ratioY>0)) | (SOUTH*(dataReference.ratioY<0)) + pixelTotal = dataReference.pixelSpeed + dataReference.lifetime-- + while(pixelTotal > 0) + pixelStep = min(pixelTotal, MAXPIXELS) + pixelTotal -= pixelStep + dataReference.traveledPixels += pixelStep + stepX = dataReference.ratioX * pixelStep + stepY = dataReference.ratioY * pixelStep + stepZ = LERP(dataReference.originalZ, dataReference.targetZ, dataReference.traveledPixels/dataReference.distanceToTarget) - dataReference.globalZ + currentTurf = get_turf(projectile) + //message_admins("Z : [dataReference.globalZ] with step [stepZ] , Ratio : [dataReference.traveledPixels/dataReference.distanceToTarget]") + movementTurf = locate(round((currentX+stepX)/PPT),round((currentY+stepY)/PPT),round((currentZ+stepZ)/PPT)) + if(!movementTurf) + dataReference.lifetime = 0 + break + + //message_admins("X: [movementTurf.x] Y:[movementTurf.y] Z:[movementTurf.z]") + if(movementTurf == currentTurf) + canContinue = projectile.scanTurf(currentTurf, bulletDir, currentX, currentY, currentZ, &stepX, &stepY, &stepZ) + if(canContinue == PROJECTILE_CONTINUE) + dataReference.globalX += stepX + dataReference.globalY += stepY + dataReference.globalZ += stepZ + else + dataReference.globalX = stepX + dataReference.globalY = stepY + #ifdef BULLETDEBUG + currentTurf.color = COLOR_RED + message_admins(" 1 New turf, X:[round(dataReference.globalX/32)] | Y:[round(dataReference.globalY/32)] | Z:[round(dataReference.globalZ/32)]") + #endif + if(movementTurf != currentTurf && movementTurf) + projectile.pixel_x -= (movementTurf.x - currentTurf.x) * PPT + projectile.pixel_y -= (movementTurf.y - currentTurf.y) * PPT + projectile.forceMove(movementTurf) + #ifdef BULLETDEBUG + movementTurf.color = COLOR_RED + colored += movementTurf + message_admins("Adjusted for Delta") + #endif + break + else + canContinue = projectile.scanTurf(currentTurf, bulletDir, currentX, currentY, currentZ, &stepX, &stepY, &stepZ) + if(canContinue == PROJECTILE_CONTINUE) + canContinue = projectile.scanTurf(movementTurf, bulletDir, currentX, currentY, currentZ, &stepX, &stepY, &stepZ) + if(canContinue == PROJECTILE_CONTINUE) + projectile.pixel_x -= (movementTurf.x - currentTurf.x) * PPT + projectile.pixel_y -= (movementTurf.y - currentTurf.y) * PPT + dataReference.globalX += stepX + dataReference.globalY += stepY + dataReference.globalZ += stepZ + projectile.forceMove(movementTurf) + #ifdef BULLETDEBUG + movementTurf.color = COLOR_GREEN + colored += movementTurf + #endif + else + dataReference.globalX = stepX + dataReference.globalY = stepY + #ifdef BULLETDEBUG + message_admins(" 2 New turf, X:[round(dataReference.globalX/32)] | Y:[round(dataReference.globalY/32)] | Z:[round(dataReference.globalZ/32)]") + movementTurf.color = COLOR_RED + #endif + movementTurf = locate(round(stepX/PPT), round(stepY/PPT), round(currentZ/PPT)) + if(movementTurf != currentTurf && movementTurf) + projectile.pixel_x -= (movementTurf.x - currentTurf.x) * PPT + projectile.pixel_y -= (movementTurf.y - currentTurf.y) * PPT + projectile.forceMove(movementTurf) + #ifdef BULLETDEBUG + movementTurf.color = COLOR_RED + message_admins("Adjusted for Delta") + colored += movementTurf + #endif + break + else + dataReference.globalX = stepX + dataReference.globalY = stepY + dataReference.globalZ = stepZ + movementTurf = locate(round(stepX/PPT), round(stepY/PPT), round(currentZ/PPT)) + #ifdef BULLETDEBUG + currentTurf.color = COLOR_RED + message_admins(" 3 New turf, X:[round(dataReference.globalX/32)] | Y:[round(dataReference.globalY/32)] | Z:[round(dataReference.globalZ/32)]") + #endif + if(movementTurf != currentTurf && movementTurf) + projectile.pixel_x -= (movementTurf.x - currentTurf.x) * PPT + projectile.pixel_y -= (movementTurf.y - currentTurf.y) * PPT + projectile.forceMove(movementTurf) + #ifdef BULLETDEBUG + movementTurf.color = COLOR_RED + message_admins("Adjusted for Delta") + colored += movementTurf + #endif + break + + //message_admins("stepX:[stepX] , stepY : [stepY]") + + + + currentX = dataReference.globalX + currentY = dataReference.globalY + currentZ = dataReference.globalZ + + var/bulletTime = SSbullets.wait *(dataReference.pixelSpeed / (dataReference.pixelSpeed + pixelTotal)) + /* + if(canContinue != PROJECTILE_CONTINUE) + var/a = round((stepX)/32) + var/b = round((stepY)/32) + var/c = round(currentZ/32) + var/turf/turfer = locate(a,b,c) + var/atom/movable/special = new /obj/item() + message_admins("stepX:[stepX] , stepY : [stepY]") + if(movementTurf) + message_admins("MovTurf ----- X: [movementTurf.x] Y:[movementTurf.y] Z:[movementTurf.z]") + message_admins("VisTurf ----- X: [a] Y:[b] Z:[c]") + special.forceMove(turfer) + special.icon = projectile.icon + special.icon_state = projectile.icon_state + special.pixel_x = round((stepX))%32 - 16 + special.pixel_y = round((stepY))%32 - 16 + special.transform = projectile.transform + */ + + + animate(projectile, bulletTime, pixel_x = dataReference.globalX%PPT - HPPT, pixel_y = dataReference.globalY%PPT - HPPT, flags = ANIMATION_END_NOW) + if(dataReference.lifetime < 1) + projectile.finishDeletion() + bullet_queue.Remove(dataReference) + + #ifdef BULLETDEBUG + if(length(colored)) + addtimer(CALLBACK(src, PROC_REF(deleteColors), colored.Copy()), SSbullets.wait * 15) + #endif + +/datum/controller/subsystem/bullets/proc/deleteColors(list/specialList) + for(var/turf/tata in specialList) + tata.color = initial(tata.color) + + /* + if(!resumed) + current_queue = bullet_queue.Copy() + var/global/turf/leaving + var/global/pixelXdist + var/global/pixelYdist + for(var/datum/bullet_data/bullet in current_queue) + current_queue -= bullet + bullet.lastChanges[1] = 0 + bullet.lastChanges[2] = 0 + bullet.lastChanges[3] = 0 + if(!istype(bullet.referencedBullet, /obj/item/projectile/bullet) || QDELETED(bullet.referencedBullet)) + bullet_queue -= bullet + continue + bulletRatios = bullet.movementRatios + projectile = bullet.referencedBullet + pixelsToTravel = bullet.pixelsPerTick + bulletCoords = bullet.currentCoords + /// We have to break up the movement into steps if its too big(since it leads to erronous steps) , this is preety much continous collision + /// but less performant A more performant version would be to use the same algorithm as throwing for determining which turfs to "intersect" + /// Im using this implementation because im getting skill issued trying to implement the same one as throwing(i had to rewrite this 4 times already) + /// and also because it has.. much more information about the general trajectory stored SPCR - 2024 + bulletCoords = bullet.currentCoords + trajectoryData[1] = projectile.x * 32 + projectile.pixel_x + 16 + trajectoryData[2] = projectile.y * 32 + projectile.pixel_y + 16 + trajectoryData[3] = bulletRatios[1] * pixelsToTravel + trajectoryData[1] + trajectoryData[4] = bulletRatios[2] * pixelsToTravel + trajectoryData[2] + trajectoryData[5] = bulletCoords[3] + /// Yes this is inaccurate for multi-Z transitions somewhat , if someone wants to create a proper equation for pseudo 3D they're welcome to. + trajectoryData[6] = trajectoryData[5] + LERP(bullet.firedLevel, bullet.targetLevel,(bullet.traveled + pixelsToTravel)/bullet.distStartToFinish2D()) - (projectile.z - bullet.firedPos[3] * LEVEL_MAX) + bullet.trajSum += bulletRatios[3] * pixelsToTravel + forceLoop: + while(pixelsToTravel > 0) + pixelsThisStep = pixelsToTravel > MAXPIXELS ? MAXPIXELS : pixelsToTravel + pixelsToTravel -= pixelsThisStep + bullet.traveled += pixelsThisStep + pixelXdist = (bulletRatios[1] * pixelsThisStep) + pixelYdist = (bulletRatios[2] * pixelsThisStep) + trajectoryData[7] = (EAST*(pixelXdist>0)) | (WEST*(pixelXdist<0)) | (NORTH*(pixelYdist>0)) | (SOUTH*(pixelYdist<0)) + bulletCoords[1] += pixelXdist + bulletCoords[2] += pixelYdist + bulletCoords[3] = LERP(bullet.firedLevel, bullet.targetLevel, bullet.traveled/bullet.distStartToFinish2D()) - (projectile.z - bullet.firedPos[3]) * LEVEL_MAX + //message_admins(bulletCoords[3]) + //message_admins("added [(bulletRatios[3] * pixelsThisStep)] , pixels [pixelsThisStep] , curSum [bulletCoords[3]]") + x_change = trunc(bulletCoords[1] / HPPT) + y_change = trunc(bulletCoords[2] / HPPT) + z_change = -(bulletCoords[3] < 0) + (bulletCoords[3] > LEVEL_MAX) + while(x_change || y_change || z_change) + leaving = get_turf(projectile) + if(projectile.scanTurf(leaving, trajectoryData, &distanceToTravelForce) != PROJECTILE_CONTINUE) + pixelsToTravel = distanceToTravelForce + //pixelsToTravel = min(bullet.pixelsPerTick - pixelsToTravel, distanceToTravelForce) + message_admins("dist set to [pixelsToTravel]") + goto forceLoop + if(QDELETED(projectile)) + bullet_queue -= bullet + break + tx_change = ((x_change + (x_change == 0))/(abs(x_change + (x_change == 0)))) * (x_change != 0) + ty_change = ((y_change + (y_change == 0))/(abs(y_change + (y_change == 0)))) * (y_change != 0) + tz_change = ((z_change + (z_change == 0))/(abs(z_change + (z_change == 0)))) * (z_change != 0) + //if(tz_change) + // message_admins("tz change [tz_change]") + moveTurf = locate(projectile.x + tx_change, projectile.y + ty_change, projectile.z + tz_change) + x_change -= tx_change + y_change -= ty_change + z_change -= tz_change + bullet.lastChanges[1] += tx_change + bullet.lastChanges[2] += ty_change + bullet.lastChanges[3] += tz_change + bulletCoords[1] -= PPT * tx_change + bulletCoords[2] -= PPT * ty_change + bulletCoords[3] -= tz_change * LEVEL_MAX + projectile.pixel_x -= PPT * tx_change + projectile.pixel_y -= PPT * ty_change + bullet.updateLevel() + if(projectile.scanTurf(moveTurf, trajectoryData, &distanceToTravelForce) == PROJECTILE_CONTINUE) + //message_admins("[bulletCoords[3]], [trajectoryData[6]]" ) + bullet.painted.Add(moveTurf) + //moveTurf.color = COLOR_RED + projectile.forceMove(moveTurf) + /* + if(moveTurf != bullet.targetTurf) + message_admins("level of [bulletCoords[3]], [trajectoryData[6]], pixels : [bullet.traveled],") + else + message_admins("reached target with level of [bulletCoords[3]] , pixels : [bullet.traveled], diff : [bullet.distStartToFinish2D() - bullet.traveled] , traj [trajectoryData[6]] , sum [bullet.trajSum]") + */ + else + pixelsToTravel = distanceToTravelForce + message_admins("dist set to [pixelsToTravel]") + goto forceLoop + moveTurf = null + /* + else + if(get_turf(projectile) == bullet.targetTurf) + message_admins("reached target with level of [bulletCoords[3]] , pixels : [bullet.traveled], diff : [bullet.distStartToFinish2D() - bullet.traveled] , traj [trajectoryData[6]], sum [bullet.trajSum]") + else + message_admins("level of [bulletCoords[3]], [trajectoryData[6]], pixels : [bullet.traveled],") + */ + + bullet.lifetime-- + + bullet.updateLevel() + var/levelRatio = 1 - (trunc(bulletCoords[3])/LEVEL_MAX) + //message_admins("[levelRatio]") + var/animationColor = gradient(list("#ffffff", "#cbcbcb"), levelRatio) + animate(projectile, SSbullets.wait, pixel_x =((abs(bulletCoords[1]))%HPPT * sign(bulletCoords[1]) - 1), pixel_y = ((abs(bulletCoords[2]))%HPPT * sign(bulletCoords[2]) - 1), flags = ANIMATION_END_NOW, color = animationColor) + bullet.currentCoords = bulletCoords + if(bullet.lifetime < 1) + bullet.referencedBullet.finishDeletion() + bullet_queue -= bullet + //for(var/turf/painted in bullet.painted) + // painted.color = initial(painted.color) + */ + + diff --git a/code/controllers/subsystems/chunks.dm b/code/controllers/subsystems/chunks.dm index 87321f01de..95e488763e 100644 --- a/code/controllers/subsystems/chunks.dm +++ b/code/controllers/subsystems/chunks.dm @@ -74,7 +74,7 @@ SUBSYSTEM_DEF(chunks) var/turf/mobTurf = get_turf(mobToCheck) if(!mobTurf) continue - if(DIST_EUCLIDIAN(containerTurf.x, containerTurf.y, mobTurf.x, mobTurf.y) < range) + if(DIST_EUCLIDIAN_2D(containerTurf.x, containerTurf.y, mobTurf.x, mobTurf.y) < range) if(aliveonly && mobToCheck.stat == DEAD) continue if(canseeonly && !can_see(containerTurf, get_turf(mobToCheck), range * 2)) @@ -111,7 +111,7 @@ SUBSYSTEM_DEF(chunks) var/turf/hearerTurf = get_turf(hearerToCheck) if(!hearerTurf) continue - if(DIST_EUCLIDIAN(containerTurf.x, containerTurf.y, hearerTurf.x, hearerTurf.y) < range) + if(DIST_EUCLIDIAN_2D(containerTurf.x, containerTurf.y, hearerTurf.x, hearerTurf.y) < range) if(!can_see(source, get_turf(hearerToCheck), range * 2)) continue returnValue += hearerToCheck diff --git a/code/controllers/subsystems/explosions.dm b/code/controllers/subsystems/explosions.dm index a2ce544fa6..41b2608094 100644 --- a/code/controllers/subsystems/explosions.dm +++ b/code/controllers/subsystems/explosions.dm @@ -9,6 +9,9 @@ #define HASH_MODULO (world.maxx + world.maxx*world.maxy) #define EXPLO_HASH(x,y) (round((x+y*world.maxx)%HASH_MODULO)) +/// the max length of the visuals list , used for queueing deletions in a efficient manner +#define EXPLOSION_VIS_LEN 500 + /* A subsystem for handling explosions in a tick-based manner Basic functioning @@ -49,12 +52,18 @@ SUBSYSTEM_DEF(explosions) priority = FIRE_PRIORITY_EXPLOSIONS init_order = INIT_ORDER_EXPLOSIONS flags = SS_KEEP_TIMING - var/list/explode_queue = list() - var/list/current_run = list() - var/list/throwing_queue = list() + var/list/explode_queue + var/list/current_run + var/list/throwing_queue var/list/available_hash_lists + var/list/visualsToDelete + var/visualIndex = 0 /datum/controller/subsystem/explosions/Initialize(timeoftheworld) + explode_queue = list() + current_run = list() + throwing_queue = list() + visualsToDelete = new /list(EXPLOSION_VIS_LEN) // Each hashed list is extremly huge , as it stands today each one would be // 0.250~ MB(roughly 2 million bits) // As long as this doesnt go over 12 MB , it should be fine as it still fits in CPU caches @@ -113,7 +122,7 @@ SUBSYSTEM_DEF(explosions) target_power -= target.explosion_act(target_power, explodey) + explodey.falloff if(explodey.flags & EFLAG_HALVEFALLOFF) target_power /= 2 - new /obj/effect/explosion_fire(target) + visualsToDelete[(visualIndex++) * (visualIndex EXPLOSION_ZTRANSFER_MINIMUM_THRESHOLD) to_propagate.take_damage(target_power - EXPLOSION_ZTRANSFER_MINIMUM_THRESHOLD, BLAST) diff --git a/code/controllers/subsystems/jamming.dm b/code/controllers/subsystems/jamming.dm index 768c7880ad..e658029d73 100644 --- a/code/controllers/subsystems/jamming.dm +++ b/code/controllers/subsystems/jamming.dm @@ -18,7 +18,7 @@ SUBSYSTEM_DEF(jamming) // blame linters being shit var/datum/component/jamming/jammer = thing var/atom/container = jammer.owner.getContainingAtom() - var/distance = DIST_EUCLIDIAN(container.x, container.y, location.x, location.y) + var/distance = DIST_EUCLIDIAN_2D(container.x, container.y, location.x, location.y) var/radius = jammer.radius - (abs(container.z - location.z) * jammer.z_reduction) // incase its multi-Z jammer with distance reduction if(distance > radius) diff --git a/code/controllers/subsystems/staverbs.dm b/code/controllers/subsystems/staverbs.dm index 874181fa63..bb76919b3c 100644 --- a/code/controllers/subsystems/staverbs.dm +++ b/code/controllers/subsystems/staverbs.dm @@ -70,6 +70,25 @@ SUBSYSTEM_DEF(statverbs) /atom/Initialize() . = ..() initalize_statverbs() + if(atomFlags & AF_WALL_MOUNTED) + //// YES this doesn't rely on proper mapping because i can't really replace most of them and wouldn't make sense in most cases anyway.(since pixel_x and pixel_y will always vary etc etc.) + if(!isturf(loc)) + stack_trace("[src.type] has the AF_WALL_MOUNTED flag, but is not initialized with a valid location(on a turf). Remove it or fix the underlying issue.") + return + var/attachmentDir = (pixel_x > 16)*EAST | (pixel_x < -16)*WEST | (pixel_y > 16)*NORTH | (pixel_y < -16)*SOUTH + if(!attachmentDir) + attachmentDir = reverse_dir[dir] + dir = reverse_dir[attachmentDir] + var/turf/toAttach = get_step(loc, attachmentDir) + + if(iswall(toAttach)) + toAttach.attachGameAtom(src, ATFS_PRIORITIZE_ATTACHED_FOR_HITS, ATFA_EASY_INTERACTIVE | ATFA_DIRECTIONAL_HITTABLE ) + else + stack_trace("[src.type] has no wall to attach itself to at X:[x] Y:[y] Z:[z]") + // the players need to be confused so they complain about it! + name = "I am bugged tell devs!!" + desc = "Bugged at X:[x] Y:[y] Z:[z]" + color = COLOR_PINK diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 28dcd31d9d..2dfb4eea1c 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -124,8 +124,14 @@ SUBSYSTEM_DEF(ticker) //setup failed current_state = GAME_STATE_STARTUP Master.SetRunLevel(RUNLEVEL_LOBBY) - if(GAME_STATE_PLAYING) + #ifdef BULLETDEBUG + for(var/atom/thing as anything in GLOB.initVis) + if(QDELETED(thing)) + continue + thing.hitbox.visualize(thing) + GLOB.initVis -= thing + #endif GLOB.storyteller.Process() GLOB.storyteller.process_events() diff --git a/code/datums/datum_click_handlers.dm b/code/datums/datum_click_handlers.dm index ca52efee27..09251751ec 100644 --- a/code/datums/datum_click_handlers.dm +++ b/code/datums/datum_click_handlers.dm @@ -38,12 +38,14 @@ /datum/click_handler/proc/MouseDown(object,location,control,params) return TRUE -/datum/click_handler/proc/MouseDrag(over_object,src_location,over_location,src_control,over_control,params) +/datum/click_handler/proc/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) return TRUE /datum/click_handler/proc/MouseUp(object,location,control,params) return TRUE +/datum/click_handler/proc/MouseMove(object, location, control, params) + return TRUE /datum/click_handler/proc/mob_check(mob/living/carbon/human/user) //Check can mob use a ability return @@ -78,6 +80,8 @@ var/time_since_last_init // Time since last start of full auto fire , used to prevent ANGRY smashing of M1 to fire faster. //Todo: Make this work with callbacks var/time_since_last_shot // Keeping track of last shot to determine next one + /// caching params for full auto pixel accuracy + var/storedParams = null /datum/click_handler/fullauto/Click() return TRUE //Doesn't work with normal clicks @@ -90,7 +94,7 @@ reciever.check_safety_cursor(reciever.loc) /datum/click_handler/fullauto/proc/do_fire() - reciever.afterattack(target, owner.mob, FALSE) + reciever.afterattack(target, owner.mob, FALSE, storedParams) /datum/click_handler/fullauto/MouseDown(object, location, control, params) if(!isturf(owner.mob.loc) && !ismech(owner.mob.loc)) // This stops from firing full auto weapons inside closets, in /obj/effect/dummy/chameleon chameleon projector or in a mech @@ -100,6 +104,8 @@ object = resolve_world_target(object) if(object) + //message_admins("MouseDown - [params]") + storedParams = params target = object time_since_last_shot = world.time shooting_loop() @@ -119,20 +125,27 @@ if(target) owner.mob.face_atom(target) - while(time_since_last_shot < world.time) + if(time_since_last_shot < world.time) do_fire() time_since_last_shot = world.time + (reciever.fire_delay < GUN_MINIMUM_FIRETIME ? GUN_MINIMUM_FIRETIME : reciever.fire_delay) * min(world.tick_lag, 1) spawn(1) shooting_loop() -/datum/click_handler/fullauto/MouseDrag(over_object, src_location, over_location, src_control, over_control, params) - src_location = resolve_world_target(src_location) - if(src_location) - target = src_location +/datum/click_handler/fullauto/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) + over_object = resolve_world_target(over_object) + if(over_object) + //message_admins("MouseDrag - [params]") + storedParams = params + target = over_object return FALSE return TRUE +/datum/click_handler/fullauto/MouseMove(object, location, control, params) + //message_admins("MouseMove - [params]") + storedParams = params + return TRUE + /datum/click_handler/fullauto/MouseUp(object, location, control, params) stop_firing() return TRUE @@ -170,7 +183,7 @@ var/turf/targetTurf = get_turf(target) if(!targetTurf) return TRUE - if(DIST_EUCLIDIAN(owner.mob.x , owner.mob.y, targetTurf.x , targetTurf.y) < 24) + if(DIST_EUCLIDIAN_2D(owner.mob.x , owner.mob.y, targetTurf.x , targetTurf.y) < 24) // Can't block at such close distance signalStrength = 1000 else diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8ca4b617d6..a9250ce49a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -15,20 +15,19 @@ var/last_bumped = 0 var/pass_flags = 0 var/throwpass = 0 - var/simulated = TRUE //filter for actions - used by lighting overlays var/fluorescent // Shows up under a UV light. var/allow_spin = TRUE // prevents thrown atoms from spinning when disabled on thrown or target var/used_now = FALSE //For tools system, check for it should forbid to work on atom for more than one user at time - var/atomFlags = null + var/atomFlags = 0 ///Chemistry. var/reagent_flags = NONE var/datum/reagents/reagents - //Detective Work, used for the duplicate data points kept in the scanners - var/list/original_atom + /// Holds the hitbox datum if theres any + var/datum/hitboxDatum/hitbox var/auto_init = TRUE @@ -45,9 +44,90 @@ */ var/list/atom_colours + var/list/attached + +/// Attaches the argument(thing) to src +/atom/proc/attachGameAtom(atom/thing, attachmentFlagsSupport, attachmentFlagsAttachable) + ASSLADD(attached, attachmentFlagsSupport | ATFS_SUPPORTER, thing) + ASSLADD(thing.attached, attachmentFlagsAttachable | ATFA_ATTACHED , src) + afterAttach(thing, TRUE, attachmentFlagsSupport, attachmentFlagsAttachable) + thing.afterAttach(src, FALSE, attachmentFlagsSupport, attachmentFlagsAttachable) + return TRUE + +/// Detaches the argument(thing) from src +/atom/proc/detachGameAtom(atom/thing) + if(!(thing in attached)) + return -1 + afterDetach(thing, TRUE, attached[thing], thing.attached[src]) + thing.afterDetach(src, FALSE ,attached[thing], thing.attached[src]) + ASSLREMOVE(attached ,thing) + ASSLREMOVE(thing.attached, src) + return TRUE + +/* +/atom/proc/attach(atom/thing, attachmentFlagsSupport, attachmentFlagsAttachable) + if(!istype(thing)) + return FALSE + if(!length(attached)) + attached = list() + attached[thing] = attachmentFlagsSupport | ATFS_SUPPORTER + thing.attached[src] = attachmentFlagsAttachable | ATFA_ATTACHED + afterAttach(thing, TRUE, attachmentFlagsSupport, attachmentFlagsAttachable) + thing.afterAttach(src, FALSE, attachmentFlagsSupport, attachmentFlagsAttachable) + return TRUE + +/atom/proc/detach(atom/thing) + if(!(thing in attached)) + return -1 + if(length(attached) == 1) + del(attached) + else + attached -= thing + if(src in thing.attached) + if(length(thing.attached > 1)) + thing.attached -= src + else + del(thing.attached) + afterDetach(thing, TRUE) + thing.afterDetach(src, FALSE) + return TRUE +*/ + +/atom/proc/afterAttach(atom/thing, isSupporter, attachmentFlagsSupport, attachmentFlagsAttachable) + if(isSupporter) + else + if(attachmentFlagsAttachable & ATFA_CENTER_ON_SUPPORTER) + atomFlags |= AF_HITBOX_OFFSET_BY_ATTACHMENT | AF_IGNORE_ON_BULLETSCAN + return + +/atom/proc/afterDetach(atom/thing, isSupporter, attachmentFlagsSupport, attachmentFlagsAttachable) + if(isSupporter) + else + if(attachmentFlagsAttachable & ATFA_CENTER_ON_SUPPORTER) + atomFlags &= ~(AF_HITBOX_OFFSET_BY_ATTACHMENT | AF_IGNORE_ON_BULLETSCAN) + return + +/atom/getAimingLevel(atom/shooter, defZone) + if(atomFlags & AF_PASS_AIMING_LEVEL) + if(isliving(shooter)) + return shooter.getAimingLevel(shooter, defZone) + if(hitbox) + return hitbox.getAimingLevel(shooter, defZone, src) + else + return ..() + /atom/proc/update_icon() return +/atom/proc/getAimingLevel(atom/shooter,defZone) + if(isliving(shooter)) + var/mob/living/carbon/human/hoomie = shooter + if(!istype(hoomie)) + return HBF_NOLEVEL + else + return hoomie.getAimingLevel(hoomie, hoomie.targeted_organ) + return HBF_NOLEVEL + /atom/proc/getWeight() return initial(weight) @@ -148,6 +228,12 @@ update_plane() + hitbox = getHitbox(hitbox) + #ifdef BULLETDEBUG + if(hitbox) + GLOB.initVis += src + #endif + if(preloaded_reagents) if(!reagents) var/volume = 0 @@ -192,7 +278,9 @@ if(statverbs) statverbs.Cut() - //post_buckle_mob(.) + for(var/atom/thing as anything in attached) + detachGameAtom(thing) + if(reagents) QDEL_NULL(reagents) @@ -267,9 +355,12 @@ return -/atom/proc/bullet_act(obj/item/projectile/P, def_zone) +/atom/proc/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) P.on_hit(src, def_zone) - . = FALSE + #ifdef BULLETDEBUG + message_admins("Bullet stopped by [src]") + #endif + . = PROJECTILE_STOP /atom/proc/block_bullet(mob/user, var/obj/item/projectile/damage_source, def_zone) return 0 @@ -670,8 +761,6 @@ its easier to just keep the beam vertical. this.icon_state = "vomittox_[pick(1, 4)]" /atom/proc/clean_blood() - if(!simulated) - return fluorescent = 0 if(istype(blood_DNA, /list)) blood_DNA = null @@ -822,7 +911,7 @@ its easier to just keep the beam vertical. return //Bullethole shit. -/atom/proc/create_bullethole(var/obj/item/projectile/Proj) +/atom/proc/create_bullethole(obj/item/projectile/Proj, defZone, hitboxFlags) var/p_x = Proj.p_x + rand(-8,8) // really ugly way of coding "sometimes offset Proj.p_x!" var/p_y = Proj.p_y + rand(-8,8) // Used for bulletholes var/obj/effect/overlay/bmark/BM = new(src) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 66a7d88b5a..149793883d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -14,6 +14,7 @@ GLOBAL_VAR_INIT(Debug,0) var/throw_speed = 2 var/throw_range = 7 var/moved_recently = 0 + /// I yearn , for the day i can remove this variable , for it will set me free of shit-code (i just need a excuse to be lazy as fuck , this shit is here for convenience). SPCR 2024 var/obj/item/grab/grabbedBy var/item_state // Used to specify the item state for the on-mob overlays. var/inertia_dir = 0 @@ -40,7 +41,6 @@ GLOBAL_VAR_INIT(Debug,0) // testing("GC: [type] was deleted via GC with qdel()") ..() - /atom/movable/Destroy() var/turf/T = loc if(opacity && istype(T)) diff --git a/code/game/gamemodes/events/blob.dm b/code/game/gamemodes/events/blob.dm index 103040974b..ea2a9b4857 100644 --- a/code/game/gamemodes/events/blob.dm +++ b/code/game/gamemodes/events/blob.dm @@ -458,7 +458,7 @@ ********************/ //Bullets which hit a blob will keep going on through if they kill it -/obj/effect/blob/bullet_act(var/obj/item/projectile/Proj) +/obj/effect/blob/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(!Proj) return diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 52c8e7eef6..eebf1cdf43 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -17,6 +17,7 @@ active_power_usage = 3000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. power_channel = STATIC_ENVIRON req_one_access = list(access_atmospherics, access_engine_equip) + hitbox = /datum/hitboxDatum/atom/airAlarm var/alarm_id = null var/breach_detection = 1 // Whether to use automatic breach detection or not var/frequency = 1439 @@ -81,14 +82,14 @@ wires = null return ..() -/obj/machinery/alarm/New(loc, dir, building = 0) +/obj/machinery/alarm/New(loc, dir, building = FALSE) GLOB.alarm_list += src if(building) if(dir) src.set_dir(dir) buildstage = 0 - wiresexposed = 1 + wiresexposed = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 update_icon() @@ -125,6 +126,16 @@ if(buildstage == 2 && !master_is_operating()) elect_master() + var/turf/toAttach = get_step(loc, reverse_dir[dir]) + + if(iswall(toAttach)) + toAttach.attachGameAtom(src, ATFS_PRIORITIZE_ATTACHED_FOR_HITS, ATFA_EASY_INTERACTIVE | ATFA_DIRECTIONAL_HITTABLE ) + else + stack_trace("[src.type] has no wall to attach itself to at X:[x] Y:[y] Z:[z]") + // the players need to be confused so they complain about it! + color = COLOR_PINK + + /obj/machinery/alarm/fire_act() return @@ -874,8 +885,7 @@ /obj/machinery/alarm/power_change() ..() - spawn(rand(0,15)) - update_icon() + update_icon() /obj/machinery/alarm/examine(mob/user) var/description = "" @@ -924,6 +934,7 @@ FIRE ALARM desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." icon = 'icons/obj/monitors.dmi' icon_state = "fire0" + hitbox = /datum/hitboxDatum/atom/fireAlarm var/detecting = 1 var/working = 1 var/time = 10 @@ -985,7 +996,7 @@ FIRE ALARM /obj/machinery/firealarm/bullet_act() alarm() - return PROJECTILE_CONTINUE + . = ..() /obj/machinery/firealarm/emp_act(severity) if(prob(50/severity)) @@ -1108,8 +1119,7 @@ FIRE ALARM /obj/machinery/firealarm/power_change() ..() - spawn(rand(0,15)) - update_icon() + update_icon() /obj/machinery/firealarm/nano_ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = NANOUI_FOCUS, var/datum/nano_topic_state/state = GLOB.outside_state) var/data[0] @@ -1198,12 +1208,24 @@ FIRE ALARM if(building) buildstage = 0 - wiresexposed = 1 + wiresexposed = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 GLOB.firealarm_list += src +/obj/machinery/firealarm/Initialize(mapload, d) + . = ..() + var/turf/toAttach = get_step(loc, reverse_dir[dir]) + + if(iswall(toAttach)) + toAttach.attachGameAtom(src, ATFS_PRIORITIZE_ATTACHED_FOR_HITS, ATFA_EASY_INTERACTIVE | ATFA_DIRECTIONAL_HITTABLE ) + else + stack_trace("[src.type] has no wall to attach itself to at X:[x] Y:[y] Z:[z]") + // the players need to be confused so they complain about it! + color = COLOR_PINK + + /obj/machinery/firealarm/Destroy() GLOB.firealarm_list -= src ..() diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 332d0ec838..33cb50517b 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -7,6 +7,7 @@ maxHealth = 100 flags = CONDUCT volumeClass = ITEM_SIZE_HUGE + hitbox = /datum/hitboxDatum/atom/atmosphericCanister var/valve_open = 0 var/release_pressure = ONE_ATMOSPHERE @@ -233,7 +234,7 @@ update_flag return GM.return_pressure() return 0 -/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/portable_atmospherics/canister/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(Proj.get_structure_damage()) src.health -= round(Proj.get_structure_damage() / 2) healthcheck() diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index c27e799707..211f86448e 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -29,11 +29,10 @@ /obj/machinery/portable_atmospherics/Initialize() . = ..() - spawn() - var/obj/machinery/atmospherics/portables_connector/port = locate() in loc - if(port) - connect(port) - update_icon() + var/obj/machinery/atmospherics/portables_connector/port = locate() in loc + if(port) + connect(port) + update_icon() /obj/machinery/portable_atmospherics/Process() if(!connected_port) //only react when pipe_network will ont it do it for you diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index f04c7de03d..2b24f14d6d 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -13,6 +13,8 @@ var/pressuremin = 0 var/pressuremax = 10 * ONE_ATMOSPHERE + hitbox = /datum/hitboxDatum/atom/atmosphericPump + volume = 1000 power_rating = 7500 //7500 W ~ 10 HP diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 7b49fec1af..b5b4b94c43 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -12,6 +12,8 @@ volume = 750 + hitbox = /datum/hitboxDatum/atom/atmosphericScrubber + power_rating = 7500 //7500 W ~ 10 HP power_losses = 150 diff --git a/code/game/machinery/autolathe/autolathe.dm b/code/game/machinery/autolathe/autolathe.dm index dd78e52513..377a99c70e 100644 --- a/code/game/machinery/autolathe/autolathe.dm +++ b/code/game/machinery/autolathe/autolathe.dm @@ -11,6 +11,7 @@ idle_power_usage = 10 active_power_usage = 2000 circuit = /obj/item/electronics/circuitboard/autolathe + hitbox = /datum/hitboxDatum/atom/autolathe var/build_type = AUTOLATHE diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index d606b66ff1..5a92a7ba46 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -76,7 +76,7 @@ ..() healthcheck() -/obj/machinery/bot/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/bot/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(!Proj.get_structure_damage()) return health -= Proj.get_structure_damage() diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 818025edaa..774d164518 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -3,6 +3,8 @@ icon = 'icons/obj/machines/buttons.dmi' icon_state = "launcher0" desc = "A remote control switch for something." + hitbox = /datum/hitboxDatum/atom/button + atomFlags = AF_WALL_MOUNTED var/id = null var/active = 0 var/operating = 0 @@ -191,6 +193,7 @@ wifi_sender.activate("lock") operating = 0 + #undef OPEN #undef IDSCAN #undef BOLTS diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 1497be10e3..709c4e05aa 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -8,6 +8,8 @@ idle_power_usage = 5 active_power_usage = 10 layer = WALL_OBJ_LAYER + hitbox = /datum/hitboxDatum/atom/camera + atomFlags = AF_WALL_MOUNTED var/list/network = list(NETWORK_CEV_ERIS) var/c_tag = null @@ -99,7 +101,7 @@ update_coverage() START_PROCESSING(SSmachines, src) -/obj/machinery/camera/bullet_act(var/obj/item/projectile/P) +/obj/machinery/camera/bullet_act(obj/item/projectile/P, defZone, hitboxFlags) take_damage(P.get_structure_damage()) /obj/machinery/camera/explosion_act(target_power, explosion_handler/handler) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index f780c93c83..26859386bd 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -5,6 +5,7 @@ density = TRUE anchored = FALSE matter = list(MATERIAL_STEEL = 5) + hitbox = /datum/hitboxDatum/atom/modularConsole var/state = 0 var/obj/item/electronics/circuitboard/circuit spawn_tags = SPAWN_TAG_MACHINE_FRAME diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 7e5e36a2e6..00d57de195 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -5,6 +5,7 @@ density = TRUE anchored = TRUE use_power = IDLE_POWER_USE + hitbox = /datum/hitboxDatum/atom/modularConsole idle_power_usage = 300 active_power_usage = 300 var/processing = 0 @@ -43,7 +44,7 @@ set_broken() return 0 -/obj/machinery/computer/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/computer/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(prob(Proj.get_structure_damage())) if(!(stat & BROKEN)) var/datum/effect/effect/system/smoke_spread/S = new/datum/effect/effect/system/smoke_spread() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index a7bf7ea923..fa2bb15124 100755 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -212,7 +212,7 @@ applies_stasis = 0 /obj/machinery/cryopod/New() - announce = new /obj/item/device/radio/intercom(src) + announce = new /obj/item/device/radio/intercom/internal(src) update_icon() ..() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 79395c8672..6baa77a141 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -57,7 +57,7 @@ for reference: density = TRUE health = 100 maxHealth = 100 - explosion_coverage = 0.7 + explosionCoverage = 0.7 var/material/material /obj/structure/barricade/New(newloc, material_name) @@ -116,7 +116,7 @@ for reference: /obj/structure/barricade/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= density ? explosion_coverage : explosion_coverage / 2 + . *= density ? explosionCoverage : explosionCoverage / 2 health -= damage if(health <= 0) dismantle() @@ -142,45 +142,6 @@ for reference: else return FALSE -/obj/structure/barricade/proc/check_cover(obj/item/projectile/P, turf/from) - - if(config.z_level_shooting) - if(P.height == HEIGHT_HIGH) - return TRUE // Bullet is too high to hit - P.height = (P.height == HEIGHT_LOW) ? HEIGHT_LOW : HEIGHT_CENTER - - if (get_dist(P.starting, loc) <= 1) //Cover won't help you if people are THIS close - return TRUE - if(get_dist(loc, P.trajectory.target) > 1 ) // Target turf must be adjacent for it to count as cover - return TRUE - var/valid = FALSE - if(!P.def_zone) - return TRUE // Emitters, or anything with no targeted bodypart will always bypass the cover - - var/targetzone = check_zone(P.def_zone) - if (targetzone in list(BP_R_LEG, BP_L_LEG, BP_GROIN)) - valid = TRUE //The lower body is always concealed - if (ismob(P.original)) - var/mob/M = P.original - if (M.lying) - valid = TRUE //Lying down covers your whole body - - // Bullet is low enough to hit the wall - if(config.z_level_shooting && P.height == HEIGHT_LOW) - valid = TRUE - - if(valid) - var/pierce = P.check_penetrate(src) - health -= P.get_structure_damage()/2 - if (health > 0) - visible_message(SPAN_WARNING("[P] hits \the [src]!")) - return pierce - else - visible_message(SPAN_WARNING("[src] breaks down!")) - qdel(src) - return TRUE - return TRUE - //Actual Deployable machinery stuff /obj/machinery/deployable name = "deployable" @@ -278,6 +239,9 @@ for reference: if(H.checkpass(PASSTABLE) && H.stats?.getPerk(PERK_PARKOUR)) return TRUE +/obj/machinery/deployable/barrier/proc/check_cover(obj/item/projectile/P, turf/from) + return TRUE + /obj/machinery/deployable/barrier/proc/explode() visible_message(SPAN_DANGER("[src] blows apart!")) @@ -314,45 +278,6 @@ for reference: visible_message(SPAN_WARNING("BZZzZZzZZzZT")) return 1 -/obj/machinery/deployable/barrier/proc/check_cover(obj/item/projectile/P, turf/from) - - if(config.z_level_shooting) - if(P.height == HEIGHT_HIGH) - return TRUE // Bullet is too high to hit - P.height = (P.height == HEIGHT_LOW) ? HEIGHT_LOW : HEIGHT_CENTER - - if (get_dist(P.starting, loc) <= 1) //Cover won't help you if people are THIS close - return 1 - if(get_dist(loc, P.trajectory.target) > 1 ) // Target turf must be adjacent for it to count as cover - return TRUE - var/valid = FALSE - if(!P.def_zone) - return 1 // Emitters, or anything with no targeted bodypart will always bypass the cover - - var/targetzone = check_zone(P.def_zone) - if (targetzone in list(BP_R_LEG, BP_L_LEG, BP_GROIN)) - valid = TRUE //The lower body is always concealed - if (ismob(P.original)) - var/mob/M = P.original - if (M.lying) - valid = TRUE //Lying down covers your whole body - - // Bullet is low enough to hit the wall - if(config.z_level_shooting && P.height == HEIGHT_LOW) - valid = TRUE - - if(valid) - var/pierce = P.check_penetrate(src) - health -= P.get_structure_damage()/2 - if (health > 0) - visible_message(SPAN_WARNING("[P] hits \the [src]!")) - return pierce - else - visible_message(SPAN_WARNING("[src] breaks down!")) - qdel(src) - return 1 - return 1 - /obj/machinery/deployable/barrier/take_damage(damage) health -= damage if(health <= 0) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 73a2eeb64b..46de556768 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -134,6 +134,12 @@ var/closed = 0 var/last_message +/// a subtype meant for tables +/obj/machinery/button/remote/blast_door/table + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button/table + icon_state = "doorctrl0_table" + /obj/machinery/button/remote/blast_door/Initialize() . = ..() radio_conn = SSradio.add_object(src, BLAST_DOOR_FREQ, RADIO_BLASTDOORS) @@ -233,6 +239,11 @@ desc = "It controls blast doors, remotely. But need id_card with access to it." icon_state = "doorid0" +/obj/machinery/button/remote/blast_door/id_card/table + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button/table + icon_state = "doorid0_table" + /obj/machinery/button/remote/blast_door/id_card/attackby(obj/item/W, mob/user as mob) if(istype(W, /obj/item/card/id)) var/obj/item/card/id/id_card = W diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index faf9ae43fd..6c5f02f122 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -154,6 +154,9 @@ anchored = TRUE power_channel = STATIC_ENVIRON + atomFlags = AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button + var/id_tag var/master_tag var/frequency = 1379 diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index a611a6fc44..8308326c11 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -453,9 +453,8 @@ return force_open() if(autoclose) - spawn(150) - close() - return 1 + addtimer(CALLBACK(src, PROC_REF(close)), 15 SECONDS) + return TRUE // Proc: close() // Parameters: 1 (forced - if true, the checks will be skipped) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 9e2d29a410..da8c6afe31 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -11,6 +11,7 @@ opacity = 1 density = TRUE layer = OPEN_DOOR_LAYER + hitbox = /datum/hitboxDatum/turf/door var/open_layer = OPEN_DOOR_LAYER var/closed_layer = CLOSED_DOOR_LAYER var/visible = 1 @@ -47,7 +48,16 @@ /obj/machinery/door/New() GLOB.all_doors += src - ..() + . = ..() + if(density) + layer = closed_layer + update_heat_protection(get_turf(src)) + else + layer = open_layer + + health = maxHealth + + update_nearby_tiles(need_rebuild=TRUE) /obj/machinery/door/Destroy() GLOB.all_doors -= src @@ -66,24 +76,12 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*1.5) attack_animation(user) -/obj/machinery/door/New() - . = ..() - if(density) - layer = closed_layer - update_heat_protection(get_turf(src)) - else - layer = open_layer - - health = maxHealth - - update_nearby_tiles(need_rebuild=TRUE) - return - /// modifying bounds when the map is not fully loaded causes improper detection /// this was apparent when done through DMMSuite loading , where left/right facing multi-tile /// wouldn't work , because the right turf didn't exist at the moment or was replaced, erasing its /// contents list - SPCR 2024 /obj/machinery/door/Initialize(mapload, d) + . = ..() if(width > 1) if(dir in list(EAST, WEST)) bound_width = width * world.icon_size @@ -92,8 +90,6 @@ bound_width = world.icon_size bound_height = width * world.icon_size - - /obj/machinery/door/Destroy() density = FALSE update_nearby_tiles() @@ -184,7 +180,9 @@ do_animate("deny") return TRUE -/obj/machinery/door/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/door/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) + if(!density) + return PROJECTILE_CONTINUE ..() var/damage = Proj.get_structure_damage() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index fe357bd2e7..c1d9ffb749 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -22,6 +22,7 @@ description_info = "Can be deconstructed by welding closed, screwing and crowbaring the circuits out." icon_state = "door_open" req_one_access = list(access_atmospherics, access_engine_equip, access_medical_equip) + hitbox = /datum/hitboxDatum/turf/door opacity = FALSE density = FALSE layer = BELOW_OPEN_DOOR_LAYER @@ -258,12 +259,14 @@ use_power(360) if(checkAlarmed()) - spawn(150) - if(checkAlarmed()) - close() + addtimer(CALLBACK(src, PROC_REF(tryClose)), 15 SECONDS) return ..() +/obj/machinery/door/firedoor/proc/tryClose() + if(checkAlarmed()) + close() + /obj/machinery/door/firedoor/do_animate(animation) switch(animation) if("opening") diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index a94c141706..8e770cc56d 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -47,7 +47,7 @@ /obj/machinery/filler_object name = "" icon = 'icons/obj/doors/rapid_pdoor.dmi' - icon_state = "pdoor1" + icon_state = "" density = FALSE anchored = TRUE diff --git a/code/game/machinery/doors/showcase.dm b/code/game/machinery/doors/showcase.dm index e9ab0efa1b..5c2a727655 100644 --- a/code/game/machinery/doors/showcase.dm +++ b/code/game/machinery/doors/showcase.dm @@ -44,7 +44,7 @@ have_glass = TRUE update_icon() return - + if(dhTotalDamageStrict(I.melleDamages, ALL_ARMOR, list(BRUTE,BURN))) hit(user, I) return @@ -57,7 +57,7 @@ -/obj/machinery/door/blast/shutters/glass/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/door/blast/shutters/glass/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(Proj.get_structure_damage()) take_damage(Proj.get_structure_damage()) ..() diff --git a/code/game/machinery/doors/simple.dm b/code/game/machinery/doors/simple.dm index 839bc850ab..342a595796 100644 --- a/code/game/machinery/doors/simple.dm +++ b/code/game/machinery/doors/simple.dm @@ -44,7 +44,7 @@ /obj/machinery/door/unpowered/simple/get_material_name() return material.name -/obj/machinery/door/unpowered/simple/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/door/unpowered/simple/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/damage = Proj.get_structure_damage() if(damage) //cap projectile damage so that there's still a minimum number of hits required to break the door diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index b904f4b746..f22695c73a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/doors/windoor.dmi' icon_state = "left" var/base_state = "left" + hitbox = /datum/hitboxDatum/atom/window/directional resistance = RESISTANCE_FRAGILE hitsound = 'sound/effects/Glasshit.ogg' maxHealth = 100 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 17de6b2e7b..8658077576 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -7,9 +7,12 @@ use_power = IDLE_POWER_USE idle_power_usage = 10 + atomFlags = AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button + var/on = TRUE -obj/machinery/embedded_controller/radio/Destroy() +/obj/machinery/embedded_controller/radio/Destroy() SSradio.remove_object(src,frequency) . = ..() diff --git a/code/game/machinery/excelsior/ex_turret.dm b/code/game/machinery/excelsior/ex_turret.dm index 039cc44e94..80d47a2c6b 100644 --- a/code/game/machinery/excelsior/ex_turret.dm +++ b/code/game/machinery/excelsior/ex_turret.dm @@ -99,10 +99,10 @@ if(L.invisibility >= INVISIBILITY_LEVEL_ONE) return TURRET_NOT_TARGET - if(get_dist(src, L) > 7) + if(get_dist(src, L) > 12) return TURRET_NOT_TARGET - if(!check_trajectory(L, src)) + if(!check_trajectory(list(x,y,z), list(L.x, L.y, L.z),null,null, L)) return TURRET_NOT_TARGET if(emagged) // If emagged not even the dead get a rest diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index f8ef4bd764..1109437252 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -5,6 +5,7 @@ desc = "A wall-mounted flashbulb device." icon = 'icons/obj/stationobjs.dmi' icon_state = "mflash1" + atomFlags = AF_WALL_MOUNTED var/id = null var/range = 2 //this is roughly the size of brig cell var/disable = 0 @@ -28,6 +29,7 @@ base_state = "pflash" density = TRUE range = 3 //the eris' hallways are wider than other maps + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED /obj/machinery/flasher/Initialize() . = ..() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index dbe999cf57..1ab9c1de8d 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -42,6 +42,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/power_per_hologram = 500 //per usage per hologram idle_power_usage = 5 use_power = IDLE_POWER_USE + hitbox = /datum/hitboxDatum/atom/holopad var/list/mob/living/silicon/ai/masters = new() //List of AIs that use the holopad var/last_request = 0 //to prevent request spam. ~Carn diff --git a/code/game/machinery/holoposter.dm b/code/game/machinery/holoposter.dm index 4a14c90d13..8fd3a6b61b 100644 --- a/code/game/machinery/holoposter.dm +++ b/code/game/machinery/holoposter.dm @@ -7,6 +7,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 80 power_channel = STATIC_ENVIRON + atomFlags = AF_WALL_MOUNTED var/static/list/poster_types = list( "ironhammer" = COLOR_LIGHTING_BLUE_BRIGHT, @@ -46,7 +47,7 @@ src.add_fingerprint(user) if(stat & (NOPOWER)) return - + if(istype(W, /obj/item/tool/multitool)) ui_interact(user) return @@ -99,12 +100,12 @@ "selected" = selected_icon, "icon" = icon2base64html(icon_chache[selected_icon]) ) - + /obj/machinery/holoposter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - + switch(action) if("change") change(params["value"]) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 128767d02b..2fd98e5021 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -171,3 +171,8 @@ active = 0 return + +/obj/machinery/button/ignition/table + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button/table + icon_state = "launcher_table" diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 1d86d10b55..1ca99c66e6 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -11,7 +11,8 @@ idle_power_usage = 5 active_power_usage = 100 reagent_flags = NO_REACT - var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. + hitbox = /datum/hitboxDatum/atom/smartfridge + var/global/max_n_of_items = 250 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. var/icon_on = "smartfridge" var/icon_off = "smartfridge-off" var/icon_panel = "smartfridge-panel" diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 5db11d5535..caf99870b5 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -10,6 +10,8 @@ use_power = IDLE_POWER_USE idle_power_usage = 20 power_channel = STATIC_LIGHT + atomFlags = AF_WALL_MOUNTED + hitbox = /datum/hitboxDatum/atom/button var/slow_turning_on = FALSE var/forceful_toggle = FALSE var/on = TRUE diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 97dde151d9..688a759840 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -119,6 +119,9 @@ var/commonLore = "" matter = list(MATERIAL_STEEL = 8) +/obj/machinery/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + take_damage(P.get_structure_damage()) + return PROJECTILE_STOP /obj/machinery/Initialize(mapload, d=0) . = ..() @@ -127,7 +130,6 @@ GLOB.machines += src InitCircuit() START_PROCESSING(SSmachines, src) - return INITIALIZE_HINT_LATELOAD /obj/machinery/LateInitialize() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 3afb9569db..3d5d4d8fff 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -137,6 +137,7 @@ var/datum/feed_network/news_network = new /datum/feed_network //The global n icon_state = "newscaster_normal" light_range = 0 anchored = TRUE + atomFlags = AF_WALL_MOUNTED var/isbroken = 0 //1 if someone banged it with something heavy var/ispowered = 1 //starts powered, changes with power_change() @@ -250,9 +251,8 @@ var/datum/feed_network/news_network = new /datum/feed_network //The global n src.ispowered = 1 src.update_icon() else - spawn(rand(0, 15)) - src.ispowered = 0 - src.update_icon() + src.ispowered = 0 + src.update_icon() /obj/machinery/newscaster/take_damage(amount) . = ..() diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 1fd136aef9..5e90b6ac4f 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -277,9 +277,8 @@ var/list/turret_icons stat &= ~NOPOWER update_icon() else - spawn(rand(0, 15)) - stat |= NOPOWER - update_icon() + stat |= NOPOWER + update_icon() /obj/machinery/porta_turret/attackby(obj/item/I, mob/user) @@ -472,7 +471,7 @@ var/list/turret_icons if(health <= 0) die() //the death process :( -/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) +/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/damage = Proj.get_structure_damage() if(!damage) @@ -573,10 +572,10 @@ var/list/turret_icons if(L.stat && !emagged) //if the perp is dead/dying, no need to bother really return TURRET_NOT_TARGET //move onto next potential victim! - if(get_dist(src, L) > 7) //if it's too far away, why bother? + if(get_dist(src, L) > 12) //if it's too far away, why bother? return TURRET_NOT_TARGET - if(!check_trajectory(L, src)) //check if we have true line of sight + if(!check_trajectory(list(x,y,z), list(L.x, L.y, L.z),null,null, L)) //check if we have true line of sight return TURRET_NOT_TARGET if(emagged) // If emagged not even the dead get a rest diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 4c30ef7209..13214c3fbb 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -28,6 +28,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() anchored = TRUE icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" + atomFlags = AF_WALL_MOUNTED var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 1ba214eb42..5970800906 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -36,8 +36,7 @@ if( !(stat & NOPOWER) ) icon_state = icon_type else - spawn(rand(0, 15)) - icon_state = "[icon_type]_off" + icon_state = "[icon_type]_off" /obj/machinery/slotmachine/update_icon() overlays.Cut() @@ -126,7 +125,7 @@ playsound(src.loc, 'sound/machines/click.ogg', 50, 1) set_spin_ovarlay() - + set_pull_overlay() set_slots_overlay() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 430852ae40..03c81ec339 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -6,6 +6,7 @@ name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the ship on fire." description_info = "Can have its temperature adjusted by opening the panel with a screwdriver and clicking." + hitbox = /datum/hitboxDatum/atom/atmosphericHeater var/obj/item/cell/large/cell var/on = FALSE var/set_temperature = T0C + 50 //K diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index ad05026387..6abdf541c4 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -17,6 +17,7 @@ density = FALSE use_power = IDLE_POWER_USE idle_power_usage = 10 + atomFlags = AF_WALL_MOUNTED var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 464b14678e..56a75cd0e9 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 + atomFlags = AF_WALL_MOUNTED var/enabled = 0 var/lethal = 0 var/locked = 1 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 8142040660..299c98e7db 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -91,6 +91,7 @@ layer = BELOW_OBJ_LAYER anchored = TRUE density = TRUE + hitbox = /datum/hitboxDatum/atom/vendingMachine var/icon_vend //Icon_state when vending var/icon_deny //Icon_state when denying access @@ -1214,6 +1215,7 @@ custom_vendor = TRUE // Chemists can load it for customers can_stock = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill, /obj/item/stack/medical, /obj/item/bodybag, /obj/item/device/scanner/health, /obj/item/reagent_containers/hypospray, /obj/item/storage/pill_bottle, /obj/item/reagent_containers/food/snacks/moecube, /obj/item/organ/internal) vendor_department = DEPARTMENT_MEDICAL + atomFlags = AF_WALL_MOUNTED /obj/machinery/vending/wallmed/minor products = list( diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index 3598c2a930..6f0c3f5902 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -171,7 +171,7 @@ if(!internals && !gasmask) chemholder.reagents.trans_to_mob(H, 5, CHEM_INGEST, copy = TRUE) chemholder.reagents.trans_to_mob(H, 5, CHEM_BLOOD, copy = TRUE) - else if(isobj(A) && !A.simulated) + else if(isobj(A)) chemholder.reagents.touch_obj(A) var/color = chemholder.reagents.get_color() //build smoke icon diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm index deae005838..636c6473bc 100644 --- a/code/game/objects/effects/chem/water.dm +++ b/code/game/objects/effects/chem/water.dm @@ -28,7 +28,7 @@ for (var/atom/A in T) if (ismob(A)) affected_mobs |= A - else if (A.simulated) + else reagents.touch(A) for (var/mob/M in affected_mobs) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index b59e5cfac5..c427de9ec1 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -6,10 +6,14 @@ would spawn and follow the beaker, even if it is carried or thrown. */ /obj/effect + atomFlags = AF_IGNORE_ON_BULLETSCAN | AF_EXPLOSION_IGNORANT var/random_rotation = 0 //If 1, pick a random cardinal direction. if 2, pick a randomised angle var/random_offset = 0 weight = 0 +/obj/effect/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + /obj/effect/effect name = "effect" icon = 'icons/effects/effects.dmi' diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index d761c0c9ef..98b5a8a653 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -72,9 +72,5 @@ icon_state = "fire_trails" -/obj/effect/explosion_fire/New() - ..() - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.5 SECOND) - diff --git a/code/game/objects/effects/roaches.dm b/code/game/objects/effects/roaches.dm index 200d4471f4..843e4490a1 100644 --- a/code/game/objects/effects/roaches.dm +++ b/code/game/objects/effects/roaches.dm @@ -28,7 +28,7 @@ health -= (dhTotalDamageStrict(I.melleDamages, ALL_ARMOR, list(BRUTE,BURN)) / 2) healthcheck() -/obj/item/roach_egg/bullet_act(var/obj/item/projectile/Proj) +/obj/item/roach_egg/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) ..() health -= Proj.get_structure_damage() healthcheck() @@ -61,7 +61,7 @@ . = ..() -/obj/item/roach_egg/Process() +/obj/item/roach_egg/Process() if (isturf(src.loc) || istype(src.loc, /obj/structure/closet) || istype(src.loc, /obj/item/organ/external)) // suppresses hatching when not in a suitable loc if(amount_grown >= 100) var/obj/item/organ/external/O diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index f3d44ff39e..9df3d0c3a4 100755 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -28,7 +28,7 @@ health -= damage healthcheck() -/obj/effect/spider/bullet_act(var/obj/item/projectile/Proj) +/obj/effect/spider/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) ..() health -= Proj.get_structure_damage() healthcheck() diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 51dced3d91..0d11538d5c 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -154,11 +154,11 @@ proc/fragment_explosion(var/turf/epicenter, var/range, var/f_type, var/f_amount if(!epicenter || !f_type) return - var/list/target_turfs = getcircle(epicenter, range) - var/fragments_per_projectile = f_amount/target_turfs.len //This is rounded but only later - for(var/turf/T in target_turfs) - //sleep(0) + var/fragments_per_projectile = round(3.14*range*range) + var/list/launchedList = list() + for(var/turf/T in orange(range, epicenter)) var/obj/item/projectile/bullet/pellet/fragment/P = new f_type(epicenter) + P.PrepareForLaunch() if (!isnull(f_damage)) @@ -167,14 +167,23 @@ proc/fragment_explosion(var/turf/epicenter, var/range, var/f_type, var/f_amount P.range_step = f_step P.shot_from = epicenter - - P.launch(T) + P.atomFlags = AF_IGNORE_ON_BULLETSCAN|AF_EXPLOSION_IGNORANT + /// has to be exxagerate due to how far the turfs are + P.launch(T, zStart = LEVEL_LYING ,zOffset = rand(LEVEL_LYING+5, LEVEL_CHEST)) + launchedList.Add(P) //Some of the fragments will hit mobs in the same turf if (prob(same_turf_hit_chance)) for(var/mob/living/M in epicenter) P.attack_mob(M, 0, 100) + /// 3 ticks should be enough + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(removeFlags), launchedList.Copy(), AF_IGNORE_ON_BULLETSCAN | AF_EXPLOSION_IGNORANT), SSbullets.wait * 3) +/proc/removeFlags(list/targets, flagsToRemove) + for(var/atom/thing as anything in targets) + if(QDELETED(thing)) + continue + thing.atomFlags &= ~flagsToRemove // This is made to mimic the explosion that would happen when something gets pierced by a bullet ( a tank by a anti-armor shell , a armoured car by an .60 AMR, etc, creates flying shrapnel on the other side!) proc/fragment_explosion_angled(atom/epicenter, turf/origin , projectile_type, projectile_amount) @@ -184,9 +193,13 @@ proc/fragment_explosion_angled(atom/epicenter, turf/origin , projectile_type, pr while(proj_amount) proj_amount-- var/obj/item/projectile/pew_thingie = new projectile_type(epicenter) + var/turf/chosen = pick_n_take(hittable_turfs) + var/angle = ATAN2(chosen.y - epicenter.y, chosen.x - epicenter.x) + pew_thingie.pixel_x = 8 * sin(angle) + pew_thingie.pixel_y = 8 * cos(angle) pew_thingie.firer = epicenter pew_thingie.PrepareForLaunch() - pew_thingie.launch(pick(hittable_turfs)) + pew_thingie.launch(chosen) //Generic proc for spread of any projectile type. proc/projectile_explosion(turf/epicenter, range, p_type, p_amount = 10, list/p_damage = list()) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bd138a4b34..4f5e8119fb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -122,6 +122,21 @@ GLOBAL_LIST(melleDamagesCache) var/chameleon_type +/// OBJECTS that are relevant will implement their own logic for being hit. +/obj/item/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + +/obj/item/hitbox_test + name = "hitbox tester" + icon_state = "hitbox" + +/obj/item/hitbox_test/Initialize() + . = ..() + var/datum/hitboxDatum/Selfhitbox = new() + Selfhitbox.boundingBoxes += list(list(8,8,24,24,0,0)) + Selfhitbox.visualize() + hitbox = Selfhitbox + /obj/item/blockDamages(list/armorToDam, armorDiv, woundMult, defZone) for(var/armorType in armorToDam) for(var/list/damageElement in armorToDam[armorType]) @@ -390,7 +405,7 @@ GLOBAL_LIST(melleDamagesCache) //For non-projectile attacks this usually means the attack is blocked. //Otherwise should return 0 to indicate that the attack is not affected in any way. /obj/item/proc/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") - return 0 + return PROJECTILE_CONTINUE /obj/item/proc/get_loc_turf() var/atom/L = loc diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index b5a215424e..fcfd51915a 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -25,7 +25,7 @@ var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. var/datum/powernet/PN // Our powernet - var/obj/structure/cable/attached // the attached cable + var/obj/structure/cable/power_supply // the power_supply cable /obj/item/device/powersink/Initialize(mapload) . = ..() @@ -36,8 +36,8 @@ if(mode == 0) var/turf/T = loc if(isturf(T) && !!T.is_plating()) - attached = locate() in T - if(!attached) + power_supply = locate() in T + if(!power_supply) to_chat(user, "No exposed cable here to attach to.") return else @@ -81,7 +81,7 @@ STOP_PROCESSING(SSmachines, src) /obj/item/device/powersink/pwr_drain() - if(!attached) + if(!power_supply) return 0 if(drained_this_tick) @@ -124,7 +124,7 @@ explosion(get_turf(src), 1500, 100) qdel(src) return - if(attached && attached.powernet) - PN = attached.powernet + if(power_supply && power_supply.powernet) + PN = power_supply.powernet else PN = null diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 8589b82194..ade170694f 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -8,9 +8,15 @@ volumeClass = ITEM_SIZE_BULKY canhear_range = 2 flags = CONDUCT | NOBLOODY + hitbox = /datum/hitboxDatum/atom/intercom + atomFlags = AF_WALL_MOUNTED var/number = 0 var/area/linked_area +/// For internal stuff not meant to wall mount +/obj/item/device/radio/intercom/internal + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED + /obj/item/device/radio/intercom/custom name = "ship intercom (Custom)" broadcasting = 0 diff --git a/code/game/objects/items/devices/scanners/scanners.dm b/code/game/objects/items/devices/scanners/scanners.dm index ad7785fa09..567b7a6ae9 100644 --- a/code/game/objects/items/devices/scanners/scanners.dm +++ b/code/game/objects/items/devices/scanners/scanners.dm @@ -68,7 +68,7 @@ if(!can_use(user)) return - if(is_valid_scan_target(A) && A.simulated) + if(is_valid_scan_target(A)) if(!is_virtual) user.visible_message(SPAN_NOTICE("[user] runs \the [src] over \the [A]."), range = 2) if(scan_sound) diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 28f2ca63b9..ee72da5314 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -59,6 +59,8 @@ origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_COVERT = 3) + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED + var/operating = 0 var/obj/item/device/radio/spy/radio var/obj/machinery/camera/spy/selected_camera @@ -147,6 +149,7 @@ /obj/machinery/camera/spy // These cheap toys are accessible from the mercenary camera console as well network = list(NETWORK_MERCENARY) + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED /obj/machinery/camera/spy/New() ..() diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index f00c544314..c4f0003a7f 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -79,7 +79,7 @@ desc = "A shooting target with a threatening silhouette." hp = 2350 // alium onest too kinda -/obj/item/target/bullet_act(var/obj/item/projectile/Proj) +/obj/item/target/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!" var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1) var/decaltype = 1 // 1 - scorch, 2 - bullet diff --git a/code/game/objects/items/weapons/grenades/frag.dm b/code/game/objects/items/weapons/grenades/frag.dm index ddca490e2d..1a96ee332e 100644 --- a/code/game/objects/items/weapons/grenades/frag.dm +++ b/code/game/objects/items/weapons/grenades/frag.dm @@ -13,7 +13,7 @@ var/explosion_falloff = 40 //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern - var/spread_range = 7 + var/spread_range = 4 /obj/item/grenade/frag/prime() set waitfor = 0 diff --git a/code/game/objects/items/weapons/implant/implants/carrion/carrion_spiders.dm b/code/game/objects/items/weapons/implant/implants/carrion/carrion_spiders.dm index 540c2a61b6..512f6cd501 100644 --- a/code/game/objects/items/weapons/implant/implants/carrion/carrion_spiders.dm +++ b/code/game/objects/items/weapons/implant/implants/carrion/carrion_spiders.dm @@ -56,7 +56,7 @@ attack_animation(user) die_from_attack() -/obj/item/implant/carrion_spider/bullet_act(obj/item/projectile/P, def_zone) +/obj/item/implant/carrion_spider/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) ..() die_from_attack() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 144a7927c8..23f28ebfe2 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -91,7 +91,7 @@ countdown-- return -/obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj) +/obj/effect/energy_net/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) health -= Proj.get_structure_damage() healthcheck() return 0 diff --git a/code/game/objects/landmarks/landmark.dm b/code/game/objects/landmarks/landmark.dm index 723063775d..023200bc7d 100644 --- a/code/game/objects/landmarks/landmark.dm +++ b/code/game/objects/landmarks/landmark.dm @@ -4,12 +4,14 @@ alpha = 64 //Or else they cover half of the map anchored = TRUE unacidable = TRUE - simulated = FALSE invisibility = 101 layer = MID_LANDMARK_LAYER weight = 0 var/delete_me = FALSE +/obj/landmark/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + /obj/landmark/New() ..() GLOB.landmarks_list += src diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 5514cbceca..264e1f0656 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -13,6 +13,10 @@ var/corporation var/heat = 0 +/obj/Initialize() + . = ..() + + /// Used for calculating weight, return value will set the atom's weight /obj/getWeight() var/w = initial(weight) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 19953e50a6..99512870be 100755 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,3 +1,24 @@ +/** + * Global list for storing the blocking levels for all structures + * format is list(type = number) or list(type = list(list(minimum,maximum), list(minimum,maximum))) + * if its not meant to be continous + */ +/* +#define LEVEL_BELOW -1 +#define LEVEL_TURF -0.7 +#define LEVEL_LYING -0.5 +#define LEVEL_LOWWALL 0 +#define LEVEL_TABLE 0.2 +#define LEVEL_HEAD 0.7 +#define LEVEL_ABOVE 1 +*/ + +/** + * Any projectile under this height will be blocked by this structure. Can be a list if its not meant to be continous + * List format is list(list(minimum, maximum), list(minimum, maximum)) + * Normal format is just the number. + * Blocking lists are stored in the global list GLOB.structureBlockingLevels. + */ /obj/structure icon = 'icons/obj/structures.dmi' volumeClass = ITEM_SIZE_GARGANTUAN @@ -7,7 +28,7 @@ bad_type = /obj/structure var/health = 100 var/maxHealth = 100 - var/explosion_coverage = 0 + var/explosionCoverage = 0 var/climbable var/breakable var/parts @@ -23,13 +44,14 @@ /obj/structure/proc/take_damage(damage) // Blocked amount . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage health -= damage if(health < 0) qdel(src) return - +/obj/structure/proc/check_cover(obj/item/projectile/P, turf/from) + return TRUE /** * An overridable proc used by SSfalling to determine whether if the object deals @@ -77,6 +99,13 @@ var/absorbed = take_damage(target_power) return absorbed +/obj/structure/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + . = ..() + take_damage(P.get_structure_damage()) + if(QDELETED(src)) + return PROJECTILE_CONTINUE + return PROJECTILE_STOP + /obj/structure/New() ..() if(climbable) diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index f55105c31f..3fd0dcd7d8 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -6,7 +6,7 @@ desc = "Cats really don't like these things." density = FALSE anchored = TRUE - + hitbox = /datum/hitboxDatum/turf/floor /obj/structure/catwalk/New() ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 59dd20f05b..95f6b0988f 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -9,6 +9,7 @@ matter = list(MATERIAL_STEEL = 10) //bad_type = /obj/structure/closet spawn_tags = SPAWN_TAG_CLOSET + hitbox = /datum/hitboxDatum/atom/closet var/locked = FALSE var/broken = FALSE var/horizontal = FALSE @@ -330,7 +331,7 @@ if(health <= 0) qdel(src) -/obj/structure/closet/bullet_act(obj/item/projectile/Proj) +/obj/structure/closet/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/proj_damage = Proj.get_structure_damage() if(!proj_damage) return diff --git a/code/game/objects/structures/crates_lockers/closets/wall_mounted.dm b/code/game/objects/structures/crates_lockers/closets/wall_mounted.dm index 74bb25eb30..bba38bc995 100644 --- a/code/game/objects/structures/crates_lockers/closets/wall_mounted.dm +++ b/code/game/objects/structures/crates_lockers/closets/wall_mounted.dm @@ -5,6 +5,7 @@ icon_state = "wall-locker" anchored = TRUE wall_mounted = TRUE //This handles density in closets.dm + atomFlags = AF_WALL_MOUNTED /obj/structure/closet/wall_mounted/emcloset diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 464dcb7b5c..2a76d4cca1 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -11,6 +11,7 @@ health = 600 maxHealth = 600 price_tag = 50 + hitbox = /datum/hitboxDatum/atom/crate /obj/structure/closet/crate/close() if(!src.opened) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 1af34320b3..d630d6677f 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -16,7 +16,7 @@ drop_materials(drop_location()) var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) - if(AM.simulated) AM.forceMove(T) + AM.forceMove(T) user.visible_message(SPAN_NOTICE("[user] pries \the [src] open."), \ SPAN_NOTICE("You pry open \the [src]."), \ SPAN_NOTICE("You hear splitting wood.")) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 2343d6be11..ba0a12e527 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -11,7 +11,7 @@ layer = SIGN_LAYER opacity = 0 -/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone) +/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) if(!P.nodamage) visible_message(SPAN_WARNING("[P] tears [src] down!")) qdel(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 8ff64146e5..e4a5a094cc 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE unacidable = 1//Dissolving the case would also delete the gun. - explosion_coverage = 0.8 + explosionCoverage = 0.8 health = 60 maxHealth = 60 var/occupied = 1 @@ -16,14 +16,14 @@ var/absorbed = take_damage(target_power) return absorbed -/obj/structure/displaycase/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/displaycase/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) take_damage(Proj.get_structure_damage()) ..() return /obj/structure/displaycase/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage health -= damage if (health <= 0) if (!(destroyed )) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index ca07b47c9d..1aacf1ed77 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -3,6 +3,8 @@ desc = "A small wall mounted cabinet designed to hold a fire extinguisher." icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" + hitbox = /datum/hitboxDatum/atom/fireExtinguisherCabinet + atomFlags = AF_WALL_MOUNTED anchored = TRUE density = FALSE var/obj/item/extinguisher/has_extinguisher diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm index 63eae3e655..a5d2fe94a6 100644 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ b/code/game/objects/structures/fireaxe_cabinet.dm @@ -4,6 +4,8 @@ icon_state = "fireaxe" anchored = TRUE density = FALSE + hitbox = /datum/hitboxDatum/atom/fireAxeCabinet + atomFlags = AF_WALL_MOUNTED var/damage_threshold = 15 var/open @@ -82,7 +84,7 @@ if(istype(O, /obj/item/tool/multitool)) toggle_lock(user) return - if(istype(O, /obj/item/card/id)) + if(istype(O, /obj/item/card/id)) var/obj/item/card/id/ID = O if(has_access(list(), req_one_access, ID.GetAccess())) toggle_lock(user) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 80b750bfc8..0a8ac677c5 100755 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -8,7 +8,7 @@ var/state = 0 var/cover = 50 //how much cover the girder provides against projectiles. // Not a lot of explosion blocking but still there. - explosion_coverage = 0.4 + explosionCoverage = 0.4 var/material/reinf_material var/reinforcing = 0 var/resistance = RESISTANCE_TOUGH @@ -43,7 +43,7 @@ else attack_hand(M) -/obj/structure/girder/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/girder/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) //Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder) if(Proj.original != src && !prob(cover)) return PROJECTILE_CONTINUE //pass through @@ -304,7 +304,7 @@ if (!damage || damage <= 0) return . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage health -= damage if (health <= 0) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index fe8b27ea96..bd16d6cce4 100755 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -8,7 +8,7 @@ flags = CONDUCT layer = BELOW_OBJ_LAYER // Blocks very little , since its just metal rods.. - explosion_coverage = 0.2 + explosionCoverage = 0.2 health = 50 var/destroyed = 0 @@ -59,7 +59,7 @@ else return !density -/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/grille/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(!Proj) return //Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact @@ -158,7 +158,7 @@ /obj/structure/grille/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage if(health <= 0) if(!destroyed) density = FALSE diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 16cab1f9ec..d352856a66 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -41,7 +41,7 @@ var/undeploy_path = null health = 30 - explosion_coverage = 1 + explosionCoverage = 1 /obj/structure/inflatable/wall name = "inflatable wall" @@ -57,7 +57,7 @@ /obj/structure/inflatable/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage if(health < 0) deflate(TRUE) playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) @@ -66,7 +66,7 @@ /obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) return 0 -/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/inflatable/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/proj_damage = Proj.get_structure_damage() if(!proj_damage) return take_damage(proj_damage) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index d1cbd6b413..3fd5ab9425 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -10,6 +10,11 @@ layer = LATTICE_LAYER //under pipes // flags = CONDUCT +/// This would be too bad if it was actually always blocking(and not really make sense for players.) SPCR 2024 +/obj/structure/lattice/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + + /obj/structure/lattice/Initialize() . = ..() ///// Z-Level Stuff diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm index c52e7f15db..aa2ed90917 100644 --- a/code/game/objects/structures/low_wall.dm +++ b/code/game/objects/structures/low_wall.dm @@ -24,6 +24,7 @@ anchored = TRUE layer = LOW_WALL_LAYER icon = 'icons/obj/structures/low_wall.dmi' + hitbox = /datum/hitboxDatum/atom/lowWall icon_state = "metal" throwpass = TRUE var/connected = TRUE @@ -39,7 +40,7 @@ maxHealth = 450 health = 450 // Anything above is far too blocking. - explosion_coverage = 0.2 + explosionCoverage = 0.2 var/hitsound = 'sound/weapons/Genhit.ogg' climbable = TRUE @@ -111,7 +112,7 @@ /obj/structure/low_wall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover,/obj/item/projectile)) - return (check_cover(mover,target)) + return !(check_cover(mover,target)) //Its debateable whether its correct to use layer in a logic check like this. @@ -162,48 +163,6 @@ return ..() - -//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. -/obj/structure/low_wall/proc/check_cover(obj/item/projectile/P, turf/from) - - if(config.z_level_shooting) - if(P.height == HEIGHT_HIGH) - return TRUE // Bullet is too high to hit - P.height = (P.height == HEIGHT_LOW) ? HEIGHT_LOW : HEIGHT_CENTER - - if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close - return 1 - if(get_dist(loc, P.trajectory.target) > 1 ) // Target turf must be adjacent for it to count as cover - return TRUE - var/valid = FALSE - - if(!P.def_zone) - return 1 // Emitters, or anything with no targeted bodypart will always bypass the cover - var/targetzone = check_zone(P.def_zone) - if (targetzone in list(BP_R_LEG, BP_L_LEG, BP_GROIN)) - valid = TRUE //The lower body is always concealed - if (ismob(P.original)) - var/mob/M = P.original - if (M.lying) - valid = TRUE //Lying down covers your whole body - - // Bullet is low enough to hit the wall - if(config.z_level_shooting && P.height == HEIGHT_LOW) - valid = TRUE - - if(valid) - var/pierce = P.check_penetrate(src) - take_damage(P.get_structure_damage()/2) - if (health > 0) - visible_message(SPAN_WARNING("[P] hits \the [src]!")) - return pierce - else - visible_message(SPAN_WARNING("[src] breaks down!")) - qdel(src) - return 1 - return 1 - - //Icon procs.mostly copied from tables /obj/structure/low_wall/update_icon() overlays.Cut() @@ -496,7 +455,7 @@ /obj/structure/low_wall/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage if(locate(/obj/effect/overlay/wallrot) in src) damage *= 10 health -= damage diff --git a/code/game/objects/structures/medical_stand.dm b/code/game/objects/structures/medical_stand.dm index 29aa09301e..e730182de2 100644 --- a/code/game/objects/structures/medical_stand.dm +++ b/code/game/objects/structures/medical_stand.dm @@ -16,7 +16,7 @@ var/is_loosen = TRUE var/valve_opened = FALSE //blood stuff - var/mob/living/carbon/attached + var/mob/living/carbon/pacient var/mode = 1 // 1 is injecting, 0 is taking blood. var/obj/item/reagent_containers/beaker var/list/transfer_amounts = list(REM, 1, 2) @@ -54,7 +54,7 @@ if(beaker) overlays += "beaker" - if(attached) + if(pacient) overlays += "line_active" else overlays += "line" @@ -89,7 +89,7 @@ contained = null breather = null - attached = null + pacient = null qdel(beaker) beaker = null return ..() @@ -149,11 +149,11 @@ START_PROCESSING(SSobj,src) return if("Drip needle") - if(attached) + if(pacient) if(!do_mob(usr, target, 10)) return - visible_message("\The [attached] is taken off \the [src]") - attached = null + visible_message("\The [pacient] is taken off \the [src]") + pacient = null else if(ishuman(target)) usr.visible_message(SPAN_NOTICE("\The [usr] begins inserting needle into [target]'s vein."), SPAN_NOTICE("You begin inserting needle into [target]'s vein.")) @@ -164,7 +164,7 @@ return usr.visible_message(SPAN_NOTICE("\The [usr] hooks \the [target] up to \the [src]."), SPAN_NOTICE("You hook \the [target] up to \the [src].")) - attached = target + pacient = target START_PROCESSING(SSobj,src) update_icon() @@ -350,10 +350,10 @@ description += "The IV drip is [mode ? "injecting" : "taking blood"]. \n" description += "It is set to transfer [transfer_amount]u of chemicals per cycle. \n" if(beaker.reagents && beaker.reagents.total_volume) - description += SPAN_NOTICE("Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid. \n") + description += SPAN_NOTICE("pacient is \a [beaker] with [beaker.reagents.total_volume] units of liquid. \n") else - description += SPAN_NOTICE("Attached is an empty [beaker]. \n") - description += SPAN_NOTICE("[attached ? attached : "No one"] is hooked up to it. \n") + description += SPAN_NOTICE("pacient is an empty [beaker]. \n") + description += SPAN_NOTICE("[pacient ? pacient : "No one"] is hooked up to it. \n") else description += SPAN_NOTICE("There is no vessel. \n") @@ -399,17 +399,17 @@ environment.merge(removed) //Reagent Stuff - if(attached) - if(!Adjacent(attached)) - visible_message("The needle is ripped out of [src.attached], doesn't that hurt?") - attached.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM), used_weapon = "Drip needle") - attached = null + if(pacient) + if(!Adjacent(pacient)) + visible_message("The needle is ripped out of [src.pacient], doesn't that hurt?") + pacient.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM), used_weapon = "Drip needle") + pacient = null update_icon() if(beaker) if(mode) // Give blood if(beaker.volume > 0) - beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD) + beaker.reagents.trans_to_mob(pacient, transfer_amount, CHEM_BLOOD) update_icon() else // Take blood var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume @@ -419,7 +419,7 @@ if(prob(5)) visible_message("\The [src] pings.") return - var/mob/living/carbon/human/H = attached + var/mob/living/carbon/human/H = pacient if(!istype(H)) return // if(NOCLONE in H.mutations) @@ -441,7 +441,7 @@ beaker.reagents.handle_reactions() update_icon() - if ((!valve_opened || tank.distribute_pressure == 0) && !breather && !attached) + if ((!valve_opened || tank.distribute_pressure == 0) && !breather && !pacient) return PROCESS_KILL /obj/structure/medical_stand/anesthetic diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 66dd92dde5..799433bd65 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -40,7 +40,7 @@ desc = "Oh no, seven years of bad luck!" -/obj/structure/mirror/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/mirror/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(prob(Proj.get_structure_damage() * 2)) if(!shattered) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 504f791396..89eba628dd 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -5,6 +5,7 @@ icon_state = "nboard00" density = FALSE anchored = TRUE + atomFlags = AF_WALL_MOUNTED var/notices = 0 /obj/structure/noticeboard/Initialize() diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 9c51372024..9786eab431 100755 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -15,7 +15,7 @@ var/broken = 0 health=70 maxHealth=70 - explosion_coverage = 0 + explosionCoverage = 0 var/check = 0 var/reinforced = FALSE var/reinforcement_security = 0 // extra health from being reinforced, hardcoded to 40 on add @@ -87,7 +87,7 @@ /obj/structure/railing/take_damage(amount) . = health - amount < 0 ? amount - health : amount - . *= explosion_coverage + . *= explosionCoverage if (reinforced) if (reinforcement_security == 0) visible_message(SPAN_WARNING("[src]'s reinforcing rods fall off!")) @@ -385,7 +385,7 @@ return damage -/obj/structure/railing/bullet_act(obj/item/projectile/P, def_zone) +/obj/structure/railing/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) . = ..() take_damage(P.get_structure_damage()) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index e319ea69f3..f9d51c1ebc 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -5,6 +5,7 @@ density = FALSE layer = SIGN_LAYER volumeClass = ITEM_SIZE_NORMAL + atomFlags = AF_WALL_MOUNTED /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction if(istype(tool, /obj/item/tool/screwdriver) && !istype(src, /obj/structure/sign/double)) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index cf34750f8d..44ac2c1926 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -14,6 +14,7 @@ description_info = "Can be used as a support to climb up by looking up and clicking on a free tile that is not blocked by a railing" icon_state = "bed" anchored = TRUE + hitbox = /datum/hitboxDatum/atom/bed var/material/material var/material/padding_material var/base_icon = "bed" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 8823108153..35fbda608a 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -3,6 +3,7 @@ desc = "You sit in this. Either by will or force." description_info = "Can be used as a support to climb up by looking up and clicking on a free tile that is not blocked by a railing" icon_state = "chair_preview" + hitbox = /datum/hitboxDatum/atom/chair color = "#666666" base_icon = "chair" var/propelled = 0 // Check for fire-extinguisher-driven chairs @@ -109,6 +110,7 @@ /obj/structure/bed/chair/comfy desc = "A chair. It looks comfy." icon_state = "comfychair_preview" + hitbox = /datum/hitboxDatum/atom/armChair /obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial) ..(newloc,MATERIAL_STEEL, MATERIAL_LEATHER) diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index e750ba2e07..0225ef2143 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -5,6 +5,7 @@ var/global/list/stool_cache = list() //haha stool name = "stool" desc = "Apply butt." icon = 'icons/obj/furniture.dmi' + hitbox = /datum/hitboxDatum/atom/stool icon_state = "stool_preview" //set for the map melleDamages = list(ARMOR_BLUNT = list(DELEM(BRUTE,15))) throwforce = 10 diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 5d0cfdf0f8..d4bbfa3ff2 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -9,6 +9,7 @@ layer = BELOW_OBJ_LAYER spawn_tags = SPAWN_TAG_STRUCTURE_COMMON rarity_value = 50 + hitbox = /datum/hitboxDatum/atom/tankDispenser var/oxygentanks = 10 var/plasmatanks = 10 var/list/oxytanks = list() //sorry for the similar var names diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 26cb82ca96..bb173514ae 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -320,7 +320,7 @@ for(var/thing in loc) var/atom/movable/AM = thing var/mob/living/L = thing - if(istype(AM) && AM.simulated) + if(istype(AM)) wash(AM) if(istype(L)) process_heat(L) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d3212628ff..be6cf72c76 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -9,7 +9,7 @@ flags = ON_BORDER maxHealth = 20 health = 20 - explosion_coverage = 1 + explosionCoverage = 1 var/resistance = RESISTANCE_FLIMSY //Incoming damage is reduced by this flat amount before being subtracted from health. Defines found in code\__defines\weapons.dm var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire var/damage_per_fire_tick = 2 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly. @@ -67,7 +67,7 @@ /obj/structure/window/take_damage(damage = 0) var/initialhealth = health . = health - (damage * (1 - silicate / 200) - resistance) < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage damage = damage * (1 - silicate / 200) // up to 50% damage resistance damage -= resistance // then flat resistance from material @@ -147,32 +147,6 @@ qdel(src) return - -/obj/structure/window/bullet_act(var/obj/item/projectile/Proj) - - if(config.z_level_shooting && Proj.height) - if(Proj.height == HEIGHT_LOW)// Bullet is too low - return PROJECTILE_STOP - else if(Proj.height == HEIGHT_HIGH) // Guaranteed hit - var/proj_damage = Proj.get_structure_damage() - if(proj_damage) - hit(proj_damage) - ..() - return PROJECTILE_STOP - - . = PROJECTILE_CONTINUE - var/targetzone = check_zone(Proj.def_zone) - if(targetzone in list(BP_CHEST, BP_HEAD, BP_L_ARM, BP_R_ARM)) - var/proj_damage = Proj.get_structure_damage() - if(proj_damage) - hit(proj_damage) - ..() - if(!QDELETED(src)) - return PROJECTILE_STOP - - return PROJECTILE_STOP - - //TODO: Make full windows a separate type of window. //Once a full window, it will always be a full window, so there's no point //having the same type for both. @@ -552,21 +526,6 @@ proc/end_grab_onto(mob/living/user, mob/living/target) if(!is_fulltile()) icon_state = "[basestate]" return - /* - var/list/dirs = list() - if(anchored) - for(var/obj/structure/window/W in orange(src,1)) - if(W.anchored && W.density && W.type == src.type && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. - dirs += get_dir(src, W) - - for(var/turf/simulated/wall/T in RANGE_TURFS(1, src) - src) - var/T_dir = get_dir(src, T) - dirs |= T_dir - if(propagate) - spawn(0) - T.update_connections() - T.update_icon() - */ //Since fulltile windows can't exist without an underlying wall, we will just copy connections from our wall var/list/connections = list("0", "0", "0", "0") var/obj/structure/low_wall/LW = (locate(/obj/structure/low_wall) in loc) @@ -591,6 +550,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) desc = "It looks thin and flimsy. A few knocks with... anything, really should shatter it." icon_state = "window" basestate = "window" + hitbox = /datum/hitboxDatum/atom/window/directional glasstype = /obj/item/stack/material/glass maximal_heat = T0C + 200 // Was 100. Spaceship windows surely surpass coffee pots. damage_per_fire_tick = 3 // Was 2. Made weaker than rglass per tick. @@ -601,6 +561,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) dir = SOUTH|EAST icon = 'icons/obj/structures/windows.dmi' icon_state = "fwindow" + hitbox = /datum/hitboxDatum/turf/window alpha = 120 maxHealth = 40 resistance = RESISTANCE_FLIMSY @@ -610,6 +571,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) name = "plasma window" desc = "A borosilicate alloy window. It seems to be quite strong." + hitbox = /datum/hitboxDatum/atom/window/directional icon_state = "plasmawindow" shardtype = /obj/item/material/shard/plasma glasstype = /obj/item/stack/material/glass/plasmaglass @@ -622,6 +584,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) dir = SOUTH|EAST icon = 'icons/obj/structures/windows.dmi' basestate = "pwindow" + hitbox = /datum/hitboxDatum/turf/window icon_state = "plasmawindow_mask" alpha = 150 maxHealth = 200 @@ -633,6 +596,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) desc = "It looks rather strong. Might take a few good hits to shatter it." icon_state = "rwindow" basestate = "rwindow" + hitbox = /datum/hitboxDatum/atom/window/directional reinf = 1 maximal_heat = T0C + 750 // Fused quartz. damage_per_fire_tick = 2 @@ -652,6 +616,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) dir = SOUTH|EAST icon = 'icons/obj/structures/windows.dmi' icon_state = "fwindow" + hitbox = /datum/hitboxDatum/turf/window alpha = 150 maxHealth = 80 resistance = RESISTANCE_FRAGILE @@ -662,6 +627,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) desc = "A borosilicate alloy window, with rods supporting it. It seems to be very strong." basestate = "plasmarwindow" icon_state = "plasmarwindow" + hitbox = /datum/hitboxDatum/atom/window/directional shardtype = /obj/item/material/shard/plasma glasstype = /obj/item/stack/material/glass/plasmarglass maximal_heat = T0C + 5453 // Safe use temperature at 6000 kelvin. @@ -671,6 +637,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) /obj/structure/window/reinforced/plasma/full dir = SOUTH|EAST + hitbox = /datum/hitboxDatum/turf/window icon = 'icons/obj/structures/windows.dmi' basestate = "rpwindow" icon_state = "plasmarwindow_mask" @@ -683,12 +650,14 @@ proc/end_grab_onto(mob/living/user, mob/living/target) name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." icon_state = "twindow" + hitbox = /datum/hitboxDatum/atom/window/directional basestate = "twindow" opacity = 1 /obj/structure/window/reinforced/tinted/frosted name = "frosted window" desc = "It looks rather strong and frosted over. Looks like it might take a few less hits then a normal reinforced window." + hitbox = /datum/hitboxDatum/atom/window/directional icon_state = "fwindow" basestate = "fwindow" @@ -698,6 +667,7 @@ proc/end_grab_onto(mob/living/user, mob/living/target) icon = 'icons/obj/podwindows.dmi' icon_state = "window" basestate = "window" + hitbox = /datum/hitboxDatum/turf/window maxHealth = 300 resistance = RESISTANCE_IMPROVED reinf = 1 @@ -706,12 +676,13 @@ proc/end_grab_onto(mob/living/user, mob/living/target) /obj/structure/window/reinforced/polarized name = "electrochromic window" - + hitbox = /datum/hitboxDatum/atom/window/directional desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." var/id /obj/structure/window/reinforced/polarized/full dir = SOUTH|EAST + hitbox = /datum/hitboxDatum/turf/window icon = 'icons/obj/structures/windows.dmi' icon_state = "fwindow" flags = null diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index e8f7dff597..459eb0d5fb 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -43,8 +43,7 @@ if(activated) return activate() - spawn(10) - qdel(src) + qdel(src) /obj/effect/window_lwall_spawn/proc/handle_window_spawn(var/obj/structure/window/W) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 5fd1b9b26b..87ab562bfa 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -14,14 +14,10 @@ var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to - - /turf/simulated/New() ..() levelupdate() - - /turf/simulated/Entered(atom/A, atom/OL) if (isliving(A)) var/mob/living/M = A diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 94fb08e7ef..22cbe88fb3 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -8,6 +8,8 @@ var/broken var/burnt + hitbox = /datum/hitboxDatum/turf/floor + // Flooring data. var/flooring_override diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 35ad609448..a93d7ab4f6 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -38,7 +38,7 @@ take_damage(calc_damage, BRUTE) else visible_message(SPAN_DANGER("[user] ineffectually hits [src] with [I]")) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) return TRUE for(var/atom/movable/A in src) @@ -202,3 +202,12 @@ to_chat(user, SPAN_WARNING("This section is too damaged to support anything. Use a welder to fix the damage.")) return 0 return 1 + +/turf/simulated/floor/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + var/oldType = type + take_damage(P.get_structure_damage()) + if(type != oldType) + return PROJECTILE_CONTINUE + return PROJECTILE_STOP + + diff --git a/code/game/turfs/simulated/floor_damage.dm b/code/game/turfs/simulated/floor_damage.dm index 2ce4de0f42..96abd89ff8 100644 --- a/code/game/turfs/simulated/floor_damage.dm +++ b/code/game/turfs/simulated/floor_damage.dm @@ -34,11 +34,11 @@ for(var/obj/structure/lattice/L in src) if(damage > 75) L.take_damage(damage) - return + return FALSE damage -= flooring ? flooring.resistance : 0 if(damage <= 0) - return + return FALSE health -= damage @@ -50,6 +50,7 @@ //spawn() //We'll spawn off a new stack in order to damage the next layer, incase it turns into a different turf object damage_floor_at(x, y, z, leftover, damage_type, ignore_resistance) + return TRUE else if(flooring) //Breaking or burning overlays. //A tile can have one of each type @@ -60,6 +61,7 @@ if(!burnt && (damage_type == BURN || damage_type == BLAST) && health < (flooring.health * 0.75)) burnt = TRUE update_icon() + return FALSE /proc/damage_floor_at(x, y, z, damage, damage_type, ignore_resistance) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index c58aad5abf..258593e98b 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -11,6 +11,7 @@ blocks_air = 1 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + hitbox = /datum/hitboxDatum/turf/wall var/ricochet_id = 0 var/health = 0 @@ -100,6 +101,8 @@ update_icon() +/turf/simulated/wall/proc/projectileBounceCheck(obj/item/projectile/incoming) + return TRUE /turf/simulated/wall/Destroy() STOP_PROCESSING(SSturf, src) @@ -114,159 +117,59 @@ if(!radiate()) return PROCESS_KILL -// Extracts angle's tan if ischance = TRUE. -// In other case it just makes bullets and lazorz go where they're supposed to. - -/turf/simulated/wall/proc/projectile_reflection(obj/item/projectile/Proj, var/ischance = FALSE) - if(Proj.starting) - var/ricochet_temp_id = rand(1,1000) - if(!ischance) - Proj.ricochet_id = ricochet_temp_id - var/turf/curloc = get_turf(src) - - var/check_x0 = 32 * curloc.x - var/check_y0 = 32 * curloc.y - var/check_x1 = 32 * Proj.starting.x - var/check_y1 = 32 * Proj.starting.y - var/check_x2 = 32 * Proj.original.x - var/check_y2 = 32 * Proj.original.y - var/corner_x0 = check_x0 - var/corner_y0 = check_y0 - if(check_y0 - check_y1 > 0) - corner_y0 = corner_y0 - 16 - else - corner_y0 = corner_y0 + 16 - if(check_x0 - check_x1 > 0) - corner_x0 = corner_x0 - 16 - else - corner_x0 = corner_x0 + 16 - - // Checks if original is lower or upper than line connecting proj's starting and wall - // In specific coordinate system that has wall as (0,0) and 'starting' as (r, 0), where r > 0. - // So, this checks whether 'original's' y-coordinate is positive or negative in new c.s. - // In order to understand, in which direction bullet will ricochet. - // Actually new_y isn't y-coordinate, but it has the same sign. - var/new_y = (check_y2 - corner_y0) * (check_x1 - corner_x0) - (check_x2 - corner_x0) * (check_y1 - corner_y0) - // Here comes the thing which differs two situations: - // First - bullet comes from north-west or south-east, with negative func value. Second - NE or SW. - var/new_func = (corner_x0 - check_x1) * (corner_y0 - check_y1) - - // Added these wall things because my original code works well with one-tiled walls, but ignores adjacent turfs which in my current opinion was pretty wrong. - var/wallnorth = 0 - var/wallsouth = 0 - var/walleast = 0 - var/wallwest = 0 - for (var/turf/simulated/wall/W in range(2, curloc)) - var/turf/tempwall = get_turf(W) - if (tempwall.x == curloc.x) - if (tempwall.y == (curloc.y - 1)) - wallnorth = 1 - if (!ischance) - W.ricochet_id = ricochet_temp_id - else if (tempwall.y == (curloc.y + 1)) - wallsouth = 1 - if (!ischance) - W.ricochet_id = ricochet_temp_id - if (tempwall.y == curloc.y) - if (tempwall.x == (curloc.x + 1)) - walleast = 1 - if (!ischance) - W.ricochet_id = ricochet_temp_id - else if (tempwall.x == (curloc.x - 1)) - wallwest = 1 - if (!ischance) - W.ricochet_id = ricochet_temp_id - - if((wallnorth || wallsouth) && ((Proj.starting.y - curloc.y)*(wallsouth - wallnorth) >= 0)) - if(!ischance) - Proj.redirect(round(check_x1 / 32), round((2 * check_y0 - check_y1)/32), curloc, src) - return - else - return abs((check_y0 - check_y1) / (check_x0 - check_x1)) - - if((walleast || wallwest) && ((Proj.starting.x - curloc.x)*(walleast-wallwest) >= 0)) - if(!ischance) - Proj.redirect(round((2 * check_x0 - check_x1) / 32), round(check_y1 / 32), curloc, src) - return - else - return abs((check_x0 - check_x1) / (check_y0 - check_y1)) - - if((new_y * new_func) > 0) - if(!ischance) - Proj.redirect(round((2 * check_x0 - check_x1) / 32), round(check_y1 / 32), curloc, src) - else - return abs((check_x0 - check_x1) / (check_y0 - check_y1)) - else - if(!ischance) - Proj.redirect(round(check_x1 / 32), round((2 * check_y0 - check_y1)/32), curloc, src) - else - return abs((check_y0 - check_y1) / (check_x0 - check_x1)) - return - - -/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj) - - if(src.ricochet_id != 0) - if(src.ricochet_id == Proj.ricochet_id) - src.ricochet_id = 0 - new /obj/effect/sparks(get_turf(Proj)) - return PROJECTILE_CONTINUE - src.ricochet_id = 0 - var/proj_health = Proj.get_structure_damage() - if(istype(Proj,/obj/item/projectile/beam)) +/turf/simulated/wall/bullet_act(obj/item/projectile/hittingProjectile) + var/projectileDamage = hittingProjectile.get_structure_damage() + if(istype(hittingProjectile,/obj/item/projectile/beam)) burn(500)//TODO : fucking write these two procs not only for plasma (see plasma in materials.dm:283) ~ - else if(istype(Proj,/obj/item/projectile/ion)) + else if(istype(hittingProjectile,/obj/item/projectile/ion)) burn(500) + /* + else if(istype(hittingProjectile,/obj/item/projectile/bullet)) + var/list/lastMoves = hittingProjectile.dataRef.lastChanges + var/angle = hittingProjectile.dataRef.movementRatios[4] + var/ricochet = FALSE + switch(angle) + if(-180 to -155) + if((abs(lastMoves[2]) >= abs(lastMoves[1])) && abs(lastMoves[1])) + if(!get_step(src, ((hittingProjectile.x - x) < 0) ? WEST : EAST)?:density) + hittingProjectile.dataRef.bounce(1, rand(-5,5)) + ricochet = TRUE + if(-115 to -65) + if((abs(lastMoves[1]) >= abs(lastMoves[2])) && abs(lastMoves[2])) + if(!get_step(src, ((hittingProjectile.y - y) < 0) ? SOUTH : NORTH)?:density) + hittingProjectile.dataRef.bounce(2, rand(-5,5)) + ricochet = TRUE + if(-25 to 25) + if((abs(lastMoves[2]) >= abs(lastMoves[1])) && abs(lastMoves[1])) + if(!get_step(src, ((hittingProjectile.x - x) < 0) ? WEST : EAST)?:density) + hittingProjectile.dataRef.bounce(1, rand(-5,5)) + ricochet = TRUE + if(65 to 115) + if((abs(lastMoves[1]) >= abs(lastMoves[2])) && abs(lastMoves[2])) + if(!get_step(src, ((hittingProjectile.y - y) < 0) ? SOUTH : NORTH)?:density) + hittingProjectile.dataRef.bounce(2, rand(-5,5)) + ricochet = TRUE + if(155 to 180) + if((abs(lastMoves[2]) >= abs(lastMoves[1])) && abs(lastMoves[1])) + if(!get_step(src, ((hittingProjectile.x - x) < 0) ? WEST : EAST)?:density) + hittingProjectile.dataRef.bounce(1, rand(-5,5)) + ricochet = TRUE + if(ricochet) + take_damage(round(projectileDamage * 0.33)) + hittingProjectile.dataRef.cannotHit += src + message_admins("Ricochet at [angle].") + return PROJECTILE_CONTINUE + */ - Proj.on_hit(src) - - if(Proj.can_ricochet && proj_health != 0 && (src.x != Proj.starting.x) && (src.y != Proj.starting.y)) - var/ricochetchance = 1 - if(proj_health <= 60) - ricochetchance = 2 + round((60 - proj_health) / 5) - ricochetchance = min(ricochetchance * ricochetchance, 100) - // here it is multiplied by 1/2 temporally, changes will be required when new wall system gets implemented - ricochetchance = round(ricochetchance * projectile_reflection(Proj, TRUE) / 2) - - ricochetchance *= Proj.ricochet_ability - ricochetchance = min(max(ricochetchance, 0), 100) - if(prob(ricochetchance)) - // projectile loses up to 50% of its health when it ricochets, depending on situation - var/healthdiff = round(proj_health / 2 + proj_health * ricochetchance / 200) // projectile loses up to 50% of its health when it ricochets, depending on situation - var/list/damageAdjustment= list() - var/dam = Proj.getAllDamType(BRUTE) - damageAdjustment[BRUTE] = round(dam/2 + dam*ricochetchance/200) - dam = Proj.getAllDamType(BURN) - damageAdjustment[BURN] = round(dam/2 + dam*ricochetchance/200) - Proj.adjust_damages(damageAdjustment) - Proj.def_zone = ran_zone() - projectile_reflection(Proj) // Reflect before health, runtimes occur in some cases if health happens first. - visible_message("\The [Proj] ricochets off the surface of wall!") - take_damage(min(proj_health - healthdiff, 100)) - new /obj/effect/sparks(get_turf(Proj)) - return PROJECTILE_CONTINUE // complete projectile permutation - - //cut some projectile health here and not in projectile.dm, because we need not to all things what are using get_str_dam() becomes thin and weak. - //in general, bullets have 35-95 health, and they are plased in ~30 bullets magazines, so 50*30 = 150, but plasteel walls have only 400 hp =| - //but you may also increase materials thickness or etc. - proj_health = round(Proj.get_structure_damage() / 3)//Yo may replace 3 to 5-6 to make walls fucking stronk as a Poland - - //cap the amount of health, so that things like emitters can't destroy walls in one hit. - var/health_taken = 0 - if(Proj.nocap_structures) - health_taken = proj_health * 4 - else - health_taken = min(proj_health, 100) - - create_bullethole(Proj)//Potentially infinite bullet holes but most walls don't last long enough for this to be a problem. - - if(Proj.damage_types[BRUTE] && prob(health / maxHealth * 33)) - var/obj/item/trash/material/metal/slug = new(get_turf(Proj)) + take_damage(projectileDamage) + if(health < maxHealth * 0.4 && prob(projectileDamage)) + var/obj/item/trash/material/metal/slug = new(get_turf(hittingProjectile)) slug.matter.Cut() slug.matter[reinf_material ? reinf_material.name : material.name] = 0.1 - slug.throw_at(get_turf(Proj), 0, 1) + slug.throw_at(get_turf(hittingProjectile), 0, 1) - take_damage(health_taken) + hittingProjectile.on_hit(src) + return PROJECTILE_STOP /turf/simulated/wall/hitby(AM as mob|obj, var/speed=THROWFORCE_SPEED_DIVISOR) ..() @@ -403,7 +306,7 @@ O.anchored = TRUE O.density = TRUE O.layer = 5 - + thermite = FALSE take_damage((material.integrity*2.5) / material.heat_resistance) // thermite overkills steel immediately but not plasteel diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 5e244fdd9b..c0f80e02a0 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -3,6 +3,7 @@ name = "\proper space" icon_state = "0" dynamic_lighting = 0 + atomFlags = AF_PASS_AIMING_LEVEL plane = PLANE_SPACE layer = SPACE_LAYER @@ -18,6 +19,12 @@ update_starlight() ..() +/turf/space/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE + +/turf/space/take_damage(target_power, damage_type) + return TRUE + /turf/space/update_plane() return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 5c6b2ee76d..dc1968016b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -14,6 +14,8 @@ var/footstep_type + atomFlags = AF_PASS_AIMING_LEVEL + //Properties for airtight tiles (/wall) var/thermal_conductivity = 0.05 var/heat_capacity = 1 @@ -82,36 +84,38 @@ return TRUE /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) + if(mover.atomFlags & AF_VISUAL_MOVE) + return TRUE + ..() if (!mover || !isturf(mover.loc) || isobserver(mover)) - return 1 - + return TRUE //First, check objects to block exit that are not on the border for(var/obj/obstacle in mover.loc) if(!(obstacle.flags & ON_BORDER) && (mover != obstacle) && (forget != obstacle)) if(!obstacle.CheckExit(mover, src)) mover.Bump(obstacle, 1) - return 0 + return FALSE //Now, check objects to block exit that are on the border for(var/obj/border_obstacle in mover.loc) if((border_obstacle.flags & ON_BORDER) && (mover != border_obstacle) && (forget != border_obstacle)) if(!border_obstacle.CheckExit(mover, src)) mover.Bump(border_obstacle, 1) - return 0 + return FALSE //Next, check objects to block entry that are on the border for(var/obj/border_obstacle in src) if(border_obstacle.flags & ON_BORDER) if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle)) mover.Bump(border_obstacle, 1) - return 0 + return FALSE //Then, check the turf itself if (!src.CanPass(mover, src)) mover.Bump(src, 1) - return 0 + return FALSE //Finally, check objects/mobs to block entry that are not on the border for(var/atom/movable/obstacle in src) @@ -119,7 +123,7 @@ if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle)) mover.Bump(obstacle, 1) return 0 - return 1 //Nothing found to block so return success! + return TRUE //Nothing found to block so return success! var/const/enterloopsanity = 100 /turf/Entered(atom/atom as mob|obj) @@ -139,7 +143,7 @@ var/const/enterloopsanity = 100 A.HasProximity(thing, 1) if ((thing && A) && (thing.flags & PROXMOVE)) thing.HasProximity(A, 1) - return + /turf/proc/adjacent_fire_act(turf/simulated/floor/source, temperature, volume) return diff --git a/code/global.dm b/code/global.dm index 0fed59b2ac..3adaaa9790 100644 --- a/code/global.dm +++ b/code/global.dm @@ -116,7 +116,7 @@ var/static/list/scarySounds = list( var/max_explosion_range = 14 // Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. -var/global/obj/item/device/radio/intercom/global_announcer = new(null) +var/global/obj/item/device/radio/intercom/internal/global_announcer = new(null) var/global/list/mob/living/carbon/human/krabin_linked = list() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6092da0d49..9664a5c1bc 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1189,18 +1189,3 @@ ADMIN_VERB_ADD(/datum/admins/proc/paralyze_mob, R_ADMIN, FALSE) return 0 return 1 return 0 - -ADMIN_VERB_ADD(/datum/admins/proc/z_level_shooting, R_SERVER, FALSE) -/datum/admins/proc/z_level_shooting() - set category = "Server" - set name = "Toggle shooting between z-levels" - - if(!check_rights(R_ADMIN)) - return - - config.z_level_shooting = !(config.z_level_shooting) - if (config.z_level_shooting) - to_chat(world, "Shooting between z-levels has been globally enabled! Use the lookup verb to shoot up, click on empty spaces to shoot down!") - else - to_chat(world, "Shooting between z-levels has been globally disabled!") - log_and_message_admins("toggled z_level_shooting.") diff --git a/code/modules/client/preferences_toggle.dm b/code/modules/client/preferences_toggle.dm index aa40f96392..2cb58008cc 100644 --- a/code/modules/client/preferences_toggle.dm +++ b/code/modules/client/preferences_toggle.dm @@ -36,7 +36,6 @@ var/list/client_preference_stats_ /stat_client_preference parent_type = /atom/movable - simulated = FALSE var/datum/client_preference/client_preference /stat_client_preference/New(var/loc, var/preference) diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index a874c74dad..35b762f8a1 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -421,14 +421,8 @@ reflectchance /= 1.5 if(P.starting && prob(reflectchance)) visible_message(SPAN_DANGER("\The [user]\'s [name] reflects [attack_text]!")) - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(user) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, user) + P.dataRef.angle += rand(25,50) * sign(rand(-1,1)) + P.dataRef.updatePathByAngle() return PROJECTILE_FORCE_MISS_SILENCED // complete projectile permutation diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index a0b5cbab47..e432c5d11a 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -423,14 +423,8 @@ reflectchance /= 2 if(P.starting && prob(reflectchance)) visible_message(SPAN_DANGER("\The [user]'s [src.name] reflects [attack_text]!")) - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(user) - - // redirect the projectile - P.redirect(new_x, new_y, curloc, user) + P.dataRef.angle += rand(25,50) * sign(rand(-1,1)) + P.dataRef.updatePathByAngle() return PROJECTILE_CONTINUE // complete projectile permutation diff --git a/code/modules/dungeons/asteroid.dm b/code/modules/dungeons/asteroid.dm index d89bcd5563..9899e99440 100644 --- a/code/modules/dungeons/asteroid.dm +++ b/code/modules/dungeons/asteroid.dm @@ -167,7 +167,6 @@ alpha = 120 anchored = TRUE unacidable = 1 - simulated = FALSE invisibility = 101 var/delay = 2 diff --git a/code/modules/dungeons/crawler/dungeon_gen.dm b/code/modules/dungeons/crawler/dungeon_gen.dm index 20aa1894b1..33f677cb7e 100644 --- a/code/modules/dungeons/crawler/dungeon_gen.dm +++ b/code/modules/dungeons/crawler/dungeon_gen.dm @@ -6,7 +6,6 @@ alpha = 120 anchored = TRUE unacidable = 1 - simulated = FALSE invisibility = 101 weight = 0 var/max_x = 8 //if we ever make more than 4x4 dungeon run map, instead of making new procs for generation, we can just edit those vars - edit 16 x 16 diff --git a/code/modules/dungeons/junk_tractor_beam.dm b/code/modules/dungeons/junk_tractor_beam.dm index b2165e5d03..5f99c4690e 100644 --- a/code/modules/dungeons/junk_tractor_beam.dm +++ b/code/modules/dungeons/junk_tractor_beam.dm @@ -50,7 +50,6 @@ alpha = 120 anchored = TRUE unacidable = 1 - simulated = FALSE invisibility = 101 var/delay = 2 diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 7df3bb3d58..ea80f267bc 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -20,6 +20,7 @@ log transactions anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 10 + atomFlags = AF_WALL_MOUNTED var/datum/money_account/authenticated_account var/number_incorrect_tries = 0 var/previous_account_number = 0 diff --git a/code/modules/hivemind/machines.dm b/code/modules/hivemind/machines.dm index 97e441778c..623035fb81 100755 --- a/code/modules/hivemind/machines.dm +++ b/code/modules/hivemind/machines.dm @@ -253,7 +253,7 @@ set_light(2, 3, illumination_color) -/obj/machinery/hivemind_machine/bullet_act(obj/item/projectile/Proj) +/obj/machinery/hivemind_machine/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) take_damage(Proj.get_structure_damage()) if(istype(Proj, /obj/item/projectile/ion)) Proj.on_hit(loc) diff --git a/code/modules/holomap/holomap.dm b/code/modules/holomap/holomap.dm index 6d61c53172..1579d54f0d 100644 --- a/code/modules/holomap/holomap.dm +++ b/code/modules/holomap/holomap.dm @@ -11,6 +11,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 80 active_power_usage = 3000 + atomFlags = AF_WALL_MOUNTED var/use_auto_lights = 1 var/light_power_on = 1 diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 028aa4acde..799f25ffcf 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -156,7 +156,7 @@ T?.levelupdate() update_icon() -/obj/machinery/portable_atmospherics/hydroponics/bullet_act(obj/item/projectile/Proj) +/obj/machinery/portable_atmospherics/hydroponics/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) //Don't act on seeds like dionaea that shouldn't change. if(seed && seed.get_trait(TRAIT_IMMUTABLE) > 0) return diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index adfd42f7d8..46fdc0aee7 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -9,15 +9,19 @@ layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING - simulated = FALSE anchored = TRUE blend_mode = BLEND_OVERLAY weight = 0 + atomFlags = AF_IGNORE_ON_BULLETSCAN | AF_EXPLOSION_IGNORANT + var/needs_update = FALSE +/// More efficient to have the proc return bullet_continue ,avoiding another check for every object on a turf SPCR 2024 +/atom/movable/lighting_overlay/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE /atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) . = ..() diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index 3db0080bc5..d6d283ab8d 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -265,7 +265,7 @@ if(CATAPULT_SINGLE) if(!locked) var/atom/movable/AM = target - if(!istype(AM) || AM.anchored || !AM.simulated) + if(!istype(AM) || AM.anchored) to_chat(user, SPAN_NOTICE("Unable to lock on [target].")) return locked = AM @@ -292,7 +292,7 @@ else atoms = orange(target,3) for(var/atom/movable/A in atoms) - if(A.anchored || !A.simulated) continue + if(A.anchored) continue var/dist = 5-get_dist(A,target) A.throw_at(get_edge_target_turf(A,get_dir(target, A)),dist,0.7) diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index 0098887f4b..adf7956040 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -100,7 +100,7 @@ A = null while(LAZYLEN(other_atoms)) var/atom/picked = pick_n_take(other_atoms) - if(istype(picked) && picked.simulated) + if(istype(picked)) A = picked break if(!A) diff --git a/code/modules/mining/drilling/cave_generator.dm b/code/modules/mining/drilling/cave_generator.dm index ede16cd8cc..710d6ed4de 100644 --- a/code/modules/mining/drilling/cave_generator.dm +++ b/code/modules/mining/drilling/cave_generator.dm @@ -38,7 +38,6 @@ alpha = 120 anchored = TRUE unacidable = 1 - simulated = FALSE invisibility = 0 // 101 var/status = CAVE_CLOSED // Status of the cave generator diff --git a/code/modules/mining/drilling/deep_drill.dm b/code/modules/mining/drilling/deep_drill.dm index 9e17940ec9..729e64b6ff 100644 --- a/code/modules/mining/drilling/deep_drill.dm +++ b/code/modules/mining/drilling/deep_drill.dm @@ -384,7 +384,7 @@ take_damage(damage) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN * 1.5) -/obj/machinery/mining/deep_drill/bullet_act(obj/item/projectile/Proj) +/obj/machinery/mining/deep_drill/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) ..() var/damage = Proj.get_structure_damage() take_damage(damage) diff --git a/code/modules/mining/drilling/golem_burrow.dm b/code/modules/mining/drilling/golem_burrow.dm index 6435ce2c71..31273e2821 100644 --- a/code/modules/mining/drilling/golem_burrow.dm +++ b/code/modules/mining/drilling/golem_burrow.dm @@ -8,7 +8,7 @@ maxHealth = 50 health = 50 - explosion_coverage = 0.3 + explosionCoverage = 0.3 var/datum/golem_controller/controller /obj/structure/golem_burrow/New(loc, parent) @@ -41,14 +41,14 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN * 1.5) return TRUE -/obj/structure/golem_burrow/bullet_act(obj/item/projectile/Proj) +/obj/structure/golem_burrow/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) ..() // Bullet not really efficient against a pile of rock take_damage(Proj.get_structure_damage() * 0.25) /obj/structure/golem_burrow/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage health = min(max(health - damage, 0), maxHealth) if(health == 0) qdel(src) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 2098b0406e..861f3255ae 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -51,7 +51,7 @@ mined_ore = 1 GetDrilled() -/turf/simulated/mineral/bullet_act(var/obj/item/projectile/Proj) +/turf/simulated/mineral/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) // Emitter blasts if(istype(Proj, /obj/item/projectile/beam/emitter)) diff --git a/code/modules/mining/mining_turret.dm b/code/modules/mining/mining_turret.dm index 5f3e27d43a..3d3060a520 100644 --- a/code/modules/mining/mining_turret.dm +++ b/code/modules/mining/mining_turret.dm @@ -70,10 +70,10 @@ if(L.invisibility >= INVISIBILITY_LEVEL_ONE) return TURRET_NOT_TARGET - if(get_dist(src, L) > 7) + if(get_dist(src, L) > 12) return TURRET_NOT_TARGET - if(!check_trajectory(L, src)) + if(!check_trajectory(list(x,y,z), list(L.x, L.y, L.z),null,null, L)) return TURRET_NOT_TARGET if(emagged) // If emagged not even the dead get a rest diff --git a/code/modules/mob/inventory/slots.dm b/code/modules/mob/inventory/slots.dm index c6926434e6..3c3bc63cf8 100644 --- a/code/modules/mob/inventory/slots.dm +++ b/code/modules/mob/inventory/slots.dm @@ -248,7 +248,7 @@ /datum/inventory_slot/in_backpack/can_equip(obj/item/I, mob/living/carbon/human/owner, disable_warning) var/obj/item/storage/back = owner.get_equipped_item(slot_back) - return istype(back) && back.can_be_inserted(src,1) + return istype(back) && back.can_be_inserted(I,1) /datum/inventory_slot/accessory diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6227fe86dc..7ee675ff82 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -6,12 +6,14 @@ icon_state = "body_m_s" /// everyone is 65 KGs weight = 65000 + hitbox = /datum/hitboxDatum/mob/human var/list/hud_list[10] var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_lying_buckled_and_verb_status() call. var/using_scope // This is not very good either, because I've copied it. Sorry. + /mob/living/carbon/human/Initialize(new_loc, new_species) hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100", ON_MOB_HUD_LAYER) hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy", ON_MOB_HUD_LAYER) @@ -1408,7 +1410,7 @@ var/list/rank_prefix = list(\ reset_view(A) /mob/living/carbon/human/proc/resuscitate() - + var/obj/item/organ/internal/vital/heart_organ = random_organ_by_process(OP_HEART) var/obj/item/organ/internal/vital/brain_organ = random_organ_by_process(BP_BRAIN) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d49f92af2e..c04d3fd0f0 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -7,7 +7,19 @@ meteor_act */ -/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) +/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + // HB_AIMED is not accounted for since that just means not modifying def zone + switch(hitboxFlags) + if(HB_HEAD) + def_zone = BP_HEAD + if(HB_CHESTARMS) + if(!(def_zone in list(BP_L_ARM, BP_R_ARM, BP_CHEST))) + def_zone = pick(list(BP_L_ARM, BP_R_ARM, BP_CHEST)) + if(HB_GROIN) + def_zone = BP_GROIN + if(HB_LEGS) + if(!(def_zone in list(BP_L_LEG, BP_R_LEG))) + def_zone = pick(BP_L_LEG, BP_R_LEG) def_zone = check_zone(def_zone) if(!has_organ(def_zone)) return PROJECTILE_FORCE_MISS //if they don't have the organ in question then the projectile just passes by. @@ -22,7 +34,7 @@ meteor_act return shield_check else P.on_hit(src, def_zone) - return 2 + return PROJECTILE_STOP //Checking absorb for spawning shrapnel .=..(P , def_zone) @@ -44,6 +56,8 @@ meteor_act return PROJECTILE_CONTINUE else return PROJECTILE_STOP + return PROJECTILE_STOP + diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 84ba83eee7..48fb6a8a1c 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -41,23 +41,6 @@ if(blocking) tally += 1 - if(recoil) - var/obj/item/gun/GA = get_active_hand() - var/obj/item/gun/GI = get_inactive_hand() - - var/brace_recoil = 0 - if(istype(GA)) - var/datum/recoil/R = GA.recoil - brace_recoil = R.getRating(RECOIL_TWOHAND) - if(istype(GI)) - var/datum/recoil/R = GI.recoil - brace_recoil = max(brace_recoil, R.getRating(RECOIL_TWOHAND)) - - if(brace_recoil) - tally += CLAMP(round(recoil) / (60 / brace_recoil), 0, 8) // Scales with the size of the gun - bigger guns slow you more - else - tally += CLAMP(round(recoil) / 20, 0, 8) // Lowest possible while holding a gun - var/obj/item/implant/core_implant/cruciform/C = get_core_implant(/obj/item/implant/core_implant/cruciform) if(C && C.active) var/obj/item/cruciform_upgrade/upgrade = C.upgrade diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index bc7636e70c..66cbea63cd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -839,8 +839,7 @@ if(client || sleeping > 3) AdjustSleeping(-1) if( prob(2) && health) - spawn(0) - emote("snore") + emote("snore") //CONSCIOUS else stat = CONSCIOUS diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index a38688a38e..6f1811bb5e 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -179,7 +179,7 @@ ..(-abs(amount)) // Heals them return -/mob/living/carbon/slime/bullet_act(var/obj/item/projectile/Proj) +/mob/living/carbon/slime/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) attacked += 10 ..(Proj) return 0 diff --git a/code/modules/mob/living/carbon/superior_animal/defense.dm b/code/modules/mob/living/carbon/superior_animal/defense.dm index 92aa6ee533..40895b86bc 100644 --- a/code/modules/mob/living/carbon/superior_animal/defense.dm +++ b/code/modules/mob/living/carbon/superior_animal/defense.dm @@ -20,7 +20,7 @@ check_AI_act() -/mob/living/carbon/superior_animal/bullet_act(obj/item/projectile/P, def_zone) +/mob/living/carbon/superior_animal/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) . = ..() updatehealth() diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm index 3fe0fccf47..63e7757130 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm @@ -29,7 +29,7 @@ return -/mob/living/carbon/superior_animal/roach/benzin/bullet_act(obj/item/projectile/P, def_zone) +/mob/living/carbon/superior_animal/roach/benzin/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) . = ..() if(prob(80)) explosion(get_turf(src), -1, -1, 2, 3) diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm index 5a3f06a049..344599b076 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm @@ -68,7 +68,7 @@ return FALSE . = ..() -/mob/living/carbon/superior_animal/roach/bluespace/bullet_act(obj/item/projectile/P, def_zone) +/mob/living/carbon/superior_animal/roach/bluespace/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) if(prob(change_tele_to_mob)) var/source = src if(target_mob) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 8caa11f856..dca97fa09b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -154,16 +154,6 @@ armorType defines the armorType that will block all the damTypes that it has ass if (P.is_hot() >= HEAT_MOBIGNITE_THRESHOLD) IgniteMob() - if(config.z_level_shooting && P.height) // If the bullet came from above or below, limit what bodyparts can be hit for consistency - if(resting || lying) - return PROJECTILE_CONTINUE // Bullet flies overhead - - switch(P.height) - if(HEIGHT_HIGH) - def_zone_hit = pick(list(BP_CHEST, BP_HEAD, BP_L_ARM, BP_R_ARM)) - if(HEIGHT_LOW) - def_zone_hit = pick(list(BP_CHEST, BP_GROIN, BP_L_LEG, BP_R_LEG)) - //Being hit while using a deadman switch if(istype(get_active_hand(),/obj/item/device/assembly/signaler)) var/obj/item/device/assembly/signaler/signaler = get_active_hand() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 70969f4225..984b13a86b 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -513,7 +513,7 @@ /mob/living/silicon/robot/restrained() return FALSE -/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj) +/mob/living/silicon/robot/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(HasTrait(CYBORG_TRAIT_DEFLECTIVE_BALLISTIC_ARMOR) && istype(Proj, /obj/item/projectile/bullet)) var/chance = 90 if(ishuman(Proj.firer)) @@ -523,12 +523,8 @@ chance = max((chance - B.armor_divisor * 10), 0) if(B.starting && prob(chance)) visible_message(SPAN_DANGER("\The [Proj.name] ricochets off [src]\'s armour!")) - var/multiplier = round(10 / get_dist(B.starting, src)) - var/turf/sourceloc = get_turf_away_from_target_complex(src, B.starting, multiplier) - var/distance = get_dist(sourceloc, src) - var/new_x = sourceloc.x + ( rand(0, distance) * prob(50) ? -1 : 1 ) - var/new_y = sourceloc.y + ( rand(0, distance) * prob(50) ? -1 : 1 ) - B.redirect(new_x, new_y, get_turf(src), src) + B.dataRef.angle += rand(25,50) * sign(rand(-1,1)) + B.dataRef.updatePathByAngle() return PROJECTILE_CONTINUE // complete projectile permutation ..(Proj) if(prob(75) && Proj.get_structure_damage() > 0) spark_system.start() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 4c90eba377..9d80dbe28f 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -115,7 +115,7 @@ /mob/living/silicon/IsAdvancedToolUser() return 1 -/mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) +/mob/living/silicon/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if (Proj.is_hot() >= HEAT_MOBIGNITE_THRESHOLD) IgniteMob() diff --git a/code/modules/mob/living/silicon/subsystems.dm b/code/modules/mob/living/silicon/subsystems.dm index 4cbae9ef8d..e0c2a8b436 100644 --- a/code/modules/mob/living/silicon/subsystems.dm +++ b/code/modules/mob/living/silicon/subsystems.dm @@ -114,7 +114,6 @@ /stat_silicon_subsystem parent_type = /atom/movable - simulated = FALSE var/ui_state var/datum/nano_module/subsystem diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index d7c396fa4f..ee4fac9738 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -127,9 +127,9 @@ return set_flee_target(get_turf(src)) -/mob/living/simple_animal/cat/bullet_act(var/obj/item/projectile/proj) +/mob/living/simple_animal/cat/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) . = ..() - set_flee_target(proj.firer? proj.firer : src.loc) + set_flee_target(Proj.firer? Proj.firer : src.loc) /mob/living/simple_animal/cat/hitby(atom/movable/AM) . = ..() @@ -367,7 +367,7 @@ var/cat_number = 0 /mob/living/simple_animal/cat/runtime/set_flee_target(atom/A) return -/mob/living/simple_animal/cat/runtime/bullet_act(var/obj/item/projectile/proj) +/mob/living/simple_animal/cat/runtime/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) return PROJECTILE_FORCE_MISS /mob/living/simple_animal/cat/runtime/explosion_act(target_power) diff --git a/code/modules/mob/living/simple_animal/friendly/iriska.dm b/code/modules/mob/living/simple_animal/friendly/iriska.dm index 8e98064973..490557fb7c 100644 --- a/code/modules/mob/living/simple_animal/friendly/iriska.dm +++ b/code/modules/mob/living/simple_animal/friendly/iriska.dm @@ -156,9 +156,9 @@ var/list/despised = list() if((M.a_intent == I_HELP) && (M in tolerated)) if(prob(15)) say("PRRRR") -/mob/living/simple_animal/iriska/bullet_act(var/obj/item/projectile/proj) +/mob/living/simple_animal/iriska/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) . = ..() - despise(proj.firer) + despise(Proj.firer) /mob/living/simple_animal/iriska/hitby(atom/movable/AM) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 62923a730a..bbd75dfdfc 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -207,23 +207,26 @@ var/list/mydirs = list(NORTH, SOUTH, EAST, WEST, SOUTHWEST, NORTHWEST, NORTHEAST DestroySurroundings() AttackTarget() +/// Rewrite of rapid fire to not use spawn() , meant to be temporary till we get a more generalized system coded in +/// But this is SS13 so that probs won't happen soon unless i give enough of a fuck about it SPCR-2024 +/mob/living/simple_animal/hostile/proc/rapidLoop(delay, repeatsLeft) + if(QDELETED(src) || QDELETED(target_mob)) + return + Shoot(target_mob, loc , src) + if(casingtype) + new casingtype(get_turf(src)) + repeatsLeft-- + if(!repeatsLeft) + return + addtimer(CALLBACK(src, PROC_REF(rapidLoop), delay, repeatsLeft), delay) + + /mob/living/simple_animal/hostile/proc/OpenFire(target_mob) var/target = target_mob visible_message("\red [src] [fire_verb] at [target]!", 1) if(rapid) - spawn(1) - Shoot(target, loc, src) - if(casingtype) - new casingtype(get_turf(src)) - spawn(4) - Shoot(target, loc, src) - if(casingtype) - new casingtype(get_turf(src)) - spawn(6) - Shoot(target, loc, src) - if(casingtype) - new casingtype(get_turf(src)) + rapidLoop(target, 0.2 SECONDS, 3) else Shoot(target, loc, src) if(casingtype) @@ -231,11 +234,12 @@ var/list/mydirs = list(NORTH, SOUTH, EAST, WEST, SOUTHWEST, NORTHWEST, NORTHEAST stance = HOSTILE_STANCE_IDLE target_mob = null - return /mob/living/simple_animal/hostile/proc/Shoot(var/target, var/start, var/user, var/bullet = 0) if(target == start) return + if(!target) + return var/obj/item/projectile/A = new projectiletype(user:loc) playsound(user, projectilesound, 100, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/stranger.dm b/code/modules/mob/living/simple_animal/hostile/stranger.dm index d0969586ab..90f4372760 100644 --- a/code/modules/mob/living/simple_animal/hostile/stranger.dm +++ b/code/modules/mob/living/simple_animal/hostile/stranger.dm @@ -95,7 +95,7 @@ return FALSE . = ..() -/mob/living/simple_animal/hostile/stranger/bullet_act(obj/item/projectile/P, def_zone) +/mob/living/simple_animal/hostile/stranger/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) if(prob(prob_tele)) var/source = src if(target_mob) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 9a723a3e4f..b6926dcca5 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -70,7 +70,7 @@ visible_message("\red [user] gently taps [src] with the [O]. ") -/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(var/obj/item/projectile/Proj) +/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(!Proj) return if(prob(65)) ..() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index d96a8809d7..85c9a3e3f5 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -246,7 +246,7 @@ return //Bullets -/mob/living/simple_animal/parrot/bullet_act(var/obj/item/projectile/Proj) +/mob/living/simple_animal/parrot/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) ..() if(!stat && !client) if(parrot_state == PARROT_PERCH) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 6a24009c24..885846c898 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -328,7 +328,7 @@ /mob/living/simple_animal/gib() ..(icon_gib,1) -/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) +/mob/living/simple_animal/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(!Proj) return diff --git a/code/modules/mob/observer/observer.dm b/code/modules/mob/observer/observer.dm index 18bdd349b9..fa618684ae 100644 --- a/code/modules/mob/observer/observer.dm +++ b/code/modules/mob/observer/observer.dm @@ -9,7 +9,6 @@ var/const/GHOST_IMAGE_ALL = ~GHOST_IMAGE_NONE layer = FLY_LAYER see_invisible = SEE_INVISIBLE_OBSERVER sight = SEE_TURFS|SEE_MOBS|SEE_OBJS|SEE_SELF - simulated = FALSE stat = DEAD status_flags = GODMODE var/ghost_image_flag = GHOST_IMAGE_DARKNESS diff --git a/code/modules/modular_computers/computers/modular_computer/damage.dm b/code/modules/modular_computers/computers/modular_computer/damage.dm index 93b86e0a21..0d730614f1 100644 --- a/code/modules/modular_computers/computers/modular_computer/damage.dm +++ b/code/modules/modular_computers/computers/modular_computer/damage.dm @@ -49,7 +49,7 @@ // "Stun" weapons can cause minor damage to components (short-circuits?) // "Burn" damage is equally strong against internal components and exterior casing // "Brute" damage mostly damages the casing. -/obj/item/modular_computer/bullet_act(var/obj/item/projectile/P) +/obj/item/modular_computer/bullet_act(obj/item/projectile/P, defZone, hitboxFlags) var/dam = P.getAllDamType(BRUTE) take_damage(dam, dam/2) dam = P.getAllDamType(BURN) diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm index c06962d0c7..bc86f7910b 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_console.dm @@ -17,6 +17,7 @@ max_damage = 300 broken_damage = 150 spawn_tags = SPAWN_TAG_MACHINERY + hitbox = /datum/hitboxDatum/atom/modularConsole /obj/item/modular_computer/console/CouldUseTopic(mob/user) ..() diff --git a/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm b/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm index 0e3e0b0190..4c0e603db6 100644 --- a/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm +++ b/code/modules/modular_computers/hardware/scanners/scanner_atmos.dm @@ -1,14 +1,12 @@ /obj/item/computer_hardware/scanner/atmos name = "atmospheric scanner module" desc = "An atmospheric scanner module. It can scan the surroundings and report the composition of gases." - can_run_scan = 1 + can_run_scan = TRUE /obj/item/computer_hardware/scanner/atmos/can_use_scanner(mob/user, atom/target, proximity = TRUE) if(!..()) - return 0 - if(!target.simulated) - return 0 - return 1 + return FALSE + return TRUE /obj/item/computer_hardware/scanner/atmos/run_scan(mob/user, datum/computer_file/program/scanner/program) if(..()) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 155537e780..fc06fc7017 100755 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -50,6 +50,9 @@ see multiz/movement.dm for some info. var/tmp/list/climbers = list() +/turf/simulated/open/take_damage(target_power, damage_type) + return TRUE + /turf/simulated/open/New() icon_state = "transparentclickable" ..() @@ -107,16 +110,6 @@ see multiz/movement.dm for some info. /turf/simulated/open/fallThrough(var/atom/movable/mover) - // If the target is open space or a shadow, the projectile traverses down - if( config.z_level_shooting && istype(mover,/obj/item/projectile) ) - var/obj/item/projectile/P = mover - if(isnull(P.height) && ( istype(P.original, /turf/simulated/open) || (istype(mover, /mob/shadow)) ) && get_dist(P.starting, P.original) <= get_dist(P.starting, src)) - P.Move(below) // We want proc/Enter to get called on the turf, so we can't use forceMove() - P.trajectory.loc_z = below.z - P.bumped = FALSE - P.height = HEIGHT_LOW // We are shooting from above, this protects windows from damage - return // We are done here - for(var/atom/A in contents) if(A.can_prevent_fall(FALSE, mover)) return diff --git a/code/modules/onestar/os_turret.dm b/code/modules/onestar/os_turret.dm index bf34c113dd..8a8d838a24 100644 --- a/code/modules/onestar/os_turret.dm +++ b/code/modules/onestar/os_turret.dm @@ -95,7 +95,7 @@ if(L.invisibility >= INVISIBILITY_LEVEL_ONE) // Cannot see him. see_invisible is a mob-var continue - if(!check_trajectory(L, src)) //check if we have true line of sight + if(!check_trajectory(list(x,y,z), list(L.x, L.y, L.z),null,null, L)) //check if we have true line of sight continue if(!nearest_valid_target) @@ -136,21 +136,21 @@ stat |= EMPED emp_timer_id = addtimer(CALLBACK(src, PROC_REF(emp_off)), emp_cooldown, TIMER_STOPPABLE) -/obj/machinery/power/os_turret/bullet_act(obj/item/projectile/proj) - var/damage = proj.get_structure_damage() +/obj/machinery/power/os_turret/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) + var/damage = Proj.get_structure_damage() if(!damage) - if(istype(proj, /obj/item/projectile/ion)) - proj.on_hit(loc) + if(istype(Proj, /obj/item/projectile/ion)) + Proj.on_hit(loc) return ..() - take_damage(damage*proj.structure_damage_factor) + take_damage(damage*Proj.structure_damage_factor) if(!returning_fire && !stat) returning_fire = TRUE - var/turf/proj_start_turf = proj.starting + var/turf/proj_start_turf = Proj.starting for(var/obj in proj_start_turf.contents) if(istype(obj, /obj/machinery/power/os_turret)) return // Don't shoot other turrets diff --git a/code/modules/organs/internal/carrion.dm b/code/modules/organs/internal/carrion.dm index 2798d04a58..acfaf1d611 100644 --- a/code/modules/organs/internal/carrion.dm +++ b/code/modules/organs/internal/carrion.dm @@ -592,7 +592,7 @@ visible_message(SPAN_WARNING("\The [src] bursts open!")) qdel(src) -/obj/structure/spider_nest/bullet_act(obj/item/projectile/P, def_zone) +/obj/structure/spider_nest/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) playsound(loc, 'sound/voice/shriek1.ogg', 85, 1, 8, 8) spawn_spider() visible_message(SPAN_WARNING("[src] bursts open!")) diff --git a/code/modules/overmap/_defines.dm b/code/modules/overmap/_defines.dm index bfabebd56f..f9dc03db97 100644 --- a/code/modules/overmap/_defines.dm +++ b/code/modules/overmap/_defines.dm @@ -49,7 +49,7 @@ var/global/list/map_sectors = list() for(var/turf/space/T in spaceturfs) T.icon_state = "speedspace_[gen_dir]_[rand(1,15)]" for(var/atom/movable/AM in T) - if (AM.simulated && !AM.anchored) + if (!AM.anchored) AM.throw_at(get_step(T,reverse_direction(direction)), 5, 1) CHECK_TICK CHECK_TICK diff --git a/code/modules/overmap/exoplanets/helpers.dm b/code/modules/overmap/exoplanets/helpers.dm index 2f115dd7ab..cec4ac18e6 100644 --- a/code/modules/overmap/exoplanets/helpers.dm +++ b/code/modules/overmap/exoplanets/helpers.dm @@ -126,7 +126,6 @@ GLOBAL_LIST_EMPTY(banned_ruin_ids) icon_state = "x2" anchored = 1.0 unacidable = 1 - simulated = 0 invisibility = 101 var/delete_me = 0 @@ -153,7 +152,7 @@ GLOBAL_LIST_EMPTY(banned_ruin_ids) /obj/effect/landmark/ruin/automatic/clearing/New(loc, my_ruin_template, ruin_radius) . = ..(loc, my_ruin_template) - radius = ruin_radius + radius = ruin_radius /obj/effect/landmark/ruin/automatic/clearing/Initialize() ..() diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm index 13deb3e877..956fb1fa5d 100644 --- a/code/modules/overmap/ships/computers/sensors.dm +++ b/code/modules/overmap/ships/computers/sensors.dm @@ -167,7 +167,7 @@ description += "\The [src] shows signs of damage!" ..(user, afterDesc = description) -/obj/machinery/shipsensors/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/shipsensors/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) take_damage(Proj.get_structure_damage()) ..() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index bfa6a51225..279cd38153 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -9,6 +9,7 @@ idle_power_usage = 30 active_power_usage = 200 power_channel = STATIC_EQUIP + hitbox = /datum/hitboxDatum/atom/photocopier var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 4c3de8177b..de13e7cedc 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -93,7 +93,7 @@ check_stability() return 0 -/obj/machinery/am_shielding/bullet_act(obj/item/projectile/Proj) +/obj/machinery/am_shielding/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(Proj.check_armour != ARMOR_BULLET) stability -= dhTotalDamageStrict(Proj.melleDamages, ALL_ARMOR, list(BRUTE,BURN))/2 return FALSE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 52b6814685..f9b4d70ead 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -71,6 +71,8 @@ anchored = TRUE use_power = NO_POWER_USE req_access = list(access_engine_equip) + hitbox = /datum/hitboxDatum/atom/areaPowerController + atomFlags = AF_WALL_MOUNTED var/need_sound var/area/area var/areastring @@ -90,7 +92,6 @@ var/locked = 1 var/coverlocked = 1 var/aidisabled = 0 - var/tdir = null var/obj/machinery/power/terminal/terminal var/lastused_light = 0 var/lastused_equip = 0 @@ -119,8 +120,6 @@ var/global/list/status_overlays_equipment var/global/list/status_overlays_lighting var/global/list/status_overlays_environ - /// Offsets the object by APC_PIXEL_OFFSET (defined in apc_defines.dm) pixels in the direction we want it placed in. This allows the APC to be embedded in a wall, yet still inside an area (like mapping). - var/offset_old /obj/machinery/power/apc/updateDialog() if (stat & (BROKEN|MAINT)) @@ -182,23 +181,18 @@ addtimer(CALLBACK(src, PROC_REF(update)), 5) set_dir(ndir) - /* +/obj/machinery/power/apc/set_dir() + . = ..() switch(dir) - if(NORTH) - offset_old = pixel_y - pixel_y = 28 if(SOUTH) - offset_old = pixel_y + pixel_y = 28 + if(NORTH) pixel_y = -28 - if(EAST) - offset_old = pixel_x - pixel_x = 28 if(WEST) - offset_old = pixel_x + pixel_x = 28 + if(EAST) pixel_x = -28 - */ - tdir = dir // to fix Vars bug /obj/machinery/power/apc/Initialize(mapload) . = ..() @@ -299,7 +293,7 @@ /obj/machinery/power/apc/update_icon() var/matrix/trans = matrix() - trans.Turn(dir2angle(dir)) + trans.Turn(dir2angle(dir) + 180) transform = trans if (!status_overlays) status_overlays = 1 @@ -470,9 +464,8 @@ if(!updating_icon) updating_icon = 1 // Start the update - spawn(APC_UPDATE_ICON_COOLDOWN) - update_icon() - updating_icon = 0 + update_icon() + updating_icon = 0 //attack with an item - open/close cover, insert cell, or (un)lock interface diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 805ac0c13f..eb389458c1 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -43,6 +43,7 @@ var/list/possible_cable_coil_colours = list( icon_state = "0-1" health = 20 maxHealth = 20 + hitbox = /datum/hitboxDatum/atom/polygon/powerCable var/d1 = 0 var/d2 = 1 color = COLOR_RED_LIGHT diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index a2f05f29a8..3d95469296 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -162,9 +162,11 @@ desc = "A lighting fixture." anchored = TRUE layer = WALL_OBJ_LAYER + hitbox = /datum/hitboxDatum/atom/fixtureLightTube use_power = ACTIVE_POWER_USE idle_power_usage = 2 active_power_usage = 20 + atomFlags = AF_WALL_MOUNTED power_channel = STATIC_LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = FALSE // 1 if on, 0 if off var/on_gs = 0 @@ -189,6 +191,7 @@ name = "floorlight fixture" base_state = "floortube" icon_state = "floortube1" + atomFlags = parent_type::atomFlags & ~AF_WALL_MOUNTED layer = 2.5 /obj/machinery/light/small @@ -198,6 +201,7 @@ brightness_range = 3 brightness_power = 1 desc = "A small lighting fixture." + hitbox = /datum/hitboxDatum/atom/fixtureBulb light_type = /obj/item/light/bulb /obj/machinery/light/small/autoattach diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index bc569b1e33..32c8d90a18 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -27,14 +27,13 @@ ..() /obj/singularity_act() - if(simulated) - explosion_act(1000, null) - if(src) - qdel(src) - return 2 + explosion_act(1000, null) + if(!QDELETED(src)) + qdel(src) + return 2 /obj/singularity_pull(S, current_size) - if(simulated && !anchored) + if(!anchored) step_towards(src, S) /obj/effect/beam/singularity_pull() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 3df5a588ec..10ba54c279 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -154,7 +154,7 @@ field_generator power level display /obj/machinery/field_generator/emp_act() return 0 -/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/field_generator/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(istype(Proj, /obj/item/projectile/beam)) var/damage = Proj.getAllDamType(BURN) power += damage * EMITTER_DAMAGE_POWER_TRANSFER diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 0a25377d5b..97dd6c3137 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -14,6 +14,7 @@ density = TRUE anchored = TRUE use_power = NO_POWER_USE + hitbox = /datum/hitboxDatum/atom/smes var/capacity = 5e6 // maximum charge var/charge = 1e6 // actual charge diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 41d9e6c882..f14ef2b06b 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -281,7 +281,7 @@ return 1 -/obj/machinery/power/supermatter/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/power/supermatter/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/turf/L = loc if(!istype(L)) // We don't run process() when we are in space return 0 // This stops people from being able to really power up the supermatter diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 04d546ec4e..81644ee5d6 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -339,6 +339,13 @@ sprite_max_rotate = 22 sprite_scale = 0.75 +/obj/item/ammo_casing/shotgun/newBuckshot + name = "12 Gauge buckshot" + desc = "A container filled with 16 pellets of 12 Gauge" + caliber = CAL_SHOTGUN + projectile_type = /obj/item/projectile/bullet/shotgunBuckshot + maxamount = 5 + /obj/item/ammo_casing/shotgun/prespawned amount = 5 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 169ee8b4e2..33a415c032 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -113,6 +113,15 @@ . = ..() +/obj/item/gun/debugging + name = "Big chun chun chungus big chungus" + +/obj/item/gun/debugging/afterattack(atom/A, mob/user) + if(!A) + return + + + /obj/item/gun/wield(mob/user) if(!wield_delay) ..() @@ -498,7 +507,7 @@ return 2 //just assume we can shoot through glass and stuff. No big deal, the player can just choose to not target someone //on the other side of a window if it makes a difference. Or if they run behind a window, too bad. - return check_trajectory(target, user) + return check_trajectory(list(user.x,user.y,user.z), list(target.x, target.y, target.z),null,null, target) //called if there was no projectile to shoot /obj/item/gun/proc/handle_click_empty(mob/user) @@ -607,8 +616,10 @@ if(params) P.set_clickpoint(params) + + var/list/paramList = params2list(params) var/offset = user.calculate_offset(init_offset_with_brace(user)) -/* + var/zOffset = offset/300 * sign(rand(-1,1)) var/remainder = offset % 4 offset /= 4 offset = round(offset) @@ -621,12 +632,11 @@ offset += roll(1,5) - 3 if(3) offset += roll(1,7) - 4 -*/ offset = round(offset) offset = roll(2, offset) - (offset + 1) - return !P.launch_from_gun(target, user, src, target_zone, angle_offset = offset) + return !P.launch_from_gun(target, user, src, target_zone, text2num(paramList["icon-x"]), text2num(paramList["icon-y"]), zOffset,offset) //Support proc for calculate_offset /obj/item/gun/proc/init_offset_with_brace(mob/living/user) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 80bb050a8f..53e8039244 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -8,6 +8,8 @@ twohanded = TRUE var/recentpumpmsg = 0 // Variable to prevent chat message spam var/fired_one_handed = FALSE + /// How much angle offset does our shotgun have? + var/angleOffset = 12 wield_delay = 0 SECOND wield_delay_factor = 0 @@ -17,6 +19,12 @@ fired_one_handed = TRUE return TRUE +/obj/item/gun/projectile/shotgun/process_projectile(obj/item/projectile/P, mob/living/user, atom/target, target_zone, params) + if(istype(P, /obj/item/projectile/bullet/shotgunBuckshot)) + var/obj/item/projectile/bullet/shotgunBuckshot/buck = P + buck.angleOffset = src.angleOffset + . = ..() + /obj/item/gun/projectile/shotgun/handle_post_fire(var/mob/living/user) ..() if(fired_one_handed) diff --git a/code/modules/projectiles/hitbox_datums.dm b/code/modules/projectiles/hitbox_datums.dm new file mode 100644 index 0000000000..5175a26634 --- /dev/null +++ b/code/modules/projectiles/hitbox_datums.dm @@ -0,0 +1,1030 @@ +GLOBAL_LIST_EMPTY(hitboxPrototypes) + +/hook/startup/proc/initializeHitboxes() + for(var/type in subtypesof(/datum/hitboxDatum)) + GLOB.hitboxPrototypes[type] = new type() + +/proc/getHitbox(path) + if(!GLOB.hitboxPrototypes[path]) + return null + return GLOB.hitboxPrototypes[path] + +/datum/hitboxDatum + var/list/boundingBoxes = list() + /// global offsets , applied to all bounding boxes equally + var/offsetX = 0 + var/offsetY = 0 + /// stores the median levels to aim when shooting at the owner. + var/list/medianLevels + /// converts the defZone argument to a specific level. + var/list/defZoneToLevel = list( + BP_EYES = HBF_USEMEDIAN, + BP_MOUTH = HBF_USEMEDIAN, + BP_HEAD = HBF_USEMEDIAN, + BP_CHEST = HBF_USEMEDIAN, + BP_L_LEG = HBF_USEMEDIAN, + BP_R_LEG = HBF_USEMEDIAN, + BP_GROIN = HBF_USEMEDIAN, + BP_R_ARM = HBF_USEMEDIAN, + BP_L_ARM = HBF_USEMEDIAN + ) + +/datum/hitboxDatum/proc/calculateAimingLevels() + var/median + var/volumeSum + var/calculatedVolume = 0 + // dont bother calculating if already defined. + if(length(medianLevels)) + return + medianLevels = list() + for(var/direction in list(NORTH, SOUTH, EAST , WEST)) + median = 0 + volumeSum = 0 + for(var/list/boundingBox in boundingBoxes["[direction]"]) + calculatedVolume = (boundingBox[4] - boundingBox[2]) * (boundingBox[3] - boundingBox[1]) + median += ((boundingBox[5] + boundingBox[6])/2) * calculatedVolume + volumeSum += calculatedVolume + if(volumeSum == 0) + medianLevels["[direction]"] = LEVEL_TABLE + else + medianLevels["[direction]"] = median / volumeSum + +/datum/hitboxDatum/New() + . = ..() + calculateAimingLevels() + +/// this can be optimized further by making the calculations not make a new list , and instead be added when checking line intersection - SPCR 2024 +/datum/hitboxDatum/proc/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + +/datum/hitboxDatum/proc/getAimingLevel(atom/shooter, defZone, atom/owner) + + +/* +boolean lineLine(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { + + + // calculate the distance to intersection point + float uA = ((x4-x3)*(y1-y3) - (y4-y3)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1)); + float uB = ((x2-x1)*(y1-y3) - (y2-y1)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1)); + + // if uA and uB are between 0-1, lines are colliding + if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { + + // optionally, draw a circle where the lines meet + float intersectionX = x1 + (uA * (x2-x1)); + float intersectionY = y1 + (uA * (y2-y1)); + fill(255,0,0); + noStroke(); + ellipse(intersectionX,intersectionY, 20,20); + + return true; + } + return false; +} +*/ +// Based off the script above. Optimized based off github comments relating to code above. +/// x1,y1 and x2,y2 are the start and end of the first line +/// x3,y3 and x4,y4 are the start and end of the second line +/// pStepX and pStepY are pointers for setting the bullets step end +/datum/hitboxDatum/proc/lineIntersect(x1,y1,x2,y2,x3,y3,x4,y4, pStepX, pStepY) + var/firstRatio + var/secondRatio + var/denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)) + if(denominator == 0) + message_admins("Invalid line for [src], at hitbox coords BulletLine ([x1] | [y1]) ([x2] | [y2]) HitboxLine ([x3] | [y3]) ([x4] | [y4])") + return 0 + firstRatio = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator + secondRatio = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator + if(firstRatio >= 0 && firstRatio <= 1 && secondRatio >= 0 && secondRatio <= 1) + *pStepX = x1 + firstRatio * (x2 - x1) + *pStepY = y1 + firstRatio * (y2 - y1) + return DIST_EUCLIDIAN_2D(x1,y1, *pStepX, *pStepY) + //return list(x1 + firstRatio * (x2 - x1), y1 + firstRatio * (y2 - y1)) + //message_admins("X-collision : [x1 + firstRatio * (x2 - x1)] Y-collision : [y1 + firstRatio * (y2] - y1)]") + //message_admins("Distance between points : [DIST_EUCLIDIAN_2D(x1,y1,x1 + firstRatio * (x2 - x1),y1 + firstRatio * (y2] - y1) )]") + return 0 + + +/datum/hitboxDatum/proc/visualize(atom/owner) + for(var/list/hitbox in boundingBoxes[num2text(owner.dir)]) + var/icon/Icon = icon('icons/hitbox.dmi', "box") + var/multX = hitbox[3] - hitbox[1] + 1 + var/multY = hitbox[4] - hitbox[2] + 1 + Icon.Scale(multX, multY) + var/mutable_appearance/newOverlay = mutable_appearance(Icon, "hitbox") + newOverlay.color = RANDOM_RGB + newOverlay.pixel_x = hitbox[1] - 1 + newOverlay.pixel_y = hitbox[2] - 1 + newOverlay.alpha = 200 + owner.overlays.Add(newOverlay) + +/datum/hitboxDatum/proc/getHitboxLines(atom/owner, ownerDirection, worldX, worldY, worldZ) + . = new/list(length(boundingBoxes["[ownerDirection]"])*4) + var/currentIndex = 1 + var/firstZ + var/lastZ + var/flags + for(var/list/boundingData in boundingBoxes["[ownerDirection]"]) + firstZ = boundingData[5] + worldZ + lastZ = boundingData[6] + worldZ + flags = boundingData[7] + .[currentIndex++] = (list(boundingData[1] + worldX, boundingData[2] + worldY, boundingData[1] + worldX, boundingData[4] + worldY, firstZ, lastZ, flags)) + .[currentIndex++] = (list(boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[2] + worldY, firstZ, lastZ, flags)) + .[currentIndex++] = (list(boundingData[1] + worldX, boundingData[4] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, firstZ, lastZ, flags)) + .[currentIndex++] = (list(boundingData[3] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, firstZ, lastZ, flags)) + +/datum/hitboxDatum/atom + boundingBoxes = list( + LISTNORTH = list(BBOX(16,16,24,24,1,2,null)), + LISTSOUTH = list(BBOX(16,16,24,24,1,2,null)), + LISTEAST = list(BBOX(16,16,24,24,1,2,null)), + LISTWEST = list(BBOX(16,16,24,24,1,2,null)) + ) + +/datum/hitboxDatum/atom/getAimingLevel(atom/shooter, defZone, atom/owner) + if(defZone == null || (!(defZone in defZoneToLevel))) + return medianLevels["[owner.dir]"] + if(defZoneToLevel[defZone] == HBF_USEMEDIAN) + return medianLevels["[owner.dir]"] + message_admins("Returned [defZoneToLevel[defZone]] for [defZone]") + return defZoneToLevel[defZone] + + /// this can be optimized further by making the calculations not make a new list , and instead be added when checking line intersection - SPCR 2024 +/datum/hitboxDatum/atom/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ, pHitFlags) + var/worldX + var/worldY + var/worldZ + var/minimumIntersection = 999999 + var/intersectionDistance = 0 + worldX = owner.x + worldY = owner.y + if(owner.atomFlags & AF_HITBOX_OFFSET_BY_ATTACHMENT) + for(var/atom/thing as anything in owner.attached) + if(!(thing.attached[owner] & ATFS_SUPPORTER)) + continue + worldX += thing.x - owner.x + worldY += thing.y - owner.y + break + worldX *= PPT + worldY *= PPT + worldX += owner.pixel_x + worldY += owner.pixel_y + worldZ = owner.z * PPT + for(var/list/boundingData in getHitboxLines(owner, ownerDirection, worldX, worldY, worldZ)) + if((boundingData[5]+worldZ) > max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) > max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + intersectionDistance = lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1], boundingData[2], boundingData[3], boundingData[4], pStepX, pStepY) + if(intersectionDistance > 0 && intersectionDistance < minimumIntersection) + minimumIntersection = intersectionDistance + *pHitFlags = boundingData[7] + return minimumIntersection = 999999 ? 0 : minimumIntersection + + +/// This subtype is dedicated especially to tables. Their building system changes shape depending on adjaency. So this reflects that +/// List format is unconventional and based off the the way connections are done + +// Also.. holy mother of lists... yes there is a LOT of data to store for all the permutations.. +// each corner has 8 possible states , all of them have 4 directions , so this is 4 x 8 aka 32 permutations. +// some of this could be cut down with some smart flipping ,but for some cases it doesn't work or its not worth the CPU usage - SPCR 2024 + +/datum/hitboxDatum/atom/table + // this boundingBoxes just stores each corner's hitbox depending on its connections ,the actual hitbox is formed when doing actual hit checks + boundingBoxes = list( + 1 = list( + LISTNORTH = list(BBOX(5,17,16,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,2,28,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,28,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(5,2,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 2 = list( + LISTNORTH = list(BBOX(1,17,16,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,4,32,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,28,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(5,1,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 3 = list( + LISTNORTH = list(BBOX(5,17,16,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,2,28,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,28,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(5,2,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 4 = list( + LISTNORTH = list(BBOX(1,17,16,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,4,32,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,28,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(5,1,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 5 = list( + LISTNORTH = list(BBOX(5,17,16,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,1,28,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,32,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(1,4,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 6 = list( + LISTNORTH = list(BBOX(1,17,16,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,1,32,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,32,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(1,1,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 7 = list( + LISTNORTH = list(BBOX(5,17,16,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,1,28,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,32,30,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(1,4,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ), + 8 = list( + LISTNORTH = list(BBOX(1,17,16,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTSOUTH = list(BBOX(17,1,32,16,LEVEL_TURF,LEVEL_TABLE,null)), + LISTEAST = list(BBOX(17,17,32,32,LEVEL_TURF,LEVEL_TABLE,null)), + LISTWEST = list(BBOX(1,1,16,16,LEVEL_TURF,LEVEL_TABLE,null)) + ) + ) + medianLevels = list( + LISTNORTH = (LEVEL_TURF+LEVEL_TABLE)/2, + LISTSOUTH = (LEVEL_TURF+LEVEL_TABLE)/2, + LISTEAST = (LEVEL_TURF+LEVEL_TABLE)/2, + LISTWEST = (LEVEL_TURF+LEVEL_TABLE)/2 + ) + +/datum/hitboxDatum/atom/table/getAimingLevel(atom/shooter, defZone, atom/owner) + return medianLevels["[owner.dir]"] + +/datum/hitboxDatum/atom/table/visualize(obj/structure/table/owner) + for(var/i = 1 to 4) + var/list/boundingList = boundingBoxes[text2num(owner.connections[i])+1]["[(1<<(i-1))]"] + for(var/list/hitbox in boundingList) + var/icon/Icon = icon('icons/hitbox.dmi', "box") + var/multX = hitbox[3] - hitbox[1] + 1 + var/multY = hitbox[4] - hitbox[2] + 1 + Icon.Scale(multX, multY) + var/mutable_appearance/newOverlay = mutable_appearance(Icon, "hitbox") + newOverlay.color = RANDOM_RGB + newOverlay.pixel_x = hitbox[1] - 1 + newOverlay.pixel_y = hitbox[2] - 1 + newOverlay.alpha = 200 + owner.overlays.Add(newOverlay) + +/// this can be optimized further by making the calculations not make a new list , and instead be added when checking line intersection - SPCR 2024 +/datum/hitboxDatum/atom/table/intersects(obj/structure/table/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x * PPT + owner.pixel_x + worldY = owner.y * PPT + owner.pixel_y + worldZ = owner.z * PPT + var/list/boundingList + for(var/i = 1 to 4) + // 1<<(i-1) , clever way to convert from index to direction + // i=1 ==> north + // i=2 ==> south + // i=3 ==> east + // i=4 ==> west + // i dont get why owner connections is text.. but it is what it is + boundingList = boundingBoxes[text2num(owner.connections[i])+1]["[(1<<(i-1))]"] + for(var/list/boundingData in boundingList) + if((boundingData[5]+worldZ) > max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) > max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[1] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[2] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[4] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[3] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + +/datum/hitboxDatum/atom/fixtureLightTube + boundingBoxes = list( + LISTSOUTH = list(BBOX(4,29,29,32,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTNORTH = list(BBOX(4,1,29,4,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTWEST = list(BBOX(29,4,32,29,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTEAST = list(BBOX(1,4,4,29,LEVEL_HEAD-1,LEVEL_HEAD+1,null)) + ) + +/datum/hitboxDatum/atom/fixtureBulb + boundingBoxes = list( + LISTSOUTH = list(BBOX(14,25,19,32,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTNORTH = list(BBOX(14,1,20,8,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTWEST = list(BBOX(25,14,32,19,LEVEL_HEAD-1,LEVEL_HEAD+1,null)), + LISTEAST = list(BBOX(1,14,8,19,LEVEL_HEAD-1,LEVEL_HEAD+1,null)) + ) + +/datum/hitboxDatum/atom/fireAlarm + boundingBoxes = list( + LISTNORTH = list(BBOX(13,10,20,22,LEVEL_CHEST-1,LEVEL_CHEST+1,null)), + LISTSOUTH = list(BBOX(13,11,20,23,LEVEL_CHEST-1,LEVEL_CHEST+1,null)), + LISTEAST = list(BBOX(10,13,22,20,LEVEL_CHEST-1,LEVEL_CHEST+1,null)), + LISTWEST = list(BBOX(11,13,23,20,LEVEL_CHEST-1,LEVEL_CHEST+1,null)) + ) + +/datum/hitboxDatum/atom/airAlarm + boundingBoxes = list( + LISTNORTH = list(BBOX(8,10,24,23,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTSOUTH = list(BBOX(8,10,24,23,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTEAST = list(BBOX(10,8,23,24,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTWEST = list(BBOX(10,9,23,25,LEVEL_CHEST-1,LEVEL_CHEST+2,null)) + ) + +/datum/hitboxDatum/atom/areaPowerController + boundingBoxes = list( + LISTNORTH = list(BBOX(8,10,24,23,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTSOUTH = list(BBOX(8,10,24,23,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTEAST = list(BBOX(10,8,23,24,LEVEL_CHEST-1,LEVEL_CHEST+2,null)), + LISTWEST = list(BBOX(10,9,23,25,LEVEL_CHEST-1,LEVEL_CHEST+2,null)) + ) + +/datum/hitboxDatum/atom/window/directional + boundingBoxes = list( + LISTNORTH = list(BBOX(1,26,32,32, LEVEL_TURF, LEVEL_ABOVE, null)), + LISTSOUTH = list(BBOX(1,1,32,7, LEVEL_TURF, LEVEL_ABOVE, null)), + LISTEAST = list(BBOX(26,1,32,32, LEVEL_TURF, LEVEL_ABOVE, null)), + LISTWEST = list(BBOX(1,1,7,32, LEVEL_TURF, LEVEL_ABOVE, null)) + ) + +/datum/hitboxDatum/atom/lowWall + boundingBoxes = list( + LISTNORTH = list(BBOX(0,0,32,32, LEVEL_TURF, LEVEL_LOWWALL, null)), + LISTSOUTH = list(BBOX(0,0,32,32, LEVEL_TURF, LEVEL_LOWWALL, null)), + LISTEAST = list(BBOX(0,0,32,32, LEVEL_TURF, LEVEL_LOWWALL, null)), + LISTWEST = list(BBOX(0,0,32,32, LEVEL_TURF, LEVEL_LOWWALL, null)) + ) + +/datum/hitboxDatum/atom/reagentTank + boundingBoxes = list( + LISTNORTH = list(BBOX(5,4,31,28, LEVEL_TURF, LEVEL_TABLE, null)), + LISTSOUTH = list(BBOX(5,4,31,28, LEVEL_TURF, LEVEL_TABLE, null)), + LISTEAST = list(BBOX(5,4,31,28, LEVEL_TURF, LEVEL_TABLE, null)), + LISTWEST = list(BBOX(5,4,31,28, LEVEL_TURF, LEVEL_TABLE, null)) + ) + +/datum/hitboxDatum/atom/storageRack + boundingBoxes = list( + LISTNORTH = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_TABLE, null)), + LISTSOUTH = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_TABLE, null)), + LISTEAST = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_TABLE, null)), + LISTWEST = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_TABLE, null)) + ) + +/datum/hitboxDatum/atom/storageShelf + boundingBoxes = list( + LISTNORTH = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_CHEST, null)), + LISTSOUTH = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_CHEST, null)), + LISTEAST = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_CHEST, null)), + LISTWEST = list(BBOX(5,5,28,27, LEVEL_TURF, LEVEL_CHEST, null)) + ) + +/datum/hitboxDatum/atom/bed + boundingBoxes = list( + LISTNORTH = list(BBOX(2,4,31,19, LEVEL_TURF+2, LEVEL_LYING-5, null)), + LISTSOUTH = list(BBOX(2,4,31,19, LEVEL_TURF+2, LEVEL_LYING-5, null)), + LISTEAST = list(BBOX(2,4,31,19, LEVEL_TURF+2, LEVEL_LYING-5, null)), + LISTWEST = list(BBOX(2,4,31,19, LEVEL_TURF+2, LEVEL_LYING-5, null)) + ) + +/datum/hitboxDatum/atom/stool + boundingBoxes = list( + LISTNORTH = list(BBOX(10,1,23,17, LEVEL_TURF, LEVEL_LYING+5, null)), + LISTSOUTH = list(BBOX(10,1,23,17, LEVEL_TURF, LEVEL_LYING+5, null)), + LISTEAST = list(BBOX(10,1,23,17, LEVEL_TURF, LEVEL_LYING+5, null)), + LISTWEST = list(BBOX(10,1,23,17, LEVEL_TURF, LEVEL_LYING+5, null)) + ) + +/datum/hitboxDatum/atom/chair + boundingBoxes = list( + LISTSOUTH = list(BBOX(9,6,23,15, LEVEL_LYING, LEVEL_LYING+3, null), BBOX(10,15,22,25, LEVEL_LYING+3, LEVEL_TABLE, null)), + LISTNORTH = list(BBOX(9,4,23,10, LEVEL_LYING, LEVEL_LYING+3, null), BBOX(9,11,23,22, LEVEL_LYING+3, LEVEL_TABLE, null)), + LISTEAST = list(BBOX(10,7,22,19, LEVEL_LYING, LEVEL_LYING+3, null), BBOX(8,9,12,26, LEVEL_LYING+3, LEVEL_TABLE, null)), + LISTWEST = list(BBOX(11,7,23,19, LEVEL_LYING, LEVEL_LYING+3, null), BBOX(21,8,25,26, LEVEL_LYING+3, LEVEL_TABLE, null)) + ) + +/datum/hitboxDatum/atom/armChair + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,1,25,15, LEVEL_TURF, LEVEL_LYING+3, null), BBOX(10,14,23,25, LEVEL_LYING+3, LEVEL_TABLE+5, null)), + LISTNORTH = list(BBOX(8,2,25,15, LEVEL_TURF, LEVEL_LYING+3, null), BBOX(10,11,23,28, LEVEL_LYING+3, LEVEL_TABLE+5, null)), + LISTEAST = list(BBOX(9,2,25,18, LEVEL_TURF, LEVEL_LYING+3, null), BBOX(8,10,13,29, LEVEL_LYING+3, LEVEL_TABLE+5, null)), + LISTWEST = list(BBOX(8,2,24,18, LEVEL_TURF, LEVEL_LYING+3, null), BBOX(20,11,25,29, LEVEL_LYING+3, LEVEL_TABLE+5, null)), + ) + +/datum/hitboxDatum/atom/fireAxeCabinet + boundingBoxes = list( + LISTNORTH = list(BBOX(3,8,29,26,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTSOUTH = list(BBOX(3,8,29,26,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTEAST = list(BBOX(3,8,29,26,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTWEST = list(BBOX(3,8,29,26,LEVEL_CHEST-5,LEVEL_CHEST+4,null)) + ) + +/datum/hitboxDatum/atom/fireExtinguisherCabinet + boundingBoxes = list( + LISTNORTH = list(BBOX(10,6,23,28,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTSOUTH = list(BBOX(10,6,23,28,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTEAST = list(BBOX(10,6,23,28,LEVEL_CHEST-5,LEVEL_CHEST+4,null)), + LISTWEST = list(BBOX(10,6,23,28,LEVEL_CHEST-5,LEVEL_CHEST+4,null)) + ) + +/datum/hitboxDatum/atom/intercom + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,11,25,23,LEVEL_CHEST-3,LEVEL_CHEST+3,null)), + LISTNORTH = list(BBOX(8,10,25,22,LEVEL_CHEST-3,LEVEL_CHEST+3,null)), + LISTEAST = list(BBOX(10,8,22,25,LEVEL_CHEST-3,LEVEL_CHEST+3,null)), + LISTWEST = list(BBOX(11,8,23,25,LEVEL_CHEST-3,LEVEL_CHEST+3,null)) + ) + +/datum/hitboxDatum/atom/camera + boundingBoxes = list( + LISTSOUTH = list(BBOX(14,27,17,32,LEVEL_HEAD-3, LEVEL_HEAD+3,null)), + LISTNORTH = list(BBOX(12,1,20,7,LEVEL_HEAD-3, LEVEL_HEAD+3,null)), + LISTEAST = list(BBOX(1,14,16,20,LEVEL_HEAD-3, LEVEL_HEAD+3,null)), + LISTWEST = list(BBOX(27,13,32,19,LEVEL_HEAD-3, LEVEL_HEAD+3,null)) + ) + +/datum/hitboxDatum/atom/button + boundingBoxes = list( + LISTSOUTH = list(BBOX(13,13,20,21,LEVEL_CHEST+1, LEVEL_CHEST-1,null)), + LISTNORTH = list(BBOX(13,13,20,21,LEVEL_CHEST+1, LEVEL_CHEST-1,null)), + LISTEAST = list(BBOX(13,13,20,21,LEVEL_CHEST+1, LEVEL_CHEST-1,null)), + LISTWEST = list(BBOX(13,13,20,21,LEVEL_CHEST+1, LEVEL_CHEST-1,null)) + ) + +/datum/hitboxDatum/atom/button/table + boundingBoxes = list( + LISTSOUTH = list(BBOX(13,13,20,21,LEVEL_TABLE, LEVEL_TABLE+4,null)), + LISTNORTH = list(BBOX(13,13,20,21,LEVEL_TABLE, LEVEL_TABLE+4,null)), + LISTEAST = list(BBOX(13,13,20,21,LEVEL_TABLE, LEVEL_TABLE+4,null)), + LISTWEST = list(BBOX(13,13,20,21,LEVEL_TABLE, LEVEL_TABLE+4,null)) + ) + +/datum/hitboxDatum/atom/closet + boundingBoxes = list( + LISTSOUTH = list(BBOX(9,3,24,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTNORTH = list(BBOX(9,3,24,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTEAST = list(BBOX(9,3,24,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTWEST = list(BBOX(9,3,24,32,LEVEL_TURF, LEVEL_HEAD,null)) + ) + +/datum/hitboxDatum/atom/vendingMachine + boundingBoxes = list( + LISTSOUTH = list(BBOX(4,1,29,31,LEVEL_TURF, LEVEL_HEAD,null)), + LISTNORTH = list(BBOX(4,1,29,31,LEVEL_TURF, LEVEL_HEAD,null)), + LISTEAST = list(BBOX(4,1,29,31,LEVEL_TURF, LEVEL_HEAD,null)), + LISTWEST = list(BBOX(4,1,29,31,LEVEL_TURF, LEVEL_HEAD,null)) + ) + +/datum/hitboxDatum/atom/holopad + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,8,25,25,LEVEL_TURF+3, LEVEL_TURF+6,null)), + LISTNORTH = list(BBOX(8,8,25,25,LEVEL_TURF+3, LEVEL_TURF+6,null)), + LISTEAST = list(BBOX(8,8,25,25,LEVEL_TURF+3, LEVEL_TURF+6,null)), + LISTWEST = list(BBOX(8,8,25,25,LEVEL_TURF+3, LEVEL_TURF+6,null)) + ) + +/datum/hitboxDatum/atom/atmosphericVentScrubber + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,8,24,25,LEVEL_TURF-2, LEVEL_TURF,null)), + LISTNORTH = list(BBOX(8,8,24,25,LEVEL_TURF-2, LEVEL_TURF,null)), + LISTEAST = list(BBOX(8,8,24,25,LEVEL_TURF-2, LEVEL_TURF,null)), + LISTWEST = list(BBOX(8,8,24,25,LEVEL_TURF-2, LEVEL_TURF,null)) + ) + +/datum/hitboxDatum/atom/modularConsole + boundingBoxes = list( + LISTSOUTH = list(BBOX(5,5,28,14,LEVEL_TURF, LEVEL_TABLE,null),BBOX(4 ,15, 29, 30, LEVEL_TURF, LEVEL_HEAD, null)), + LISTNORTH = list(BBOX(5,4,29,29,LEVEL_TURF, LEVEL_TABLE,null),BBOX(5 ,9, 29, 22, LEVEL_TURF, LEVEL_HEAD, null)), + LISTEAST = list(BBOX(5,4,27,26,LEVEL_TURF, LEVEL_TABLE,null),BBOX(9 ,8, 19, 31, LEVEL_TURF, LEVEL_HEAD, null)), + LISTWEST = list(BBOX(5,5,28,26,LEVEL_TURF, LEVEL_TABLE,null),BBOX(14 ,7, 24, 32, LEVEL_TURF, LEVEL_HEAD, null)) + ) + +/datum/hitboxDatum/disposalUnit + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,4,25,28,LEVEL_TURF-2, LEVEL_LOWWALL,null)), + LISTNORTH = list(BBOX(8,4,25,28,LEVEL_TURF-2, LEVEL_LOWWALL,null)), + LISTEAST = list(BBOX(8,4,25,28,LEVEL_TURF-2, LEVEL_LOWWALL,null)), + LISTWEST = list(BBOX(8,4,25,28,LEVEL_TURF-2, LEVEL_LOWWALL,null)) + ) + +/datum/hitboxDatum/atom/atmosphericCanister + boundingBoxes = list( + LISTSOUTH = list(BBOX(9,3,24,31,LEVEL_TURF, LEVEL_CHEST,null)), + LISTNORTH = list(BBOX(9,3,24,31,LEVEL_TURF, LEVEL_CHEST,null)), + LISTEAST = list(BBOX(9,3,24,31,LEVEL_TURF, LEVEL_CHEST,null)), + LISTWEST = list(BBOX(9,3,24,31,LEVEL_TURF, LEVEL_CHEST,null)) + ) + +/datum/hitboxDatum/atom/atmosphericPump + boundingBoxes = list( + LISTSOUTH = list(BBOX(6,4,25,27,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTNORTH = list(BBOX(6,4,25,27,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTEAST = list(BBOX(6,4,25,27,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTWEST = list(BBOX(6,4,25,27,LEVEL_TURF, LEVEL_LOWWALL,null)) + ) + +/datum/hitboxDatum/atom/atmosphericScrubber + boundingBoxes = list( + LISTSOUTH = list(BBOX(6,4,29,26,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTNORTH =list(BBOX(6,4,29,26,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTEAST = list(BBOX(6,4,29,26,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTWEST = list(BBOX(6,4,29,26,LEVEL_TURF, LEVEL_LOWWALL,null)) + ) + +/datum/hitboxDatum/atom/atmosphericHeater + boundingBoxes = list( + LISTSOUTH = list(BBOX(8,3,25,23,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTNORTH = list(BBOX(8,3,25,23,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTEAST = list(BBOX(8,3,25,23,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTWEST = list(BBOX(8,3,25,23,LEVEL_TURF, LEVEL_LOWWALL,null)) + ) + +/datum/hitboxDatum/atom/photocopier + boundingBoxes = list( + LISTSOUTH = list(BBOX(7,4,26,27,LEVEL_TURF, LEVEL_TABLE,null)), + LISTNORTH = list(BBOX(7,4,26,27,LEVEL_TURF, LEVEL_TABLE,null)), + LISTEAST = list(BBOX(7,4,26,27,LEVEL_TURF, LEVEL_TABLE,null)), + LISTWEST = list(BBOX(7,4,26,27,LEVEL_TURF, LEVEL_TABLE,null)) + ) + +/datum/hitboxDatum/atom/filingCabinet + boundingBoxes = list( + LISTSOUTH = list(BBOX(11,1,21,23,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTNORTH = list(BBOX(11,1,21,23,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTEAST = list(BBOX(11,1,21,23,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTWEST = list(BBOX(11,1,21,23,LEVEL_TURF, LEVEL_TABLE+4,null)) + ) + +/datum/hitboxDatum/atom/tankDispenser + boundingBoxes = list( + LISTSOUTH = list(BBOX(4,2,30,30,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTNORTH = list(BBOX(4,2,30,30,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTEAST = list(BBOX(4,2,30,30,LEVEL_TURF, LEVEL_TABLE+4,null)), + LISTWEST = list(BBOX(4,2,30,30,LEVEL_TURF, LEVEL_TABLE+4,null)) + ) + +/datum/hitboxDatum/atom/smes + boundingBoxes = list( + LISTSOUTH = list(BBOX(1,5,31,26,LEVEL_TURF, LEVEL_TABLE+4,null), BBOX(16,2,31,31, LEVEL_TURF, LEVEL_TABLE+4, null)), + LISTNORTH = list(BBOX(1,5,31,26,LEVEL_TURF, LEVEL_TABLE+4,null), BBOX(16,2,31,31, LEVEL_TURF, LEVEL_TABLE+4, null)), + LISTEAST = list(BBOX(1,5,31,26,LEVEL_TURF, LEVEL_TABLE+4,null), BBOX(16,2,31,31, LEVEL_TURF, LEVEL_TABLE+4, null)), + LISTWEST = list(BBOX(1,5,31,26,LEVEL_TURF, LEVEL_TABLE+4,null), BBOX(16,2,31,31, LEVEL_TURF, LEVEL_TABLE+4, null)) + ) + +/datum/hitboxDatum/atom/crate + boundingBoxes = list( + LISTSOUTH = list(BBOX(4,5,29,22,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTNORTH = list(BBOX(4,5,29,22,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTEAST = list(BBOX(4,5,29,22,LEVEL_TURF, LEVEL_LOWWALL,null)), + LISTWEST = list(BBOX(4,5,29,22,LEVEL_TURF, LEVEL_LOWWALL,null)) + ) + +/datum/hitboxDatum/atom/autolathe + boundingBoxes = list( + LISTSOUTH = list(BBOX(3,3,30,21,LEVEL_TURF, LEVEL_LYING,null), BBOX(3,6,22,30, LEVEL_LYING, LEVEL_TABLE, null)), + LISTNORTH = list(BBOX(3,3,30,21,LEVEL_TURF, LEVEL_LYING,null), BBOX(3,6,22,30, LEVEL_LYING, LEVEL_TABLE, null)), + LISTEAST = list(BBOX(3,3,30,21,LEVEL_TURF, LEVEL_LYING,null), BBOX(3,6,22,30, LEVEL_LYING, LEVEL_TABLE, null)), + LISTWEST = list(BBOX(3,3,30,21,LEVEL_TURF, LEVEL_LYING,null), BBOX(3,6,22,30, LEVEL_LYING, LEVEL_TABLE, null)) + ) + +/datum/hitboxDatum/atom/smartfridge + boundingBoxes = list( + LISTSOUTH = list(BBOX(3,2,30,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTNORTH = list(BBOX(3,2,30,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTEAST = list(BBOX(3,2,30,32,LEVEL_TURF, LEVEL_HEAD,null)), + LISTWEST = list(BBOX(3,2,30,32,LEVEL_TURF, LEVEL_HEAD,null)) + ) + + + + +/datum/hitboxDatum/turf + boundingBoxes = BBOX(0,0,32,32,LEVEL_BELOW ,LEVEL_ABOVE,null) + +/datum/hitboxDatum/turf/visualize(atom/owner) + var/list/hitbox = boundingBoxes + var/icon/Icon = icon('icons/hitbox.dmi', "box") + var/multX = hitbox[3] - hitbox[1] + 1 + var/multY = hitbox[4] - hitbox[2] + 1 + Icon.Scale(multX, multY) + var/mutable_appearance/newOverlay = mutable_appearance(Icon, "hitbox") + newOverlay.color = RANDOM_RGB + newOverlay.pixel_x = hitbox[1] - 1 + newOverlay.pixel_y = hitbox[2] - 1 + newOverlay.alpha = 200 + owner.overlays.Add(newOverlay) + +/datum/hitboxDatum/turf/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x * PPT + worldY = owner.y * PPT + worldZ = owner.z * PPT + //basic AABB but only for the Z-axis. + if((boundingBoxes[5]+worldZ)> max(startZ,startZ+*pStepZ) && (boundingBoxes[6]+worldZ) > max(startZ,startZ+*pStepZ)) + return FALSE + if((boundingBoxes[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingBoxes[6]+worldZ) < min(startZ,startZ+*pStepZ)) + return FALSE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingBoxes[1] + worldX, boundingBoxes[2] + worldY, boundingBoxes[1] + worldX, boundingBoxes[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingBoxes[1] + worldX, boundingBoxes[2] + worldY, boundingBoxes[3] + worldX, boundingBoxes[2] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingBoxes[1] + worldX, boundingBoxes[4] + worldY, boundingBoxes[3] + worldX, boundingBoxes[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingBoxes[3] + worldX, boundingBoxes[2] + worldY, boundingBoxes[3] + worldX, boundingBoxes[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + +/datum/hitboxDatum/turf/wall + boundingBoxes = BBOX(0,0,32,32,LEVEL_BELOW ,LEVEL_ABOVE,null) + +/datum/hitboxDatum/turf/floor + boundingBoxes = BBOX(0,0,32,32,LEVEL_BELOW ,LEVEL_TURF,null) + +/datum/hitboxDatum/turf/window + boundingBoxes = BBOX(0,0,32,32, LEVEL_LOWWALL, LEVEL_ABOVE, null) + +/datum/hitboxDatum/turf/door + boundingBoxes = BBOX(0,0,32,32,LEVEL_TURF ,LEVEL_ABOVE,null) + +/// This checks line by line instead of a box. Less efficient. +/datum/hitboxDatum/atom/polygon + boundingBoxes = list( + LISTNORTH = list(BLINE(0,0,32,32, LEVEL_BELOW, LEVEL_ABOVE, null)), + LISTSOUTH = list(BLINE(0,0,32,32, LEVEL_BELOW, LEVEL_ABOVE, null)), + LISTEAST = list(BLINE(0,0,32,32, LEVEL_BELOW, LEVEL_ABOVE, null)), + LISTWEST = list(BLINE(0,0,32,32, LEVEL_BELOW, LEVEL_ABOVE, null)) + ) + +/datum/hitboxDatum/atom/polygon/calculateAimingLevels() + var/levelSum + if(length(medianLevels)) + return + medianLevels = list() + for(var/direction in list(NORTH, SOUTH, EAST , WEST)) + levelSum = 0 + for(var/list/boundingBox in boundingBoxes["[direction]"]) + levelSum += (boundingBox[5]+boundingBox[6])/2 + medianLevels["[direction]"] = levelSum / length(boundingBoxes["[direction]"]) + +/datum/hitboxDatum/atom/polygon/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x + worldY = owner.y + if(owner.atomFlags & AF_HITBOX_OFFSET_BY_ATTACHMENT) + for(var/atom/thing as anything in owner.attached) + if(!(thing.attached[owner] & ATFS_SUPPORTER)) + continue + worldX += thing.x - owner.x + worldY += thing.y - owner.y + break + worldX *= PPT + worldY *= PPT + worldX += owner.pixel_x + worldY += owner.pixel_y + worldZ = owner.z * PPT + for(var/list/boundingData in boundingBoxes["[ownerDirection]"]) + if((boundingData[5]+worldZ) > max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) > max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[1] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + +/datum/hitboxDatum/atom/polygon/visualize(atom/owner) + /// too hard to get offsets for lines ((( SPCR 2024 + return + +/// Indexed by whatever the fuck dirs getHitboxData() returns from the pipe +/datum/hitboxDatum/atom/polygon/atmosphericPipe + boundingBoxes = list( + LISTNORTH = BLINE(16,16,16,32, LEVEL_TURF, LEVEL_TURF+5, null), + LISTSOUTH = BLINE(16,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null), + LISTEAST = BLINE(16,16,32,16, LEVEL_TURF, LEVEL_TURF+5, null), + LISTWEST = BLINE(0,16,16,16, LEVEL_TURF, LEVEL_TURF+5, null) + ) + +/datum/hitboxDatum/atom/polygon/atmosphericPipe/intersects(obj/machinery/atmospherics/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x * PPT + worldY = owner.y * PPT + worldZ = owner.z * PPT + var/validDirs = owner.getHitboxData() + for(var/direction in list(NORTH, EAST, WEST, SOUTH)) + if(!(direction & validDirs)) + continue + var/list/boundingData = boundingBoxes["[direction]"] + if((boundingData[5]+worldZ) > max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) > max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + +/// Indexed by icon-state +/datum/hitboxDatum/atom/polygon/powerCable + boundingBoxes = list( + "0-1" = list(BLINE(16,16,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-2" = list(BLINE(16,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-4" = list(BLINE(16,16,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-5" = list(BLINE(16,16,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-6" = list(BLINE(32,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-8" = list(BLINE(0,16,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-9" = list(BLINE(0,32,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "0-10" = list(BLINE(0,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-2" = list(BLINE(16,0,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-4" = list(BLINE(16,32,20,20, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(20,20,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-5" = list(BLINE(16,32,21,25, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(21,25,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-6" = list(BLINE(16,32,22,12, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(22,12,32,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-8" = list(BLINE(0,16,13,20, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(13,20,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-9" = list(BLINE(0,32,12,25, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(12,25,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "1-10" = list(BLINE(0,0,12,14, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(12,14,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-4" = list(BLINE(16,0,19,12, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(19,12,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-5" = list(BLINE(16,0,21,19, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(21,19,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-6" = list(BLINE(16,0,20,9, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(20,9,32,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-8" = list(BLINE(0,16,13,13, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(13,13,16,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-9" = list(BLINE(0,32,13,17, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(13,17,16,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "2-10" = list(BLINE(0,0,13,8, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(13,8,16,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "4-5" = list(BLINE(32,16,25,22, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(25,22,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "4-6" = list(BLINE(32,0,25,11, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(25,11,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "4-8" = list(BLINE(0,16,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "4-9" = list(BLINE(0,32,16,20, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(16,20,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "4-10" = list(BLINE(0,0,14,12, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(14,12,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "5-6" = list(BLINE(31,0,25,16, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(25,16,31,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "5-8" = list(BLINE(0,16,18,21, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(18,21,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "5-9" = list(BLINE(0,31,16,25, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(16,25,32,31, LEVEL_TURF, LEVEL_TURF+5, null)), + "5-10" = list(BLINE(0,0,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "6-8" = list(BLINE(0,17,17,13, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(17,13,32,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "6-9" = list(BLINE(0,32,32,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "6-10" = list(BLINE(0,1,16,8, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(16,8,32,1, LEVEL_TURF, LEVEL_TURF+5, null)), + "8-9" = list(BLINE(0,16,8,20, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(8,20,2,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "8-10" = list(BLINE(0,16,8,13, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(8,13,0,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "9-10" = list(BLINE(0,0,8,16, LEVEL_TURF, LEVEL_TURF+5, null),BLINE(8,16,0,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-1" = list(BLINE(16,18,16,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-2" = list(BLINE(16,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-4" = list(BLINE(16,16,32,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-5" = list(BLINE(16,16,32,32, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-6" = list(BLINE(16,16,32,0, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-8" = list(BLINE(0,16,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-9" = list(BLINE(0,32,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "32-10" = list(BLINE(0,0,16,16, LEVEL_TURF, LEVEL_TURF+5, null)), + "16-0" = list(BLINE(16,16,16,24, LEVEL_TURF, LEVEL_TURF+5, null)) + ) + +/datum/hitboxDatum/atom/polygon/powerCable/calculateAimingLevels() + var/levelSum + if(length(medianLevels)) + return + medianLevels = list() + for(var/possibleState in boundingBoxes) + levelSum = 0 + for(var/list/boundingBox in boundingBoxes[possibleState]) + levelSum += (boundingBox[5]+boundingBox[6])/2 + medianLevels[possibleState] = levelSum / length(boundingBoxes[possibleState]) + +/datum/hitboxDatum/atom/polygon/powerCable/getAimingLevel(atom/shooter, defZone, atom/owner) + return medianLevels[owner.icon_state] + +/datum/hitboxDatum/atom/polygon/powerCable/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x * PPT + worldY = owner.y * PPT + worldZ = owner.z * PPT + for(var/list/boundingData in boundingBoxes[owner.icon_state]) + if((boundingData[5]+worldZ) > max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) > max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + +/datum/hitboxDatum/atom/polygon/powerCable/visualize(atom/owner) + return + /* + for(var/list/hitbox in boundingBoxes[owner.icon_state]) + var/icon/Icon = icon('icons/hitbox.dmi', "box") + var/length = round(DIST_EUCLIDIAN_2D(hitbox[1], hitbox[2], hitbox[3], hitbox[4])) + Icon.Scale(1, length) + var/x = (hitbox[3] - hitbox[1]) + var/y = (hitbox[4] - hitbox[2]) + var/angle = ATAN2(y, x) + 180 + var/mutable_appearance/newOverlay = mutable_appearance(Icon, "hitbox") + newOverlay.color = RANDOM_RGB + var/matrix/rotation = matrix() + rotation.Turn(angle) + newOverlay.transform = rotation + newOverlay.pixel_x = hitbox[3] - 1 + newOverlay.pixel_y = hitbox[4] - 1 + newOverlay.alpha = 200 + owner.overlays.Add(newOverlay) + */ + +/// Hitboxes are ordered based on center distance. +/datum/hitboxDatum/atom/ordered + +/datum/hitboxDatum/atom/ordered/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ) + var/worldX + var/worldY + var/worldZ + worldX = owner.x + worldY = owner.y + worldZ = owner.z * PPT + if(owner.atomFlags & AF_HITBOX_OFFSET_BY_ATTACHMENT) + for(var/atom/thing as anything in owner.attached) + if(!(thing.attached[owner] & ATFS_SUPPORTER)) + continue + worldX += thing.x - owner.x + worldY += thing.y - owner.y + break + worldX *= 32 + worldY *= 32 + var/list/relevantHitboxes + for(var/list/boundingBox in boundingBoxes["[ownerDirection]"]) + relevantHitboxes[boundingBox] = DIST_EUCLIDIAN_2D((boundingBox[1]+boundingBox[3])/2, (boundingBox[2]+boundingBox[4])/2, startX, startY) + for(var/index in 1 to (length(relevantHitboxes)-1)) + if(relevantHitboxes[index] > relevantHitboxes[index+1]) + relevantHitboxes[index+1] += relevantHitboxes[index] + relevantHitboxes[index] = relevantHitboxes[index+1] - relevantHitboxes[index] + relevantHitboxes[index+1] -= relevantHitboxes[index] + index = max(1, index - 1) + for(var/list/boundingData in relevantHitboxes) + if((boundingData[5]+worldZ)> max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ)> max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[1] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[2] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[4] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[3] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + return TRUE + return FALSE + + +/datum/hitboxDatum/mob + +/datum/hitboxDatum/mob/calculateAimingLevels() + var/median + var/volumeSum + var/calculatedVolume = 0 + if(length(medianLevels)) + return + medianLevels = list() + for(var/state in boundingBoxes) + medianLevels[state] = list() + for(var/direction in list(NORTH, SOUTH, EAST , WEST)) + median = 0 + volumeSum = 0 + for(var/list/boundingBox in boundingBoxes[state]["[direction]"]) + calculatedVolume = (boundingBox[4] - boundingBox[2]) * (boundingBox[3] - boundingBox[1]) + median += ((boundingBox[5] + boundingBox[6])/2) * calculatedVolume + volumeSum += calculatedVolume + medianLevels[state]["[direction]"] = median / volumeSum + +/datum/hitboxDatum/mob/getAimingLevel(atom/shooter, defZone, atom/owner) + var/mob/living/perceivedOwner = owner + if(defZone == null || (!(defZone in defZoneToLevel["[perceivedOwner.lying]"]))) + return medianLevels["[perceivedOwner.lying]"]["[owner.dir]"] + if(defZoneToLevel[defZone] == HBF_USEMEDIAN) + return medianLevels["[perceivedOwner.lying]"]["[owner.dir]"] + message_admins("Returned [defZoneToLevel["[perceivedOwner.lying]"][defZone]] for [defZone]") + return defZoneToLevel["[perceivedOwner.lying]"][defZone] + +/datum/hitboxDatum/mob/intersects(atom/owner, ownerDirection, startX, startY, startZ, pStepX, pStepY, pStepZ, pHitFlags) + var/worldX + var/worldY + var/worldZ + worldX = owner.x * PPT + worldY = owner.y * PPT + worldZ = owner.z * PPT + var/mob/living/perceivedOwner = owner + for(var/list/boundingData in boundingBoxes["[perceivedOwner.lying]"]["[owner.dir]"]) + if((boundingData[5]+worldZ)> max(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ)> max(startZ,startZ+*pStepZ)) + continue + if((boundingData[5]+worldZ) < min(startZ,startZ+*pStepZ) && (boundingData[6]+worldZ) < min(startZ,startZ+*pStepZ)) + continue + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[1] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + *pHitFlags = boundingData[7] + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[2] + worldY, pStepX, pStepY)) + *pHitFlags = boundingData[7] + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[1] + worldX, boundingData[4] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + *pHitFlags = boundingData[7] + return TRUE + if(lineIntersect(startX, startY, startX+*pStepX, startY+*pStepY, boundingData[3] + worldX, boundingData[2] + worldY, boundingData[3] + worldX, boundingData[4] + worldY, pStepX, pStepY)) + *pHitFlags = boundingData[7] + return TRUE + return FALSE + +/datum/hitboxDatum/mob/visualize(mob/living/owner) + for(var/list/hitbox in boundingBoxes["[owner.lying]"]["[owner.dir]"]) + var/icon/Icon = icon('icons/hitbox.dmi', "box") + var/multX = hitbox[3] - hitbox[1] + 1 + var/multY = hitbox[4] - hitbox[2] + 1 + Icon.Scale(multX, multY) + var/mutable_appearance/newOverlay = mutable_appearance(Icon, "hitbox") + newOverlay.color = RANDOM_RGB + newOverlay.pixel_x = hitbox[1] - 1 + newOverlay.pixel_y = hitbox[2] - 1 + newOverlay.alpha = 200 + owner.overlays.Add(newOverlay) + +/datum/hitboxDatum/mob/human + boundingBoxes = list( + "0" = list( + LISTNORTH = list( + BBOX(11,1,21,8,LEVEL_TURF, LEVEL_TABLE, HB_LEGS), // LEGS + BBOX(11,9,21,11,LEVEL_TABLE, LEVEL_GROIN, HB_GROIN), // GROIN + BBOX(9,12,23,20, LEVEL_GROIN, LEVEL_CHEST, HB_CHESTARMS), // CHEST + ARMS + BBOX(11,12,21,22, LEVEL_GROIN, LEVEL_CHEST, HB_CHESTARMS), // CHEST + ARMS + BBOX(13,23,19,28, LEVEL_CHEST, LEVEL_HEAD, HB_HEAD) // HEAD + ), + LISTSOUTH = list( + BBOX(11,1,21,8,LEVEL_TURF, LEVEL_TABLE, HB_LEGS), // LEGS + BBOX(11,9,21,11,LEVEL_TABLE, LEVEL_GROIN, HB_GROIN), // GROIN + BBOX(9,12,23,20, LEVEL_GROIN, LEVEL_CHEST, HB_CHESTARMS), // CHEST + ARMS + BBOX(11,12,21,22, LEVEL_GROIN, LEVEL_CHEST, HB_CHESTARMS), // CHEST + ARMS + BBOX(13,23,19,28, LEVEL_CHEST, LEVEL_HEAD, HB_HEAD) // HEAD + ), + LISTEAST = list( + BBOX(14,1,19,9, LEVEL_TURF, LEVEL_TABLE, HB_LEGS), // LEGS + BBOX(14,10,21,12, LEVEL_TABLE, LEVEL_GROIN, HB_GROIN), // GROIN + BBOX(13,12,21,22, LEVEL_GROIN , LEVEL_CHEST, HB_CHESTARMS), // ARMS AND CHEST + BBOX(13,12,20,28, LEVEL_CHEST, LEVEL_HEAD, HB_HEAD) // HEAD + ), + LISTWEST = list( + BBOX(14,1,19,9, LEVEL_TURF, LEVEL_TABLE, HB_LEGS), // LEGS + BBOX(14,10,21,12, LEVEL_TABLE, LEVEL_GROIN, HB_GROIN), // GROIN + BBOX(13,12,21,22, LEVEL_GROIN , LEVEL_CHEST, HB_CHESTARMS), // ARMS AND CHEST + BBOX(13,12,20,28, LEVEL_CHEST, LEVEL_HEAD, HB_HEAD) // HEAD + ) + ), + "1" = list( + LISTNORTH = list( + BBOX(1,11,9,23, LEVEL_TURF, LEVEL_TURF + 1, HB_LEGS), + BBOX(9,12,11,22, LEVEL_TURF + 1, LEVEL_TURF + 2, HB_GROIN), + BBOX(12,10,22,24, LEVEL_TURF + 2 , LEVEL_TURF + 3, HB_CHESTARMS), + BBOX(23,14,28,20, LEVEL_TURF + 3, LEVEL_TURF + 4, HB_HEAD) + ), + LISTSOUTH = list( + BBOX(1,11,9,23, LEVEL_TURF, LEVEL_TURF + 1, HB_LEGS), + BBOX(9,12,11,22, LEVEL_TURF + 1, LEVEL_TURF + 2, HB_GROIN), + BBOX(12,10,22,24, LEVEL_TURF + 2 , LEVEL_TURF + 3, HB_CHESTARMS), + BBOX(23,14,28,20, LEVEL_TURF + 3, LEVEL_TURF + 4, HB_HEAD) + ), + LISTEAST = list( + BBOX(1,14,10,19, LEVEL_TURF, LEVEL_TURF + 1, HB_LEGS), + BBOX(9,14,12,20, LEVEL_TURF + 1, LEVEL_TURF + 2 , HB_GROIN), + BBOX(11,12,23,21, LEVEL_TURF + 2, LEVEL_TURF + 3, HB_CHESTARMS), + BBOX(24,13,29,20, LEVEL_TURF + 3, LEVEL_TURF + 4, HB_HEAD) + ), + LISTWEST = list( + BBOX(1,14,10,19, LEVEL_TURF, LEVEL_TURF + 1, HB_LEGS), + BBOX(9,14,12,20, LEVEL_TURF + 1, LEVEL_TURF + 2 , HB_GROIN), + BBOX(11,12,23,21, LEVEL_TURF + 2, LEVEL_TURF + 3, HB_CHESTARMS), + BBOX(24,13,29,20, LEVEL_TURF + 3, LEVEL_TURF + 4, HB_HEAD) + ) + ) + ) + defZoneToLevel = list( + "0" = list( + BP_EYES = (LEVEL_HEAD + LEVEL_CHEST)/2, + BP_MOUTH = (LEVEL_HEAD + LEVEL_CHEST)/2, + BP_HEAD = (LEVEL_HEAD + LEVEL_CHEST)/2, + BP_CHEST = (LEVEL_CHEST + LEVEL_GROIN)/2, + BP_R_ARM = (LEVEL_CHEST + LEVEL_GROIN)/2, + BP_L_ARM = (LEVEL_CHEST + LEVEL_GROIN)/2, + BP_GROIN = (LEVEL_GROIN + LEVEL_TABLE)/2, + BP_L_LEG = (LEVEL_TURF + LEVEL_TABLE)/2, + BP_R_LEG = (LEVEL_TURF + LEVEL_TABLE)/2 + ), + "1" = list( + BP_EYES = (LEVEL_TURF + 3 + LEVEL_TURF + 4)/2, + BP_MOUTH = (LEVEL_TURF + 3 + LEVEL_TURF + 4)/2, + BP_HEAD = (LEVEL_TURF + 3 + LEVEL_TURF + 4)/2, + BP_CHEST = (LEVEL_TURF + 2 + LEVEL_TURF + 1)/2, + BP_R_ARM = (LEVEL_TURF + 2 + LEVEL_TURF + 1)/2, + BP_L_ARM = (LEVEL_TURF + 2 + LEVEL_TURF + 1)/2, + BP_GROIN = (LEVEL_TURF + 1 + LEVEL_TURF + 2)/2, + BP_L_LEG = (LEVEL_TURF + 1 + LEVEL_TURF)/2, + BP_R_LEG = (LEVEL_TURF + 1 + LEVEL_TURF)/2 + ) + ) + + + + + + diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6e2dd353de..4412b013f3 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -22,6 +22,8 @@ GLOBAL_LIST(projectileDamageConstants) spawn_blacklisted = TRUE spawn_frequency = 0 spawn_tags = null + animate_movement = NO_STEPS + glide_size = 8 /// Ammo is heavy weight = 10 var/bumped = FALSE //Prevents it from hitting more than one guy at once @@ -37,7 +39,6 @@ GLOBAL_LIST(projectileDamageConstants) var/atom/original = null // the target clicked (not necessarily where the projectile is headed). Should probably be renamed to 'target' or something. var/turf/starting = null // the projectile's starting turf var/list/permutated = list() // we've passed through these atoms, don't try to hit them again - var/height // starts undefined, used for Zlevel shooting var/p_x = 16 var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center @@ -101,6 +102,26 @@ GLOBAL_LIST(projectileDamageConstants) var/matrix/effect_transform // matrix to rotate and scale projectile effects - putting it here so it doesn't // have to be recreated multiple times + var/datum/bullet_data/dataRef = null + +/// Returns 0 , no mod to aiming level +/obj/item/projectile/getAimingLevel(atom/shooter, defZone) + return 0 + +/// Fun interaction time - 2 bullets colliding mid air ! SPCR 2024 +/obj/item/projectile/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + // yep , it checks itself , more efficient to handle it here.. + if(P == src) + return PROJECTILE_CONTINUE + if(abs(P.dataRef.globalZ - dataRef.globalZ) > 0.1) + return PROJECTILE_CONTINUE + if(abs(P.dataRef.globalX - dataRef.globalX) > 0.1) + return PROJECTILE_CONTINUE + if(abs(P.dataRef.globalY - dataRef.globalY) > 0.1) + return PROJECTILE_CONTINUE + // congratulations , you have 2 intersecting bullets... + return PROJECTILE_STOP + /// This is done to save a lot of memory from duplicated damage lists. /// The list is also copied whenever PrepareForLaunch is called and modified as needs to be /obj/item/projectile/Initialize() @@ -212,8 +233,8 @@ GLOBAL_LIST(projectileDamageConstants) return /obj/item/projectile/proc/on_hit(atom/target, def_zone = null) - if(!isliving(target)) return 0 - if(isanimal(target)) return 0 + if(!isliving(target)) return FALSE + if(isanimal(target)) return FALSE var/mob/living/L = target L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy) return TRUE @@ -247,7 +268,7 @@ GLOBAL_LIST(projectileDamageConstants) return TRUE /obj/item/projectile/proc/check_fire(atom/target as mob, mob/living/user as mob) //Checks if you can hit them or not. - check_trajectory(target, user, pass_flags, flags) + check_trajectory(list(user.x,user.y,user.z), list(target.x, target.y, target.z),null,null, target) //sets the click point of the projectile using mouse input params /obj/item/projectile/proc/set_clickpoint(params) @@ -258,14 +279,14 @@ GLOBAL_LIST(projectileDamageConstants) p_y = text2num(mouse_control["icon-y"]) //called to launch a projectile -/obj/item/projectile/proc/launch(atom/target, target_zone, x_offset = 0, y_offset = 0, angle_offset = 0, proj_sound, user_recoil = 0) +/obj/item/projectile/proc/launch(atom/target, atom/firer, targetZone, xOffset = 0, yOffset = 0, zOffset = 0, zStart = 0, angleOffset = 0, proj_sound, user_recoil = 0) var/turf/curloc = get_turf(src) var/turf/targloc = get_turf(target) if (!istype(targloc) || !istype(curloc)) return TRUE if(targloc == curloc) //Shooting something in the same turf - target.bullet_act(src, target_zone) + target.bullet_act(src, targetZone) on_impact(target) qdel(src) return FALSE @@ -274,23 +295,35 @@ GLOBAL_LIST(projectileDamageConstants) playsound(proj_sound) original = target - def_zone = target_zone + def_zone = targetZone - var/distance = get_dist(curloc, original) - check_hit_zone(distance, user_recoil) - setup_trajectory(curloc, targloc, x_offset, y_offset, angle_offset) //plot the initial trajectory - Process() + muzzle_effect(effect_transform) + var/list/currentCoords = list() + currentCoords.Add(x*PPT+HPPT + pixel_x) + currentCoords.Add(y*PPT+HPPT + pixel_y) + var/zCoords = z * PPT + zStart + if(ismob(firer)) + var/mob/living = firer + if(living.lying) + zCoords += LEVEL_LYING + else + zCoords += LEVEL_CHEST - 3 + currentCoords.Add(zCoords) + var/list/targetCoords = list() + targetCoords.Add(target.x*PPT+target.pixel_x+xOffset) + targetCoords.Add(target.y*PPT+target.pixel_y+yOffset) + targetCoords.Add(target.z*PPT+target.pixel_z+zOffset + target.getAimingLevel(firer, targetZone)) + new /datum/bullet_data(src, targetZone, firer, currentCoords, targetCoords, 48, angleOffset, 50) return FALSE //called to launch a projectile from a gun -/obj/item/projectile/proc/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, x_offset=0, y_offset=0, angle_offset) +/obj/item/projectile/proc/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, xOffset=0, yOffset=0, zOffset=0, angleOffset) if(user == target) //Shooting yourself user.bullet_act(src, target_zone) qdel(src) return FALSE - forceMove(get_turf(user)) var/recoil = 0 @@ -305,12 +338,6 @@ GLOBAL_LIST(projectileDamageConstants) forceMove(get_turf(H.client.eye)) if(!(loc.Adjacent(target))) forceMove(get_turf(H)) - if(config.z_level_shooting && H.client.eye == H.shadow && !height) // Player is watching a higher zlevel - var/newTurf = get_turf(H.shadow) - if(!(locate(/obj/structure/catwalk) in newTurf)) // Can't shoot through catwalks - forceMove(newTurf) - height = HEIGHT_HIGH // We are shooting from below, this protects resting players at the expense of windows - original = get_turf(original) // Aim at turfs instead of mobs, to ensure we don't hit players // Special case for mechs, in a ideal world this should always go for the top-most atom. if(istype(launcher.loc, /obj/item/mech_equipment)) @@ -319,18 +346,7 @@ GLOBAL_LIST(projectileDamageConstants) firer = user shot_from = launcher.name silenced = launcher.item_flags & SILENT - - return launch(target, target_zone, x_offset, y_offset, angle_offset, user_recoil = recoil) - -//Used to change the direction of the projectile in flight. -/obj/item/projectile/proc/redirect(new_x, new_y, atom/starting_loc, mob/new_firer) - var/turf/new_target = locate(new_x, new_y, src.z) - - original = new_target - if(new_firer) - firer = src - - setup_trajectory(starting_loc, new_target) + return launch(target,user, target_zone, xOffset, yOffset,zOffset, angleOffset, user_recoil = recoil) /obj/item/projectile/proc/istargetloc(mob/living/target_mob) if(target_mob && original) @@ -385,16 +401,13 @@ GLOBAL_LIST(projectileDamageConstants) /obj/item/projectile/proc/attack_mob(mob/living/target_mob, miss_modifier=0) if(!istype(target_mob)) return + message_admins("Called attack mob") //roll to-hit miss_modifier = 0 var/result = PROJECTILE_CONTINUE - if(config.z_level_shooting && height == HEIGHT_HIGH) - if(target_mob.resting == TRUE || target_mob.stat == TRUE) - return FALSE // Bullet flies overhead - if(target_mob != original) // If mob was not clicked on / is not an NPC's target, checks if the mob is concealed by cover var/turf/cover_loc = get_step(get_turf(target_mob), get_dir(get_turf(target_mob), starting)) for(var/obj/O in cover_loc) @@ -486,7 +499,105 @@ GLOBAL_LIST(projectileDamageConstants) else return FALSE +/// We don't care about order since we are just simulating to see wheter we can reach something or not +/proc/simulateBulletScan(turf/scanning, atom/firer, bulletDir, startX, startY, startZ, StepX, StepY, StepZ, passFlags) + . = PROJECTILE_CONTINUE + var/list/hittingList = scanning.contents.Copy() + scanning + for(var/atom/thing as anything in hittingList) + if(thing.atomFlags & AF_IGNORE_ON_BULLETSCAN) + continue + if(thing.hitbox && thing.hitbox.intersects(thing, thing.dir, startX, startY, startZ, &StepX, &StepY, &StepZ)) + if(istype(thing, /obj/structure/window) && passFlags & PASSGLASS) + continue + if(istype(thing, /obj/structure/grille) && passFlags & PASSGRILLE) + continue + if(istype(thing, /obj/structure/table) && passFlags & PASSTABLE) + continue + return PROJECTILE_STOP + if(!length(thing.attached)) + continue + for(var/atom/possibleTarget as anything in thing.attached) + if(thing.attached[possibleTarget] & ATFS_IGNORE_HITS) + continue + if(possibleTarget.attached[thing] & ATFA_DIRECTIONAL_HITTABLE && !(possibleTarget.dir & reverse_dir[bulletDir])) + continue + if(possibleTarget.attached[thing] & ATFA_DIRECTIONAL_HITTABLE_STRICT && !(possibleTarget.dir == reverse_dir[bulletDir])) + continue + if(possibleTarget.hitbox && possibleTarget.hitbox.intersects(thing, thing.dir, startX, startY, startZ, &StepX, &StepY, &StepZ)) + if(istype(thing, /obj/structure/window) && passFlags & PASSGLASS) + continue + if(istype(thing, /obj/structure/grille) && passFlags & PASSGRILLE) + continue + if(istype(thing, /obj/structure/table) && passFlags & PASSTABLE) + continue + return PROJECTILE_STOP + return PROJECTILE_CONTINUE + +/// The lower the index , the higher the priority. If you add new paths to the list , make sure to increase the amount of lists in scanTurf below. +#define HittingPrioritiesList list(/obj/machinery/door/blast/shutters/glass, /mob/living,/obj/structure/multiz/stairs/active,/obj/structure,/atom) +/obj/item/projectile/proc/scanTurf(turf/scanning, bulletDir, startX, startY, startZ, pStepX, pStepY, pStepZ) + . = PROJECTILE_CONTINUE + if(atomFlags & AF_VISUAL_MOVE) + return + + var/list/hitboxesList = list() + + for(var/atom/target as anything in scanning.contents) + if(target.atomFlags & AF_IGNORE_ON_BULLETSCAN) + continue + if(target in dataRef.cannotHit) + continue + if(target == firer) + continue + if(target == src) + continue + if(!target.hitbox) + message_admins("[src] [src.type] has no hitbox!") + continue + /// third slot rezerved for flags passed back by hitbox intersect + var/hitFlags = null + + var/hitboxIntersect = target.hitbox.intersects(target, target.dir, startX, startY, startZ, pStepX, pStepY, pStepZ, &hitFlags) + if(target.hitbox && !hitboxIntersect) + continue + hitboxesList.Add(list(hitboxIntersect, hitFlags, target)) + for(var/atom/possibleTarget as anything in target.attached) + if(target.attached[possibleTarget] & ATFS_IGNORE_HITS) + continue + if(possibleTarget.attached[target] & ATFA_DIRECTIONAL_HITTABLE && !(possibleTarget.dir & reverse_dir[bulletDir])) + continue + if(possibleTarget.attached[target] & ATFA_DIRECTIONAL_HITTABLE_STRICT && !(possibleTarget.dir == reverse_dir[bulletDir])) + continue + var/intersectDistance = possibleTarget.hitbox.intersects(possibleTarget, possibleTarget.dir, startX, startY,startZ, pStepX, pStepY, pStepZ, &hitFlags) + if(intersectDistance) + if(target.attached[possibleTarget] & ATFS_PRIORITIZE_ATTACHED_FOR_HITS) + var/listReference = hitboxesList[length(hitboxesList)] + hitboxesList[length(hitboxesList)]= list(intersectDistance, hitFlags, possibleTarget) + hitboxesList.Add(listReference) + else + hitboxesList.Add(list(intersectDistance, hitFlags, possibleTarget)) + + var/temp + for(var/i in 1 to length(hitboxesList) - 1) + if(hitboxesList[i][1] < hitboxesList[i+1][1]) + temp = hitboxesList[i] + hitboxesList[i] = hitboxesList[i+1] + hitboxesList[i+1] = temp + i = max(i-2, 1) + + for(var/i in 1 to length(hitboxesList)) + var/atom/target = hitboxesList[i][3] + if(target.bullet_act(src, def_zone, hitboxesList[i][2]) & PROJECTILE_STOP) + onBlockingHit(target) + return PROJECTILE_STOP + + return PROJECTILE_CONTINUE + + +/* /obj/item/projectile/Bump(atom/A as mob|obj|turf|area, forced = FALSE) + if(!density) + return TRUE if(A == src) return FALSE if(A == firer) @@ -529,10 +640,6 @@ GLOBAL_LIST(projectileDamageConstants) else passthrough = (A.bullet_act(src, def_zone) == PROJECTILE_CONTINUE) //backwards compatibility if(isturf(A)) - if(QDELETED(src)) // we don't want bombs to explode once for every time bullet_act is called - on_impact(A) - invisibility = 101 - return TRUE // see that next line? it can overload the server. for(var/obj/O in A) // if src's bullet act spawns more objs, the list will increase, if(O.density) O.bullet_act(src) // causing exponential growth due to the spawned obj spawning itself @@ -559,15 +666,40 @@ GLOBAL_LIST(projectileDamageConstants) return FALSE //stop flying - on_impact(A) + onBlockingHit(A) + return TRUE +*/ - density = FALSE - invisibility = 101 +/obj/item/projectile/proc/onBlockingHit(atom/A) + on_impact(A) + #ifdef BULLETDEBUG + message_admins("[src] Has hit [A]") + #endif + dataRef.lifetime = 0 + +/obj/effect/bullet_sparks + name = "bullet hit" + icon = 'icons/effects/effects.dmi' + icon_state = "nothing" + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/obj/effect/bullet_sparks/Initialize(mapload, ...) + . = ..() + flick("bullet_hit", src) + QDEL_IN(src, 3 SECONDS) - qdel(src) - return TRUE +/// Called to properly delete a bullet after a delay from its impact, ensures the animation for it travelling finishes +/obj/item/projectile/proc/finishDeletion() + var/atom/visEffect = new /obj/effect/bullet_sparks(loc) + visEffect.layer = ABOVE_ALL_MOB_LAYER + visEffect.pixel_x = src.pixel_x + visEffect.pixel_y = src.pixel_y + visEffect.transform = src.transform + visEffect.update_plane() + QDEL_IN(src, SSbullets.wait) /obj/item/projectile/explosion_act(target_power, explosion_handler/handler) return 0 @@ -575,70 +707,9 @@ GLOBAL_LIST(projectileDamageConstants) /obj/item/projectile/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) return TRUE -/obj/item/projectile/Process() - var/first_step = TRUE - - spawn while(src && src.loc) - if(kill_count-- < 1) - on_impact(src.loc) //for any final impact behaviours - qdel(src) - return - if((!( current ) || loc == current)) - current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - qdel(src) - return - - trajectory.increment() // increment the current location - location = trajectory.return_location(location) // update the locally stored location data - - if(!location) - qdel(src) // if it's left the world... kill it - return - - before_move() - Move(location.return_turf()) - pixel_x = location.pixel_x - pixel_y = location.pixel_y - - if(!bumped && !QDELETED(original) && !isturf(original)) - // this used to be loc == get_turf(original) , but this would break incase the original was inside something and hit them without hitting the outside - if(loc == original.loc) - if(!(original in permutated)) - if(Bump(original)) - return - - if(first_step) - muzzle_effect(effect_transform) - first_step = FALSE - else if(!bumped) - tracer_effect(effect_transform) - luminosity_effect() - - if(!hitscan) - sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon - /obj/item/projectile/proc/before_move() return FALSE -/obj/item/projectile/proc/setup_trajectory(turf/startloc, turf/targloc, x_offset = 0, y_offset = 0, angle_offset) - // setup projectile state - starting = startloc - current = startloc - yo = targloc.y - startloc.y + y_offset - xo = targloc.x - startloc.x + x_offset - - // plot the initial trajectory - trajectory = new() - trajectory.setup(starting, original, pixel_x, pixel_y, angle_offset) - - // generate this now since all visual effects the projectile makes can use it - effect_transform = new() - effect_transform.Scale(trajectory.return_hypotenuse(), 1) - effect_transform.Turn(-trajectory.return_angle()) //no idea why this has to be inverted, but it works - - transform = turn(transform, -(trajectory.return_angle() + 90)) //no idea why 90 needs to be added, but it works - /obj/item/projectile/proc/muzzle_effect(var/matrix/T) //This can happen when firing inside a wall, safety check if (!location) @@ -734,86 +805,63 @@ GLOBAL_LIST(projectileDamageConstants) return damageTotal > 0 ? (damageLeft / damageTotal) :0 -/obj/item/projectile/get_matter() - . = matter?.Copy() - if(isnull(.)) // empty bullets have no need for matter handling - return - if(istype(loc, /obj/item/ammo_casing)) // if this is part of a stack - var/obj/item/ammo_casing/case = loc - if(case.amount > 1) // if there is only one, there is no need to multiply - for(var/mattertype in .) - .[mattertype] *= case.amount - - -//"Tracing" projectile -/obj/item/projectile/test //Used to see if you can hit them. - invisibility = 101 //Nope! Can't see me! - yo = null - xo = null - var/result = 0 //To pass the message back to the gun. - -/obj/item/projectile/test/Bump(atom/A as mob|obj|turf|area, forced) - if(A == firer) - forceMove(A.loc) - return //cannot shoot yourself - if(istype(A, /obj/item/projectile)) - return - if(isliving(A) || istype(A, /mob/living/exosuit)) - result = 2 //We hit someone, return 1! - return - result = 1 - return - -/obj/item/projectile/test/launch(atom/target, target_zone, x_offset, y_offset, angle_offset, proj_sound, user_recoil) - var/turf/curloc = get_turf(src) - var/turf/targloc = get_turf(target) - if(!curloc || !targloc) - return 0 - - original = target - - //plot the initial trajectory - setup_trajectory(curloc, targloc) - return Process(targloc) - -/obj/item/projectile/test/Process(turf/targloc) - while(src) //Loop on through! - if(result) - return (result - 1) - if((!( targloc ) || loc == targloc)) - targloc = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) //Finding the target turf at map edge - - trajectory.increment() // increment the current location - location = trajectory.return_location(location) // update the locally stored location data - - Move(location.return_turf()) - - var/mob/living/M = locate() in get_turf(src) - if(istype(M)) //If there is someting living... - return 1 //Return 1 - else - M = locate() in get_step(src,targloc) - if(istype(M)) - return 1 - -//Helper proc to check if you can hit them or not. -/proc/check_trajectory(atom/target as mob|obj, atom/firer as mob|obj, var/pass_flags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null) - if(!istype(target) || !istype(firer)) - return 0 - - var/obj/item/projectile/test/trace = new /obj/item/projectile/test(get_turf(firer)) //Making the test.... - - //Set the flags and pass flags to that of the real projectile... - if(!isnull(flags)) - trace.flags = flags - trace.pass_flags = pass_flags - - var/output = trace.launch(target) //Test it! - qdel(trace) //No need for it anymore - return output //Send it back to the gun! - /proc/get_proj_icon_by_color(var/obj/item/projectile/P, var/color) var/icon/I = new(P.icon, P.icon_state) I.Blend(color) return I +/proc/check_trajectory(list/startingCoordinates, list/targetCoordinates, passFlags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null, atom/target, turfLimit = 8) + var/turf/movementTurf + var/turf/targetTurf = get_turf(target) + var/currentX = startingCoordinates[1] + var/currentY = startingCoordinates[2] + var/currentZ = startingCoordinates[3] + var/turf/currentTurf = locate(round(currentX/PPT), round(currentY/PPT), round(currentZ/PPT)) + var/bulletDir + var/stepX + var/stepY + var/stepZ + var/angle = ATAN2(targetCoordinates[2] - startingCoordinates[2], targetCoordinates[1] - startingCoordinates[1]) + var/ratioX = sin(angle) + var/ratioY = cos(angle) + var/ratioZ = (targetCoordinates[3] - startingCoordinates[3])/DIST_EUCLIDIAN_2D(startingCoordinates[1], startingCoordinates[2], targetCoordinates[1], targetCoordinates[2]) + var/traveledTurfs = 0 + #ifdef BULLETDEBUG + var/list/colored = list() + #endif + while(currentTurf != targetTurf && traveledTurfs < turfLimit) + bulletDir = (EAST*(ratioX>0)) | (WEST*(ratioX<0)) | (NORTH*(ratioY>0)) | (SOUTH*(ratioY<0)) | (UP*(ratioZ>0)) | (DOWN*(ratioZ<0)) + stepX = ratioX * HPPT + stepY = ratioY * HPPT + stepZ = ratioZ * HPPT + movementTurf = locate(round((currentX+stepX)/PPT),round((currentY+stepY)/PPT),round((currentZ+stepZ)/PPT)) + if(!movementTurf) + return FALSE + if(movementTurf == currentTurf) + currentX += stepX + currentY += stepY + currentZ += stepZ + continue + if(simulateBulletScan(movementTurf, bulletDir, currentX, currentY, currentZ, &stepX, &stepY, &stepZ, passFlags) == PROJECTILE_STOP) + #ifdef BULLETDEBUG + movementTurf.color = COLOR_RED + colored.Add(movementTurf) + #endif + return movementTurf == targetTurf + currentX += stepX + currentY += stepY + currentZ += stepZ + currentTurf = movementTurf + traveledTurfs++ + #ifdef BULLETDEBUG + movementTurf.color = COLOR_GREEN + colored.Add(movementTurf) + #endif + + #ifdef BULLETDEBUG + if(length(colored)) + QDEL_LIST_IN(colored, 2 SECONDS) + #endif + return FALSE + + diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index ec40c9e142..5bf0ec16d2 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -116,7 +116,7 @@ tracer_type = /obj/effect/projectile/psychic_laser_heavy/tracer impact_type = /obj/effect/projectile/psychic_laser_heavy/impact -/obj/item/projectile/beam/psychic/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, x_offset=0, y_offset=0, angle_offset) +/obj/item/projectile/beam/psychic/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, x_offset=0, y_offset=0,zOffset, angle_offset) holder = launcher if(holder && holder.contractor) contractor = holder.contractor diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 4c6ab0fa92..2d2f0b475d 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -81,6 +81,33 @@ return 0 +/obj/item/projectile/bullet/shotgunBuckshot + name = "12 Gauge buck pellet" + damage_types = list( + ARMOR_BULLET = list( + DELEM(BRUTE, 12) + ) + ) + /// Wheter we are the initla buckshot pellet that should create the rest or not + var/isInitial = TRUE + /// Amount of pellets to create / replicate + var/pelletCount = 15 + /// Angle offset. This is forced by the shotgun if fired from one. If not, then the default is used + var/angleOffset = 24 + +/obj/item/projectile/bullet/shotgunBuckshot/launch(atom/target, target_zone, x_offset, y_offset, angle_offset, proj_sound, user_recoil) + if(!isInitial) + return ..() + else while(pelletCount) + pelletCount-- + var/obj/item/projectile/bullet/shotgunBuckshot/fellowPellet = new(get_turf(src)) + fellowPellet.isInitial = FALSE + fellowPellet.firer = src.firer + fellowPellet.PrepareForLaunch() + var/angleBruh = rand(-angleOffset/2,angleOffset/2) + fellowPellet.launch(target, target_zone, x_offset , y_offset, angleBruh, null, null) + ..() + //For projectiles that actually represent clouds of projectiles /obj/item/projectile/bullet/pellet name = "shrapnel" //'shrapnel' sounds more dangerous (i.e. cooler) than 'pellet' @@ -98,15 +125,11 @@ wounding_mult = WOUNDING_SMALL matter = list(MATERIAL_STEEL = 0.4) -/obj/item/projectile/bullet/pellet/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, x_offset=0, y_offset=0, angle_offset) - for(var/entry in matter) // this allows for the projectile in the casing having the correct matter +/obj/item/projectile/bullet/pellet/launch_from_gun(atom/target, mob/user, obj/item/gun/launcher, target_zone, x_offset=0, y_offset=0,zOffset, angle_offset) + for(var/entry in matter) // this allows for the projectile in the casing having the correct matter matter[entry] /= pellets // yet disallows for pellet shrapnel created on impact multiplying the matter count . = ..() -/obj/item/projectile/bullet/pellet/Bumped() - . = ..() - bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine. - /obj/item/projectile/bullet/pellet/proc/get_pellets(var/distance) var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance var/remaining = pellets - pellet_loss diff --git a/code/modules/projectiles/projectile/bullettypes.dm b/code/modules/projectiles/projectile/bullettypes.dm index e1e7cb66e7..3aff88f36c 100644 --- a/code/modules/projectiles/projectile/bullettypes.dm +++ b/code/modules/projectiles/projectile/bullettypes.dm @@ -13,6 +13,8 @@ There are important things regarding this file: * Scrap ammunition has less armor divisor and more recoil without impacting raw damage. */ //Low-caliber pistols and SMGs .35 + + /obj/item/projectile/bullet/pistol name = ".35 caliber bullet" /// 24 with wound mult @@ -28,6 +30,7 @@ There are important things regarding this file: recoil = 3 matter = list(MATERIAL_STEEL = 0.05) + /obj/item/projectile/bullet/pistol/hv armor_divisor = 1.3 step_delay = 0.75 diff --git a/code/modules/projectiles/projectile/projectilegrenades.dm b/code/modules/projectiles/projectile/projectilegrenades.dm index 06becb32ab..f0c70f6766 100644 --- a/code/modules/projectiles/projectile/projectilegrenades.dm +++ b/code/modules/projectiles/projectile/projectilegrenades.dm @@ -51,7 +51,7 @@ /obj/item/projectile/bullet/grenade/frag name = "frag shell" - var/range = 7 + var/range = 4 var/f_type = /obj/item/projectile/bullet/pellet/fragment var/f_amount = 30 var/f_damage = 12 diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index a96bb42f4c..fbbf1d762f 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -117,7 +117,7 @@ // Splatter anything under us that survived the explosion. if(value != SD_EMPTY_TILE && T.contents.len) for(var/atom/movable/AM in T) - if(AM.simulated && !isobserver(AM)) + if(!isobserver(AM)) AM.explosion_act(700, null) // Also spawn doors and loot. diff --git a/code/modules/random_map/drop/droppod_doors.dm b/code/modules/random_map/drop/droppod_doors.dm index 6c7a6a18d7..020b78c53e 100644 --- a/code/modules/random_map/drop/droppod_doors.dm +++ b/code/modules/random_map/drop/droppod_doors.dm @@ -57,12 +57,8 @@ // Destroy turf contents. for(var/obj/O in origin) - if(!O.simulated) - continue qdel(O) //crunch for(var/obj/O in T) - if(!O.simulated) - continue qdel(O) //crunch // Hurl the mobs away. @@ -80,4 +76,4 @@ door_bottom.density = FALSE door_bottom.set_opacity(FALSE) door_bottom.dir = src.dir - door_bottom.icon_state = "rampbottom" \ No newline at end of file + door_bottom.icon_state = "rampbottom" diff --git a/code/modules/reagents/holder.dm b/code/modules/reagents/holder.dm index 3baec901dc..a53f98dc43 100644 --- a/code/modules/reagents/holder.dm +++ b/code/modules/reagents/holder.dm @@ -425,7 +425,7 @@ remove_any(amount) //If we don't do this, then only the spill amount above is removed, and someone can keep splashing with the same beaker endlessly /datum/reagents/proc/trans_id_to(atom/target, id, amount = 1, ignore_isinjectable = FALSE) - if (!target || !target.reagents || !target.simulated) + if (!target || !target.reagents) return amount = min(amount, get_reagent_amount(id)) @@ -454,7 +454,7 @@ return /datum/reagents/proc/touch_mob(mob/target) - if(!target || !istype(target) || !target.simulated) + if(!target || !istype(target)) return for(var/datum/reagent/current in reagent_list) @@ -463,7 +463,7 @@ update_total() /datum/reagents/proc/touch_turf(turf/target) - if(!target || !istype(target) || !target.simulated) + if(!target || !istype(target)) return if(istype(target, /turf/simulated/open)) var/turf/simulated/open/T = target @@ -478,7 +478,7 @@ return handled /datum/reagents/proc/touch_obj(obj/target) - if(!target || !istype(target) || !target.simulated) + if(!target || !istype(target)) return for(var/datum/reagent/current in reagent_list) @@ -497,7 +497,7 @@ return trans_to_mob(target, amount, CHEM_TOUCH, multiplier, copy) /datum/reagents/proc/trans_to_mob(mob/target, amount = 1, type = CHEM_BLOOD, multiplier = 1, copy = 0) // Transfer after checking into which holder... - if(!target || !istype(target) || !target.simulated) + if(!target || !istype(target)) return if(iscarbon(target)) var/mob/living/carbon/C = target @@ -520,7 +520,7 @@ R.touch_mob(target) /datum/reagents/proc/trans_to_turf(turf/target, amount = 1, multiplier = 1, copy = 0) // Turfs don't have any reagents (at least, for now). Just touch it. - if(!target || !target.simulated) + if(!target) return var/datum/reagents/R = new /datum/reagents(amount * multiplier) @@ -543,7 +543,7 @@ return /datum/reagents/proc/trans_to_obj(obj/target, amount = 1, multiplier = 1, copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. - if(!target || !target.simulated) + if(!target) return if(!target.reagents) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index dad45e5338..cb02089554 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -80,6 +80,7 @@ name = "water tank" desc = "A water tank. It is used to store high amounts of water." icon_state = "watertank" + hitbox = /datum/hitboxDatum/atom/reagentTank amount_per_transfer_from_this = 10 volume = 1500 starting_reagent = "water" @@ -108,6 +109,7 @@ desc = "A tank full of industrial welding fuel. Do not consume." description_antag = "Can have an assembly with a igniter attached for detonation upon a trigger. Can also use a screwdriver to leak fuel when dragged" icon = 'icons/obj/objects.dmi' + hitbox = /datum/hitboxDatum/atom/reagentTank icon_state = "weldtank" amount_per_transfer_from_this = 10 volume = 500 @@ -191,14 +193,12 @@ return ..() -/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(Proj.get_structure_damage()) if(istype(Proj.firer)) message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP).") log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).") - if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) ) - explode() /obj/structure/reagent_dispensers/fueltank/explosion_act(target_power, explosion_handler/handle) if(target_power > health) explode() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 2663c72589..e04fa77574 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -22,6 +22,7 @@ anchored = TRUE density = TRUE layer = LOW_OBJ_LAYER //This allows disposal bins to be underneath tables + hitbox = /datum/hitboxDatum/disposalUnit var/datum/gas_mixture/air_contents // internal reservoir var/mode = DISPOSALS_CHARGING var/flush = 0 // true if flush handle is pulled @@ -660,7 +661,7 @@ var/pipe_dir = 0 // bitmask of pipe directions dir = 0 // dir will contain dominant direction for junction pipes health = 10 // health points 0-10 - explosion_coverage = 0 + explosionCoverage = 0 layer = 2.3 // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map var/sortType = list() @@ -671,6 +672,8 @@ base_icon_state = icon_state return +/obj/structure/disposalpipe/bullet_act(obj/item/projectile/P, def_zone, hitboxFlags) + return PROJECTILE_CONTINUE // pipe is deleted // ensure if holder is present, it is expelled @@ -836,7 +839,7 @@ // test health for brokenness /obj/structure/disposalpipe/take_damage(damage) . = health - damage < 0 ? damage - (damage - health) : damage - . *= explosion_coverage + . *= explosionCoverage health -= damage if(health <= 0) broken(FALSE) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 5d4c3aaea2..38f5ff7b7c 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -8,6 +8,7 @@ active_power_usage = 0 interact_offline = TRUE req_access = list(access_keycard_auth) + atomFlags = AF_WALL_MOUNTED var/static/const/countdown = 3 MINUTES var/static/const/cooldown = 10 MINUTES var/static/list/ongoing_countdowns = list() diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm index 3188f50955..a8280f7c9e 100644 --- a/code/modules/shield_generators/shield.dm +++ b/code/modules/shield_generators/shield.dm @@ -244,17 +244,17 @@ Like for example singulo act and whatever. // Projectiles -/obj/effect/shield/bullet_act(obj/item/projectile/proj) +/obj/effect/shield/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) var/totalDam = 0 - var/dam = proj.getAllDamType(BURN) - take_damage(dam, SHIELD_DAMTYPE_HEAT, proj) + var/dam = Proj.getAllDamType(BURN) + take_damage(dam, SHIELD_DAMTYPE_HEAT, Proj) totalDam += dam - dam = proj.getAllDamType(BRUTE) - take_damage(dam, SHIELD_DAMTYPE_PHYSICAL, proj) + dam = Proj.getAllDamType(BRUTE) + take_damage(dam, SHIELD_DAMTYPE_PHYSICAL, Proj) totalDam += dam - dam = proj.get_total_damage() - totalDam + dam = Proj.get_total_damage() - totalDam if(dam > 0) - take_damage(dam, SHIELD_DAMTYPE_EM, proj) + take_damage(dam, SHIELD_DAMTYPE_EM, Proj) // Attacks with hand tools. Blocked by Hyperkinetic flag. diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 65e2ac7217..809387b50e 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -59,7 +59,7 @@ ..() -/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/shield/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) shieldHealth -= Proj.get_structure_damage() ..() check_failure() diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm index 669105c1bc..bf38a436d3 100644 --- a/code/modules/shieldgen/energy_field.dm +++ b/code/modules/shieldgen/energy_field.dm @@ -27,7 +27,7 @@ Stress(0.5 + target_power / 100) return 0 -/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj) +/obj/effect/energy_field/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) Stress(Proj.get_structure_damage() / 10) /obj/effect/energy_field/proc/Stress(var/severity) diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index 77e0aedc1c..b9e5487674 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -20,7 +20,7 @@ var/destroyed = 0 var/directwired = 1 // var/maxshieldload = 200 - var/obj/structure/cable/attached // the attached cable + var/obj/structure/cable/powerSupply // the powerSupply cable var/storedpower = 0 flags = CONDUCT //There have to be at least two posts, so these are effectively doubled @@ -247,7 +247,7 @@ src.cleanup(EAST) . = ..() -/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/shieldwallgen/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) storedpower -= 400 * Proj.get_structure_damage() ..() return @@ -315,7 +315,7 @@ gen_secondary.storedpower -= power_usage -/obj/machinery/shieldwall/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/shieldwall/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(needs_power) var/obj/machinery/shieldwallgen/G if(prob(50)) diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index e91da9a57e..4ae3ea4620 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -6,7 +6,6 @@ alpha = 120 anchored = TRUE unacidable = 1 - simulated = FALSE invisibility = 101 var/landmark_tag diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 096d714927..7a63234dd3 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -144,8 +144,6 @@ var/turf/dst_turf = turf_translation[src_turf] if(src_turf.is_solid_structure()) //in case someone put a hole in the shuttle and you were lucky enough to be under it for(var/atom/movable/AM in dst_turf) - if(!AM.simulated) - continue if(isliving(AM)) var/mob/living/bug = AM bug.gib() diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index 2a8e4d930c..c48ec6a791 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -97,7 +97,7 @@ to_chat(user, "You short out the console's ID checking system. It's now available to everyone!") return 1 -/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/computer/shuttle_control/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) visible_message("\The [Proj] ricochets off \the [src]!") /obj/machinery/computer/shuttle_control/explosion_act(target_power, explosion_handler/handler) diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm index 5828786ce2..afd8e09314 100644 --- a/code/modules/shuttles/shuttle_specops.dm +++ b/code/modules/shuttles/shuttle_specops.dm @@ -19,7 +19,7 @@ /datum/shuttle/autodock/ferry/specops/New() ..() - announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. + announcer = new /obj/item/device/radio/intercom/internal(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. announcer.config(list("Response Team" = 0)) /datum/shuttle/autodock/ferry/specops/proc/radio_announce(var/message) @@ -197,4 +197,4 @@ spawn(0) M.close() special_ops.readyreset()//Reset firealarm after the team launched. - //End Marauder launchpad. \ No newline at end of file + //End Marauder launchpad. diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm index a79f32bafc..e74a72dd28 100644 --- a/code/modules/tables/interactions.dm +++ b/code/modules/tables/interactions.dm @@ -7,7 +7,7 @@ return 1 if(air_group || (height==0)) return 1 if(istype(mover,/obj/item/projectile)) - return (check_cover(mover,target)) + return !(check_cover(mover,target)) if (flipped == 1) if (get_dir(loc, target) == dir) return !density @@ -19,52 +19,6 @@ return 1 return 0 -//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops. -/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) - - if(config.z_level_shooting) - if(P.height == HEIGHT_HIGH) - return TRUE // Bullet is too high to hit - P.height = (P.height == HEIGHT_LOW) ? HEIGHT_LOW : HEIGHT_CENTER - - if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close - return TRUE - if(get_dist(loc, P.trajectory.target) > 1 ) // Target turf must be adjacent for it to count as cover - return TRUE - var/valid = FALSE - if(!P.def_zone) - return TRUE // Emitters, or anything with no targeted bodypart will always bypass the cover - - var/targetzone = check_zone(P.def_zone) - if (targetzone in list(BP_R_LEG, BP_L_LEG)) - valid = TRUE //The legs are always concealed - if (ismob(P.original)) - var/mob/M = P.original - if (M.lying) - valid = TRUE //Lying down covers your whole body - if(flipped==1) - if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets - if (targetzone == BP_GROIN) - valid = TRUE - else - valid = FALSE //But only from one side - - // Bullet is low enough to hit the table - if(config.z_level_shooting && P.height == HEIGHT_LOW) - valid = TRUE - - if(valid) - var/pierce = P.check_penetrate(src) - health -= P.get_structure_damage()/2 - if (health > 0) - visible_message(SPAN_WARNING("[P] hits \the [src]!")) - return pierce - else - visible_message(SPAN_WARNING("[src] breaks down!")) - break_to_parts() - return TRUE - return TRUE - /obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf) if(istype(O) && O.checkpass(PASSTABLE)) return 1 diff --git a/code/modules/tables/rack.dm b/code/modules/tables/rack.dm index 7ce674c167..1aa14576a8 100644 --- a/code/modules/tables/rack.dm +++ b/code/modules/tables/rack.dm @@ -2,6 +2,7 @@ name = "rack" desc = "Different from the medieval version." icon = 'icons/obj/objects.dmi' + hitbox = /datum/hitboxDatum/atom/storageRack icon_state = "rack" can_plate = 0 can_reinforce = 0 @@ -25,6 +26,7 @@ name = "shelf" desc = "For showing off your collections of dust, electronics, the heads of your enemies and tools." icon_state = "shelf" + hitbox = /datum/hitboxDatum/atom/storageShelf diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index b665250ff2..b9ca2d4406 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -22,10 +22,11 @@ var/list/custom_table_appearance = list( layer = PROJECTILE_HIT_THRESHHOLD_LAYER throwpass = 1 matter = list(MATERIAL_STEEL = 2) + hitbox = /datum/hitboxDatum/atom/table var/flipped = 0 maxHealth = 10 health = 10 - explosion_coverage = 0.1 + explosionCoverage = 0.1 // For racks. var/can_reinforce = 1 @@ -76,7 +77,7 @@ var/list/custom_table_appearance = list( else amount *= TABLE_BRITTLE_MATERIAL_MULTIPLIER . = health - amount < 0 ? amount - health : initialdamage - . *= explosion_coverage + . *= explosionCoverage health -= amount if(health <= 0) visible_message(SPAN_WARNING("\The [src] breaks down!")) diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 09c5ae5b3c..1505d3ce99 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -74,7 +74,7 @@ ..() //cargo trains are open topped, so there is a chance the projectile will hit the mob ridding the train instead -/obj/vehicle/train/cargo/bullet_act(var/obj/item/projectile/Proj) +/obj/vehicle/train/cargo/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) if(buckled_mob && prob(70)) buckled_mob.bullet_act(Proj) return diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index ba9c439989..e7437b165d 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -137,7 +137,7 @@ else ..() -/obj/vehicle/bullet_act(var/obj/item/projectile/Proj) +/obj/vehicle/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) health -= Proj.get_structure_damage() ..() healthcheck() diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 644dbc4928..3f3a954759 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/hitbox.dmi b/icons/hitbox.dmi new file mode 100644 index 0000000000..22d38a044b Binary files /dev/null and b/icons/hitbox.dmi differ diff --git a/icons/mechs/mech_equipment.dmi b/icons/mechs/mech_equipment.dmi index 0c2c6540a3..a23ec911bf 100644 Binary files a/icons/mechs/mech_equipment.dmi and b/icons/mechs/mech_equipment.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index ac771156e0..aa1b6e3165 100755 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index a45f29ce25..5c35ca6489 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/buttons.dmi b/icons/obj/machines/buttons.dmi index 2f78222ff6..2d8a42f7d8 100644 Binary files a/icons/obj/machines/buttons.dmi and b/icons/obj/machines/buttons.dmi differ diff --git a/icons/obj/power_cond_white.dmi b/icons/obj/power_cond_white.dmi index 1b0930d766..41952eeef6 100644 Binary files a/icons/obj/power_cond_white.dmi and b/icons/obj/power_cond_white.dmi differ diff --git a/maps/CEVEris/_CEV_Eris.dmm b/maps/CEVEris/_CEV_Eris.dmm index 8cc28b8560..81331ebe1f 100644 --- a/maps/CEVEris/_CEV_Eris.dmm +++ b/maps/CEVEris/_CEV_Eris.dmm @@ -86,7 +86,7 @@ /obj/item/target, /obj/item/target, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -138,7 +138,7 @@ pixel_x = -26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/security/range) @@ -203,9 +203,7 @@ /turf/simulated/floor/tiled/dark, /area/eris/security/warden) "aaK" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/dark, /area/eris/security/warden) "aaL" = ( @@ -304,7 +302,7 @@ /area/eris/security/range) "aaW" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -332,9 +330,7 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/armory) "aba" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/closet, /obj/item/clothing/under/netrunner, /obj/item/clothing/under/netrunner, @@ -345,7 +341,7 @@ "abb" = ( /obj/structure/closet/wardrobe/sec, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -419,7 +415,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark, @@ -569,7 +565,7 @@ "abE" = ( /obj/machinery/deployable/barrier, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/cargo, /area/eris/security/armory) @@ -637,7 +633,7 @@ /area/eris/crew_quarters/toilet/medbay) "abO" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/eris/security/range) @@ -773,7 +769,7 @@ "acc" = ( /obj/structure/closet/wardrobe/color/orange, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -892,7 +888,7 @@ /area/eris/security/armory) "acp" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/security/armory) @@ -918,7 +914,7 @@ /area/eris/security/disposal) "acu" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -1031,7 +1027,7 @@ /area/eris/security/armory) "acF" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/alarm{ dir = 4; @@ -1108,12 +1104,7 @@ pixel_x = 25; pixel_y = 25 }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/sign/faction/ironhammer{ - pixel_y = 32 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -1121,6 +1112,9 @@ dir = 1; pixel_y = -22 }, +/obj/structure/sign/faction/ironhammer{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/security/armory) "acM" = ( @@ -1197,7 +1191,9 @@ /turf/simulated/floor/tiled/dark/techfloor, /area/eris/security/disposal) "acW" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -1262,7 +1258,7 @@ /area/eris/security/prison) "add" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/dark, @@ -1512,9 +1508,7 @@ /turf/simulated/floor/plating, /area/eris/security/exerooms) "adK" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/alarm{ pixel_y = 26 }, @@ -1663,17 +1657,17 @@ "aed" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/security/disposal) "aee" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/eris/security/prison) @@ -1734,10 +1728,10 @@ dir = 6 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/dark, @@ -1812,7 +1806,7 @@ "aev" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/eris/security/prison) @@ -1848,9 +1842,13 @@ /turf/simulated/floor/plating, /area/eris/security/exerooms) "aeB" = ( -/obj/structure/sign/faction/ironhammer, -/turf/simulated/wall/r_wall, -/area/eris/security/prison) +/obj/structure/table/rack, +/obj/spawner/lowkeyrandom, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel/brown_platform, +/area/eris/quartermaster/office) "aeC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -1879,10 +1877,11 @@ /area/eris/security/armory) "aeF" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/fireaxecabinet{ - pixel_y = -24 + pixel_y = -24; + dir = 1 }, /turf/simulated/floor/tiled/dark, /area/eris/security/armory) @@ -2144,7 +2143,7 @@ /area/eris/maintenance/section1deck5central) "afm" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/dark/techfloor_grid, @@ -2161,7 +2160,9 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/prison) "afo" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/camera/network/prison, /obj/machinery/alarm{ pixel_y = 26 @@ -2203,9 +2204,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/wood, /area/eris/command/commander) "afv" = ( @@ -2271,7 +2270,7 @@ /area/eris/security/prisoncells) "afG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/camera/network/security{ @@ -2527,7 +2526,7 @@ /area/eris/maintenance/section2deck5starboard) "ago" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/security/maintpost) @@ -2597,7 +2596,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck5central) "agv" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/prisoncells) "agw" = ( @@ -2645,7 +2646,7 @@ /area/eris/security/exerooms) "agz" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -2753,7 +2754,7 @@ /area/eris/maintenance/section1deck5central) "agJ" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/cable/green{ d1 = 1; @@ -2831,7 +2832,7 @@ }, /obj/machinery/photocopier, /obj/structure/sign/faction/ironhammer{ - pixel_y = 32 + pixel_x = -32 }, /turf/simulated/floor/wood, /area/eris/command/commander) @@ -2881,7 +2882,7 @@ icon_state = "pipe-c" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -3203,9 +3204,7 @@ "ahK" = ( /obj/structure/table/standard, /obj/item/clothing/glasses/sunglasses/blindfold, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -22 @@ -3236,9 +3235,7 @@ /turf/simulated/floor/tiled/dark, /area/eris/security/exerooms) "ahP" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/dark, /area/eris/security/exerooms) "ahQ" = ( @@ -3247,7 +3244,9 @@ /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/security/prison) "ahR" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/traps/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck5port) @@ -3482,7 +3481,7 @@ pixel_x = -30 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -3537,7 +3536,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/carpet, /area/eris/crew_quarters/sleep) @@ -3567,7 +3566,7 @@ "aiF" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -3582,7 +3581,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark, @@ -3600,7 +3599,7 @@ /obj/structure/table/standard, /obj/item/storage/toolbox/mechanical, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/camera/network/security{ @@ -3635,7 +3634,9 @@ /turf/simulated/floor/tiled/dark, /area/eris/security/exerooms) "aiN" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/closet/secure_closet/injection, /turf/simulated/floor/tiled/dark, /area/eris/security/exerooms) @@ -3917,7 +3918,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -3942,7 +3945,7 @@ /obj/structure/railing, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck5central) @@ -4201,9 +4204,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4350,9 +4351,7 @@ /obj/machinery/firealarm{ pixel_y = 28 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -4367,7 +4366,7 @@ /area/eris/security/exerooms) "akn" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -4378,9 +4377,7 @@ /turf/simulated/floor/tiled/dark/bluecorner, /area/eris/security/exerooms) "ako" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4432,7 +4429,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck5starboard) "akt" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck5central) "aku" = ( @@ -4612,7 +4611,9 @@ /turf/simulated/floor/tiled/dark/bluecorner, /area/eris/security/exerooms) "akQ" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/prison) "akR" = ( @@ -4709,7 +4710,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/button/remote/blast_door{ id = "maint_hatch_ihsforens1"; name = "Maintenance Hatch Control"; @@ -5006,7 +5009,7 @@ "alR" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/carpet, @@ -5029,7 +5032,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/carpet, /area/eris/crew_quarters/sleep) @@ -5116,7 +5119,7 @@ /area/eris/security/maintpost) "amg" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -5205,7 +5208,9 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/bluecorner, /area/eris/security/exerooms) "amp" = ( @@ -5294,7 +5299,9 @@ /area/eris/crew_quarters/sleep) "amz" = ( /obj/machinery/bodyscanner, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/bluecorner, /area/eris/security/exerooms) "amA" = ( @@ -5316,7 +5323,9 @@ /turf/simulated/floor/tiled/white/bluecorner, /area/eris/security/exerooms) "amD" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/table/glass, /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/tiled/white/bluecorner, @@ -5439,7 +5448,9 @@ /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/maintpost) "amU" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/eschangarb) "amV" = ( @@ -5482,7 +5493,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/maintpost) "ana" = ( @@ -5874,7 +5887,7 @@ /area/eris/maintenance/section2deck5starboard) "anV" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/universal, @@ -5989,7 +6002,7 @@ /area/eris/maintenance/section2deck5port) "aoi" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/spawner/scrap/low_chance, /turf/simulated/floor/plating/under, @@ -6061,7 +6074,7 @@ /area/eris/maintenance/section2deck1starboard) "aot" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck5port) @@ -6205,7 +6218,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/eris/rnd/podbay) "aoJ" = ( @@ -6398,9 +6413,7 @@ /turf/simulated/wall/r_wall, /area/eris/maintenance/section3deck5starboard) "apo" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/disposaloutlet, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -6460,7 +6473,7 @@ /area/eris/crew_quarters/sleep) "apz" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -6592,7 +6605,7 @@ /area/eris/hallway/side/eschangarb) "apO" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/reinforced, /area/eris/rnd/podbay) @@ -6636,7 +6649,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/eschangarb) @@ -6721,7 +6734,7 @@ /area/eris/crew_quarters/bar) "aqb" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -6737,9 +6750,7 @@ /area/eris/rnd/podbay) "aqd" = ( /obj/machinery/recharge_station, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/crew_quarters/toilet/medbay) "aqe" = ( @@ -6898,7 +6909,7 @@ /area/eris/maintenance/section3deck2starboard) "aqv" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/eris/rnd/podbay) @@ -6929,7 +6940,7 @@ "aqA" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -6944,7 +6955,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck5port) @@ -6975,9 +6986,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck5port) "aqE" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck5starboard) @@ -7028,7 +7037,7 @@ /area/eris/hallway/side/eschangarb) "aqJ" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -7198,7 +7207,7 @@ /obj/spawner/material/building/low_chance, /obj/spawner/material/building/low_chance, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/crew_quarters/toilet/medbay) @@ -7518,9 +7527,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/landmark/storyevent/midgame_stash_spawn{ navigation = "Section 2, floor 1. Medbay toilet." }, @@ -7613,7 +7620,7 @@ /area/eris/hallway/side/eschangarb) "arV" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -7763,7 +7770,7 @@ /area/eris/maintenance/section2deck5starboard) "ash" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/vending/printomat{ dir = 4 @@ -7892,7 +7899,7 @@ pixel_y = -22 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/crew_quarters/toilet/medbay) @@ -7948,7 +7955,7 @@ tag_door = "escape_pod_1_berth_hatch" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/eschangarb) @@ -8219,9 +8226,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -8257,7 +8262,7 @@ /area/eris/quartermaster/hangarsupply) "atl" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/fueltankstorage) @@ -8280,7 +8285,7 @@ /area/eris/maintenance/section3deck5starboard) "atq" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -8472,9 +8477,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck5starboard) "atS" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -8528,9 +8531,7 @@ /area/shuttle/escape_pod1/station) "aue" = ( /obj/structure/bed/chair/shuttle, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor{ icon_state = "cargofloor1" }, @@ -8552,9 +8553,7 @@ /turf/space, /area/shuttle/escape_pod1/station) "aui" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/medical_lowcost, /obj/structure/table/standard, /turf/simulated/floor/tiled/techmaint_panels, @@ -8613,9 +8612,7 @@ pixel_y = 24 }, /obj/spawner/junk/low_chance, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/quartermaster/disposaldrop) "aus" = ( @@ -8665,7 +8662,9 @@ /turf/space, /area/shuttle/escape_pod1/station) "aux" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4port) "auy" = ( @@ -8688,7 +8687,9 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/button/remote/airlock{ desc = "A remote control switch."; id = "unisex_room_2"; @@ -8727,7 +8728,9 @@ /obj/structure/bed/chair/shuttle{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/shuttle/floor{ icon_state = "cargofloor1" }, @@ -8821,9 +8824,7 @@ /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/bioprinter) "auT" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -9029,7 +9030,13 @@ /area/eris/quartermaster/hangarsupply) "avy" = ( /obj/machinery/smartfridge/secure/extract, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/biohazard{ + icon_state = "bio-danger"; + pixel_y = -32 + }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) "avz" = ( @@ -9040,7 +9047,7 @@ /area/eris/quartermaster/disposaldrop) "avA" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/steel, @@ -9055,7 +9062,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -9073,7 +9080,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -9242,7 +9249,7 @@ "awc" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -9581,7 +9588,7 @@ /area/eris/maintenance/section3deck2starboard) "axg" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/steel, @@ -9650,10 +9657,9 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "xenobio4"; - name = "Containment 4 Blast Doors"; - pixel_y = 4 + name = "Containment 4 Blast Doors" }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) @@ -9833,7 +9839,13 @@ /area/eris/quartermaster/disposaldrop) "axP" = ( /obj/structure/reagent_dispensers/watertank, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/biohazard{ + icon_state = "bio-danger"; + pixel_y = -32 + }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) "axQ" = ( @@ -10023,7 +10035,9 @@ /turf/simulated/floor/tiled/dark/techfloor, /area/eris/quartermaster/disposaldrop) "ayt" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10038,9 +10052,7 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/eschangara) "ayu" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/bioreactor) "ayv" = ( @@ -10075,7 +10087,7 @@ /area/eris/engineering/atmos) "ayy" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10101,7 +10113,7 @@ /area/eris/crew_quarters/library) "ayB" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -10420,9 +10432,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 6 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/disposal) "azt" = ( @@ -10563,9 +10573,7 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/eschangara) "azJ" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/button/remote/blast_door{ id = "Armoury"; name = "Armoury Access"; @@ -10586,9 +10594,7 @@ "azM" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/item/device/radio/intercom{ pixel_y = 24 }, @@ -10605,7 +10611,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/quartermaster/disposaldrop) @@ -10937,7 +10944,7 @@ /area/eris/maintenance/disposal) "aAC" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -11084,7 +11091,7 @@ id = "disposal" }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/disposal) @@ -11100,7 +11107,7 @@ icon_state = "pipe-c" }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/disposal) @@ -11126,7 +11133,7 @@ "aAX" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/crew_quarters/sleep) @@ -11143,9 +11150,7 @@ /area/eris/security/main) "aBa" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/rnd/chargebay) "aBb" = ( @@ -11200,7 +11205,7 @@ "aBf" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/crew_quarters/sleep) @@ -11222,9 +11227,7 @@ name = "Security Requests Console"; pixel_y = 30 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/security/main) "aBk" = ( @@ -11250,9 +11253,7 @@ /obj/structure/noticeboard{ pixel_y = 28 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/security/main) "aBn" = ( @@ -11288,7 +11289,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) @@ -11326,9 +11328,7 @@ /obj/machinery/door/blast/shutters/glass{ id = "Sky_Driver" }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/prisoncells) "aBy" = ( @@ -11336,7 +11336,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/security/main) "aBz" = ( @@ -11367,7 +11369,7 @@ /area/eris/maintenance/section3deck2starboard) "aBE" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/dispenser, /turf/simulated/floor/tiled/dark/gray_platform, @@ -11378,7 +11380,7 @@ /area/eris/maintenance/junk) "aBG" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/crew_quarters/hydroponics) @@ -11409,7 +11411,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/sorter) "aBK" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/suit_storage_unit/moebius, /turf/simulated/floor/tiled/white, /area/eris/rnd/anomal) @@ -11449,7 +11453,7 @@ /area/eris/crew_quarters/toilet/medbay) "aBQ" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -11894,7 +11898,7 @@ /area/eris/maintenance/junk) "aCY" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck5port) @@ -11934,7 +11938,7 @@ /area/eris/maintenance/section4deck5port) "aDh" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -11975,9 +11979,12 @@ /turf/simulated/floor/plating/under, /area/eris/engineering/atmos) "aDn" = ( -/obj/structure/sign/department/atmos, -/turf/simulated/wall/r_wall, -/area/eris/engineering/atmos) +/obj/structure/catwalk, +/obj/structure/sign/vacuum{ + pixel_y = -32 + }, +/turf/simulated/floor/plating/under, +/area/eris/maintenance/section4deck5port) "aDo" = ( /obj/structure/multiz/stairs/active/bottom{ dir = 1 @@ -12040,12 +12047,14 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/security/prison) "aDw" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/security/main) "aDx" = ( @@ -12195,9 +12204,7 @@ /obj/structure/sign/sec2{ pixel_y = 32 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -12208,7 +12215,7 @@ "aDS" = ( /obj/structure/multiz/stairs/enter/bottom, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/security/lobby) @@ -12223,7 +12230,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/security/armory) @@ -12284,7 +12291,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) "aEd" = ( @@ -12336,9 +12345,7 @@ /area/shuttle/escape_pod2/station) "aEj" = ( /obj/structure/bed/chair/shuttle, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor{ icon_state = "cargofloor1" }, @@ -12449,7 +12456,7 @@ name = "Junk Beacon Airlock Pump" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/maintenance/junk) @@ -12529,7 +12536,7 @@ /area/eris/maintenance/section4deck5port) "aEF" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -12659,7 +12666,7 @@ /area/eris/maintenance/section4deck5port) "aEY" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/air_sensor{ frequency = 1441; @@ -12798,9 +12805,7 @@ /turf/simulated/floor/tiled/steel, /area/eris/rnd/chargebay) "aFv" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/maintenance/junk) "aFw" = ( @@ -12839,7 +12844,9 @@ /obj/structure/bed/chair/shuttle{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/shuttle/floor{ icon_state = "cargofloor1" }, @@ -13003,7 +13010,7 @@ /area/eris/hallway/side/eschangara) "aGb" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section2deck4starboard) @@ -13100,7 +13107,7 @@ dir = 8 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -13254,7 +13261,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos) @@ -13306,7 +13313,7 @@ /area/eris/engineering/atmos) "aGT" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos) @@ -13417,7 +13424,7 @@ /area/eris/engineering/atmos) "aHj" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/reinforced/airless, /area/eris/engineering/atmos) @@ -13464,7 +13471,7 @@ /area/eris/engineering/atmos) "aHr" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/air_sensor{ frequency = 1441; @@ -13506,7 +13513,7 @@ "aHx" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos) @@ -13818,7 +13825,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/rnd/chargebay) "aIs" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section2deck4central) "aIu" = ( @@ -14154,7 +14163,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos) @@ -14216,7 +14225,7 @@ /area/eris/engineering/atmos) "aJv" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/air_sensor{ frequency = 1443; @@ -14226,7 +14235,9 @@ /turf/simulated/floor/reinforced/airmix, /area/eris/engineering/atmos) "aJw" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/chargebay) "aJx" = ( @@ -14364,7 +14375,7 @@ /area/eris/maintenance/section4deck5port) "aJN" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/air_sensor{ frequency = 1441; @@ -14385,7 +14396,8 @@ }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck5starboard) @@ -14717,7 +14729,7 @@ "aKO" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck5port) @@ -14729,8 +14741,7 @@ /area/eris/maintenance/junk) "aKQ" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/techmaint, @@ -15439,12 +15450,15 @@ /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/maintenance/section3deck5starboard) "aMM" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/hull, /area/eris/maintenance/junk) "aMN" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/light/small, +/obj/structure/sign/department/atmos{ + pixel_y = -32 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/hallway/side/atmosphericshallway) @@ -15855,7 +15869,8 @@ }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /turf/simulated/floor/tiled/dark/techfloor, @@ -16049,9 +16064,7 @@ /turf/simulated/floor/reinforced/nitrogen, /area/eris/engineering/atmos) "aOm" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -16135,9 +16148,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck5port) "aOy" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck5port) "aOz" = ( @@ -16187,7 +16198,7 @@ /area/eris/engineering/wastingroom) "aOG" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -16236,7 +16247,9 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/rnd/chargebay) "aOM" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/air_sensor{ frequency = 1441; id_tag = "o2_sensor" @@ -16248,7 +16261,9 @@ frequency = 1441; id_tag = "n2_sensor" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/reinforced/nitrogen, /area/eris/engineering/atmos) "aOO" = ( @@ -16261,9 +16276,11 @@ /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/wastingroom) "aOQ" = ( -/obj/structure/sign/department/atmos, -/turf/simulated/wall/r_wall, -/area/eris/engineering/atmos/storage) +/obj/structure/sign/department/medbay{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel, +/area/eris/hallway/main/section2) "aOR" = ( /obj/spawner/mob/spiders/cluster/low_chance, /turf/simulated/floor/tiled/techmaint, @@ -16300,7 +16317,7 @@ /area/eris/maintenance/section3deck4central) "aOV" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/table/standard{ name = "plastic table frame" @@ -16320,7 +16337,7 @@ pixel_y = -22 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -16354,14 +16371,19 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/rnd/chargebay) "aPd" = ( -/obj/structure/sign/department/eng, -/turf/simulated/wall/r_wall, +/obj/structure/multiz/stairs/enter{ + dir = 4 + }, +/obj/structure/sign/faction/technomancers{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/foyer) "aPe" = ( /obj/structure/table/reinforced, /obj/item/electronics/ai_module/corp, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) @@ -16457,7 +16479,9 @@ /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/prisoncells) "aPt" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/door_timer{ id = "Cell 6"; name = "Cell 6"; @@ -16519,7 +16543,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck4central) "aPA" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -16593,11 +16619,14 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/sign/department/atmos{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos/storage) "aPH" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -16958,7 +16987,9 @@ /area/eris/maintenance/section4deck5port) "aQi" = ( /obj/structure/catwalk, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck5port) "aQj" = ( @@ -16995,9 +17026,15 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck5port) "aQo" = ( -/obj/structure/sign/vacuum, -/turf/simulated/wall/r_wall, -/area/eris/maintenance/section4deck5port) +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 32 + }, +/turf/space, +/area/space) "aQp" = ( /obj/machinery/door/airlock/external{ frequency = 1379; @@ -17204,13 +17241,6 @@ /obj/structure/catwalk, /turf/simulated/open, /area/eris/security/barracks) -"aQN" = ( -/obj/structure/catwalk, -/obj/machinery/camera/network/security{ - dir = 8 - }, -/turf/simulated/open, -/area/eris/security/main) "aQO" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -17230,13 +17260,6 @@ /obj/structure/catwalk, /turf/simulated/open, /area/eris/security/barracks) -"aQR" = ( -/obj/structure/catwalk, -/obj/machinery/camera/network/security{ - dir = 8 - }, -/turf/simulated/open, -/area/eris/security/barracks) "aQT" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -17282,7 +17305,9 @@ name = "Cell 2"; pixel_y = -32 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -17345,7 +17370,7 @@ /area/eris/security/main) "aRi" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -17357,7 +17382,8 @@ /area/eris/security/barracks) "aRj" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos/storage) @@ -17498,9 +17524,7 @@ /area/eris/security/warden) "aRC" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/rnd/lab) "aRD" = ( @@ -17574,7 +17598,7 @@ /area/eris/hallway/side/eschangara) "aRK" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -17627,7 +17651,7 @@ /area/eris/security/barracks) "aRQ" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -17718,7 +17742,7 @@ /area/eris/security/main) "aSb" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/closet/secure_closet/personal/security, /turf/simulated/floor/tiled/dark/gray_platform, @@ -17761,7 +17785,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/hallway/side/atmosphericshallway) @@ -17852,7 +17876,7 @@ "aSr" = ( /obj/machinery/vending/security, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/barracks) @@ -17926,12 +17950,13 @@ /area/eris/security/warden) "aSz" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/structure/cable/green{ d2 = 8; @@ -17948,9 +17973,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/rnd/lab) "aSC" = ( @@ -17989,7 +18012,9 @@ /turf/simulated/floor/tiled/dark, /area/eris/security/warden) "aSG" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -18283,7 +18308,9 @@ /turf/simulated/open, /area/eris/security/armory) "aTq" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -18312,7 +18339,8 @@ /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/item/computer_hardware/hard_drive/portable{ default_files = list(/datum/computer_file/program/trade); @@ -18355,7 +18383,9 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/security/warden) "aTy" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -18466,7 +18496,7 @@ "aTN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -18504,7 +18534,7 @@ /area/eris/security/main) "aTR" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/alarm{ dir = 4; @@ -18540,10 +18570,10 @@ /area/eris/rnd/lab) "aTV" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/dark, @@ -18729,7 +18759,7 @@ /area/eris/security/prisoncells) "aUs" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -18938,7 +18968,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -19208,7 +19240,7 @@ /obj/item/device/radio/off, /obj/item/tool/crowbar, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/barracks) @@ -19249,7 +19281,7 @@ /area/eris/security/warden) "aVA" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/altar) @@ -19581,7 +19613,7 @@ }, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -19857,7 +19889,7 @@ "aWP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/violetcorener, /area/eris/medical/virology) @@ -19874,7 +19906,7 @@ /obj/structure/table/standard, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/violetcorener, /area/eris/medical/virology) @@ -19886,7 +19918,7 @@ /area/eris/maintenance/section2deck4port) "aWU" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -20030,7 +20062,7 @@ /obj/item/handcuffs, /obj/item/handcuffs, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/security/barracks) @@ -20100,7 +20132,7 @@ name = "Evidence Closet" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/dark, @@ -20113,7 +20145,7 @@ /area/eris/engineering/atmos) "aXy" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -20139,9 +20171,7 @@ /turf/simulated/floor/tiled/dark, /area/eris/security/evidencestorage) "aXB" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/table/rack/shelf, /turf/simulated/floor/tiled/dark, /area/eris/security/evidencestorage) @@ -20278,7 +20308,7 @@ /area/eris/medical/virology) "aXQ" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/alarm{ dir = 4; @@ -20717,7 +20747,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/button/remote/blast_door{ id = "maint_hatch_evidstor"; @@ -20900,13 +20930,15 @@ "aZf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark, /area/eris/rnd/podbay) "aZg" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -21442,7 +21474,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck4central) "bad" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -21656,7 +21690,9 @@ /turf/simulated/floor/tiled/techmaint_cargo, /area/eris/maintenance/section1deck4central) "baC" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck4central) "baD" = ( @@ -21671,9 +21707,6 @@ /area/eris/security/main) "baE" = ( /obj/machinery/autolathe/rnd/protolathe/loaded, -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -21798,7 +21831,7 @@ /obj/structure/table/reinforced, /obj/item/electronics/ai_module/robocop, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/department/ai{ pixel_x = 32 @@ -22095,15 +22128,13 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/plating/under, /area/eris/crew_quarters/sleep) "bbB" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -22161,9 +22192,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/crew_quarters/sleep) "bbG" = ( @@ -22192,9 +22221,7 @@ /obj/structure/sign/atmos_air{ pixel_y = 32 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/crew_quarters/sleep) "bbI" = ( @@ -22205,7 +22232,9 @@ pixel_y = 4 }, /obj/item/storage/box/beakers, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/storage/box/syringes{ pixel_x = 3; pixel_y = 3 @@ -22441,7 +22470,9 @@ /obj/item/tank/emergency_oxygen/double, /obj/item/tank/emergency_oxygen/double, /obj/item/tank/emergency_oxygen/double, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/engineering/atmos/storage) "bce" = ( @@ -22561,7 +22592,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/open, /area/eris/crew_quarters/sleep) "bcn" = ( @@ -22581,7 +22614,7 @@ /area/eris/crew_quarters/sleep) "bco" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/spawner/flora/low_chance, /turf/simulated/floor/tiled/steel, @@ -23234,7 +23267,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck4central) @@ -23246,7 +23279,7 @@ /area/eris/crew_quarters/sleep) "bdu" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section4deck4port) @@ -23589,9 +23622,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck4central) "beo" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/button/remote/blast_door{ id = "maint_hatch_medbay_rec"; name = "Maintenance Hatch Control"; @@ -23684,13 +23715,13 @@ icon_state = "2-8" }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating, /area/eris/maintenance/substation/section1) "bez" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -23811,9 +23842,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck4central) "beM" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4central) @@ -23938,7 +23967,7 @@ /area/eris/maintenance/substation/section2) "bfc" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -23966,7 +23995,7 @@ /area/eris/maintenance/section3deck1central) "bff" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark, @@ -23992,7 +24021,9 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/camera/network/research{ dir = 8 }, @@ -24000,7 +24031,7 @@ /area/eris/rnd/robotics) "bfj" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/spawner/flora/low_chance, @@ -24027,7 +24058,9 @@ /turf/simulated/wall/r_wall, /area/eris/rnd/chargebay) "bfo" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/crew_quarters/sleep/cryo) "bfp" = ( @@ -24041,6 +24074,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/rnd/lab) "bfr" = ( @@ -24106,7 +24142,7 @@ /area/eris/crew_quarters/sleep/cryo) "bfB" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/steel, @@ -24121,7 +24157,7 @@ "bfD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/spawner/traps/low_chance, /turf/simulated/floor/tiled/techmaint, @@ -24135,7 +24171,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/item/device/radio/intercom{ @@ -24148,7 +24184,7 @@ dir = 4 }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -24324,7 +24360,7 @@ icon_state = "pipe-c" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -24410,7 +24446,7 @@ icon_state = "pipe-c" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -24536,13 +24572,13 @@ /area/eris/rnd/chargebay) "bgC" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4starboard) "bgD" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -24678,7 +24714,7 @@ "bgV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4central) @@ -24789,7 +24825,7 @@ /area/eris/maintenance/section2deck4central) "bhk" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/structure/cable/green{ d1 = 2; @@ -24840,9 +24876,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck4starboard) "bhq" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -25144,7 +25178,8 @@ /obj/item/storage/box/mousetraps, /obj/item/storage/box/mousetraps, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/neotheology/altar) @@ -25312,7 +25347,7 @@ /area/eris/maintenance/section3deck1central) "biz" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 2; @@ -25410,7 +25445,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/command/courtroom) @@ -25522,8 +25557,7 @@ /area/eris/rnd/lab) "biY" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door{ - desc = "It controls the blast door to the main RND entrance."; +/obj/machinery/button/remote/blast_door/table{ id = "RDDoorLockdown"; name = "RND Door Blast Door Control" }, @@ -25553,7 +25587,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/department/robo{ pixel_x = 32 @@ -25566,10 +25600,10 @@ /obj/item/storage/fancy/vials, /obj/item/storage/fancy/vials, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -25822,8 +25856,7 @@ /area/eris/maintenance/section2deck4starboard) "bjC" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door{ - desc = "It controls the RND Window Blast doors."; +/obj/machinery/button/remote/blast_door/table{ id = "RDWindowsLockdown"; name = "RND Window Blast Doors Control" }, @@ -25939,7 +25972,7 @@ /area/eris/crew_quarters/sleep) "bjO" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/item/device/radio/intercom{ @@ -25995,7 +26028,7 @@ /area/eris/rnd/robotics) "bjW" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -26140,12 +26173,11 @@ dir = 8 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "xenobio2"; - name = "Containment 2 Blast Doors"; - pixel_y = 4 + name = "Containment 2 Blast Doors" }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) @@ -26216,7 +26248,7 @@ /area/eris/hallway/side/morguehallway) "bkr" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/cable/green{ d1 = 1; @@ -26343,7 +26375,7 @@ /area/eris/maintenance/section2deck4central) "bkB" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4central) @@ -26476,7 +26508,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck4central) @@ -26704,9 +26736,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/eris/medical/morgue) "blt" = ( @@ -26778,7 +26808,7 @@ /area/eris/crew_quarters/librarybackroom) "blC" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -27029,7 +27059,8 @@ /obj/structure/cable/green, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/bioreactor) @@ -27149,7 +27180,9 @@ /turf/simulated/floor/tiled/white/panels, /area/eris/medical/virology) "bmv" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/panels, /area/eris/medical/virology) "bmw" = ( @@ -27462,7 +27495,9 @@ /turf/simulated/floor/tiled/dark, /area/eris/rnd/lab) "bnd" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/smartfridge/disks, /turf/simulated/floor/tiled/dark, /area/eris/rnd/lab) @@ -27714,7 +27749,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/crew_quarters/sleep/cryo) @@ -27742,7 +27777,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/mixing) @@ -27863,7 +27898,7 @@ /area/eris/medical/morgue) "bnW" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -27871,7 +27906,9 @@ /turf/simulated/floor/tiled/dark, /area/eris/hallway/side/morguehallway) "bnX" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -22 @@ -27919,7 +27956,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/crew_quarters/sleep/cryo) @@ -27982,7 +28019,8 @@ /area/eris/hallway/side/morguehallway) "bop" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/eris/hallway/side/morguehallway) @@ -28056,7 +28094,7 @@ /area/eris/maintenance/section3deck1central) "box" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -28110,9 +28148,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/eris/medical/morgue) "boD" = ( @@ -28325,7 +28361,7 @@ pixel_y = 2 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/dark, @@ -28762,9 +28798,7 @@ /area/eris/maintenance/section2deck4central) "bqi" = ( /obj/spawner/pack/machine, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck4central) "bqj" = ( @@ -28964,7 +28998,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck4central) @@ -29043,7 +29077,7 @@ /area/eris/maintenance/section1deck3central) "bra" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/crew_quarters/toilet/medbay) @@ -29051,7 +29085,9 @@ /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/command/courtroom) "brc" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -29085,7 +29121,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck3central) "brg" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/command/courtroom) "brh" = ( @@ -29151,9 +29189,6 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck4central) "bro" = ( -/obj/machinery/light/small{ - dir = 1 - }, /obj/structure/table/standard{ name = "plastic table frame" }, @@ -29274,7 +29309,7 @@ /area/eris/maintenance/section2deck4central) "brG" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -29629,7 +29664,7 @@ /area/eris/crew_quarters/sleep/cryo) "bsH" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/steel, @@ -29779,7 +29814,8 @@ dir = 1 }, /obj/structure/extinguisher_cabinet{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/bioreactor) @@ -29929,8 +29965,7 @@ /area/eris/neotheology/chapelritualroom) "btz" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/quartermaster/disposaldrop) @@ -30009,7 +30044,7 @@ /area/eris/maintenance/section3deck1central) "btK" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/churchcorridor) @@ -30240,8 +30275,7 @@ /area/eris/maintenance/section3deck1central) "buo" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck3central) @@ -30290,7 +30324,7 @@ /area/eris/command/teleporter) "bux" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -30493,7 +30527,7 @@ /area/eris/engineering/atmoscontrol) "buX" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/command/teleporter) @@ -30630,7 +30664,7 @@ /obj/item/tank/oxygen, /obj/item/clothing/mask/gas, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/command/teleporter) @@ -31012,7 +31046,7 @@ /area/eris/security/lobby) "bwk" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/security/lobby) @@ -31028,8 +31062,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) "bwo" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/light, +/obj/structure/sign/faction/ironhammer{ + pixel_y = 32 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) @@ -31042,12 +31077,13 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/security/prisoncells) "bwq" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/sign/faction/ironhammer{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) "bwr" = ( @@ -31058,7 +31094,7 @@ /area/eris/hallway/main/section1) "bws" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -31131,7 +31167,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -31149,7 +31187,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -31179,7 +31219,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) "bwA" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -31226,9 +31268,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck4central) "bwF" = ( @@ -31286,7 +31326,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) "bwK" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -31564,7 +31606,7 @@ /area/eris/crew_quarters/clothingstorage) "bxt" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/landmark/storyevent/hidden_vent_antag, /turf/simulated/floor/tiled/steel, @@ -31640,7 +31682,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -31653,7 +31697,7 @@ /area/eris/engineering/atmoscontrol) "bxF" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/holoposter{ pixel_y = -32 @@ -31677,7 +31721,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -31700,7 +31744,8 @@ pixel_y = -28 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section1) @@ -31759,7 +31804,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) "bxR" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) "bxS" = ( @@ -31771,7 +31818,8 @@ }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green{ d2 = 8; @@ -31829,9 +31877,7 @@ /obj/machinery/firealarm{ pixel_y = 28 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) "bxX" = ( @@ -31866,7 +31912,7 @@ /area/eris/engineering/drone_fabrication) "byc" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -31900,7 +31946,7 @@ pixel_x = 32 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) @@ -31953,7 +31999,10 @@ /area/eris/medical/surgery) "bym" = ( /obj/machinery/light{ - dir = 4 + dir = 8 + }, +/obj/structure/sign/department/sci{ + pixel_x = 32 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) @@ -31985,7 +32034,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/security/prisoncells) "byq" = ( @@ -32019,11 +32070,11 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section2) @@ -32050,7 +32101,7 @@ /area/eris/hallway/main/section2) "byx" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/structure/sign/department/chem{ pixel_x = -32 @@ -32190,9 +32241,7 @@ /turf/simulated/floor/tiled/steel/danger, /area/eris/engineering/drone_fabrication) "byT" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/drone_fabrication) "byU" = ( @@ -32225,7 +32274,6 @@ icon_state = "0-4" }, /obj/machinery/power/apc/super/critical{ - dir = 1; name = "north bump"; pixel_y = 28 }, @@ -32281,7 +32329,9 @@ /area/eris/maintenance/section4deck4port) "bzf" = ( /obj/machinery/space_heater, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/engineering/atmos/storage) "bzg" = ( @@ -32328,9 +32378,6 @@ /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/engineering/atmos/storage) "bzl" = ( -/obj/structure/sign/atmos_waste{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 10 }, @@ -32338,10 +32385,10 @@ /area/eris/hallway/main/section4) "bzm" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -32438,7 +32485,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/tiled/steel, @@ -32463,9 +32510,6 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section4) "bzA" = ( -/obj/structure/sign/atmos_air{ - pixel_y = 32 - }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9 }, @@ -32640,7 +32684,7 @@ /area/eris/engineering/atmos/storage) "bzP" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -32750,7 +32794,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/command/courtroom) "bAd" = ( @@ -32783,7 +32829,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/cryo) "bAi" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/firealarm{ dir = 1; pixel_y = -28 @@ -32797,7 +32845,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/cryo) "bAj" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -32864,7 +32914,7 @@ /area/eris/maintenance/sorter) "bAt" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -32886,9 +32936,7 @@ /obj/machinery/ai_status_display{ pixel_y = 32 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -33128,12 +33176,14 @@ /turf/simulated/floor/plating, /area/eris/maintenance/section3deck1central) "bBa" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck1central) "bBb" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -33186,7 +33236,7 @@ /area/eris/maintenance/section4deck4central) "bBk" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, @@ -33362,7 +33412,7 @@ pixel_x = -32 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, @@ -33497,13 +33547,16 @@ /obj/structure/reagent_dispensers/fueltank, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green{ d2 = 4; icon_state = "0-4" }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/drone_fabrication) "bCb" = ( @@ -33531,7 +33584,8 @@ /obj/item/ammo_casing/flare, /obj/item/gun/projectile/flare_gun, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/maintenance/junk) @@ -33568,8 +33622,7 @@ /area/eris/maintenance/section1deck3central) "bCj" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /obj/structure/table/reinforced, /obj/spawner/lowkeyrandom/low_chance, @@ -33632,7 +33685,7 @@ /area/eris/maintenance/section3deck5port) "bCs" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section4) @@ -33839,7 +33892,7 @@ /area/eris/maintenance/section1deck1central) "bCY" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck3central) @@ -33920,9 +33973,7 @@ info = "Directions:
First you'll want to make sure there is a target stake in the center of the magnetic platform. Next, take an aluminum target from the crates back there and slip it into the stake. Make sure it clicks! Next, there should be a control console mounted on the wall somewhere in the room.

This control console dictates the behaviors of the magnetic platform, which can move your firing target around to simulate real-world combat situations. From here, you can turn off the magnets or adjust their electromagnetic levels and magnetic fields. The electricity level dictates the strength of the pull - you will usually want this to be the same value as the speed. The magnetic field level dictates how far the magnetic pull reaches.

Speed and path are the next two settings. Speed is associated with how fast the machine loops through the designated path. Paths dictate where the magnetic field will be centered at what times. There should be a pre-fabricated path input already. You can enable moving to observe how the path affects the way the stake moves. To script your own path, look at the following key:


N: North
S: South
E: East
W: West
C: Center
R: Random (results may vary)
; or &: separators. They are not necessary but can make the path string better visible."; name = "Firing Range Instructions" }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section1deck1central) "bDn" = ( @@ -33984,7 +34035,8 @@ /area/eris/rnd/docking) "bDw" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 @@ -34095,7 +34147,7 @@ /area/eris/rnd/docking) "bDK" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -34121,7 +34173,9 @@ "bDN" = ( /obj/structure/table/reinforced, /obj/spawner/pack/tech_loot, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/pack/tech_loot, /turf/simulated/floor/tiled/steel, /area/eris/rnd/docking) @@ -34152,7 +34206,9 @@ /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/beaker/large, /obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/docking) "bDT" = ( @@ -34182,7 +34238,7 @@ /area/eris/rnd/docking) "bDW" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/lobby) @@ -34403,7 +34459,7 @@ /area/turret_protected/ai) "bEv" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/anomal) @@ -34449,7 +34505,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology) @@ -34481,16 +34537,17 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/button/remote/blast_door{ - id = "xenobio5"; +/obj/machinery/button/remote/blast_door/table{ name = "Containment 5 Blast Doors"; - pixel_y = 4 + id = "xenobio5" }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology) "bEH" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/light, +/obj/structure/sign/biohazard{ + icon_state = "bio-danger"; + pixel_y = 32 }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology) @@ -34595,10 +34652,9 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/button/remote/blast_door{ - id = "xenobio3"; +/obj/machinery/button/remote/blast_door/table{ name = "Containment 3 Blast Doors"; - pixel_y = 4 + id = "xenobio3" }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology) @@ -34608,12 +34664,11 @@ dir = 8 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "xenobio1"; - name = "Containment 1 Blast Doors"; - pixel_y = 4 + name = "Containment 1 Blast Doors" }, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology) @@ -34738,9 +34793,7 @@ /area/eris/maintenance/section1deck3central) "bFh" = ( /obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -34792,9 +34845,7 @@ /turf/simulated/wall/r_wall, /area/eris/engineering/telecommonitor) "bFn" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/telecomms/server/presets/supply, /turf/simulated/floor/bluegrid{ name = "Server Base"; @@ -34857,7 +34908,9 @@ /turf/simulated/floor/tiled/steel/monofloor, /area/eris/command/teleporter) "bFt" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, @@ -34900,7 +34953,9 @@ /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck4central) "bFx" = ( @@ -35056,7 +35111,7 @@ /area/eris/command/tcommsat/chamber) "bFQ" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/telecomms/bus/preset_four, /turf/simulated/floor/bluegrid{ @@ -35186,7 +35241,7 @@ /area/eris/security/lobby) "bGf" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -35287,7 +35342,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -35448,9 +35503,7 @@ /area/eris/hallway/side/atmosphericshallway) "bGG" = ( /obj/machinery/disposal, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/disposalpipe/trunk, /obj/structure/cable{ d1 = 4; @@ -35480,7 +35533,9 @@ /turf/simulated/floor/plating, /area/eris/command/tcommsat/chamber) "bGK" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -35600,9 +35655,7 @@ "bGY" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/atmospherics/portables_connector, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/rnd/xenobiology/xenoflora) "bGZ" = ( @@ -35653,7 +35706,7 @@ icon_state = "2-4" }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating, /area/eris/maintenance/substation/section4) @@ -35804,9 +35857,7 @@ /area/eris/engineering/atmos) "bHw" = ( /obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, @@ -35912,7 +35963,7 @@ /area/eris/hallway/main/section4) "bHG" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -35995,7 +36046,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck3central) "bHP" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/techfloor_grid, /area/eris/command/tcommsat/computer) "bHQ" = ( @@ -36014,7 +36067,7 @@ /area/eris/maintenance/section1deck3central) "bHR" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/spawner/junk/low_chance, /turf/simulated/floor/plating/under, @@ -36075,7 +36128,7 @@ "bHW" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/open, @@ -36189,7 +36242,7 @@ /area/eris/maintenance/section4deck4port) "bIl" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/drone_fabrication) @@ -36218,7 +36271,7 @@ pixel_x = -32 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck4central) @@ -36241,7 +36294,7 @@ "bIt" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 5 @@ -36263,9 +36316,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/engineering/atmos) "bIw" = ( @@ -36511,7 +36562,7 @@ /area/eris/engineering/engine_room) "bIQ" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plating, @@ -36673,9 +36724,6 @@ /area/eris/engineering/engine_room) "bJk" = ( /obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/recharger, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/engine_room) @@ -36912,7 +36960,8 @@ /area/eris/command/tcommsat/chamber) "bJJ" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ @@ -36932,7 +36981,8 @@ }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/quartermaster/hangarsupply) @@ -37017,9 +37067,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck3central) "bJS" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/spawner/material/building, /turf/simulated/floor/plating, /area/eris/engineering/construction) @@ -37136,7 +37184,7 @@ /area/eris/maintenance/section4deck4port) "bKj" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -37207,7 +37255,7 @@ /area/eris/engineering/construction) "bKq" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/cyan{ d1 = 1; @@ -37249,7 +37297,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/flora/low_chance, /turf/simulated/open, /area/eris/crew_quarters/sleep) @@ -37680,7 +37730,8 @@ /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/item/device/radio/intercom{ pixel_y = 24 @@ -37776,9 +37827,7 @@ "bLx" = ( /obj/structure/table/standard, /obj/machinery/recharger, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/holoposter{ pixel_y = 32 }, @@ -37799,7 +37848,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck4central) @@ -37948,7 +37997,7 @@ /area/eris/hallway/side/eschangara) "bLT" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -38014,9 +38063,7 @@ /obj/machinery/computer/cryopod/robot{ pixel_y = 30 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/drone_fabrication) "bMd" = ( @@ -38050,7 +38097,7 @@ /area/eris/maintenance/section4deck4port) "bMi" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -38403,9 +38450,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/lobby) "bMS" = ( @@ -38418,7 +38463,7 @@ /area/eris/security/lobby) "bMT" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -38437,7 +38482,7 @@ /area/eris/security/inspectors_office) "bMV" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/security/inspectors_office) @@ -38719,9 +38764,7 @@ "bNA" = ( /obj/structure/table/standard, /obj/item/device/aicard, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint_panels, /area/eris/maintenance/section1deck3central) "bNB" = ( @@ -39358,7 +39401,7 @@ /area/eris/engineering/construction) "bOZ" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -39607,10 +39650,12 @@ /area/eris/crew_quarters/hydroponics) "bPB" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -39638,7 +39683,7 @@ "bPE" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -39871,11 +39916,10 @@ "bQg" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/reagent_dispensers/watertank/huge, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/structure/cable{ d1 = 4; @@ -39986,7 +40030,8 @@ /obj/structure/catwalk, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /obj/spawner/traps/wire_splicing/low_chance, @@ -40052,9 +40097,6 @@ /turf/simulated/floor/wood, /area/eris/crew_quarters/hydroponics) "bQH" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/mug, /turf/simulated/floor/tiled/steel/gray_perforated, @@ -40090,7 +40132,7 @@ /area/eris/maintenance/substation/engineering) "bQK" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating, /area/eris/maintenance/substation/engineering) @@ -40148,7 +40190,7 @@ /area/eris/maintenance/section4deck4port) "bQR" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -40193,7 +40235,7 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -40342,7 +40384,9 @@ pixel_y = -24; req_access = null }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/quartermaster/hangarsupply) "bRs" = ( @@ -40505,7 +40549,7 @@ "bRT" = ( /obj/structure/closet/wardrobe/color/grey, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/crew_quarters/clothingstorage) @@ -40523,7 +40567,7 @@ "bRW" = ( /obj/structure/closet/wardrobe/color/mixed, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -40633,9 +40677,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck3central) "bSk" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck3central) @@ -40656,7 +40698,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck3central) @@ -40757,7 +40799,7 @@ "bSC" = ( /obj/structure/closet/firecloset, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -40808,7 +40850,7 @@ "bSM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/structure/table/standard, @@ -40853,9 +40895,7 @@ /turf/simulated/floor/wood, /area/eris/command/courtroom) "bSU" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/wood, /area/eris/command/courtroom) "bSV" = ( @@ -40997,9 +41037,7 @@ /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/storage) "bTl" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/storage) "bTm" = ( @@ -41015,7 +41053,8 @@ "bTo" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/engineering/atmos) @@ -41266,7 +41305,7 @@ "bTP" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -41305,7 +41344,7 @@ pixel_x = -26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -41410,7 +41449,7 @@ "bUj" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -41672,13 +41711,9 @@ /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, /obj/structure/table/standard, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -28 - }, /obj/item/paper_bin, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/bioprinter) @@ -41725,7 +41760,7 @@ /obj/item/stack/material/steel/random, /obj/item/stack/material/plastic/random, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/crew_quarters/janitor) @@ -41750,7 +41785,7 @@ "bVd" = ( /obj/structure/janitorialcart, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/crew_quarters/janitor) @@ -41794,7 +41829,8 @@ "bVi" = ( /obj/spawner/junk/low_chance, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section2deck4central) @@ -41917,7 +41953,7 @@ /area/eris/security/lobby) "bVA" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel/bluecorner, @@ -41935,7 +41971,7 @@ /area/eris/hallway/main/section1) "bVD" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -41972,7 +42008,7 @@ }, /obj/structure/flora/ausbushes/lavendergrass, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/grass, /area/eris/neotheology/chapelritualroom) @@ -42016,9 +42052,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/carpet/bcarpet, /area/eris/security/inspectors_office) "bVL" = ( @@ -42040,7 +42074,7 @@ /area/eris/hallway/main/section1) "bVP" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/computer/rdservercontrol{ dir = 4 @@ -42181,7 +42215,7 @@ /area/eris/medical/psych) "bWm" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -42222,7 +42256,7 @@ /area/eris/command/courtroom) "bWr" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/computer/message_monitor{ @@ -42232,9 +42266,7 @@ /area/eris/rnd/server) "bWs" = ( /obj/structure/closet, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/surgery) "bWt" = ( @@ -42386,7 +42418,7 @@ /area/eris/maintenance/section1deck3central) "bWI" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/storage) @@ -42452,7 +42484,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/camera/network/research{ dir = 4 @@ -42488,9 +42521,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/eris/security/inspectors_office) "bWV" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/omni/filter{ tag_east = 1; tag_south = 5; @@ -42507,7 +42538,7 @@ /area/eris/rnd/mixing) "bWX" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/alarm{ dir = 4; @@ -42809,7 +42840,7 @@ /area/eris/security/lobby) "bXP" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -42903,7 +42934,8 @@ "bXY" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /obj/structure/flora/ausbushes/fullgrass, @@ -42939,9 +42971,7 @@ /obj/structure/table/standard, /obj/item/storage/box/gloves, /obj/item/reagent_containers/spray/cleaner, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -42963,7 +42993,7 @@ /area/eris/security/lobby) "bYh" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/hallway/main/section1) @@ -43175,9 +43205,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck3port) "bYM" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/bluegrid{ name = "Server Base"; nitrogen = 180; @@ -43215,7 +43243,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/lobby) "bYV" = ( @@ -43398,9 +43428,6 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/neotheology/biogenerator) "bZo" = ( -/obj/machinery/firealarm{ - pixel_y = 28 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -43418,9 +43445,7 @@ id = "AI"; pixel_y = 24 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -43475,9 +43500,7 @@ id = "AI"; pixel_y = 24 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -43572,11 +43595,11 @@ "bZG" = ( /obj/machinery/atmospherics/unary/freezer, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/mixing) @@ -43585,7 +43608,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) @@ -43616,7 +43639,7 @@ /area/eris/hallway/main/section2) "bZT" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -43629,7 +43652,7 @@ /area/turret_protected/ai) "bZV" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/cyan{ d1 = 1; @@ -43714,7 +43737,7 @@ id = "hangar_to_cargo" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/quartermaster/hangarsupply) @@ -43799,7 +43822,7 @@ icon_state = "2-8" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/camera/network/third_section{ @@ -43859,7 +43882,7 @@ /area/eris/command/fo) "caB" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/turret_protected/ai) @@ -44203,9 +44226,7 @@ /turf/simulated/floor/wood, /area/eris/command/fo) "cby" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -44215,7 +44236,7 @@ /area/eris/command/fo) "cbz" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -44231,7 +44252,7 @@ /area/eris/command/fo) "cbC" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) @@ -44299,7 +44320,7 @@ /area/turret_protected/ai) "cbJ" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/cyan{ d1 = 1; @@ -44328,7 +44349,7 @@ /area/eris/command/tcommsat/chamber) "cbM" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -44663,9 +44684,7 @@ /area/eris/rnd/mixing) "ccK" = ( /obj/machinery/hologram/holopad, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/turretid/stun{ check_synth = 1; name = "AI Chamber turret control"; @@ -44690,7 +44709,6 @@ icon_state = "0-2" }, /obj/machinery/power/apc/critical{ - dir = 1; name = "north bump"; pixel_y = 28 }, @@ -44837,7 +44855,7 @@ /area/eris/maintenance/section3deck4central) "cda" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -44901,11 +44919,11 @@ /area/eris/rnd/mixing) "cdh" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/wood, /area/eris/crew_quarters/clothingstorage) @@ -44963,7 +44981,6 @@ icon_state = "0-8" }, /obj/machinery/power/apc/super/critical{ - dir = 1; name = "north bump"; pixel_y = 28 }, @@ -45069,7 +45086,8 @@ /area/eris/crew_quarters/clothingstorage) "cdI" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/wood, /area/eris/crew_quarters/clothingstorage) @@ -45332,7 +45350,9 @@ /turf/simulated/floor/tiled/steel/monofloor, /area/eris/quartermaster/hangarsupply) "ceg" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/lobby) "ceh" = ( @@ -45478,9 +45498,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -45515,7 +45533,9 @@ id = "AI"; pixel_y = -24 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) "cez" = ( @@ -45560,7 +45580,9 @@ id = "AI"; pixel_y = -24 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -45658,7 +45680,9 @@ }, /area/eris/command/tcommsat/chamber) "ceM" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/manifold/hidden/black, /turf/simulated/floor/bluegrid{ name = "Server Base"; @@ -45682,7 +45706,9 @@ }, /area/eris/command/tcommsat/chamber) "ceO" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 9 }, @@ -45727,7 +45753,7 @@ "ceS" = ( /obj/machinery/disposal, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/bluegrid, @@ -45798,7 +45824,7 @@ id = "Bluespace_Biosyphon" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/security/main) @@ -45827,7 +45853,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/wood, /area/eris/command/fo) "cfe" = ( @@ -45888,14 +45916,16 @@ /area/turret_protected/ai) "cfl" = ( /obj/structure/table/reinforced, -/obj/machinery/button/ignition{ - id = "toxin_chamber1"; - pixel_y = -5 - }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ + pixel_x = 0; + pixel_y = 5; id = "toxinchamber1"; - name = "Mixing Room Vent Control"; - pixel_y = 5 + name = "Mixing Room Vent Control" + }, +/obj/machinery/button/ignition/table{ + pixel_x = 0; + pixel_y = -6; + id = "toxin_chamber1" }, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/mixing) @@ -45936,9 +45966,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/storage/tech) "cfs" = ( @@ -45953,7 +45981,9 @@ /obj/spawner/powercell/low_chance, /obj/spawner/powercell/low_chance, /obj/spawner/powercell/low_chance, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel/cargo, /area/eris/quartermaster/hangarsupply) @@ -46071,7 +46101,8 @@ "cfF" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green{ d2 = 8; @@ -46192,7 +46223,9 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck3starboard) "cfU" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/foyer) "cfV" = ( @@ -46381,7 +46414,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) "cgm" = ( @@ -46420,7 +46455,9 @@ /obj/spawner/medical_lowcost/low_chance, /obj/spawner/medical_lowcost/low_chance, /obj/spawner/medical_lowcost/low_chance, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel/cargo, /area/eris/quartermaster/hangarsupply) @@ -46557,7 +46594,7 @@ /obj/structure/table/standard, /obj/machinery/recharger, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/item/device/radio/intercom{ dir = 4; @@ -46568,7 +46605,7 @@ "cgL" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/steel/techfloor, @@ -47072,7 +47109,7 @@ /area/eris/rnd/server) "chX" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -47303,7 +47340,7 @@ /area/eris/rnd/scient) "ciA" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/portable_atmospherics/powered/pump, /turf/simulated/floor/tiled/steel/gray_platform, @@ -47481,7 +47518,8 @@ /obj/structure/cable/green, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck5port) @@ -47815,7 +47853,8 @@ /area/eris/quartermaster/storage) "cjS" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/camera/network/research{ dir = 4 @@ -47823,15 +47862,15 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) "cjT" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/light/floor{ + dir = 4 + }, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/mixing) "cjU" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/mixing) @@ -47840,7 +47879,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/mixing) @@ -47924,9 +47963,7 @@ /obj/structure/multiz/stairs/enter/bottom{ dir = 8 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/research) "ckh" = ( @@ -48085,14 +48122,12 @@ /obj/machinery/recharger, /obj/structure/table/reinforced, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/gray_platform, /area/eris/rnd/mixing) "ckB" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/table/standard, /obj/spawner/powercell/low_chance, /obj/spawner/powercell/low_chance, @@ -48113,9 +48148,7 @@ /turf/simulated/open, /area/eris/quartermaster/storage) "ckF" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/camera/network/fourth_section{ dir = 4 }, @@ -48165,6 +48198,9 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/research) "ckP" = ( +/obj/structure/sign/department/sci{ + pixel_x = 32 + }, /turf/simulated/floor/tiled/white/gray_platform, /area/eris/rnd/lab) "ckQ" = ( @@ -48172,7 +48208,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/golden, /area/eris/crew_quarters/kitchen_storage) "ckS" = ( @@ -48249,9 +48287,7 @@ /turf/simulated/open, /area/eris/quartermaster/storage) "clc" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/table/standard, /obj/spawner/toolbox, /turf/simulated/floor/tiled/techmaint_perforated, @@ -48285,7 +48321,7 @@ /area/eris/medical/medbay) "clh" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -48413,7 +48449,7 @@ /area/eris/rnd/mixing) "clA" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -48519,14 +48555,16 @@ /area/eris/rnd/mixing) "clQ" = ( /obj/structure/table/reinforced, -/obj/machinery/button/ignition{ - id = "toxin_chamber2"; - pixel_y = -5 - }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ + pixel_x = 0; + pixel_y = 5; id = "toxinchamber2"; - name = "Mixing Room Vent Control"; - pixel_y = 5 + name = "Mixing Room Vent Control" + }, +/obj/machinery/button/ignition/table{ + pixel_x = 0; + pixel_y = -6; + id = "toxin_chamber2" }, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/mixing) @@ -48603,18 +48641,18 @@ /obj/structure/cable/green, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/white/golden, /area/eris/crew_quarters/kitchen_storage) "clY" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/sign/faction/neotheology_cross/gold{ - pixel_y = 32 + pixel_y = 25; + pixel_x = 0 }, /turf/simulated/floor/grass, /area/eris/neotheology/chapelritualroom) @@ -48684,9 +48722,7 @@ /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/hallway/side/eschangarb) "cmi" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/white, /area/eris/command/mbo) "cmj" = ( @@ -48728,7 +48764,7 @@ pixel_x = -26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 8 @@ -48866,7 +48902,7 @@ /area/eris/maintenance/section3deck4port) "cmD" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/item/device/radio/intercom{ dir = 4; @@ -48901,7 +48937,8 @@ /area/eris/command/meo) "cmK" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/atmospherics/binary/passive_gate{ dir = 1; @@ -49141,7 +49178,9 @@ /area/eris/medical/surgery) "cnp" = ( /obj/machinery/meter, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/manifold/visible/yellow, /turf/simulated/floor/tiled/white/techfloor_grid, /area/eris/rnd/mixing) @@ -49165,7 +49204,7 @@ "cnu" = ( /obj/structure/cyberplant, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/disposalpipe/segment, @@ -49235,9 +49274,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4central) "cnD" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck2central) @@ -49312,7 +49349,7 @@ pixel_x = -2 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/medbay) @@ -49357,7 +49394,7 @@ /area/eris/rnd/mixing) "cnR" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sink{ dir = 4; @@ -49369,7 +49406,7 @@ /obj/structure/table/standard, /obj/item/hand_tele, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/white/gray_platform, @@ -49397,14 +49434,14 @@ /area/eris/neotheology/storage) "cnZ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) "coa" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -49413,7 +49450,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/mixing) @@ -49422,9 +49459,7 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) "coc" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/table/woodentable, /obj/item/storage/fancy/vials, /turf/simulated/floor/carpet, @@ -49444,7 +49479,7 @@ /area/eris/command/meo) "coj" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/structure/cable/green{ @@ -49467,7 +49502,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/gray_platform, /area/eris/medical/medbay) @@ -49478,7 +49513,9 @@ /obj/item/device/synthesized_instrument/guitar/multi, /obj/item/device/synthesized_instrument/guitar, /obj/item/device/synthesized_instrument/synthesizer, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/gaycarpet, /area/eris/crew_quarters/artistoffice) "coo" = ( @@ -49569,7 +49606,7 @@ /area/eris/medical/medbay) "coD" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -49663,7 +49700,7 @@ pixel_y = 4 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -49688,7 +49725,7 @@ /area/eris/maintenance/section3deck4central) "coO" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -49700,9 +49737,7 @@ /area/eris/medical/reception) "coP" = ( /obj/machinery/photocopier, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -49761,7 +49796,9 @@ /obj/machinery/computer/guestpass{ pixel_y = -32 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/eris/medical/reception) "coX" = ( @@ -49792,7 +49829,9 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/panels, /area/eris/rnd/scient) "cpb" = ( @@ -49825,7 +49864,8 @@ /area/eris/hallway/main/section2) "cpf" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) @@ -49980,10 +50020,11 @@ /area/eris/medical/surgery) "cpz" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -50000,7 +50041,9 @@ /turf/simulated/floor/tiled/techmaint_perforated, /area/eris/maintenance/section4deck3port) "cpB" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/conveyor/east{ id = "cargo_intake" }, @@ -50077,7 +50120,7 @@ /area/eris/medical/medbay) "cpK" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) @@ -50096,7 +50139,7 @@ /area/eris/crew_quarters/kitchen) "cpO" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/hallway/side/atmosphericshallway) @@ -50123,7 +50166,9 @@ /turf/simulated/floor/plating, /area/eris/engineering/foyer) "cpR" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/eris/medical/morgue) "cpU" = ( @@ -50155,16 +50200,24 @@ "cpZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/crew_quarters/hydroponics/garden) "cqa" = ( -/obj/structure/sign/faction/neotheology, -/turf/simulated/wall/r_wall, -/area/eris/crew_quarters/hydroponics/garden) +/obj/structure/multiz/stairs/enter{ + dir = 4 + }, +/obj/structure/sign/faction/technomancers{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel/techfloor, +/area/eris/engineering/foyer) "cqb" = ( /obj/structure/disposalpipe/segment, +/obj/structure/sign/faction/neotheology{ + pixel_x = -32 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "cqc" = ( @@ -50255,9 +50308,7 @@ /turf/simulated/floor/tiled/white, /area/eris/medical/medbay) "cqr" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -50297,7 +50348,9 @@ /obj/structure/multiz/stairs/enter/bottom{ dir = 8 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/cargo, /area/eris/maintenance/section4deck3port) "cqx" = ( @@ -50453,7 +50506,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -50506,9 +50559,23 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4starboard) "cqS" = ( -/obj/structure/sign/department/sci, -/turf/simulated/wall/r_wall, -/area/eris/rnd/scient) +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "EngineeringTotalLockdown"; + layer = 2.6; + name = "Engineering Total Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/glass_engineering{ + name = "Engineering Lobby Access" + }, +/obj/structure/sign/faction/technomancers{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/steel/cargo, +/area/eris/engineering/foyer) "cqT" = ( /obj/structure/catwalk, /obj/structure/table/rack/shelf, @@ -50540,9 +50607,23 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) "cqY" = ( -/obj/structure/sign/department/sci, -/turf/simulated/wall, -/area/eris/rnd/lab) +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "EngineeringTotalLockdown"; + layer = 2.6; + name = "Engineering Total Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/glass_engineering{ + name = "Engineering Lobby Access" + }, +/obj/structure/sign/department/eng{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel/cargo, +/area/eris/engineering/foyer) "crb" = ( /obj/effect/window_lwall_spawn/smartspawn, /obj/machinery/door/firedoor, @@ -50754,9 +50835,7 @@ /area/eris/maintenance/section2deck3port) "crz" = ( /obj/machinery/vending/cola, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/sign/pods{ pixel_y = 32 }, @@ -50794,9 +50873,6 @@ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -50861,11 +50937,11 @@ /area/eris/maintenance/section3deck4starboard) "crM" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -50908,7 +50984,9 @@ /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "crS" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -51078,6 +51156,9 @@ pixel_x = -24; req_access = null }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/hallway/side/cryo) "cso" = ( @@ -51091,7 +51172,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4central) @@ -51158,7 +51239,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/steel/gray_platform, @@ -51176,7 +51257,8 @@ /area/eris/crew_quarters/kitchen_storage) "csE" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/structure/catwalk, /turf/simulated/floor/plating/under, @@ -51223,7 +51305,8 @@ req_access = null }, /obj/structure/extinguisher_cabinet{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/machinery/button/remote/blast_door{ id = "artist_office_west"; @@ -51310,7 +51393,7 @@ /area/eris/quartermaster/storage) "csX" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -51339,6 +51422,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/sign/faction/neotheology_cross{ + pixel_x = -32 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "ctd" = ( @@ -51440,7 +51526,7 @@ /area/eris/maintenance/junk) "ctw" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck3port) @@ -51450,7 +51536,7 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -51511,7 +51597,8 @@ /area/eris/maintenance/section3deck4central) "ctI" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/oldtele) @@ -51547,9 +51634,7 @@ /obj/structure/multiz/stairs/enter{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/lab) "ctP" = ( @@ -51578,7 +51663,7 @@ }, /obj/structure/catwalk, /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door/id_card{ +/obj/machinery/button/remote/blast_door/id_card/table{ id = "random_radio"; name = "Random wave radio id lock"; req_access = list(31) @@ -51587,7 +51672,7 @@ /area/eris/quartermaster/storage) "ctT" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -51688,17 +51773,18 @@ /area/eris/neotheology/biogenerator) "cuk" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/hallway/side/bridgehallway) "cul" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/hallway/side/bridgehallway) @@ -51855,7 +51941,7 @@ /area/eris/command/meo) "cuJ" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -51890,7 +51976,7 @@ /area/eris/command/meo) "cuM" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -51945,7 +52031,7 @@ /area/eris/medical/medbreak) "cuV" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -52021,7 +52107,7 @@ }, /obj/item/bluespace_harpoon, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/carpet/purcarpet, /area/eris/command/meo) @@ -52098,7 +52184,8 @@ /obj/spawner/pack/tech_loot, /obj/spawner/pack/tech_loot, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/techmaint_perforated, /area/eris/maintenance/section3deck4central) @@ -52162,7 +52249,7 @@ /area/eris/hallway/side/bridgehallway) "cvD" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -52256,11 +52343,11 @@ /area/eris/engineering/post) "cvV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/computer/message_monitor{ dir = 4 @@ -52891,7 +52978,7 @@ "cxr" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -52960,7 +53047,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/grass, @@ -53063,9 +53150,7 @@ "cxP" = ( /obj/structure/table/standard, /obj/spawner/pack/tech_loot, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint_panels, /area/eris/maintenance/section1deck4central) "cxQ" = ( @@ -53094,6 +53179,9 @@ /obj/spawner/lathe_disk, /obj/spawner/lathe_disk, /obj/item/computer_hardware/hard_drive/portable/design/tools, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/white/golden, /area/eris/crew_quarters/kitchen_storage) "cxT" = ( @@ -53230,9 +53318,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/alarm{ pixel_y = 26 }, @@ -53287,9 +53373,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -53351,7 +53435,8 @@ /area/eris/quartermaster/storage) "cyu" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/item/device/radio/intercom{ pixel_y = 24 @@ -53361,7 +53446,7 @@ /area/eris/rnd/research) "cyv" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/violetcorener, /area/eris/rnd/research) @@ -53375,7 +53460,7 @@ "cyy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atm{ dir = 8; @@ -53470,6 +53555,9 @@ /obj/item/modular_computer/console/preset/engineering/power{ dir = 4 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/engine_room) "cyP" = ( @@ -53650,7 +53738,7 @@ /area/eris/quartermaster/storage) "czn" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/floodlight, /turf/simulated/floor/tiled/steel/danger, @@ -53964,7 +54052,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -54022,7 +54110,7 @@ /obj/structure/table/reinforced, /obj/item/storage/box/donut, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -54143,7 +54231,7 @@ /obj/structure/disposalpipe/segment, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -54220,7 +54308,7 @@ /obj/structure/table/standard, /obj/item/device/radio/off, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -54239,7 +54327,7 @@ "cAG" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -54362,7 +54450,7 @@ "cAU" = ( /obj/machinery/shieldwallgen, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/maintenance/section4deck3port) @@ -54571,7 +54659,7 @@ /area/eris/crew_quarters/kitchen) "cBs" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/alarm{ dir = 4; @@ -54619,7 +54707,9 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck4port) "cBy" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -54832,7 +54922,7 @@ /area/eris/maintenance/section1deck2central) "cBZ" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/hallway/side/bridgehallway) @@ -54904,9 +54994,7 @@ /area/eris/crew_quarters/kitchen) "cCj" = ( /obj/structure/lattice, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/quartermaster/storage) "cCk" = ( @@ -54972,7 +55060,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/atmosphericshallway) "cCs" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -55032,7 +55122,7 @@ "cCA" = ( /obj/structure/reagent_dispensers/cahorsbarrel, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/neotheology/storage) @@ -55058,7 +55148,9 @@ /obj/spawner/rations, /obj/spawner/rations, /obj/spawner/rations, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/cafe, /area/eris/crew_quarters/kitchen) "cCE" = ( @@ -55074,7 +55166,7 @@ /area/eris/hallway/side/bridgehallway) "cCG" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/bar_dance, /area/eris/crew_quarters/bar) @@ -55219,7 +55311,7 @@ /obj/structure/table/standard, /obj/item/device/aicard, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/tiled/steel/gray_platform, @@ -55327,9 +55419,7 @@ /obj/machinery/recharger, /obj/item/cell/large/high, /obj/item/cell/large/high, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/item/device/radio/intercom{ pixel_y = 24 }, @@ -55370,7 +55460,9 @@ dir = 1; pixel_y = -23 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/hallway/side/bridgehallway) "cDt" = ( @@ -55409,7 +55501,9 @@ /turf/simulated/floor/carpet/turcarpet, /area/eris/crew_quarters/clothingstorage) "cDy" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/recharge_station, /turf/simulated/floor/tiled/steel/bar_dance, /area/eris/crew_quarters/bar) @@ -55785,7 +55879,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4central) "cEw" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/button/remote/blast_door/id_card{ dir = 1; id = "atomic_distillery"; @@ -55835,12 +55931,11 @@ /obj/structure/table/standard, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/button/remote/blast_door/id_card{ - id = "maneki_neko"; +/obj/machinery/button/remote/blast_door/id_card/table{ + req_access = list(41); name = "Maneki Neko id lock"; - req_access = list(41) + id = "maneki_neko" }, -/obj/landmark/storyevent/potential_unique_oddity_spawn, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/office) "cEC" = ( @@ -55908,9 +56003,7 @@ /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/command/exultant/quarters) "cEJ" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -55954,7 +56047,7 @@ /area/eris/engineering/engeva) "cEO" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/hologram/holopad, /obj/structure/sign/faction/technomancers{ @@ -56160,7 +56253,7 @@ /area/eris/maintenance/section3deck4starboard) "cFo" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/wood, /area/eris/neotheology/office) @@ -56268,7 +56361,7 @@ /obj/structure/disposalpipe/segment, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4central) @@ -56335,9 +56428,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -56379,7 +56470,9 @@ /obj/structure/table/reinforced, /obj/item/clothing/gloves/insulated, /obj/item/storage/belt/utility, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/command/exultant/quarters) "cFN" = ( @@ -56484,7 +56577,7 @@ /area/eris/quartermaster/office) "cGa" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) @@ -56519,9 +56612,7 @@ /area/eris/rnd/storage) "cGf" = ( /obj/machinery/portable_atmospherics/canister/plasma, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/white/cargo, /area/eris/rnd/storage) "cGg" = ( @@ -56576,7 +56667,7 @@ /area/eris/maintenance/section3deck4central) "cGp" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -56634,7 +56725,7 @@ "cGu" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -56861,7 +56952,7 @@ /area/eris/maintenance/section3deck4central) "cGV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -57002,7 +57093,8 @@ /obj/spawner/material/building/low_chance, /obj/spawner/material/building/low_chance, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/drone_fabrication) @@ -57180,7 +57272,9 @@ /turf/simulated/floor/tiled/steel/panels, /area/eris/engineering/post) "cHO" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/steel/panels, /area/eris/engineering/post) @@ -57269,7 +57363,7 @@ dir = 4 }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -57361,7 +57455,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/command/bridge) @@ -57597,6 +57691,9 @@ /obj/machinery/door/airlock/glass_engineering{ name = "Engineering Lobby Access" }, +/obj/structure/sign/department/eng{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/steel/cargo, /area/eris/engineering/foyer) "cIZ" = ( @@ -57693,7 +57790,7 @@ "cJj" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -57755,9 +57852,7 @@ /turf/simulated/wall, /area/eris/maintenance/substation/section3) "cJx" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/autolathe/nanoforge, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/breakroom) @@ -57788,7 +57883,9 @@ /turf/simulated/floor/tiled/steel/cargo, /area/eris/quartermaster/miningdock) "cJA" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -57817,7 +57914,7 @@ /area/eris/maintenance/section2deck2starboard) "cJE" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/sec4{ pixel_x = 32 @@ -57875,7 +57972,8 @@ "cJJ" = ( /obj/spawner/junk/low_chance, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck4central) @@ -57914,14 +58012,16 @@ "cJO" = ( /obj/structure/cyberplant, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/crew_quarters/sleep/cryo) "cJP" = ( /obj/structure/cyberplant, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/crew_quarters/sleep/cryo) @@ -58016,7 +58116,9 @@ /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/engeva) "cKe" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -58062,6 +58164,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/landmark/storyevent/potential_unique_oddity_spawn, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/office) "cKl" = ( @@ -58176,9 +58279,7 @@ /turf/simulated/floor/tiled/steel/cargo, /area/eris/hallway/main/section4) "cKu" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint_panels, /area/eris/maintenance/section1deck2central) @@ -58192,7 +58293,8 @@ /area/eris/medical/medbay) "cKw" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3deck2port) @@ -58352,7 +58454,7 @@ /area/eris/hallway/main/section4) "cKP" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, @@ -58399,7 +58501,7 @@ /obj/item/cell/large/high, /obj/item/cell/large/high, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/hallway/side/section3starboard) @@ -58533,8 +58635,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 9 }, -/obj/effect/window_lwall_spawn/smartspawn, -/turf/simulated/floor/plating, +/turf/simulated/wall, /area/eris/hallway/main/section4) "cLp" = ( /obj/structure/dispenser/oxygen, @@ -58598,7 +58699,7 @@ /area/eris/maintenance/section4deck3port) "cLy" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/breakroom) @@ -58671,7 +58772,8 @@ /area/eris/medical/medbay) "cLH" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 26 + pixel_x = 26; + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/breakroom) @@ -58765,7 +58867,7 @@ "cLS" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -58827,7 +58929,8 @@ icon_state = "1-2" }, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/plating, /area/eris/engineering/construction) @@ -58929,7 +59032,7 @@ /area/eris/maintenance/section4deck3port) "cMl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/camera/network/engineering{ @@ -58984,9 +59087,7 @@ /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/bioreactor) "cMt" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/camera/network/third_section{ dir = 8 }, @@ -59176,11 +59277,11 @@ /area/eris/rnd/research) "cNc" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -59249,12 +59350,14 @@ /area/eris/rnd/storage) "cNv" = ( /obj/structure/catwalk, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck3port) "cNx" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck2starboard) @@ -59307,7 +59410,9 @@ /area/eris/engineering/breakroom) "cNG" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/white/cargo, /area/eris/rnd/storage) "cNH" = ( @@ -59488,7 +59593,9 @@ /turf/simulated/floor/plating, /area/eris/rnd/xenobiology) "cOj" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "cOl" = ( @@ -59589,8 +59696,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 10 }, -/obj/effect/window_lwall_spawn/smartspawn, -/turf/simulated/floor/plating, +/turf/simulated/wall, /area/eris/hallway/main/section4) "cOA" = ( /obj/structure/disposalpipe/segment, @@ -59873,9 +59979,7 @@ pixel_y = 26 }, /obj/item/bedsheet/yellow, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/breakroom) @@ -59938,9 +60042,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck2starboard) "cPx" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -59997,9 +60099,7 @@ }, /area/shuttle/mining/station) "cPF" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor/mining{ icon_state = "3,21" }, @@ -60018,7 +60118,9 @@ }, /area/shuttle/mining/station) "cPJ" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; frequency = 1380; @@ -60188,7 +60290,8 @@ /obj/item/tank/oxygen, /obj/item/clothing/mask/gas, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/steel, /area/eris/command/teleporter) @@ -60325,7 +60428,7 @@ "cQC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/mining{ icon_state = "12,20" @@ -60348,7 +60451,7 @@ /area/shuttle/mining/station) "cQF" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/bluegrid{ name = "Mainframe Base" @@ -60456,7 +60559,7 @@ /obj/item/device/lighting/glowstick/flare, /obj/item/device/lighting/glowstick/flare, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/sec4{ pixel_x = 32 @@ -60585,7 +60688,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/shuttle/floor/mining{ icon_state = "10,19" }, @@ -60745,7 +60850,7 @@ /area/eris/crew_quarters/sleep/cryo) "cRN" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -60776,7 +60881,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/hallway/main/section4) @@ -60978,9 +61083,7 @@ /area/eris/maintenance/section4deck3port) "cSt" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck2starboard) @@ -61183,7 +61286,7 @@ /area/eris/rnd/xenobiology) "cSY" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/rnd/research) @@ -61226,7 +61329,7 @@ /area/shuttle/mining/station) "cTf" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor/mining{ icon_state = "6,16" @@ -61242,7 +61345,7 @@ dir = 8 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/mining{ icon_state = "8,16" @@ -61326,18 +61429,13 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/power/smes/buildable/substation{ RCon_tag = "Substation - Third Section" }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/substation/section3) "cTt" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/item/modular_computer/console/preset/engineering/rcon{ dir = 4 }, @@ -61537,7 +61635,7 @@ pixel_y = 30 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -61552,7 +61650,7 @@ icon_state = "plant-01" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/eris/command/meeting_room) @@ -61574,7 +61672,7 @@ icon_state = "plant-21" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark, /area/eris/command/meeting_room) @@ -61696,9 +61794,7 @@ /area/shuttle/mining/station) "cUr" = ( /obj/structure/ore_box, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor/mining{ icon_state = "13,14" }, @@ -61817,7 +61913,9 @@ }, /area/shuttle/mining/station) "cUL" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/mining{ icon_state = "11,13" }, @@ -62028,7 +62126,7 @@ /area/shuttle/mining/station) "cVm" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor/mining{ icon_state = "6,12" @@ -62042,7 +62140,7 @@ "cVo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/mining{ icon_state = "8,12" @@ -62209,7 +62307,7 @@ /obj/item/clothing/gloves/latex, /obj/item/hand_labeler, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/violetcorener, /area/eris/rnd/xenobiology) @@ -62363,7 +62461,7 @@ /area/space) "cWe" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -62404,7 +62502,7 @@ /area/eris/rnd/xenobiology) "cWi" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -62441,7 +62539,8 @@ pixel_y = 3 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/tiled/white/violetcorener, /area/eris/rnd/xenobiology) @@ -62591,7 +62690,9 @@ /turf/simulated/floor/carpet, /area/eris/security/inspectors_office) "cWF" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/traps/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck3port) @@ -62962,9 +63063,7 @@ /area/shuttle/mining/station) "cXC" = ( /obj/structure/closet/secure_closet/personal/miner, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor/mining{ icon_state = "4,9" }, @@ -63132,7 +63231,7 @@ "cXU" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -63150,7 +63249,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck2starboard) @@ -63164,13 +63263,15 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/breakroom) "cXX" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/spawner/junk/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck2port) "cXY" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -63198,7 +63299,7 @@ /area/eris/maintenance/section3deck3starboard) "cYa" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -63631,7 +63732,8 @@ /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/structure/fireaxecabinet{ - pixel_y = 24 + pixel_y = 24; + dir = 2 }, /turf/simulated/floor/tiled/white/gray_platform, /area/eris/medical/reception) @@ -63648,7 +63750,7 @@ /area/shuttle/mining/station) "cYY" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -63712,9 +63814,7 @@ }, /area/shuttle/mining/station) "cZf" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/shuttle/floor/mining{ icon_state = "10,7" }, @@ -63876,9 +63976,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -64140,7 +64238,7 @@ pixel_y = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/medbay/iso) @@ -64276,7 +64374,7 @@ /obj/item/clothing/mask/muzzle, /obj/item/clothing/mask/muzzle, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -64335,7 +64433,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/mining{ icon_state = "4,4" }, @@ -64495,7 +64595,7 @@ /obj/item/reagent_containers/food/drinks/bottle/small/beer, /obj/item/reagent_containers/food/drinks/bottle/small/beer, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/mining{ icon_state = "7,3" @@ -64518,7 +64618,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor/mining{ icon_state = "10,3" @@ -64850,9 +64950,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/catwalk, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck2port) @@ -65104,9 +65202,7 @@ /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/medbay/iso) "dcy" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/medical/chemistry) "dcz" = ( @@ -65586,9 +65682,7 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "ddE" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/item/device/radio/intercom{ pixel_y = 24 }, @@ -65599,7 +65693,7 @@ /area/eris/command/bridgebar) "ddF" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -65787,7 +65881,7 @@ pixel_x = 25 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -65868,7 +65962,7 @@ "def" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/simulated/floor/wood, @@ -65879,10 +65973,11 @@ icon_state = "pipe-j2" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/command/meeting_room) @@ -65913,7 +66008,7 @@ icon_state = "pipe-c" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/command/meeting_room) @@ -65953,7 +66048,7 @@ "deq" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/command/bridgebar) @@ -66014,7 +66109,7 @@ }) "dez" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/wood, @@ -66058,7 +66153,7 @@ /area/eris/command/captain) "deD" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -66458,7 +66553,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/command/captain) @@ -66469,7 +66564,7 @@ /obj/item/clothing/suit/space/captain, /obj/item/clothing/head/space/capspace, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -66496,7 +66591,9 @@ pixel_x = 8 }, /obj/item/disk/nuclear, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/turcarpet, /area/eris/command/captain) "dfB" = ( @@ -66512,7 +66609,7 @@ "dfD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/item/device/radio/intercom{ dir = 8; @@ -66540,7 +66637,7 @@ pixel_x = 32 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/command/meeting_room) @@ -66676,7 +66773,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/wood, /area/eris/command/captain) "dgb" = ( @@ -66740,7 +66839,7 @@ /area/eris/maintenance/section3deck4starboard) "dgi" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -66748,6 +66847,9 @@ d2 = 4; icon_state = "0-4" }, +/obj/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/eris/maintenance/substation/bridge) "dgj" = ( @@ -66797,7 +66899,8 @@ "dgo" = ( /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/reception) @@ -66825,7 +66928,7 @@ /area/eris/rnd/anomal) "dgr" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -66837,7 +66940,8 @@ /area/eris/rnd/xenobiology) "dgs" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/white, /area/eris/medical/medbay) @@ -66962,9 +67066,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -67018,9 +67120,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/light_switch{ pixel_y = 28 }, @@ -67160,9 +67260,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/eris/command/meeting_room) "dgZ" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/alarm{ pixel_y = 26 }, @@ -67193,9 +67291,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/light_switch{ pixel_y = 28 }, @@ -67249,7 +67345,7 @@ /area/eris/command/fo/quarters) "dhe" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -67407,7 +67503,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -67498,7 +67594,7 @@ /obj/structure/bed/padded, /obj/item/bedsheet/rd, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/wood, /area/eris/command/meo/quarters) @@ -67568,7 +67664,7 @@ /area/eris/command/meeting_room) "dhU" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) @@ -67579,7 +67675,7 @@ /obj/item/hand_labeler, /obj/item/packageWrap, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/chemistry) @@ -67645,7 +67741,7 @@ /obj/structure/table/woodentable, /obj/item/storage/box/donut, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -67665,7 +67761,8 @@ "die" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/catwalk, /obj/structure/cable/green, @@ -67897,9 +67994,6 @@ }, /area/eris/hallway/main/section3) "diI" = ( -/obj/machinery/light/small{ - dir = 8 - }, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -67918,9 +68012,7 @@ "diK" = ( /obj/structure/closet, /obj/spawner/contraband/low_chance, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "diL" = ( @@ -67953,7 +68045,7 @@ "diO" = ( /obj/structure/railing, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/open, /area/turret_protected/ai) @@ -68016,7 +68108,7 @@ /area/eris/command/tcommsat/computer) "diX" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/camera/network/engineering{ @@ -68026,7 +68118,7 @@ /area/eris/hallway/side/atmosphericshallway) "diY" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/white/danger, @@ -68171,7 +68263,7 @@ /area/eris/rnd/xenobiology) "djm" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/camera/network/research{ @@ -68435,7 +68527,8 @@ /area/eris/hallway/side/atmosphericshallway) "djS" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -68477,7 +68570,7 @@ /area/eris/rnd/research) "djW" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -68508,10 +68601,11 @@ /area/eris/security/checkpoint/science) "djZ" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section3) @@ -68546,7 +68640,7 @@ /area/eris/hallway/side/atmosphericshallway) "dkd" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -68801,7 +68895,7 @@ /area/eris/maintenance/substation/bridge) "dkJ" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/railing{ dir = 1 @@ -68945,7 +69039,7 @@ "dla" = ( /obj/structure/table/woodentable, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -69089,9 +69183,7 @@ /turf/simulated/floor, /area/eris/rnd/research) "dln" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -69325,9 +69417,7 @@ desc = "BIOHAZARD. Toxic biomatter in this area."; pixel_y = 32 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -69467,7 +69557,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -69515,7 +69605,9 @@ /obj/machinery/camera/network/research{ dir = 8 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/rnd/research) "dmn" = ( @@ -69584,7 +69676,7 @@ /obj/structure/table/woodentable, /obj/item/clothing/glasses/hud/health, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/wood, /area/eris/command/mbo/quarters) @@ -69641,7 +69733,7 @@ "dmC" = ( /obj/structure/railing, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating/under, @@ -69813,9 +69905,7 @@ /area/eris/command/exultant/quarters) "dmS" = ( /obj/structure/bed/chair/wood, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, @@ -69849,7 +69939,9 @@ /turf/simulated/floor/reinforced, /area/eris/maintenance/section2deck1starboard) "dmZ" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/reinforced, /area/eris/maintenance/section2deck1starboard) "dna" = ( @@ -70023,7 +70115,7 @@ /area/eris/medical/reception) "dnp" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -70288,7 +70380,7 @@ icon_state = "1-2" }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) @@ -70398,7 +70490,7 @@ pixel_x = -32 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck2port) @@ -70434,7 +70526,7 @@ /area/eris/maintenance/section2deck2port) "dok" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -70462,9 +70554,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck4starboard) "doo" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/white/techfloor, /area/eris/medical/medeva) "dop" = ( @@ -70539,6 +70629,9 @@ pixel_x = -24; pixel_y = -5 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/checkpoint/supply) "dow" = ( @@ -70664,7 +70757,9 @@ /turf/simulated/floor/tiled/techmaint_cargo, /area/eris/maintenance/section1deck1central) "doL" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck4starboard) "doM" = ( @@ -70864,8 +70959,7 @@ /area/eris/maintenance/section1deck1central) "dpj" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /obj/effect/decal/cleanable/graffiti{ pixel_x = -30; @@ -70893,7 +70987,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/hallway/side/section3starboard) @@ -70907,9 +71001,7 @@ /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/reception) "dpq" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -70920,7 +71012,7 @@ /area/eris/engineering/foyer) "dpr" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/structure/table/rack, @@ -71006,7 +71098,7 @@ /area/eris/rnd/research) "dpE" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/techfloor, /area/eris/maintenance/junk) @@ -71090,7 +71182,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/white, @@ -71167,7 +71261,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -71195,7 +71291,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/white, @@ -71441,7 +71537,7 @@ pixel_x = -26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) @@ -71486,10 +71582,9 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "xenobio6"; - name = "Containment 6 Blast Doors"; - pixel_y = 4 + name = "Containment 6 Blast Doors" }, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) @@ -71601,7 +71696,7 @@ /area/eris/medical/medbay/iso) "drf" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -71633,7 +71728,7 @@ /area/eris/maintenance/section4deck2starboard) "drj" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/holoposter{ pixel_x = 32 @@ -71794,9 +71889,7 @@ /turf/simulated/floor/tiled/white, /area/eris/hallway/main/section2) "drB" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/hallway/main/section2) "drC" = ( @@ -71962,7 +72055,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/flasher{ id = "Cell 3"; pixel_y = -28 @@ -72007,7 +72102,8 @@ /area/eris/maintenance/section3deck2starboard) "dsa" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -72078,7 +72174,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/security/prisoncells) "dsk" = ( @@ -72216,7 +72314,7 @@ "dsE" = ( /obj/structure/closet/secure_closet/engineering_electrical, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -72288,7 +72386,7 @@ /obj/structure/table/standard, /obj/structure/cable/green, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -72312,7 +72410,7 @@ /area/eris/command/mbo/quarters) "dsR" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -72397,7 +72495,7 @@ /area/eris/medical/medbay/iso) "dtb" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -72486,7 +72584,9 @@ /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/checkpoint/supply) "dto" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -72646,9 +72746,7 @@ /area/eris/maintenance/section3deck4starboard) "dtE" = ( /obj/spawner/scrap, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/maintenance/section3deck4starboard) "dtF" = ( @@ -72779,14 +72877,12 @@ /area/eris/maintenance/section3deck4starboard) "dtZ" = ( /obj/spawner/scrap/dense, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/maintenance/section3deck4starboard) "dua" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -72809,9 +72905,6 @@ /turf/simulated/floor/tiled/techmaint_cargo, /area/eris/hallway/main/section2) "dud" = ( -/obj/machinery/light{ - dir = 4 - }, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/security/checkpoint/supply) "due" = ( @@ -72851,7 +72944,7 @@ /area/eris/security/checkpoint/medical) "dui" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -72972,7 +73065,9 @@ name = "plastic table frame" }, /obj/item/lipstick/random, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/purcarpet, /area/eris/rnd/research) "dux" = ( @@ -73073,7 +73168,7 @@ "duF" = ( /obj/structure/closet/secure_closet/personal/doctor, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -73115,7 +73210,7 @@ icon_state = "0-8" }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating, /area/eris/engineering/engine_room) @@ -73202,7 +73297,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -73281,8 +73376,10 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "duY" = ( -/obj/structure/sign/faction/neotheology, -/turf/simulated/wall/r_wall, +/obj/structure/sign/faction/neotheology_cross/gold{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "duZ" = ( /obj/structure/multiz/stairs/active/bottom{ @@ -73294,9 +73391,7 @@ /obj/structure/multiz/stairs/enter/bottom{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/research) "dvb" = ( @@ -73306,7 +73401,7 @@ /area/eris/engineering/engine_room) "dvc" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/hallway/main/section2) @@ -73314,7 +73409,9 @@ /turf/simulated/wall/r_wall, /area/eris/maintenance/section3deck3starboard) "dve" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/quartermaster/storage) "dvf" = ( @@ -73366,7 +73463,7 @@ /area/eris/medical/psych) "dvo" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/white/brown_perforated, @@ -73377,7 +73474,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/foyer) @@ -73424,10 +73521,10 @@ /area/eris/command/bridge) "dvy" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/modular_computer/console/preset/engineering/alarms{ @@ -73445,9 +73542,7 @@ /area/eris/hallway/main/section2) "dvA" = ( /obj/machinery/power/nt_obelisk, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "dvB" = ( @@ -73706,9 +73801,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -73791,7 +73884,7 @@ /area/eris/maintenance/section3deck2port) "dwq" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/sign/department/eva{ pixel_x = -32 @@ -73892,7 +73985,9 @@ pixel_x = -2; pixel_y = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/medbay) "dwE" = ( @@ -73940,7 +74035,9 @@ /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/medbay) "dwJ" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, /obj/spawner/firstaid, @@ -74032,6 +74129,9 @@ pixel_y = 24 }, /obj/spawner/junk/low_chance, +/obj/machinery/status_display{ + pixel_y = -32 + }, /turf/simulated/floor/tiled/dark/panels, /area/eris/maintenance/oldbridge) "dwW" = ( @@ -74042,6 +74142,9 @@ /obj/item/device/radio/intercom{ pixel_y = 24 }, +/obj/machinery/status_display{ + pixel_y = -32 + }, /turf/simulated/floor/tiled/dark/panels, /area/eris/maintenance/oldbridge) "dwY" = ( @@ -74056,7 +74159,9 @@ /turf/simulated/floor/tiled/dark/panels, /area/eris/maintenance/oldbridge) "dxa" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/modular_computer/console/preset/civilian/professional{ dir = 1 }, @@ -74099,7 +74204,9 @@ name = "Medbay Therapy Exit Button"; pixel_y = -26 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/medbay) "dxf" = ( @@ -74112,9 +74219,11 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/foyer) "dxh" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall, -/area/eris/maintenance/oldbridge) +/obj/structure/sign/faction/frozenstar{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/techmaint, +/area/eris/maintenance/section3deck1central) "dxi" = ( /obj/structure/computerframe{ anchored = 1; @@ -74156,7 +74265,7 @@ /area/eris/maintenance/section2deck3port) "dxo" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/genetics) @@ -74208,9 +74317,7 @@ /turf/simulated/floor/tiled/white, /area/eris/command/mbo) "dxw" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/camera/network/second_section{ dir = 8 }, @@ -74254,13 +74361,14 @@ /area/eris/engineering/foyer) "dxB" = ( /obj/structure/fireaxecabinet{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/eris/command/bridge) "dxC" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -74343,8 +74451,10 @@ /turf/simulated/floor/tiled/steel/cargo, /area/eris/quartermaster/misc) "dxN" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/light/small, +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/maintenance/oldbridge) @@ -74373,7 +74483,8 @@ /area/eris/engineering/foyer) "dxT" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -26 + pixel_x = -26; + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/starboardhallway) @@ -74511,7 +74622,9 @@ /turf/simulated/wall/r_wall, /area/eris/security/checkpoint/medical) "dyr" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -74630,7 +74743,7 @@ "dyE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/command/meeting_room) @@ -74798,7 +74911,7 @@ name = "Armoury showcase" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -74874,7 +74987,7 @@ /obj/spawner/medical, /obj/spawner/medical, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/spawner/medical, /obj/spawner/medical, @@ -74895,7 +75008,9 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/command/bridge) "dze" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -75014,9 +75129,7 @@ /obj/item/contraband/poster, /obj/item/contraband/poster, /obj/item/contraband/poster, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/lowkeyrandom, /obj/spawner/lowkeyrandom, /obj/spawner/lowkeyrandom, @@ -75182,7 +75295,7 @@ /area/eris/command/mbo) "dzQ" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck2port) @@ -75212,7 +75325,7 @@ "dzV" = ( /obj/structure/table/standard, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -75273,7 +75386,7 @@ /area/eris/command/mbo) "dAa" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -75395,7 +75508,7 @@ /area/eris/command/bridgebar) "dAo" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck5central) @@ -75404,7 +75517,7 @@ /area/eris/maintenance/section1deck5central) "dAq" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/structure/railing{ dir = 1; @@ -75540,7 +75653,7 @@ /area/eris/maintenance/section2deck1port) "dAG" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck1port) @@ -75567,7 +75680,7 @@ /obj/structure/table/standard, /obj/item/device/eftpos, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -75642,9 +75755,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/plating/under, /area/eris/medical/medbay) "dAT" = ( @@ -75678,9 +75789,7 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/foyer) "dAX" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck1central) "dAY" = ( @@ -75799,7 +75908,7 @@ /area/eris/medical/medbay) "dBp" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -76032,26 +76141,23 @@ /area/eris/medical/reception) "dBO" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/airlock{ - desc = "A remote control switch."; - id = "MedbayPatients"; - name = "Patients Exit Button"; - pixel_x = -6; - pixel_y = 6 +/obj/machinery/button/remote/blast_door/table{ + pixel_x = -5; + pixel_y = -5; + id = "MedbayExam"; + name = "Examination Door Control" }, -/obj/machinery/button/remote/airlock{ - desc = "A remote control switch."; +/obj/machinery/button/remote/blast_door/table{ + pixel_x = 5; + pixel_y = -5; id = "MedbayCryo2"; - name = "Medbay Therapy Exit Button"; - pixel_x = 4; - pixel_y = -4 + name = "Medbay Therapy Exit Button" }, -/obj/machinery/button/remote/airlock{ - desc = "A remote control switch."; - id = "MedbayExam"; - name = "Examination Door Control"; - pixel_x = -6; - pixel_y = -4 +/obj/machinery/button/remote/blast_door/table{ + pixel_x = -5; + pixel_y = 5; + id = "MedbayPatients"; + name = "Patients Exit Button" }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/reception) @@ -76111,7 +76217,7 @@ /obj/structure/bed/padded, /obj/item/bedsheet/medical, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -76131,7 +76237,7 @@ /area/eris/medical/patients_rooms) "dBV" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -76177,9 +76283,7 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/medical/reception) "dCc" = ( @@ -76232,7 +76336,7 @@ "dCh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/reception) @@ -76248,7 +76352,7 @@ "dCk" = ( /obj/structure/medical_stand, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/patients_rooms) @@ -76410,11 +76514,15 @@ /area/eris/medical/reception) "dCD" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /obj/item/modular_computer/console/preset/engineering/alarms{ dir = 4 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/foyer) "dCF" = ( @@ -76446,7 +76554,7 @@ pixel_y = 28 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/hologram/holopad, /turf/simulated/floor/wood, @@ -76490,8 +76598,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1" + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/medical/medbreak) @@ -76524,7 +76631,9 @@ /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/foyer) "dCS" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -76585,7 +76694,8 @@ "dDa" = ( /obj/structure/catwalk, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/open, /area/eris/quartermaster/storage) @@ -76603,7 +76713,7 @@ /area/eris/maintenance/section1deck1central) "dDd" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -76653,11 +76763,11 @@ /area/eris/engineering/starboardhallway) "dDl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/starboardhallway) @@ -76694,7 +76804,7 @@ /area/eris/command/bridge) "dDq" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76702,7 +76812,7 @@ /area/eris/command/bridge) "dDs" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76717,7 +76827,7 @@ "dDu" = ( /obj/structure/catwalk, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -76780,7 +76890,7 @@ "dDC" = ( /obj/structure/medical_stand, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/white/brown_perforated, @@ -76840,10 +76950,11 @@ /area/eris/engineering/starboardhallway) "dDL" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/dark, @@ -76931,14 +77042,18 @@ /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/medbreak) "dDV" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/eris/medical/patients_rooms) "dDW" = ( /obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -22 @@ -76947,10 +77062,11 @@ /area/eris/medical/reception) "dDX" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -76960,7 +77076,9 @@ "dDZ" = ( /obj/structure/table/standard, /obj/spawner/medical, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/eris/medical/reception) "dEa" = ( @@ -77114,7 +77232,7 @@ /area/eris/medical/genetics) "dEq" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/table/standard, /obj/item/storage/box/gloves{ @@ -77156,7 +77274,7 @@ /area/eris/medical/medbay/organs) "dEu" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/disposalpipe/trunk{ @@ -77167,7 +77285,7 @@ /area/eris/engineering/foyer) "dEv" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/table/standard, /turf/simulated/floor/tiled/white, @@ -77179,7 +77297,7 @@ pixel_y = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/genetics) @@ -77334,16 +77452,16 @@ /turf/simulated/floor/tiled/white, /area/eris/medical/genetics) "dEP" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/command/mbo) "dEQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/noticeboard{ pixel_y = -28 }, @@ -77436,7 +77554,9 @@ /obj/structure/mopbucket, /obj/item/mop, /obj/item/reagent_containers/glass/bucket, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/bioreactor) "dFc" = ( @@ -77457,9 +77577,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section1deck1central) "dFe" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck1central) @@ -77551,7 +77669,7 @@ /area/eris/maintenance/section3deck3starboard) "dFs" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/steel, @@ -77689,9 +77807,7 @@ /area/eris/maintenance/section1deck1central) "dFP" = ( /obj/item/newspaper, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck1central) "dFQ" = ( @@ -77743,7 +77859,9 @@ /area/eris/quartermaster/office) "dFY" = ( /obj/structure/catwalk, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/open, /area/eris/quartermaster/storage) "dFZ" = ( @@ -77797,7 +77915,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/steel, @@ -77858,7 +77976,7 @@ /area/eris/maintenance/section1deck5central) "dGn" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -77960,7 +78078,7 @@ /area/eris/hallway/main/section3) "dGz" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -78001,7 +78119,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -78264,7 +78382,7 @@ "dHn" = ( /obj/structure/table/rack, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/quartermaster/office) @@ -78291,9 +78409,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3deck2port) "dHs" = ( @@ -78421,7 +78537,7 @@ /area/eris/maintenance/section3deck4port) "dHE" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -78466,7 +78582,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/steel/orangecorner, @@ -78481,7 +78597,9 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/starboardhallway) "dHJ" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -78620,7 +78738,8 @@ /area/eris/engineering/starboardhallway) "dHZ" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/engine_room) @@ -78664,7 +78783,7 @@ /area/eris/hallway/side/atmosphericshallway) "dIf" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -78760,7 +78879,9 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/starboardhallway) "dIo" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/starboardhallway) "dIp" = ( @@ -78875,7 +78996,7 @@ dir = 1 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/propulsion/right) @@ -79021,9 +79142,11 @@ }, /area/eris/security/lobby) "dIQ" = ( -/obj/structure/sign/faction/ironhammer, -/turf/simulated/wall/r_wall, -/area/eris/security/lobby) +/obj/machinery/holoposter{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/eris/hallway/main/section2) "dIR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_common{ @@ -79218,7 +79341,7 @@ /obj/item/storage/belt/utility, /obj/item/storage/belt/utility, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/breakroom) @@ -79246,7 +79369,7 @@ sensors = list("mair_in_meter"="Mixed Air In","air_sensor"="Mixed Air Supply Tank","mair_out_meter"="Mixed Air Out","dloop_atm_meter"="Distribution Loop","wloop_atm_meter"="Engine Waste") }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/command/exultant) @@ -79379,9 +79502,7 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/engineering/propulsion/left) "dJF" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -79435,7 +79556,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/hallway/side/section3port) "dJL" = ( @@ -79494,9 +79617,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/docking) "dJT" = ( @@ -79602,7 +79723,7 @@ /area/eris/engineering/propulsion/left) "dKd" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/cable/green{ @@ -79890,9 +80011,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -80229,7 +80348,7 @@ /area/eris/engineering/gravity_generator) "dMf" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 4 @@ -80254,9 +80373,22 @@ /turf/simulated/floor/tiled/steel/panels, /area/eris/crew_quarters/pubeva) "dMj" = ( -/obj/structure/sign/faction/technomancers, -/turf/simulated/wall/r_wall, -/area/eris/engineering/foyer) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/securearea{ + pixel_y = 32 + }, +/turf/simulated/floor/plating/under, +/area/eris/maintenance/section1deck4central) "dMk" = ( /obj/machinery/computer/general_air_control/large_tank_control{ dir = 8; @@ -80362,7 +80494,7 @@ /area/eris/engineering/engine_room) "dMD" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating, /area/eris/engineering/engine_room) @@ -80475,7 +80607,7 @@ /area/eris/engineering/propulsion/right) "dMT" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 8 @@ -80565,7 +80697,8 @@ /area/eris/engineering/propulsion/right) "dNb" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -26 + pixel_x = -26; + dir = 4 }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/propulsion/left) @@ -80748,13 +80881,15 @@ /obj/structure/table/reinforced, /obj/machinery/recharger, /obj/structure/extinguisher_cabinet{ - pixel_x = -24 + pixel_x = -24; + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/foyer) "dNF" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 26 + pixel_x = 26; + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/propulsion/right) @@ -80812,7 +80947,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/engineering/foyer) "dNR" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/table/reinforced, /obj/item/tool/multitool{ pixel_x = 5 @@ -80826,7 +80963,8 @@ /area/eris/engineering/foyer) "dNS" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/cafe, /area/eris/crew_quarters/kitchen) @@ -81006,7 +81144,7 @@ "dOs" = ( /obj/structure/closet/secure_closet/reinforced/engineering_chief, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -81154,9 +81292,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck1starboard) "dON" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/pack/machine, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck1port) @@ -81188,7 +81324,8 @@ "dOS" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/catwalk, /obj/structure/cable/green, @@ -81228,7 +81365,9 @@ /turf/simulated/floor/tiled/techmaint_cargo, /area/eris/maintenance/section4deck2starboard) "dOZ" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical{ pixel_x = -2; @@ -81325,7 +81464,8 @@ /area/eris/engineering/gravity_generator) "dPp" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -26 + pixel_x = -26; + dir = 4 }, /obj/machinery/firealarm{ dir = 1; @@ -81340,9 +81480,6 @@ /obj/structure/table/rack, /obj/item/weldpack, /obj/item/weldpack, -/obj/machinery/camera/network/engineering{ - dir = 1 - }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/gravity_generator) "dPr" = ( @@ -81446,7 +81583,7 @@ /obj/item/stack/cable_coil, /obj/item/device/radio, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -81459,7 +81596,7 @@ "dPI" = ( /obj/structure/table/standard, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/simulated/floor/tiled/steel/gray_perforated, @@ -81612,7 +81749,9 @@ dir = 1; pixel_y = -22 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/engine_room) "dQk" = ( @@ -81636,7 +81775,7 @@ /obj/structure/table/standard, /obj/item/cell/large/high, /obj/item/cell/large/high, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "shieldroom"; name = "Shield Generator Shutters" }, @@ -81657,7 +81796,8 @@ /area/eris/maintenance/section2deck1port) "dQq" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/structure/cable/green{ d1 = 2; @@ -81705,7 +81845,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/gravity_generator) "dQy" = ( @@ -82015,7 +82157,7 @@ "dRn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -82127,9 +82269,7 @@ /area/space) "dRD" = ( /obj/machinery/shieldgen, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/maintenance/section4deck3port) "dRE" = ( @@ -82153,7 +82293,7 @@ "dRH" = ( /obj/structure/catwalk, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/open, /area/eris/engineering/engeva) @@ -82477,9 +82617,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck2starboard) "dSz" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section4deck2starboard) "dSA" = ( @@ -82704,7 +82842,8 @@ "dTf" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/catwalk, /obj/structure/cable/green{ @@ -82929,7 +83068,8 @@ "dTI" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/catwalk, /obj/structure/cable/green, @@ -82978,9 +83118,7 @@ /obj/item/computer_hardware/hard_drive/portable/design/misc, /obj/item/computer_hardware/hard_drive/portable/design/devices, /obj/item/computer_hardware/hard_drive/portable/design/tools, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/storage/primary) "dTP" = ( @@ -83050,7 +83188,8 @@ /obj/item/tool/crowbar, /obj/item/tool/crowbar, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/quartermaster/misc) @@ -83149,7 +83288,8 @@ /obj/machinery/recharger, /obj/machinery/camera/network/engineering, /obj/structure/fireaxecabinet{ - pixel_y = 24 + pixel_y = 24; + dir = 2 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/breakroom) @@ -83440,9 +83580,7 @@ id_tag = "second_sec_1_airlock_pump"; name = "Second Section Airlock Pump - 1" }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/embedded_controller/radio/airlock/docking_port{ frequency = 1331; id_tag = "second_sec_1_access_console"; @@ -83620,7 +83758,9 @@ /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/maintenance/section2deck1port) "dVy" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/maintenance/section2deck1port) "dVz" = ( @@ -83642,7 +83782,7 @@ /area/eris/maintenance/section2deck5port) "dVD" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck1starboard) @@ -83711,14 +83851,14 @@ /obj/spawner/medical/low_chance, /obj/structure/table/rack/shelf, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/item/storage/box/njoy/green, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/medical/chemstor) "dVO" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -83760,7 +83900,7 @@ "dVU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -83777,7 +83917,7 @@ pixel_x = -26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/docking) @@ -83979,15 +84119,14 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/plating/under, /area/eris/maintenance/section2deck1starboard) "dWo" = ( /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -84012,9 +84151,7 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology) "dWr" = ( @@ -84086,11 +84223,9 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck1port) "dWy" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -84320,9 +84455,6 @@ /turf/simulated/floor/wood, /area/eris/crew_quarters/kitchen) "dXa" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -84397,7 +84529,7 @@ "dXk" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/department/dock{ pixel_x = 32 @@ -84432,7 +84564,7 @@ /area/eris/rnd/research) "dXo" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/white, @@ -84488,11 +84620,11 @@ "dXv" = ( /obj/structure/disposalpipe/junction, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 10 @@ -84713,7 +84845,7 @@ /area/eris/crew_quarters/sleep/cryo) "dYa" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section3) @@ -84862,7 +84994,7 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/hallway/side/section3starboard) @@ -85040,7 +85172,7 @@ /area/eris/hallway/side/section3starboard) "dZc" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/table/rack, /turf/simulated/floor/tiled/steel/brown_platform, @@ -85184,9 +85316,7 @@ /turf/simulated/floor/reinforced, /area/eris/rnd/misc_lab) "dZy" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/reinforced, /area/eris/rnd/misc_lab) "dZz" = ( @@ -85208,7 +85338,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -85315,7 +85445,8 @@ /area/eris/maintenance/section3deck2port) "dZS" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white/golden, @@ -85381,9 +85512,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck3starboard) "eab" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/spawner/mob/roaches/cluster/low_chance, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck3starboard) @@ -85534,9 +85663,7 @@ /area/eris/rnd/docking) "eao" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/camera/network/third_section{ dir = 4 }, @@ -85604,7 +85731,7 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -85759,7 +85886,7 @@ dir = 4 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/hallway/main/section3) @@ -85880,7 +86007,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white, /area/eris/rnd/research) @@ -85985,10 +86112,10 @@ /area/eris/rnd/anomalisolone) "ebv" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -86015,10 +86142,10 @@ /area/eris/rnd/anomalisoltwo) "eby" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -86041,7 +86168,7 @@ /area/eris/rnd/misc_lab) "ebC" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/bucket, @@ -86376,7 +86503,7 @@ "ecA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -86587,7 +86714,7 @@ /area/eris/rnd/misc_lab) "ecZ" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -86644,11 +86771,11 @@ /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/misc) "edd" = ( -/obj/structure/sign/biohazard{ - icon_state = "bio-danger" +/obj/structure/sign/department/anomaly{ + pixel_x = -32 }, -/turf/simulated/wall/r_wall, -/area/eris/rnd/xenobiology) +/turf/simulated/floor/tiled/white, +/area/eris/rnd/research) "ede" = ( /obj/machinery/alarm{ dir = 8; @@ -86792,7 +86919,9 @@ /area/shuttle/research/station) "edt" = ( /obj/structure/table/standard, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "9,17" }, @@ -87147,9 +87276,7 @@ /area/eris/engineering/propulsion/right) "eep" = ( /obj/item/newspaper, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/landmark/storyevent/hidden_vent_antag, /obj/effect/decal/cleanable/graffiti{ pixel_y = 35 @@ -87185,7 +87312,7 @@ /area/eris/rnd/anomal) "eeu" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -87253,9 +87380,7 @@ /turf/simulated/floor/tiled/dark/panels, /area/eris/maintenance/oldbridge) "eeD" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/dark/panels, /area/eris/maintenance/oldbridge) "eeE" = ( @@ -87345,7 +87470,7 @@ "eeR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor/science, /area/shuttle/research/station) @@ -87481,7 +87606,7 @@ /area/eris/maintenance/oldbridge) "efk" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -87567,7 +87692,7 @@ /area/eris/rnd/xenobiology) "efq" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/item/trash/cigbutt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -87709,7 +87834,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "6,14" }, @@ -87748,7 +87875,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "10,14" }, @@ -87774,9 +87903,7 @@ /obj/machinery/firealarm{ pixel_y = 28 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 10 }, @@ -87912,14 +88039,13 @@ dir = 1 }, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/quartermaster/storage) "egk" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/table/rack, /turf/simulated/floor/tiled/white/gray_platform, /area/eris/medical/paramedic) @@ -88213,7 +88339,7 @@ /obj/structure/table/standard, /obj/item/device/lighting/toggleable/lamp, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -88311,9 +88437,11 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/anomal) "ehd" = ( -/obj/structure/sign/department/anomaly, -/turf/simulated/wall/r_wall, -/area/eris/rnd/anomal) +/obj/machinery/camera/network/engineering{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel/techfloor, +/area/eris/engineering/gravity_generator) "ehe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -88530,9 +88658,7 @@ }, /area/shuttle/research/station) "ehE" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/shuttle/floor/science{ icon_state = "10,12" }, @@ -88622,7 +88748,9 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/section4deck1central) "ehS" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/orangecorner, /area/eris/maintenance/section4deck1central) "ehT" = ( @@ -88894,7 +89022,9 @@ }, /area/shuttle/research/station) "eiA" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "5,11" }, @@ -88999,7 +89129,7 @@ "eiP" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -89113,7 +89243,7 @@ /area/eris/maintenance/section4deck1central) "ejb" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -89360,7 +89490,9 @@ /area/eris/maintenance/section4deck1central) "ejA" = ( /obj/machinery/portable_atmospherics/canister/plasma, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/eris/rnd/anomal) "ejB" = ( @@ -89645,7 +89777,7 @@ "ejY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/science{ icon_state = "8,9" @@ -89853,7 +89985,7 @@ icon_state = "0-8" }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white, /area/eris/maintenance/section2deck1starboard) @@ -90118,7 +90250,9 @@ }, /area/shuttle/research/station) "ell" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "6,7" }, @@ -90140,7 +90274,9 @@ }, /area/shuttle/research/station) "elp" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor/science{ icon_state = "10,7" }, @@ -90331,7 +90467,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/catwalk, /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck3starboard) @@ -90400,9 +90537,7 @@ /area/eris/rnd/xenobiology/xenoflora) "emf" = ( /obj/machinery/seed_storage/xenobotany, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology/xenoflora) "emg" = ( @@ -90486,7 +90621,7 @@ dir = 8 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/science{ icon_state = "8,6" @@ -90695,7 +90830,7 @@ /area/eris/hallway/side/section3deck2port) "emX" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -90780,7 +90915,7 @@ /area/eris/rnd/xenobiology/xenoflora) "eni" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/eris/maintenance/section2deck1starboard) @@ -90832,7 +90967,7 @@ "enq" = ( /obj/structure/table/standard, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -91412,7 +91547,7 @@ icon_state = "1-4" }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor/science{ icon_state = "3,3" @@ -91488,7 +91623,7 @@ /obj/structure/table/steel, /obj/item/stack/flag/yellow, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor/science{ icon_state = "13,3" @@ -91542,7 +91677,7 @@ /area/eris/quartermaster/misc) "epg" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/misc) @@ -91619,7 +91754,7 @@ /area/shuttle/research/station) "epr" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/shuttle/floor/science{ @@ -91695,7 +91830,9 @@ /turf/simulated/open, /area/eris/quartermaster/misc) "epB" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/portables_connector{ dir = 4 }, @@ -91722,7 +91859,9 @@ /turf/simulated/floor/tiled/white, /area/eris/rnd/xenobiology/xenoflora) "epF" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -22 @@ -91866,7 +92005,8 @@ /obj/item/storage/toolbox/emergency, /obj/item/storage/toolbox/emergency, /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /turf/simulated/floor/tiled/steel/cargo, /area/eris/hallway/main/section3) @@ -91878,7 +92018,7 @@ /area/eris/engineering/propulsion/left) "eqc" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -92184,7 +92324,8 @@ "eqM" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /turf/simulated/floor/tiled/steel, @@ -92210,7 +92351,8 @@ "eqO" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /turf/simulated/floor/wood, @@ -92417,7 +92559,8 @@ }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/maintenance/section3deck2starboard) @@ -92530,7 +92673,7 @@ /area/eris/crew_quarters/clownoffice) "erz" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -92910,7 +93053,7 @@ "esm" = ( /obj/structure/multiz/stairs/enter/bottom, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/storage) @@ -92945,7 +93088,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -93060,7 +93203,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/storage) @@ -93120,7 +93263,7 @@ /area/eris/medical/paramedic) "esK" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/bar_dance, /area/holodeck/alphadeck) @@ -93134,9 +93277,7 @@ /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/misc) "esN" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/bluegrid, /area/holodeck/alphadeck) "esO" = ( @@ -93215,11 +93356,11 @@ /turf/simulated/floor/grass, /area/eris/crew_quarters/hydroponics) "esX" = ( -/obj/structure/table/rack, -/obj/spawner/lowkeyrandom, -/obj/machinery/light, -/turf/simulated/floor/tiled/steel/brown_platform, -/area/eris/quartermaster/office) +/obj/structure/sign/faction/ironhammer{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/dark/techfloor_grid, +/area/eris/security/prison) "esY" = ( /obj/landmark/join/start/paramedic, /turf/simulated/floor/tiled/white/gray_perforated, @@ -93232,14 +93373,15 @@ "eta" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "etd" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/danger, /area/eris/quartermaster/storage) @@ -93263,7 +93405,8 @@ /area/eris/command/exultant) "etf" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/steel/gray_platform, @@ -93299,7 +93442,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "etk" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "etl" = ( @@ -93331,7 +93476,7 @@ "etp" = ( /obj/structure/multiz/stairs/enter, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/storage) @@ -93340,13 +93485,13 @@ /obj/machinery/alarm{ pixel_y = 26 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/cafe, /area/eris/crew_quarters/kitchen) "etr" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/vending/dinnerware, /turf/simulated/floor/tiled/steel/bar_dance, /area/holodeck/alphadeck) @@ -93355,7 +93500,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) @@ -93400,17 +93545,13 @@ /area/eris/crew_quarters/kitchen) "ety" = ( /obj/structure/bed/chair, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/hallway/side/section3starboard) "etz" = ( /obj/structure/closet/emcloset, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/hallway/side/section3starboard) "etA" = ( @@ -93455,33 +93596,36 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "etD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) "etE" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/crew_quarters/pubeva) "etF" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/hallway/side/section3starboard) "etG" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/steel/brown_platform, /area/eris/hallway/side/section3starboard) @@ -93495,7 +93639,7 @@ req_one_access = list(13,48) }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/panels, /area/eris/quartermaster/miningdock) @@ -93503,14 +93647,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/machinery/light, -/turf/simulated/floor/tiled/steel/gray_platform, -/area/eris/quartermaster/miningdock) -"etJ" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/steel/gray_platform, +/area/eris/quartermaster/miningdock) +"etJ" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/steel/gray_platform, /area/eris/hallway/side/section3deck2port) "etK" = ( /obj/structure/table/standard{ @@ -93538,9 +93682,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/misc) "etN" = ( @@ -93563,7 +93705,7 @@ /area/eris/maintenance/section3deck1central) "etP" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/misc) @@ -93574,7 +93716,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/misc) "etR" = ( @@ -93584,9 +93728,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/misc) "etS" = ( @@ -93596,18 +93738,14 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/quartermaster/misc) "etV" = ( /obj/structure/railing{ dir = 8 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open, /area/eris/quartermaster/misc) "etW" = ( @@ -93638,7 +93776,7 @@ "etY" = ( /obj/structure/table/standard, /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/spawner/junkfood/low_chance, /turf/simulated/floor/tiled/steel/gray_perforated, @@ -93650,14 +93788,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet, /area/eris/quartermaster/office) "eua" = ( /obj/structure/table/woodentable, -/obj/machinery/light{ - dir = 8 - }, /obj/item/storage/freezer/contains_food, /turf/simulated/floor/carpet/oracarpet, /area/eris/quartermaster/misc) @@ -93699,7 +93836,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/office) @@ -93728,15 +93865,14 @@ "eug" = ( /obj/structure/railing, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/open, /area/eris/quartermaster/misc) "euh" = ( /obj/structure/railing, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/open, /area/eris/quartermaster/misc) @@ -93744,7 +93880,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/misc) @@ -93753,15 +93889,13 @@ /turf/simulated/floor/tiled/steel/cargo, /area/eris/storage/primary) "eul" = ( -/obj/machinery/light{ - dir = 4 - }, +/obj/machinery/light/floor, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/storage/primary) "eum" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/quartermaster/office) @@ -93770,7 +93904,7 @@ dir = 1 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/open, /area/eris/quartermaster/misc) @@ -93779,8 +93913,7 @@ dir = 1 }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/open, /area/eris/quartermaster/misc) @@ -93792,7 +93925,9 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/storage/primary) "euq" = ( @@ -93800,7 +93935,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/cargo, /area/eris/hallway/side/section3deck2port) @@ -93811,7 +93946,9 @@ /turf/simulated/floor/tiled/steel/cargo, /area/eris/storage/primary) "eus" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/open, /area/eris/quartermaster/misc) "eut" = ( @@ -93823,9 +93960,7 @@ "euu" = ( /obj/structure/table/woodentable, /obj/item/hand_labeler, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/item/packageWrap, /obj/item/device/destTagger, /turf/simulated/floor/wood, @@ -93844,12 +93979,14 @@ /area/eris/hallway/main/section3) "euw" = ( /obj/structure/cyberplant, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/hallway/main/section3) "euy" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3deck2port) @@ -93864,23 +94001,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section3) "euA" = ( /obj/spawner/closet/wardrobe, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/maintenance/section3deck2starboard) "euB" = ( /obj/spawner/closet/wardrobe, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/maintenance/section3deck2starboard) @@ -93889,12 +94023,14 @@ /obj/spawner/medical/low_chance, /obj/spawner/medical/low_chance, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/maintenance/section3deck2starboard) "euD" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/maintenance/section3deck2starboard) "euE" = ( @@ -93902,7 +94038,9 @@ dir = 4 }, /obj/structure/catwalk, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck2starboard) "euF" = ( @@ -93916,8 +94054,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/carpet/turcarpet, /area/eris/crew_quarters/librarybackroom) @@ -93926,13 +94063,14 @@ dir = 9 }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/carpet/turcarpet, /area/eris/crew_quarters/librarybackroom) "euH" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/maintenance/section3deck1central) "euI" = ( @@ -93952,8 +94090,7 @@ /area/eris/quartermaster/miningdock) "euL" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/maintenance/section3deck1central) @@ -93962,8 +94099,7 @@ /obj/spawner/surgery_tool, /obj/spawner/surgery_tool/low_chance, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/white/panels, /area/eris/maintenance/section3deck1central) @@ -93973,8 +94109,7 @@ /obj/spawner/surgery_tool/low_chance, /obj/spawner/knife/low_chance, /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/white/panels, /area/eris/maintenance/section3deck1central) @@ -93983,7 +94118,9 @@ /turf/simulated/floor/tiled/white/brown_platform, /area/eris/maintenance/section3deck1central) "euP" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/maintenance/section3deck1central) "euR" = ( @@ -93997,7 +94134,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -94007,7 +94146,7 @@ /area/eris/quartermaster/storage) "euT" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/storage) @@ -94033,7 +94172,7 @@ /area/eris/medical/chemistry) "euX" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/item/device/radio/intercom{ dir = 8; @@ -94152,7 +94291,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -94208,7 +94347,8 @@ /area/eris/neotheology/chapel) "evv" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 24 + pixel_x = 24; + dir = 8 }, /obj/structure/table/standard, /obj/item/reagent_containers/dropper{ @@ -94435,9 +94575,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/alarm{ pixel_y = 26 }, @@ -94497,9 +94635,7 @@ /turf/simulated/floor/tiled/steel/brown_perforated, /area/eris/maintenance/section3deck3starboard) "ewb" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "ewc" = ( @@ -94533,7 +94669,7 @@ "ewe" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) @@ -94544,9 +94680,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/bar_flat, /area/eris/crew_quarters/bar) "ewg" = ( @@ -94587,7 +94721,7 @@ dir = 1 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) @@ -94669,7 +94803,9 @@ /turf/simulated/floor/tiled/steel/monofloor, /area/eris/quartermaster/hangarsupply) "ewv" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/bar_dance, /area/holodeck/alphadeck) "eww" = ( @@ -94883,13 +95019,15 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/main/section3) "ewY" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/firealarm{ pixel_y = 28 @@ -95006,7 +95144,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/cargo, /area/eris/storage/primary) "exl" = ( @@ -95132,9 +95272,7 @@ /area/eris/hallway/side/section3deck2port) "exA" = ( /obj/structure/cyberplant, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -95240,7 +95378,9 @@ /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/hangarsupply) "exM" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/hangarsupply) "exN" = ( @@ -95300,9 +95440,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/firealarm{ pixel_y = 28 }, @@ -95712,7 +95850,9 @@ /obj/structure/multiz/stairs/enter{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/storage/primary) "eyW" = ( @@ -96265,7 +96405,8 @@ "eAe" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /obj/structure/catwalk, @@ -96335,9 +96476,7 @@ /area/eris/maintenance/section3deck1central) "eAm" = ( /obj/structure/table/standard, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/item/modular_computer/laptop/preset/atmos, /turf/simulated/floor/tiled/white, /area/eris/rnd/anomal) @@ -96348,9 +96487,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/bluecorner, /area/eris/maintenance/section3deck1central) "eAo" = ( @@ -96734,9 +96871,7 @@ /turf/simulated/open, /area/eris/engineering/engine_room) "eBc" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/railing{ dir = 8 }, @@ -96859,7 +96994,7 @@ dir = 10 }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -96968,7 +97103,7 @@ /area/eris/engineering/gravity_generator) "eBC" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -97165,7 +97300,9 @@ /turf/simulated/floor/tiled/techmaint_panels, /area/eris/maintenance/section3deck2port) "eBW" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/shower{ dir = 1 }, @@ -97490,7 +97627,7 @@ /area/eris/medical/paramedic) "eCG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/white/gray_perforated, @@ -97501,9 +97638,7 @@ /area/eris/neotheology/churchcorridor) "eCI" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/churchcorridor) "eCK" = ( @@ -97559,7 +97694,9 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/gravity_generator) "eCQ" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/gravity_generator) "eCR" = ( @@ -97579,7 +97716,7 @@ /area/eris/engineering/gravity_generator) "eCV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/simulated/floor/tiled/steel/gray_perforated, @@ -97655,7 +97792,9 @@ /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/maintenance/section3deck2starboard) "eDg" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, @@ -97783,7 +97922,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/oracarpet, /area/eris/quartermaster/misc) "eDy" = ( @@ -97835,7 +97976,7 @@ "eDG" = ( /obj/structure/closet/secure_closet/medicine, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -97880,7 +98021,7 @@ /area/eris/medical/chemstor) "eDL" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -97971,9 +98112,7 @@ /turf/simulated/floor/plating, /area/eris/engineering/propulsion/right) "eDZ" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -98178,7 +98317,8 @@ pixel_y = -30 }, /obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door/table{ id = "BridgeEntrance"; name = "Bridge Entrance Lockdown" }, @@ -98244,7 +98384,7 @@ pixel_y = 26 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/button/remote/blast_door{ id = "EngineeringTotalLockdown"; @@ -98598,7 +98738,8 @@ "eFo" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green{ d2 = 4; @@ -98628,9 +98769,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck2port) "eFr" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -98763,7 +98902,6 @@ icon_state = "0-4" }, /obj/machinery/power/apc/hyper/critical{ - dir = 1; name = "north bump"; pixel_y = 28 }, @@ -98911,9 +99049,7 @@ /obj/machinery/firealarm{ pixel_y = 28 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 6 }, @@ -98936,7 +99072,7 @@ /area/eris/engineering/propulsion/right) "eHd" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -98967,7 +99103,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/wood, /area/eris/crew_quarters/kitchen) @@ -99124,7 +99260,9 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/propulsion/right) "eKV" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, @@ -99213,7 +99351,7 @@ /area/eris/maintenance/section3deck2starboard) "ePg" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -99229,7 +99367,9 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/propulsion/right) "eQb" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -99319,7 +99459,9 @@ /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/hallway/side/section3deck2port) "eVa" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/plating/under, /area/eris/crew_quarters/kitchen) "eWR" = ( @@ -99353,11 +99495,9 @@ /area/eris/quartermaster/hangarsupply) "faY" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "neotheology_shop"; - name = "NeoTheology Shop Access"; - pixel_x = 4; - pixel_y = -4 + name = "NeoTheology Shop Access" }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/churchbooth) @@ -99455,9 +99595,7 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/quartermaster/hangarsupply) "flg" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/item/contraband/poster/placed{ icon_state = "poster6"; pixel_x = 0; @@ -99487,7 +99625,9 @@ /turf/simulated/floor/tiled/white/gray_platform, /area/eris/medical/medbay/organs) "fnt" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/bcarpet, /area/eris/neotheology/office) "fnU" = ( @@ -99829,9 +99969,11 @@ /obj/structure/bed/chair/wood{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/carpet/bcarpet, @@ -99865,7 +100007,7 @@ /area/eris/hallway/side/section3deck2port) "gey" = ( /obj/machinery/camera/network/research{ - dir = 8 + dir = 1 }, /obj/item/storage/toolbox/mechanical, /obj/structure/table/reinforced, @@ -99887,7 +100029,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/kitchenspike, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/crew_quarters/kitchen) @@ -99902,9 +100046,7 @@ /turf/simulated/floor/grass, /area/eris/neotheology/chapelritualroom) "gkh" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/alarm{ pixel_y = 26 }, @@ -99936,9 +100078,7 @@ /turf/simulated/floor/wood, /area/eris/neotheology/churchbarracks) "gmK" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck3starboard) "gmM" = ( @@ -100032,7 +100172,7 @@ /area/eris/command/meo) "gxX" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -100226,7 +100366,7 @@ dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/chemistry) @@ -100291,7 +100431,7 @@ /area/eris/medical/medbay/organs) "haf" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -100749,7 +100889,7 @@ /area/eris/crew_quarters/hydroponics) "hRs" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/structure/cable{ d1 = 1; @@ -100811,6 +100951,13 @@ /obj/structure/cable/green, /turf/simulated/floor/plating/under, /area/eris/maintenance/section3deck5port) +"hYq" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 28 + }, +/turf/simulated/floor/tiled/white/golden, +/area/eris/neotheology/bioprinter) "iaf" = ( /obj/structure/multiz/stairs/enter{ dir = 1 @@ -101061,7 +101208,9 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/button/remote/airlock{ desc = "A remote control switch."; id = "unisex_room_1"; @@ -101213,7 +101362,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -101228,7 +101377,7 @@ "iVN" = ( /obj/structure/closet/coffin, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/funeral) @@ -101263,7 +101412,7 @@ /area/eris/crew_quarters/clubmanager) "iXt" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/crew_quarters/fitness) @@ -101293,7 +101442,8 @@ /obj/structure/cable/green, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -101394,7 +101544,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/hallway/side/section3port) "jlf" = ( @@ -101518,7 +101670,7 @@ "jwC" = ( /obj/spawner/mob/roaches/low_chance, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -101629,9 +101781,7 @@ /turf/simulated/floor/grass, /area/eris/neotheology/chapelritualroom) "jIq" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -101643,7 +101793,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -101660,7 +101810,7 @@ pixel_y = 32 }, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/neotheology/bioprinter) @@ -101714,9 +101864,7 @@ /turf/simulated/floor/plating/under, /area/eris/maintenance/sorter) "jRe" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/medical/chemstor) "jRq" = ( @@ -101733,7 +101881,8 @@ /obj/spawner/rations, /obj/spawner/rations, /obj/machinery/firealarm{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/cafe, /area/eris/crew_quarters/kitchen) @@ -101754,7 +101903,7 @@ /obj/structure/table/standard, /obj/spawner/pack/tech_loot, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck5port) @@ -101779,9 +101928,7 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/neotheology/altar) "jZP" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -101866,7 +102013,9 @@ /obj/structure/bed/chair/wood{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet/bcarpet, /area/eris/neotheology/chapel) "khS" = ( @@ -102012,9 +102161,7 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck3port) "ksR" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, @@ -102085,9 +102232,15 @@ /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/chemistry) "kGo" = ( -/obj/structure/sign/faction/neotheology_cross/gold, -/turf/simulated/wall/r_wall, -/area/eris/neotheology/chapel) +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/obj/structure/sign/atmos_air{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel/cargo, +/area/eris/hallway/main/section4) "kGH" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/techfloor, @@ -102241,7 +102394,7 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -102345,7 +102498,7 @@ /area/eris/crew_quarters/artistoffice) "lwA" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/item/reagent_containers/food/snacks/monkeycube/wrapped, /turf/simulated/floor/reinforced, @@ -102618,7 +102771,7 @@ /area/eris/medical/medbay/organs) "lXg" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/table/standard, /obj/item/tool/multitool, @@ -102632,7 +102785,7 @@ /area/eris/crew_quarters/hydroponics/garden) "lZF" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -102827,9 +102980,7 @@ /obj/item/tool/hammer/dumbbell{ pixel_y = -6 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/crew_quarters/fitness) "myt" = ( @@ -102844,7 +102995,9 @@ /area/eris/engineering/foyer) "myz" = ( /obj/structure/catwalk, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -102897,9 +103050,7 @@ pixel_y = 24 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/quartermaster/hangarsupply) "mCf" = ( @@ -102916,9 +103067,7 @@ "mCh" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/white/golden, /area/eris/crew_quarters/kitchen_storage) "mCG" = ( @@ -102953,7 +103102,7 @@ /obj/structure/closet/secure_closet/reinforced/chaplain, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/neotheology/office) @@ -102972,7 +103121,7 @@ /area/eris/crew_quarters/kitchen) "mFk" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -103052,7 +103201,8 @@ /area/eris/medical/chemstor) "nfm" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = 27 + pixel_y = 27; + dir = 2 }, /obj/structure/bed/chair{ dir = 4 @@ -103060,9 +103210,7 @@ /turf/simulated/floor/dirt, /area/eris/neotheology/chapelritualroom) "nha" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -103150,7 +103298,9 @@ /turf/simulated/floor/tiled/white, /area/eris/medical/chemistry) "nlx" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/holomap{ dir = 4; pixel_x = -32 @@ -103364,7 +103514,7 @@ /obj/item/reagent_containers/food/drinks/mug/new_nt, /obj/structure/table/woodentable, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/carpet/bcarpet, /area/eris/neotheology/storage) @@ -103459,7 +103609,9 @@ /obj/structure/multiz/stairs/enter/bottom{ dir = 8 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/eris/neotheology/churchcorridor) "ojP" = ( @@ -103548,7 +103700,7 @@ "ovh" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/sorter) @@ -103574,8 +103726,7 @@ /area/eris/maintenance/section3deck2port) "oyl" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 8 + dir = 8 }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck3starboard) @@ -103709,7 +103860,7 @@ "oLP" = ( /obj/structure/bookcase, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/dark/gray_platform, /area/eris/neotheology/altar) @@ -103720,7 +103871,7 @@ "oOF" = ( /obj/machinery/neotheology/cruciformforge, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/bioprinter) @@ -103769,7 +103920,7 @@ /area/eris/crew_quarters/hydroponics) "oSZ" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -103846,7 +103997,7 @@ /area/holodeck/alphadeck) "oXE" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/simulated/floor/tiled/dark/golden, @@ -103966,7 +104117,7 @@ "ppW" = ( /obj/structure/table/rack/shelf, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -104087,7 +104238,7 @@ "pAy" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/cable/green{ d1 = 1; @@ -104249,7 +104400,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/engine_room) @@ -104281,7 +104432,7 @@ /area/eris/crew_quarters/fitness) "pYm" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -104310,7 +104461,9 @@ /turf/simulated/floor/tiled/dark/techfloor, /area/eris/quartermaster/disposaldrop) "qeb" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor, /area/eris/crew_quarters/fitness) "qed" = ( @@ -104332,6 +104485,9 @@ /area/eris/maintenance/section3deck5port) "qhN" = ( /obj/machinery/camera/network/third_section, +/obj/structure/sign/faction/neotheology{ + pixel_y = 32 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "qhU" = ( @@ -104514,7 +104670,7 @@ "qyl" = ( /obj/structure/table/rack/shelf, /obj/machinery/light{ - dir = 8 + dir = 4 }, /obj/spawner/tool/advanced/low_chance, /turf/simulated/floor/tiled/steel/gray_platform, @@ -104582,7 +104738,7 @@ dir = 1 }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, @@ -104722,7 +104878,9 @@ /obj/spawner/pack/tech_loot, /obj/spawner/pack/tech_loot, /obj/structure/table/rack, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/spawner/powercell, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/breakroom) @@ -104742,7 +104900,9 @@ /area/eris/quartermaster/storage) "raY" = ( /obj/spawner/junk/low_chance, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section3deck1central) "reO" = ( @@ -104757,7 +104917,9 @@ /area/eris/crew_quarters/fitness) "reY" = ( /obj/structure/lattice, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/open, /area/eris/engineering/engine_room) "rfp" = ( @@ -104899,9 +105061,7 @@ /area/eris/neotheology/altar) "rDp" = ( /obj/structure/table/rack, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/engineering/breakroom) "rDZ" = ( @@ -104949,7 +105109,7 @@ /area/eris/hallway/side/section3starboard) "rJe" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/item/stool/padded, /turf/simulated/floor/tiled/white, @@ -104968,7 +105128,9 @@ /area/eris/neotheology/funeral) "rJp" = ( /mob/living/simple_animal/chicken, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/dirt, /area/eris/crew_quarters/hydroponics) "rMC" = ( @@ -105112,7 +105274,7 @@ /area/eris/medical/medbay/organs) "saN" = ( /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/altar) @@ -105255,6 +105417,13 @@ /obj/spawner/lathe_disk/low_chance, /turf/simulated/floor/tiled/techmaint_perforated, /area/eris/maintenance/section4deck3port) +"snI" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) "snT" = ( /obj/landmark/join/start/janitor, /turf/simulated/floor/tiled/dark/golden, @@ -105297,10 +105466,13 @@ /area/eris/maintenance/oldbridge) "stu" = ( /obj/structure/cable/green, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/long_range_scanner) @@ -105366,7 +105538,7 @@ /area/eris/neotheology/office) "szo" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/sign/faction/astersguild{ pixel_x = 32 @@ -105389,12 +105561,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK" - }, /turf/simulated/wall/r_wall, /area/eris/neotheology/funeral) "sBN" = ( @@ -105408,13 +105574,29 @@ /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/long_range_scanner) "sDP" = ( -/obj/structure/sign/faction/frozenstar, -/turf/simulated/wall, -/area/eris/maintenance/section3deck1central) +/obj/structure/sign/faction/neotheology{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/golden, +/area/eris/neotheology/chapel) "sEG" = ( -/obj/structure/sign/faction/neotheology_cross, -/turf/simulated/wall/r_wall, -/area/eris/crew_quarters/hydroponics/garden) +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "EngineeringTotalLockdown"; + layer = 2.6; + name = "Engineering Total Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/glass_engineering{ + name = "Engineering Lobby Access" + }, +/obj/structure/sign/faction/technomancers{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel/cargo, +/area/eris/engineering/foyer) "sFZ" = ( /obj/structure/closet/secure_closet/personal/doctor, /turf/simulated/floor/tiled/white, @@ -105493,9 +105675,7 @@ }, /area/eris/hallway/main/section2) "sNS" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/machinery/power/nt_obelisk, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) @@ -105530,7 +105710,8 @@ /area/eris/maintenance/section2deck3port) "sOh" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/structure/bed/chair/comfy/beige, /turf/simulated/floor/carpet/bcarpet, @@ -105552,7 +105733,7 @@ "sRC" = ( /obj/structure/cable/green, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -105626,9 +105807,7 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/eris/engineering/engine_room) "tdA" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section2deck3port) "teI" = ( @@ -105744,9 +105923,12 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/power/apc/super{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /turf/simulated/floor/carpet/sblucarpet, @@ -105757,7 +105939,9 @@ /area/eris/neotheology/office) "tqZ" = ( /obj/spawner/junk/low_chance, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/eris/maintenance/section2deck1port) "trS" = ( @@ -105791,7 +105975,9 @@ /turf/simulated/floor/tiled/white/brown_platform, /area/eris/medical/chemistry) "tti" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -105863,7 +106049,8 @@ /area/eris/medical/chemistry) "tAt" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark/golden, @@ -105890,9 +106077,7 @@ /turf/simulated/floor/tiled/steel/gray_platform, /area/eris/engineering/long_range_scanner) "tEu" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -105952,7 +106137,9 @@ /turf/simulated/floor/tiled/techmaint, /area/eris/maintenance/section1deck4central) "tNx" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/button/remote/blast_door{ id = "maint_hatch_escapecor2"; name = "Maintenance Hatch Control"; @@ -105966,7 +106153,7 @@ pixel_x = -32 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel, /area/eris/hallway/side/section3starboard) @@ -106018,7 +106205,7 @@ /area/eris/neotheology/chapelritualroom) "tSV" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/machinery/power/nt_obelisk, /turf/simulated/floor/tiled/white/golden, @@ -106047,7 +106234,7 @@ /obj/structure/table/standard, /obj/item/paper/detective_guide, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/dark/gray_perforated, /area/eris/security/exerooms) @@ -106226,7 +106413,9 @@ /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/chapel) "ulr" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -106337,7 +106526,7 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -106380,7 +106569,7 @@ }, /obj/machinery/disposal, /obj/machinery/light{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/bioprinter) @@ -106395,7 +106584,7 @@ dir = 6 }, /obj/machinery/light{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/engineering/atmos) @@ -106416,7 +106605,7 @@ /area/eris/security/armory) "uIm" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -106460,9 +106649,9 @@ /area/eris/crew_quarters/fitness) "uPp" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door{ +/obj/machinery/button/remote/blast_door/table{ id = "scannerroom"; - name = "Long Range Scanner Shutters" + name = "Long Range Scansner Shutters" }, /turf/simulated/floor/tiled/steel/gray_perforated, /area/eris/engineering/long_range_scanner) @@ -106471,7 +106660,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -106494,7 +106683,8 @@ "uXJ" = ( /obj/machinery/power/apc{ name = "South APC"; - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/cable/green, /turf/simulated/floor/carpet/bcarpet, @@ -106615,7 +106805,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white/brown_perforated, /area/eris/medical/medbay/uppercor) "vkt" = ( @@ -106776,9 +106968,7 @@ /obj/item/storage/box/lights/bulbs, /obj/item/storage/box/lights/bulbs, /obj/item/storage/box/lights/bulbs, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/eris/quartermaster/hangarsupply) "vyY" = ( @@ -106840,7 +107030,7 @@ /obj/item/soap/nanotrasen, /obj/item/soap/nanotrasen, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/structure/sign/faction/neotheology_cross/gold{ pixel_y = 32 @@ -106872,9 +107062,7 @@ /turf/simulated/floor/tiled/cafe, /area/eris/crew_quarters/kitchen) "vHq" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/funeral) "vIJ" = ( @@ -107129,7 +107317,7 @@ /area/eris/neotheology/bioprinter) "wlN" = ( /obj/machinery/light{ - dir = 4 + dir = 8 }, /obj/structure/cyberplant, /turf/simulated/floor/tiled/steel/bar_dance, @@ -107173,9 +107361,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/wood, /area/eris/neotheology/churchbarracks) "wpU" = ( @@ -107275,9 +107461,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/landmark/storyevent/midgame_stash_spawn{ navigation = "Section 2, floor 1. Medbay toilet." }, @@ -107380,9 +107564,7 @@ /area/eris/security/exerooms) "wXf" = ( /obj/structure/closet/secure_closet/medicine, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /obj/structure/catwalk, /turf/simulated/floor/plating/under, /area/eris/medical/chemstor) @@ -107407,7 +107589,7 @@ /obj/spawner/medical/low_chance, /obj/structure/table/rack/shelf, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/item/storage/box/njoy/blue, @@ -107440,7 +107622,7 @@ /obj/structure/catwalk, /obj/spawner/junk, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/plating/under, /area/eris/maintenance/sorter) @@ -107476,6 +107658,13 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = -32 + }, /turf/simulated/floor/tiled/dark/golden, /area/eris/neotheology/funeral) "xhf" = ( @@ -107486,7 +107675,9 @@ /turf/simulated/wall, /area/eris/neotheology/funeral) "xij" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /obj/structure/bed/chair{ dir = 8 }, @@ -107563,7 +107754,7 @@ "xsu" = ( /obj/structure/cable/green, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -107693,9 +107884,11 @@ /turf/simulated/floor/tiled/white/golden, /area/eris/neotheology/altar) "xEL" = ( -/obj/machinery/holoposter, -/turf/simulated/wall/r_wall, -/area/eris/hallway/main/section2) +/obj/structure/sign/faction/neotheology_cross{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/golden, +/area/eris/neotheology/chapel) "xHE" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -107753,7 +107946,9 @@ /turf/simulated/floor/tiled/techmaint_panels, /area/eris/maintenance/section4deck3port) "xSp" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -107761,7 +107956,7 @@ /area/eris/crew_quarters/hydroponics) "xSE" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /obj/structure/closet/wardrobe/color/white, /turf/simulated/floor/tiled/dark/gray_platform, @@ -107791,8 +107986,7 @@ /area/eris/neotheology/chapel) "xTZ" = ( /obj/structure/table/standard, -/obj/machinery/button/remote/blast_door{ - desc = "It controls the blast door to the main RND entrance."; +/obj/machinery/button/remote/blast_door/table{ id = "MEOPrivacyShutters"; name = "MEO Privacy Shutters" }, @@ -107891,7 +108085,9 @@ /turf/simulated/floor/plating, /area/eris/crew_quarters/kitchen) "xWI" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/closet, /obj/spawner/contraband/low_chance, /turf/simulated/floor/tiled/steel, @@ -108006,7 +108202,8 @@ /area/eris/neotheology/chapelritualroom) "yit" = ( /obj/structure/extinguisher_cabinet{ - pixel_y = -28 + pixel_y = -28; + dir = 1 }, /obj/structure/bed/chair/comfy/brown{ dir = 8 @@ -108014,9 +108211,15 @@ /turf/simulated/floor/carpet, /area/eris/medical/psych) "ykt" = ( -/obj/structure/sign/faction/neotheology_cross, -/turf/simulated/wall/r_wall, -/area/eris/neotheology/chapel) +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/structure/sign/atmos_waste{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel/cargo, +/area/eris/hallway/main/section4) "yll" = ( /obj/structure/closet/secure_closet/agrolyte, /turf/simulated/floor/grass, @@ -122271,7 +122474,7 @@ cbR btm bTz bYY -cuj +bpo drc cbR cbR @@ -123098,7 +123301,7 @@ alg aaa aCM aMN -aDn +aCW aFj aFR aGv @@ -123283,7 +123486,7 @@ lXg cas cxv cbt -bpo +cuj bmP bmP cbR @@ -123665,7 +123868,7 @@ dLB dMu dOa dOa -dVI +dUL apQ aqD arO @@ -123732,8 +123935,8 @@ aai aai aai aPT -aCR -aQo +aDn +aai aai aai aai @@ -123885,7 +124088,7 @@ alg ceU aHP can -bVb +sug cdS cAs dyO @@ -123894,7 +124097,7 @@ eaP esT cdS cdS -sug +bVb bZO gWZ qKj @@ -124491,7 +124694,7 @@ aCn btg aNS bBS -bVh +bXn btg cCo btg @@ -124653,9 +124856,9 @@ agf acf ajY akH -ali -agY alD +agY +ali alV agD aaa @@ -124671,7 +124874,7 @@ aaa dLB dLB aoq -aou +aov dMt dMt dOa @@ -125069,7 +125272,7 @@ aad aad aad dLB -dUL +dVI dLB aad dLB @@ -125079,7 +125282,7 @@ dQN dMt dMt dOa -dVI +dUL apQ aqF arO @@ -125242,7 +125445,7 @@ aaa abH adA aea -aeB +abH abH abH abH @@ -125444,7 +125647,7 @@ aaa abH adB aei -aei +esX afm afA afy @@ -125479,7 +125682,7 @@ aaa dLB dLB dNN -aov +aou aoC aoS dOa @@ -125905,7 +126108,7 @@ aCn ayw btg btg -bXn +bVh cga cOt btl @@ -125942,11 +126145,11 @@ aLh aGq aGr aMt -aRl +aPk aOc aOC aOY -aPk +aRl aOO aPx aRS @@ -126089,7 +126292,7 @@ dOa ahT arY dOa -dVI +dUL apZ aqQ arP @@ -126351,7 +126554,7 @@ aOh aOD aOZ aPo -aOQ +aOO aPG aRT blM @@ -126654,11 +126857,11 @@ aar aaG aaa abH -adG +ahQ aem ael aem -ahQ +adG abH aaa aaa @@ -126894,7 +127097,7 @@ dOa anL dMt dMt -dUL +dVI dOa dOa dOa @@ -126902,7 +127105,7 @@ aqm dOa dOa aew -aou +aov dMt dMt dMt @@ -126958,7 +127161,7 @@ rDZ rDZ aOO aOO -aRl +aPk aSu bzO aOO @@ -127254,9 +127457,9 @@ aac aab aaa aaG -abz -aar enY +aar +abz aaG aaa abH @@ -129976,7 +130179,7 @@ aMl auY axK aTE -ayU +bzE azN auY aAm @@ -130361,7 +130564,7 @@ aaa eoA aaa aaa -aaa +aQo aaa aaa apn @@ -130485,7 +130688,7 @@ aaa aaB aaB aaR -abf +abg abf abf aci @@ -130563,7 +130766,7 @@ ewc auV ewN exK -auU +auV aaa aaa aqU @@ -130687,7 +130890,7 @@ aaa aaA aaa aaR -abg +abf abf abf aci @@ -131738,7 +131941,7 @@ dUP amP anF aoy -aoO +arj aoN aoN aoN @@ -131746,7 +131949,7 @@ aoN aoN aoN aoN -arj +aoO aoy aru asj @@ -132142,7 +132345,7 @@ dUP anm anp aoy -aoO +arj aoN aoN aoN @@ -132150,7 +132353,7 @@ aoN aoN aoN aoN -arj +aoO aoy aru asg @@ -134410,7 +134613,7 @@ feu aZI aJI aMK -aOB +aOW aaa aaa aaa @@ -136228,7 +136431,7 @@ aFN aUX aFN bhh -aOW +aOB aaa aaa aaa @@ -160069,7 +160272,7 @@ brL bqj bum bqK -bEL +bOI bum bum bFI @@ -160280,14 +160483,14 @@ bqj bum bqK bum -bEL +bOI bum bFI bum bum bum bum -bEL +bOI bum bFI bqK @@ -160898,7 +161101,7 @@ bNh bNV bOm bum -bOI +bEL bum bFI bum @@ -161676,7 +161879,7 @@ cBq bUG abF aCM -aNm +bHd aDb aDb aND @@ -162015,7 +162218,7 @@ aaa aaa aaa agD -aYB +beH aYW aVd aYW @@ -162030,7 +162233,7 @@ aYW aYW aVd aYW -beH +aYB agD aaa aad @@ -162823,7 +163026,7 @@ abF aae aae agD -aYB +beH aYW aUQ aYW @@ -162838,7 +163041,7 @@ aYW aYW aVd aYW -beH +aYB agD aaa aad @@ -164246,7 +164449,7 @@ csS cyw aYx aZW -bay +bbo jRq aLc aUS @@ -165100,7 +165303,7 @@ evn jKn hQD hQD -pZe +hYq uCj ulE uYj @@ -165737,7 +165940,7 @@ aCW bJh bKw bvW -bEL +bOI bum bum bvW @@ -165865,7 +166068,7 @@ bac cvH agY aEf -ali +alD agD csS csS @@ -166297,7 +166500,7 @@ blP bmy bnW blQ -bol +boo bop bmw abF @@ -167501,7 +167704,7 @@ aHR aHR aJB aDd -bhP +beK bjd bkh beQ @@ -167509,7 +167712,7 @@ bmw bnn bok blQ -boo +bol blQ bmw aaa @@ -167695,7 +167898,7 @@ auG aDa aDd bel -beK +bhP aDd aHN aHR @@ -168256,7 +168459,7 @@ aaA aaa aac aQJ -aQN +aQJ aQT aac aBl @@ -168332,7 +168535,7 @@ cDV cBu cHG cdf -dnN +cRs cdf csE cHG @@ -168579,7 +168782,7 @@ bgf bgI bmM bnC -bsE +bsF btn btD bUn @@ -168691,7 +168894,7 @@ aVp aWc csS aUD -bbo +bay bbQ bcr bcR @@ -168781,7 +168984,7 @@ bgf bgI bfA bfB -bsF +bsE btA btL bUn @@ -168934,13 +169137,13 @@ cqM cdf cdf cdf -cRs +dnN cdf cdf cYT doG cdf -cRs +dnN cZU cdf dfB @@ -169298,8 +169501,8 @@ aZM csS csS bbq -fCt -bcu +csS +dMj csU aaa abF @@ -171892,7 +172095,7 @@ aaA aaa aag aQL -aQR +aQL bNB aag aag @@ -172331,7 +172534,7 @@ csS csS bcz csS -aLc +bqi cuN csU abF @@ -172542,7 +172745,7 @@ dpA cIB bgk aMQ -aMR +aMS aMU aMQ aKI @@ -172586,7 +172789,7 @@ csW ctt ede cgY -dJj +cxe cgO aaa aaa @@ -173350,7 +173553,7 @@ abF abF bgk aMQ -aMS +aMR aNo aMQ aKI @@ -173377,7 +173580,7 @@ cgO gjm euS bgH -cxe +dJj cgY cie ciR @@ -201270,7 +201473,7 @@ aDb aDb cCr aDb -bHd +aNm cIT cIT cyc @@ -201287,7 +201490,7 @@ cwU abF cwU cxw -qjY +cXR avi cwU cWq @@ -201671,7 +201874,7 @@ duu abF cAO aDb -bHd +aNm aCM bFl bFl @@ -203070,10 +203273,10 @@ cxu cxu cxu cxu -cqa +cxu csx cwc -sEG +cxu cxu cxu cxu @@ -203470,8 +203673,8 @@ abF abF duu cmE -duY -etS +cmE +sDP etS evu evu @@ -203873,8 +204076,8 @@ dAO dAO vGy abF -duY -etS +cmE +sDP etS etS evu @@ -203913,7 +204116,7 @@ cwU cGj cwU cxw -cWc +cWr cwU abF abF @@ -204075,8 +204278,8 @@ dAv dAv uqj abF -ykt -etS +cmE +xEL esF esF evu @@ -204218,11 +204421,11 @@ aaa aaa abF aTG -brP +bCc btX btX btX -bCc +brP aTG abF abF @@ -204277,8 +204480,8 @@ dEN dAv uqj abF -kGo -etS +cmE +duY cws esF cor @@ -204479,8 +204682,8 @@ dDO dAv uqj abF -kGo -etS +cmE +duY cws esF cor @@ -204529,7 +204732,7 @@ cUy cUy cOg cwU -cWc +cWr cwU cwU cYH @@ -204681,8 +204884,8 @@ tti dAv uqj aaa -ykt -etS +cmE +xEL esF esF evu @@ -204883,8 +205086,8 @@ pJc dAv uqj aaa -duY -etS +cmE +sDP etS etS evu @@ -205137,7 +205340,7 @@ cJB cUy cWq cwU -cXR +qjY cYJ cxw cwU @@ -205288,7 +205491,7 @@ dAv uqj aaa cmE -duY +cmE qhN nHG pRq @@ -205337,7 +205540,7 @@ cxR cGA cKc cUy -cWr +cWc cwU cYa cZo @@ -205897,7 +206100,7 @@ aaa jaM hdR dJp -phq +fyY fiZ eeB evC @@ -206872,7 +207075,7 @@ bxb bSf agD bxu -ali +alD agD bDT aTG @@ -207108,7 +207311,7 @@ abF aaa jaM rVC -fyY +phq rVC dFB eeB @@ -207704,7 +207907,7 @@ xdY coS coS clT -bol +boo bQo bQp bmw @@ -208049,7 +208252,7 @@ aaa aaa aaa aTG -bqv +bSp aTG abF aTG @@ -208349,17 +208552,17 @@ abF abF abF abF -dMj -cIY -cIY -aPd +cLV +cqS +cqY +cLV cKZ cLF cNh -aPd -cIY +cLV cIY -dMj +sEG +cLV aaa aaa aaa @@ -208511,7 +208714,7 @@ dAI dAI dCN dqC -cnh +chM bZc cdL cdL @@ -208572,7 +208775,7 @@ bzZ bAh cRE cZz -dac +dae cZz cZz cZz @@ -208680,7 +208883,7 @@ bBL bXU bXU bXU -dIQ +bBL bwo bwv bwM @@ -208713,7 +208916,7 @@ bxP bxP dDR byn -bxP +aOQ byr byt bxP @@ -208724,7 +208927,7 @@ cpe cpe bZc chY -dTS +etu cpo dGT dhR @@ -208743,7 +208946,7 @@ cpo cpo ehT cpo -etu +dTS chY ewR cpo @@ -208975,7 +209178,7 @@ cWA dzr cYj cRM -bsE +bsF bAp daC bON @@ -209286,7 +209489,7 @@ bBL bXU bXU bXU -dIQ +bBL bwq bwz bwn @@ -209330,7 +209533,7 @@ cpe cpe bZc chY -dTS +etu cpo dGz cpo @@ -209349,7 +209552,7 @@ cpo cpo ewy cpo -etu +dTS chY ewS cpo @@ -209519,7 +209722,7 @@ bfn cnW ciw cjB -cqS +cnW apJ cmh cmu @@ -209565,9 +209768,9 @@ cHw cJr bzd cKM -cKM +ykt byY -cOx +kGo cOx bzy cQW @@ -209582,7 +209785,7 @@ bzX bzX cRE cZz -dae +dac cZz cZz cZz @@ -210069,7 +210272,7 @@ aaa aaa aaa aTG -bqv +bSp aTG aaa abF @@ -210493,7 +210696,7 @@ bwl bXc bXj aEy -aPj +csZ bXj bYq bYK @@ -210585,7 +210788,7 @@ abF aDf bLq aWp -bzE +ayU aTs bzX bzX @@ -211135,7 +211338,7 @@ crb cuB cpd cpd -cqY +cuB crb crb bhb @@ -211534,14 +211737,14 @@ bgk bgk bgk cjr -bjE +fbK cmB qOs crN crN qOs cmB -fbK +bjE bhb bhb bhb @@ -211564,7 +211767,7 @@ cvx cvx cxQ cvx -esX +ctm cwD ccX wTM @@ -211723,7 +211926,7 @@ bDT bPD bqw bSl -bSp +bqv aTG aaa bSw @@ -211766,7 +211969,7 @@ ctV ctV cxX czc -ctm +aeB cwD ccX rII @@ -213735,7 +213938,7 @@ bZT bZU caW cbC -bZq +snI caW bZU cbC @@ -213751,7 +213954,7 @@ cgx bTj cgx aMQ -aMS +aMR bxT aMQ bfY @@ -214193,7 +214396,7 @@ czl czG cAi cie -etl +evV bgH ewA ewJ @@ -214387,7 +214590,7 @@ cgO cgO cgO cgO -evV +etl cie cwY cyb @@ -242706,7 +242909,7 @@ bIP bIP aaa dEy -dRR +dUj dID dqS dRF @@ -243492,7 +243695,7 @@ eiL dqI aaa aCM -aNm +bHd aDb diX aCM @@ -243519,7 +243722,7 @@ dSE dTc dFl dRF -dUj +dRR dEy dEy aaa @@ -244635,7 +244838,7 @@ aaa aaa aaa bYo -dhn +dlR dhm dhm cZA @@ -244848,7 +245051,7 @@ djP cZA dhm dhm -dlR +dhn bYo bYo cGE @@ -246725,7 +246928,7 @@ ybs abF abF aCM -aNm +bHd djR dIw dnM @@ -247944,13 +248147,13 @@ dHX efG cLV dJA -dJM +dPT cLV dLz dMR dLz cLV -dPT +dJM dJA cLV cLV @@ -248146,13 +248349,13 @@ dIC end cLV dLb -dLb -dMj +cqa +cLV dyb dAU dCR -dMj -dLb +cLV +aPd dLb cLV aaa @@ -248370,7 +248573,7 @@ dwM dwM dxG dxJ -dyh +dyF dyG dyQ abF @@ -248711,7 +248914,7 @@ dqa drD drD drD -drD +dIQ dsF dsO bZc @@ -248913,7 +249116,7 @@ dqy drA drA drV -xEL +bZc bZc bZc bZc @@ -248973,8 +249176,8 @@ dwM dwM dwM dwV -dxh -dxh +dwM +dwM dxN dyt dyG @@ -249983,8 +250186,8 @@ dwM dwM dwM dwX -dxh -dxh +dwM +dwM dxN dyo dyG @@ -250592,7 +250795,7 @@ dwM dwM dxI dyg -dyF +dyh dyG dyQ abF @@ -250873,7 +251076,7 @@ aaa aaa csc csk -cua +cwf ctZ cBP cxO @@ -250925,7 +251128,7 @@ beh cHT cPw beh -cXk +bki cYo dcn dcO @@ -250991,12 +251194,12 @@ abF dLf dRq dTo -dTK +egS dMq dOY eca egO -egS +dTK dMq dLf aaa @@ -251499,7 +251702,7 @@ deI dff dfA bXj -csZ +aPj ctW bXj cHd @@ -251683,7 +251886,7 @@ aaa csc cxh ctZ -cwf +cua csc csc csc @@ -252149,7 +252352,7 @@ dkh cjr dnc dnW -bki +cXk bdN bdN aaa @@ -252188,7 +252391,7 @@ abF dLg dki dki -dqs +dqz dki dki dLg @@ -252739,7 +252942,7 @@ bUf cGu cGL cIw -cIM +cJb cLI cMi cNr @@ -253400,7 +253603,7 @@ abF dLg dki dki -dqz +dqs dki dki dLg @@ -253547,7 +253750,7 @@ bUf cHr cGL cIw -cJb +cIM cLI cNl cNl @@ -284257,14 +284460,14 @@ dNZ dNZ dNZ dPK -amQ +aqk alb dON aof apf -amQ -alb aqk +alb +amQ dQZ dNZ dNZ @@ -286039,7 +286242,7 @@ doM doQ doM doM -dpk +dFj doM doQ doM @@ -286069,7 +286272,7 @@ abF alb dNZ dPK -amQ +aqk anQ dQr dQr @@ -286457,7 +286660,7 @@ abF abF doR dEI -dFj +dpk dpC dFu doM @@ -287742,7 +287945,7 @@ ehu eik ehu ehu -ejc +eix ejJ ekR ela @@ -287852,7 +288055,7 @@ dVP dWi dVP dVg -dWO +dWT dcW dvB dvB @@ -287893,7 +288096,7 @@ dAF dAF anQ dId -dUR +aqS dUW alG egQ @@ -288750,7 +288953,7 @@ ehk ehu eho eip -eix +ejc ehu eho ejP @@ -288903,7 +289106,7 @@ amc aof amc rVy -amQ +aqk efd efY egT @@ -289083,7 +289286,7 @@ doM dBZ doR dEI -dFj +dpk dFQ dGl dpC @@ -289315,7 +289518,7 @@ edQ efd ect ect -aqS +dUR dWg dWB ala @@ -289468,7 +289671,7 @@ dVP dWi dVP dVg -dWT +dWO dcW dvF dvB @@ -289534,8 +289737,8 @@ boS cNH ezN ezV -cNH -sDP +dxh +boS cNH cNH aRM @@ -290502,7 +290705,7 @@ doQ doD doD bDa -bDc +bDh dKO doR doR @@ -291128,7 +291331,7 @@ ecw ecw ecw ecw -ehd +ect ecw efw ecw @@ -291310,7 +291513,7 @@ doM doD doD bDb -bDh +bDc dKX doR doR @@ -291330,7 +291533,7 @@ ecV ecV ecV ecV -ecV +edd dXr eiY dXz @@ -291978,7 +292181,7 @@ abF dLg dPr eFe -eFe +ehd eFe eFe eBB @@ -293143,13 +293346,13 @@ ebi ebi ebi ebi -edd +ebi bEH dgN djv dgN avy -edd +ebi ebi ebi ebi @@ -293951,13 +294154,13 @@ dpg ebi ebi ebi -edd +ebi bEH dhu dkF dmx axP -edd +ebi ebi ebi ebi @@ -295613,7 +295816,7 @@ euM boY dXi dtg -euO +euI dXi aaa aaa @@ -296212,7 +296415,7 @@ boS eAT cNH boS -euI +euO boF boO bpn @@ -297222,7 +297425,7 @@ boN dXi boS boS -euI +euO boF boU boU @@ -297633,7 +297836,7 @@ bpr bpr dXi dtj -euO +euI dXi aaa aaa diff --git a/maps/CEVEris/centcomm.dmm b/maps/CEVEris/centcomm.dmm index 39b4c0b44c..3a37bd3cc0 100644 --- a/maps/CEVEris/centcomm.dmm +++ b/maps/CEVEris/centcomm.dmm @@ -62,7 +62,7 @@ /area/space) "aw" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -165,9 +165,7 @@ /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source/industrial_arena) "cF" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/open/holonofloor, /area/space) "cK" = ( @@ -312,9 +310,7 @@ /area/centcom/evac) "dZ" = ( /obj/structure/table/woodentable, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark/gray_platform, /area/centcom/evac) "ea" = ( @@ -349,7 +345,7 @@ /area/space) "eg" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -1614,8 +1610,10 @@ }, /area/centcom/merc_base) "hM" = ( -/obj/structure/sign/faction/neotheology_cross, -/turf/simulated/wall/r_wall, +/obj/structure/sign/faction/neotheology_cross{ + pixel_x = 32 + }, +/turf/simulated/floor/carpet/bcarpet, /area/centcom/evac) "hN" = ( /obj/effect/window_lwall_spawn/smartspawn, @@ -1789,7 +1787,9 @@ frequency = 1331; id_tag = "vox_west_vent" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/plating, /area/skipjack_station/start) "ix" = ( @@ -1843,12 +1843,12 @@ }, /area/centcom/merc_base) "iH" = ( -/obj/machinery/button/remote/blast_door{ +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door/id_card/table{ id = "syndieshutters"; name = "remote shutter control"; req_access = list(150) }, -/obj/structure/table/reinforced, /turf/simulated/shuttle/floor{ icon_state = "floor6" }, @@ -1874,7 +1874,9 @@ frequency = 1331; id_tag = "vox_east_vent" }, -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/plating, /area/skipjack_station/start) "iL" = ( @@ -1924,7 +1926,9 @@ "iV" = ( /obj/structure/computerframe, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /turf/simulated/shuttle/floor{ icon_state = "floor6" @@ -1958,12 +1962,14 @@ /turf/simulated/floor/tiled/dark, /area/centcom/evac) "jf" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/centcom/evac) "jg" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -1984,7 +1990,9 @@ }, /area/centcom/merc_base) "jk" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/item/device/radio/intercom/syndicate{ dir = 1; pixel_y = -22 @@ -2057,9 +2065,7 @@ /turf/space, /area/centcom/evac) "jA" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /obj/structure/table/standard, /obj/item/toy/figure/serbian, /turf/simulated/shuttle/floor{ @@ -2108,7 +2114,7 @@ pixel_x = -25 }, /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -2210,9 +2216,7 @@ pixel_x = 0; pixel_y = 28 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/shuttle/floor{ icon_state = "floor7" }, @@ -2329,9 +2333,7 @@ pixel_x = 8; pixel_y = 25 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/shuttle/floor{ icon_state = "floor6" }, @@ -2636,7 +2638,9 @@ name = "suit closet" }, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /turf/simulated/shuttle/floor{ icon_state = "floor6" @@ -2672,7 +2676,7 @@ "lc" = ( /obj/machinery/sleeper, /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -2706,7 +2710,7 @@ /area/holodeck/source/texas) "lh" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -2719,13 +2723,11 @@ }, /area/shuttle/mercenary) "li" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor6" +/obj/structure/sign/faction/neotheology_cross{ + pixel_y = -32 }, -/area/shuttle/mercenary) +/turf/simulated/floor/tiled/dark/golden, +/area/centcom/evac) "lj" = ( /obj/machinery/chem_master, /turf/unsimulated/floor{ @@ -2831,7 +2833,9 @@ /area/shuttle/mercenary) "lC" = ( /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/item/device/radio/intercom/syndicate{ dir = 8; @@ -2854,7 +2858,7 @@ /area/centcom/raider_base) "lE" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -2943,7 +2947,9 @@ pixel_x = 32 }, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/structure/reagent_dispensers/watertank/huge, /turf/simulated/shuttle/floor{ @@ -2978,7 +2984,7 @@ "lW" = ( /obj/structure/table/standard, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor{ icon_state = "floor3" @@ -3822,13 +3828,15 @@ }, /area/skipjack_station/start) "oY" = ( -/obj/machinery/button/remote/blast_door{ - id = "skipjackshutters"; - name = "remote shutter control"; - req_access = list(150) +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_y = 0 }, -/turf/simulated/wall/voxshuttle, -/area/skipjack_station/start) +/turf/simulated/shuttle/floor{ + icon_state = "floor6" + }, +/area/shuttle/mercenary) "oZ" = ( /obj/machinery/airlock_sensor{ frequency = 1331; @@ -3853,7 +3861,7 @@ /area/skipjack_station/start) "pd" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/suit_storage_unit/merc, /turf/simulated/shuttle/floor{ @@ -3870,7 +3878,14 @@ /area/skipjack_station/start) "pg" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 + }, +/obj/machinery/button/remote/blast_door{ + id = "skipjackshutters"; + name = "remote shutter control"; + req_access = list(150); + pixel_x = 0; + pixel_y = 24 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -3965,7 +3980,7 @@ "pB" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/plating, /area/skipjack_station/start) @@ -3982,7 +3997,7 @@ /obj/item/clothing/shoes/magboots, /obj/item/clothing/mask/breath, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/plating, /area/skipjack_station/start) @@ -4007,7 +4022,7 @@ /obj/structure/table/steel, /obj/machinery/recharger, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -4041,7 +4056,7 @@ dir = 4 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -4058,7 +4073,7 @@ dir = 8 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -4093,9 +4108,7 @@ }, /area/skipjack_station/start) "pZ" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/shuttle/floor{ icon_state = "floor7" }, @@ -4124,9 +4137,7 @@ /area/skipjack_station/start) "qe" = ( /obj/machinery/body_scanconsole, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/shuttle/floor{ icon_state = "floor3" }, @@ -4191,7 +4202,9 @@ }, /area/skipjack_station/start) "qr" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -4218,7 +4231,7 @@ dir = 4 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/shuttle/floor{ icon_state = "floor7" @@ -4250,8 +4263,11 @@ /turf/space, /area/space) "qI" = ( -/turf/space, -/area/space) +/obj/structure/sign/faction/neotheology_cross{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/golden, +/area/centcom/evac) "qX" = ( /obj/structure/table/rack, /obj/item/gun/launcher/spikethrower, @@ -4275,7 +4291,7 @@ /area/centcom/merc_base) "rt" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/shuttle/floor{ @@ -4286,9 +4302,7 @@ /turf/simulated/floor/carpet, /area/centcom/pirate_base) "rz" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/holofloor/tiled/dark, /area/space) "rE" = ( @@ -4359,7 +4373,9 @@ /area/holodeck/source/industrial) "sA" = ( /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/structure/closet, /obj/item/clothing/suit/space/void/riggedvoidsuit, @@ -4506,7 +4522,7 @@ /obj/item/storage/belt/utility/full, /obj/item/tool/multitool, /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -4615,7 +4631,7 @@ amount = 10 }, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /obj/item/beartrap, /obj/item/beartrap, @@ -4811,7 +4827,9 @@ "wu" = ( /obj/structure/closet, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/item/storage/deferred/rations, /turf/simulated/shuttle/floor{ @@ -5395,7 +5413,7 @@ /area/holodeck/source/industrial_arena) "Cx" = ( /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/open/holonofloor, /area/space) @@ -5705,7 +5723,9 @@ /area/holodeck/source/wireframe) "Gl" = ( /obj/machinery/light{ - dir = 4 + dir = 4; + icon_state = "tube1"; + pixel_y = 0 }, /turf/simulated/shuttle/floor{ icon_state = "floor6" @@ -5967,7 +5987,9 @@ /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source/industrial) "Jx" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/bed/chair/custom/holochair{ dir = 8 }, @@ -6014,7 +6036,7 @@ pixel_y = 9 }, /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1"; pixel_y = 0 }, @@ -6036,7 +6058,7 @@ pixel_y = 3 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor{ icon_state = "floor3" @@ -6102,7 +6124,9 @@ }, /area/centcom/merc_base) "Kr" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/effect/floor_decal/industrial/danger, /obj/effect/floor_decal/industrial/danger{ dir = 1 @@ -6160,9 +6184,7 @@ /turf/simulated/floor/holofloor/reinforced, /area/holodeck/source/off) "KZ" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/holofloor/tiled/bar_dance, /area/space) "Lb" = ( @@ -6479,7 +6501,9 @@ products = list(/obj/item/device/assembly/prox_sensor=5,/obj/item/device/assembly/signaler=4,/obj/item/device/assembly/infra=4,/obj/item/device/assembly/prox_sensor=4,/obj/item/handcuffs=8,/obj/item/device/flash=4,/obj/item/clothing/glasses/sunglasses=4) }, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/structure/sign/faction/serbian{ pixel_y = 32 @@ -6513,7 +6537,9 @@ /turf/simulated/shuttle/plating, /area/shuttle/pirate) "Or" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/holofloor/tiled/bar_light, /area/space) "Ot" = ( @@ -6655,7 +6681,7 @@ /obj/structure/bed, /obj/item/bedsheet/green, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -6692,7 +6718,9 @@ /area/space) "Qw" = ( /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/effect/floor_decal/industrial/danger{ dir = 1 @@ -7060,7 +7088,9 @@ /area/skipjack_station/start) "Ug" = ( /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /turf/simulated/floor/holofloor/tiled/bar_light, /area/space) @@ -7117,7 +7147,9 @@ }, /obj/item/reagent_containers/syringe, /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/item/reagent_containers/syringe/spaceacillin, /obj/item/reagent_containers/syringe/spaceacillin, @@ -7367,7 +7399,9 @@ /area/skipjack_station/start) "XU" = ( /obj/machinery/light{ - dir = 4 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, /obj/structure/table/steel, /obj/item/storage/fancy/crayons, @@ -7766,7 +7800,7 @@ aa aa aa aa -qI +aa "} (2,1,1) = {" aa @@ -15547,7 +15581,7 @@ ho ho ho ho -dj +dX dn dn hZ @@ -15555,7 +15589,7 @@ hZ hZ dn dn -dX +dj ho ho ho @@ -15748,8 +15782,8 @@ at at at at -hM -cN +ho +qI dn dn hZ @@ -15757,8 +15791,8 @@ hZ hZ dn dn -cN -hM +li +ho at at at @@ -15817,7 +15851,7 @@ pz pz pH pH -pW +qi qk qo aa @@ -16754,7 +16788,7 @@ aa aa aa ho -aE +ec cq cq cq @@ -16772,7 +16806,7 @@ ek cq cq cq -ec +aE ho aa aa @@ -16960,8 +16994,8 @@ bI bI bI bI -hM -cN +ho +qI do dL hZ @@ -16969,8 +17003,8 @@ hZ hZ dL dT -cN -hM +li +ho bI bI bI @@ -17163,7 +17197,7 @@ ho ho ho ho -dj +dX do dL hZ @@ -17171,7 +17205,7 @@ hZ hZ dL dT -dX +dj ho ho ho @@ -17631,7 +17665,7 @@ pl et pl pl -pD +pl pl pl pR @@ -18031,7 +18065,7 @@ aa aa aa hN -oY +oM pg pl pl @@ -18374,8 +18408,8 @@ ho ho ho ho -hM -cN +ho +qI dn dn hZ @@ -18383,8 +18417,8 @@ hZ hZ dn dn -cN -hM +li +ho ho ho ho @@ -18580,9 +18614,9 @@ ho dk dn dn +hM hZ -hZ -hZ +hM dn dn XJ @@ -18782,9 +18816,9 @@ ho ho dK ho -hM +ho ek -hM +ho ho dU ho @@ -19453,7 +19487,7 @@ pz pz pz Lv -qi +pW qk qo aa @@ -30310,7 +30344,7 @@ iU iJ kf iq -kA +oY iJ iJ iJ @@ -30719,7 +30753,7 @@ iJ iJ iJ iJ -li +kA iJ iJ iJ @@ -33094,7 +33128,7 @@ sO sO sO sO -DS +Gl vG jT sc @@ -33498,7 +33532,7 @@ sO sO sO sO -Gl +DS vG jT tv diff --git a/maps/encounters/blacksite/blacksite_large_chunk.dmm b/maps/encounters/blacksite/blacksite_large_chunk.dmm index 9811736378..2eed51b655 100644 --- a/maps/encounters/blacksite/blacksite_large_chunk.dmm +++ b/maps/encounters/blacksite/blacksite_large_chunk.dmm @@ -1554,7 +1554,8 @@ /area/outpost/blacksite/large) "RX" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/tiled/derelict, /area/outpost/blacksite/large) diff --git a/maps/encounters/blacksite/blacksite_medium_chunk.dmm b/maps/encounters/blacksite/blacksite_medium_chunk.dmm index 5cd292c3fc..38a67c2f4b 100644 --- a/maps/encounters/blacksite/blacksite_medium_chunk.dmm +++ b/maps/encounters/blacksite/blacksite_medium_chunk.dmm @@ -1620,7 +1620,8 @@ /area/outpost/blacksite/medium) "RX" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/tiled/derelict, /area/outpost/blacksite/medium) diff --git a/maps/encounters/prisonhulk/prisonhulk.dmm b/maps/encounters/prisonhulk/prisonhulk.dmm index 7cd88ea214..cad47dfd43 100644 --- a/maps/encounters/prisonhulk/prisonhulk.dmm +++ b/maps/encounters/prisonhulk/prisonhulk.dmm @@ -17,7 +17,7 @@ /area/outpost/prisonhulk/food) "bD" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, @@ -535,7 +535,8 @@ /area/outpost/prisonhulk/security) "DG" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = -27 + pixel_x = -27; + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/outpost/prisonhulk/security) diff --git a/maps/pulsar/pulsar.dmm b/maps/pulsar/pulsar.dmm index f44bc3a807..d0e33f4504 100644 --- a/maps/pulsar/pulsar.dmm +++ b/maps/pulsar/pulsar.dmm @@ -86,7 +86,7 @@ "cl" = ( /obj/spawner/scrap/sparse, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/outpost/pulsar/maintenance) @@ -303,9 +303,7 @@ /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) "lf" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) "lh" = ( @@ -334,7 +332,7 @@ "lS" = ( /obj/spawner/junk/low_chance, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) @@ -352,9 +350,7 @@ /turf/simulated/floor/wood, /area/outpost/pulsar) "nK" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light/floor, /turf/simulated/floor/wood, /area/outpost/pulsar) "or" = ( @@ -493,9 +489,7 @@ /area/outpost/pulsar) "sZ" = ( /obj/structure/filingcabinet, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/outpost/pulsar) "th" = ( @@ -689,7 +683,9 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/outpost/pulsar) "zu" = ( -/obj/machinery/light, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/dispenser/plasma, /turf/simulated/floor/tiled/dark, /area/outpost/pulsar) @@ -705,7 +701,9 @@ /turf/simulated/floor/tiled/techmaint, /area/outpost/pulsar/maintenance) "zI" = ( -/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techmaint, /area/outpost/pulsar/maintenance) "zM" = ( @@ -815,7 +813,7 @@ /area/outpost/pulsar) "Df" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) @@ -1081,7 +1079,7 @@ pixel_x = 32 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/plating/under, /area/outpost/pulsar/maintenance) @@ -1155,7 +1153,7 @@ "Mj" = ( /obj/spawner/junkfood/low_chance, /obj/machinery/light/small{ - dir = 8 + dir = 4 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) @@ -1215,9 +1213,7 @@ "Pd" = ( /obj/structure/table/standard, /obj/spawner/material/building, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/steel/gray_platform, /area/outpost/pulsar/maintenance) "Pj" = ( @@ -1267,7 +1263,7 @@ /obj/structure/toilet, /obj/spawner/oddities/low_chance, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/white, /area/outpost/pulsar/maintenance) @@ -1355,7 +1351,7 @@ /obj/spawner/pizza/low_chance, /obj/item/bedsheet/yellow, /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/orangecorner, /area/outpost/pulsar/maintenance) @@ -1411,7 +1407,7 @@ /area/outpost/pulsar/maintenance) "Xw" = ( /obj/machinery/light/small{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel/techfloor_grid, /area/outpost/pulsar/maintenance) @@ -24686,7 +24682,7 @@ qL to wr vW -xH +xR vW qW as @@ -25494,7 +25490,7 @@ qP nE wu vW -xR +xH vW qW as diff --git a/maps/submaps/cave_pois/crashed_pod.dmm b/maps/submaps/cave_pois/crashed_pod.dmm index 0385023d70..54186bbad2 100644 --- a/maps/submaps/cave_pois/crashed_pod.dmm +++ b/maps/submaps/cave_pois/crashed_pod.dmm @@ -94,7 +94,7 @@ "as" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; diff --git a/maps/submaps/planetary_ruins/crashed_pod/crashed_pod.dmm b/maps/submaps/planetary_ruins/crashed_pod/crashed_pod.dmm index 4e96a1deb4..5547ca58ee 100644 --- a/maps/submaps/planetary_ruins/crashed_pod/crashed_pod.dmm +++ b/maps/submaps/planetary_ruins/crashed_pod/crashed_pod.dmm @@ -94,7 +94,7 @@ "as" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; diff --git a/maps/submaps/planetary_ruins/ec_old_crash/ec_old_crash.dmm b/maps/submaps/planetary_ruins/ec_old_crash/ec_old_crash.dmm index 89b803895f..b66af44636 100644 --- a/maps/submaps/planetary_ruins/ec_old_crash/ec_old_crash.dmm +++ b/maps/submaps/planetary_ruins/ec_old_crash/ec_old_crash.dmm @@ -379,7 +379,7 @@ dir = 8 }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; icon_state = "apc0"; pixel_x = 28 }, @@ -599,7 +599,8 @@ /obj/effect/floor_decal/industrial/warning, /obj/structure/closet/l3closet, /obj/structure/fireaxecabinet{ - pixel_y = -32 + pixel_y = -32; + dir = 1 }, /obj/machinery/light/small, /turf/simulated/floor/tiled/white/lowpressure, @@ -611,7 +612,7 @@ }, /obj/structure/closet/l3closet, /obj/machinery/power/apc{ - dir = 4; + dir = 8; icon_state = "apc0"; pixel_y = -28 }, @@ -701,7 +702,7 @@ /area/map_template/ecship/engineering) "cM" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; icon_state = "apc0"; pixel_y = 28 }, diff --git a/maps/submaps/planetary_ruins/hydrobase/hydrobase.dmm b/maps/submaps/planetary_ruins/hydrobase/hydrobase.dmm index 591fec4ee2..7ee569450c 100644 --- a/maps/submaps/planetary_ruins/hydrobase/hydrobase.dmm +++ b/maps/submaps/planetary_ruins/hydrobase/hydrobase.dmm @@ -111,7 +111,7 @@ "as" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "east bump"; pixel_x = 24 }, @@ -367,7 +367,7 @@ /area/map_template/hydrobase/station/growD) "bc" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; name = "south bump"; pixel_y = -24 }, @@ -785,7 +785,7 @@ "cc" = ( /obj/structure/cable/yellow, /obj/machinery/power/apc{ - dir = 4; + dir = 8; icon_state = "apc0"; pixel_x = 25 }, @@ -1061,7 +1061,7 @@ /area/map_template/hydrobase/station/growC) "cS" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; icon_state = "apc0"; pixel_x = 25 }, @@ -1651,7 +1651,7 @@ /area/map_template/hydrobase/station/processing) "eq" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "east bump"; pixel_x = 24 }, @@ -1818,7 +1818,7 @@ tag_interior_door = "solars_inner" }, /obj/machinery/power/apc{ - dir = 1; + dir = 2; icon_state = "apc0"; pixel_x = 0; pixel_y = 25 @@ -1957,7 +1957,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - dir = 4; + dir = 8; icon_state = "apc0"; pixel_x = 25 }, @@ -1967,7 +1967,7 @@ /area/map_template/hydrobase/station/growB) "eS" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; icon_state = "apc0"; pixel_x = -25 }, @@ -2284,7 +2284,7 @@ /area/map_template/hydrobase/station/growA) "fM" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "west bump"; pixel_x = -24 }, @@ -2315,7 +2315,7 @@ "fP" = ( /obj/machinery/washing_machine, /obj/machinery/power/apc{ - dir = 1; + dir = 2; icon_state = "apc0"; pixel_x = 0; pixel_y = 25 @@ -2608,7 +2608,7 @@ pixel_y = 25 }, /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "west bump"; pixel_x = -24 }, diff --git a/maps/submaps/planetary_ruins/playablecolony/colony.dmm b/maps/submaps/planetary_ruins/playablecolony/colony.dmm index ae247f8aa3..47a2ed0767 100644 --- a/maps/submaps/planetary_ruins/playablecolony/colony.dmm +++ b/maps/submaps/planetary_ruins/playablecolony/colony.dmm @@ -424,7 +424,7 @@ dir = 4 }, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -447,7 +447,7 @@ dir = 1 }, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -1712,7 +1712,7 @@ /obj/machinery/door/blast/shutters{ id = "colsen"; name = "Hard Storage Shutter"; - + }, /turf/simulated/floor/plating, /area/map_template/colony/command) @@ -1766,7 +1766,7 @@ dir = 4 }, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -2342,7 +2342,7 @@ /area/map_template/colony/messhall) "gf" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -2632,7 +2632,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/structure/railing/mapped{ dir = 1; @@ -2647,12 +2647,12 @@ dir = 2; frequency = 2222; id_tag = "playablecolonymain_pump_out_external"; - + }, /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/structure/railing/mapped, /obj/effect/floor_decal/industrial/hatch/orange, @@ -2699,7 +2699,7 @@ /area/map_template/colony/atmospherics) "gY" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -2848,7 +2848,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /turf/simulated/floor/exoplanet/concrete, /area/template_noop) @@ -2874,7 +2874,7 @@ /area/map_template/colony) "hv" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -3201,7 +3201,7 @@ "ip" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -3360,7 +3360,7 @@ dir = 1 }, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -3516,7 +3516,7 @@ /area/map_template/colony/jail) "ji" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -4216,7 +4216,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /turf/simulated/floor/exoplanet/concrete, /area/map_template/colony/mineralprocessing) @@ -4295,7 +4295,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/machinery/conveyor_switch{ id = "colonymine" @@ -4367,7 +4367,7 @@ /area/map_template/colony/jail) "lt" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -4435,7 +4435,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/machinery/computer/mining, /obj/structure/table/steel_reinforced, @@ -4554,7 +4554,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump"; power_rating = 25000; - + }, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/colony/airlock) @@ -4589,7 +4589,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump"; power_rating = 25000; - + }, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/colony/airlock) @@ -4815,7 +4815,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/exoplanet/concrete, @@ -4852,12 +4852,12 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1"; - + }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -4976,7 +4976,7 @@ id = "colsen"; name = "Hard Equipment Storage"; pixel_y = 28; - + }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -5064,7 +5064,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/machinery/recharge_station, /turf/simulated/floor/exoplanet/concrete, @@ -5430,7 +5430,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump_out_internal"; power_rating = 25000; - + }, /obj/item/device/radio/intercom{ dir = 4; @@ -5494,7 +5494,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump"; power_rating = 25000; - + }, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/colony/airlock) @@ -5521,7 +5521,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump"; power_rating = 25000; - + }, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/colony/airlock) @@ -5672,7 +5672,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/structure/cable{ d1 = 4; @@ -5711,7 +5711,7 @@ /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1"; - + }, /obj/structure/cable{ d1 = 4; @@ -5858,7 +5858,7 @@ frequency = 2222; id_tag = "playablecolonymain_pump_out_internal"; power_rating = 25000; - + }, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/colony/airlock) @@ -6104,7 +6104,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6340,7 +6340,7 @@ /area/map_template/colony/commons) "zV" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -6376,7 +6376,7 @@ dir = 10 }, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -6482,7 +6482,7 @@ "Hy" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -6652,7 +6652,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6855,7 +6855,7 @@ /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1"; - + }, /obj/structure/railing/mapped, /turf/simulated/floor/exoplanet/concrete, @@ -6877,7 +6877,7 @@ /area/map_template/colony/commons) "OV" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -6977,7 +6977,7 @@ "Sr" = ( /obj/structure/table/steel_reinforced, /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; @@ -7077,7 +7077,7 @@ /area/map_template/colony/command) "Xj" = ( /obj/machinery/power/apc{ - dir = 2; + dir = 1; locked = 0; name = "south bump"; operating = 1; diff --git a/maps/submaps/planetary_ruins/spider_nest/spider_nest.dmm b/maps/submaps/planetary_ruins/spider_nest/spider_nest.dmm index 1eb501e413..5da16b5109 100644 --- a/maps/submaps/planetary_ruins/spider_nest/spider_nest.dmm +++ b/maps/submaps/planetary_ruins/spider_nest/spider_nest.dmm @@ -93,7 +93,8 @@ /obj/item/seeds/random, /obj/effect/decal/cleanable/spiderling_remains, /obj/structure/fireaxecabinet{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /turf/simulated/floor/tiled/cafe, /area/map_template/spider_nest) diff --git a/maps/submaps/planetary_ruins/spider_nest/spider_nest2.dmm b/maps/submaps/planetary_ruins/spider_nest/spider_nest2.dmm index 98433453a8..168af44cc8 100644 --- a/maps/submaps/planetary_ruins/spider_nest/spider_nest2.dmm +++ b/maps/submaps/planetary_ruins/spider_nest/spider_nest2.dmm @@ -121,7 +121,8 @@ "F" = ( /obj/effect/spider/stickyweb, /obj/structure/fireaxecabinet{ - pixel_x = -32 + pixel_x = -32; + dir = 4 }, /obj/effect/decal/cleanable/blood/splatter, /turf/simulated/floor/tiled/white/danger, diff --git a/maps/submaps/planetary_ruins/spider_nest/spider_nest3.dmm b/maps/submaps/planetary_ruins/spider_nest/spider_nest3.dmm index 498064ac7e..137c164888 100644 --- a/maps/submaps/planetary_ruins/spider_nest/spider_nest3.dmm +++ b/maps/submaps/planetary_ruins/spider_nest/spider_nest3.dmm @@ -30,7 +30,8 @@ pixel_y = 3 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 27 + pixel_x = 27; + dir = 8 }, /turf/simulated/floor/tiled/white/violetcorener, /area/map_template/spider_nest) diff --git a/maps/testmap/test_map.dmm b/maps/testmap/test_map.dmm index e1f92085c6..a68b8693cf 100644 --- a/maps/testmap/test_map.dmm +++ b/maps/testmap/test_map.dmm @@ -477,19 +477,22 @@ /area/testing/first) "cp" = ( /obj/machinery/power/apc{ - dir = 8; + dir = 4; name = "West APC"; pixel_x = -28 }, /turf/simulated/floor, /area/testing/first) +"ep" = ( +/turf/simulated/wall/r_wall, +/area/testing/first) "fA" = ( /obj/item/storage/toolbox/mechanical, /turf/simulated/floor, /area/testing/first) "gB" = ( /obj/machinery/power/apc{ - dir = 4; + dir = 8; name = "East APC"; pixel_x = 28 }, @@ -499,6 +502,14 @@ /obj/item/implantcase/excelsior, /turf/simulated/floor, /area/testing/first) +"hf" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/ammo_magazine/c10x24, +/obj/item/ammo_magazine/c10x24, +/turf/simulated/floor, +/area/testing/first) "id" = ( /obj/machinery/conveyor/northeast/ccw, /turf/simulated/floor, @@ -554,6 +565,10 @@ /obj/item/mine, /turf/simulated/floor, /area/testing/first) +"qb" = ( +/obj/item/gun/projectile/automatic/dallas, +/turf/simulated/floor, +/area/testing/first) "qi" = ( /obj/structure/cable{ d1 = 4; @@ -598,12 +613,15 @@ /area/testing/first) "xv" = ( /obj/machinery/power/apc{ - dir = 1; + dir = 2; name = "North APC"; pixel_y = 28 }, /turf/simulated/floor, /area/testing/first) +"AD" = ( +/turf/simulated/wall/r_wall, +/area/space) "AG" = ( /obj/item/stock_parts/micro_laser/high, /obj/item/stock_parts/micro_laser/high, @@ -621,6 +639,10 @@ /obj/effect/window_lwall_spawn/reinforced, /turf/simulated/floor/plating, /area/space) +"Fe" = ( +/obj/machinery/firealarm, +/turf/simulated/wall, +/area/space) "Gc" = ( /obj/item/reagent_containers/glass/beaker/tungsten, /obj/item/tool/screwdriver, @@ -646,6 +668,10 @@ }, /turf/simulated/floor, /area/testing/first) +"Pq" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor, +/area/testing/first) "QE" = ( /obj/item/implanter/excelsior, /turf/simulated/floor, @@ -660,6 +686,11 @@ /obj/landmark/join/late/cryo, /turf/simulated/floor, /area/testing/first) +"Sh" = ( +/obj/item/ammo_magazine/c10x24, +/obj/item/ammo_magazine/c10x24, +/turf/simulated/floor, +/area/testing/first) "SM" = ( /obj/machinery/conveyor/northwest, /turf/simulated/floor, @@ -1308,18 +1339,18 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +AD +AD +AD +AD +AD +AD +AD +AD +AD +AD +AD +AD ab ab ab @@ -1410,19 +1441,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +ep +ep +ep +ep +ep +ep +ep +ep +ep +ep +ae af an he @@ -1512,19 +1543,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +Vb +an +an +an +an +an +Vb +an +an +an an he he @@ -1614,19 +1645,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +aF +an +an +an +an +Pq +Sh +qb +ep +ae ah an QE @@ -1716,19 +1747,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +aF +an +an +an +an +Pq +Sh +qb +ep +ae ai Tb RE @@ -1818,19 +1849,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +aF +an +an +an +an +Pq +Sh +qb +ep +ae aj jn av @@ -1920,19 +1951,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +aF +an +an +an +an +Pq +Sh +qb +ep +ae ak ar aw @@ -2022,19 +2053,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +an +bo +an +an +an +an +Pq +hf +qb +ep +ae al an ax @@ -2124,19 +2155,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab +AD +ep +ep +ep +ep +ep +ep +ep +ep +ep +ep +ep +ae Xr Ze TG @@ -2226,13 +2257,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +AD +AD +AD +AD +AD +AD +AD ab ab ab @@ -2437,7 +2468,7 @@ aa aa aa aa -ab +Fe an an an @@ -2845,7 +2876,7 @@ aa aa aa aa -ab +Fe an an an diff --git a/oldcode/shuttles_old/old_shuttle_console.dm b/oldcode/shuttles_old/old_shuttle_console.dm index 34e1135b7b..4c7d15c213 100644 --- a/oldcode/shuttles_old/old_shuttle_console.dm +++ b/oldcode/shuttles_old/old_shuttle_console.dm @@ -92,7 +92,7 @@ user << "You short out the console's ID checking system. It's now available to everyone!" return 1 -/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/computer/shuttle_control/bullet_act(obj/item/projectile/Proj, defZone, hitboxFlags) visible_message("\The [Proj] ricochets off \the [src]!") /obj/machinery/computer/shuttle_control/explosion_act(target_power, explosion_handler/handler)