diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index bbad90a6bdc3..8b9fe898c72c 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -35,7 +35,7 @@ most of them are tied into map-placed objects. This should be reworked in the fu #define ACCESS_MARINE_RESEARCH 28 #define ACCESS_MARINE_SEA 29 #define ACCESS_MARINE_KITCHEN 30 -#define ACCESS_MARINE_CAPTAIN 31 +#define ACCESS_MARINE_CO 31 #define ACCESS_MARINE_TL_PREP 32 #define ACCESS_MARINE_MAINT 34 diff --git a/code/__DEFINES/client_prefs.dm b/code/__DEFINES/client_prefs.dm new file mode 100644 index 000000000000..ef5ff00e4ed6 --- /dev/null +++ b/code/__DEFINES/client_prefs.dm @@ -0,0 +1,33 @@ +#define BE_ALIEN_AFTER_DEATH (1<<0) +#define BE_AGENT (1<<1) + +#define TOGGLE_IGNORE_SELF (1<<0) // Determines whether you will not hurt yourself when clicking yourself +#define TOGGLE_HELP_INTENT_SAFETY (1<<1) // Determines whether help intent will be completely harmless +#define TOGGLE_MIDDLE_MOUSE_CLICK (1<<2) // This toggles whether selected ability for xeno uses middle mouse clicking or shift clicking +#define TOGGLE_DIRECTIONAL_ATTACK (1<<3) // This toggles whether attacks for xeno use directional attacks +#define TOGGLE_AUTO_EJECT_MAGAZINE_OFF (1<<4) // This toggles whether guns with auto ejectors will not auto eject their magazines + // MUTUALLY EXCLUSIVE TO TOGGLE_AUTO_EJECT_MAGAZINE_TO_HAND +#define TOGGLE_AUTO_EJECT_MAGAZINE_TO_HAND (1<<5) // This toggles whether guns with auto ejectors will cause you to unwield your gun and put the empty magazine in your hand + // MUTUALLY EXCLUSIVE TO TOGGLE_AUTO_EJECT_MAGAZINE +#define TOGGLE_EJECT_MAGAZINE_TO_HAND (1<<6) // This toggles whether manuallye jecting magazines from guns will cause you to unwield your gun + // and put the empty magazine in your hand +#define TOGGLE_AUTOMATIC_PUNCTUATION (1<<7) // Whether your sentences will automatically be punctuated with a period +#define TOGGLE_COMBAT_CLICKDRAG_OVERRIDE (1<<8) // Whether disarm/harm intents cause clicks to trigger immediately when the mouse button is depressed. +#define TOGGLE_ALTERNATING_DUAL_WIELD (1<<9) // Whether dual-wielding fires both guns at once or swaps between them. +#define TOGGLE_FULLSCREEN (1<<10) // See /client/proc/toggle_fullscreen in client_procs.dm +#define TOGGLE_MEMBER_PUBLIC (1<<11) //determines if you get a byond logo by your name in ooc if you're a member or not +#define TOGGLE_OOC_FLAG (1<<12) // determines if your country flag appears by your name in ooc chat +#define TOGGLE_MIDDLE_MOUSE_SWAP_HANDS (1<<13) //Toggle whether middle click swaps your hands +#define TOGGLE_AMBIENT_OCCLUSION (1<<14) // toggles if ambient occlusion is turned on or off +#define TOGGLE_VEND_ITEM_TO_HAND (1<<15) // This toggles whether items from vendors will be automatically put into your hand. +#define TOGGLE_START_JOIN_CURRENT_SLOT (1<<16) // Whether joining at roundstart ignores assigned character slot for the job and uses currently selected slot. +#define TOGGLE_LATE_JOIN_CURRENT_SLOT (1<<17) //Whether joining during the round ignores assigned character slot for the job and uses currently selected slot. + +#define JOB_SLOT_RANDOMISED_SLOT -1 +#define JOB_SLOT_CURRENT_SLOT 0 +#define JOB_SLOT_RANDOMISED_TEXT "Randomise name and appearance" +#define JOB_SLOT_CURRENT_TEXT "Current character" + +#define AGE_MIN 19 //youngest a character can be +#define AGE_MAX 90 //oldest a character can be //no. you are not allowed to be 160. +#define MAX_GEAR_COST 7 //Used in chargen for loadout limit. diff --git a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm index d5a8885293fb..b38339d1af17 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm @@ -52,5 +52,14 @@ //from /mob/living/carbon/human/equip_to_slot() #define COMSIG_HUMAN_EQUIPPED_ITEM "human_equipped_item" +/// From /mob/proc/equip_to_slot_if_possible() +#define COMSIG_HUMAN_ATTEMPTING_EQUIP "human_attempting_equip" + #define COMPONENT_HUMAN_CANCEL_ATTEMPT_EQUIP (1<<0) + //from /mob/living/carbon/human/Life() #define COMSIG_HUMAN_SET_UNDEFIBBABLE "human_set_undefibbable" + +/// from /datum/surgery_step/proc/attempt_step() +#define COMSIG_HUMAN_SURGERY_APPLY_MODIFIERS "human_surgery_apply_modifiers" +/// From /mob/living/carbon/human/proc/get_flags_cold_protection() +#define COMSIG_HUMAN_COLD_PROTECTION_APPLY_MODIFIERS "human_cold_protection_apply_modifiers" diff --git a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm index bdae2114ff23..347623798b74 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm @@ -43,6 +43,9 @@ #define COMSIG_MOB_DRAGGED "mob_dragged" /// From /obj/item/proc/unequipped() #define COMSIG_MOB_ITEM_UNEQUIPPED "mob_item_unequipped" +/// From /mob/proc/equip_to_slot_if_possible() +#define COMSIG_MOB_ATTEMPTING_EQUIP "mob_attempting_equip" + #define COMPONENT_MOB_CANCEL_ATTEMPT_EQUIP (1<<0) /// For when a mob is devoured by a Xeno #define COMSIG_MOB_DEVOURED "mob_devoured" @@ -105,3 +108,5 @@ #define COMSIG_MOB_STAT_SET_ALIVE "mob_stat_set_alive" //from /mob/living/set_stat() #define COMSIG_MOB_STAT_SET_DEAD "mob_stat_set_dead" + +#define COMSIG_GHOST_MOVED "ghost_moved" diff --git a/code/__DEFINES/dcs/signals/atom/signals_obj.dm b/code/__DEFINES/dcs/signals/atom/signals_obj.dm index f52ec6eccf52..df53558834f6 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_obj.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_obj.dm @@ -22,3 +22,5 @@ /// from /obj/structure/transmitter/update_icon() #define COMSIG_TRANSMITTER_UPDATE_ICON "transmitter_update_icon" + +#define COMSIG_TENT_COLLAPSING "tent_collapsing" diff --git a/code/__DEFINES/dcs/signals/atom/signals_turf.dm b/code/__DEFINES/dcs/signals/atom/signals_turf.dm index f76abcda681a..6a0788bcf871 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_turf.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_turf.dm @@ -4,6 +4,7 @@ #define COMSIG_TURF_ENTER "turf_enter" #define COMPONENT_TURF_ALLOW_MOVEMENT (1<<0) #define COMPONENT_TURF_DENY_MOVEMENT (1<<1) +#define COMSIG_TURF_ENTERED "turf_entered" /// Called when a bullet hits a turf #define COMSIG_TURF_BULLET_ACT "turf_bullet_act" diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index c3d51b2d65cd..90a50fad138c 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -48,5 +48,8 @@ // Used for smothering fires upon weather event start/stop #define COMSIG_GLOB_WEATHER_CHANGE "!weather_event_changed" +/// From /obj/structure/machinery/telecomms/proc/tcomms_shutdown(), called when the relay turns off +#define COMSIG_GLOB_GROUNDSIDE_TELECOMM_TURNED_OFF "!groundside_telecomm_turned_off" + /// From /datum/admins/proc/force_predator_round() #define COMSIG_GLOB_PREDATOR_ROUND_TOGGLED "!predator_round_toglged" diff --git a/code/__DEFINES/defenses.dm b/code/__DEFINES/defenses.dm index 57eb0c86f939..db615c2a0c78 100644 --- a/code/__DEFINES/defenses.dm +++ b/code/__DEFINES/defenses.dm @@ -8,7 +8,7 @@ // Defines for barricade upgrades #define BARRICADE_UPGRADE_BURN "Biohazard Upgrade (+Burn)" #define BARRICADE_UPGRADE_BRUTE "Reinforced Upgrade (+Brute)" -#define BARRICADE_UPGRADE_EXPLOSIVE "Explosive Upgrade (+Explosive)" +#define BARRICADE_UPGRADE_ANTIFF "Composite Upgrade (++Explosive, ++Projectile, ++Fire)" // Defines for defense stats #define DEFENSE_FUNCTIONAL 0 diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index c2429d2fad4c..cede518e8db0 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -163,24 +163,25 @@ var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST //------------------------------------ //-------- PMC --------// -#define JOB_PMC "PMC Standard" +#define JOB_PMC_STANDARD "Weyland-Yutani PMC (Standard)" #define JOB_PMC_ENGINEER "PMC Corporate Technician" #define JOB_PMC_MEDIC "PMC Corporate Medic" #define JOB_PMC_DOCTOR "PMC Trauma Surgeon" #define JOB_PMC_INVESTIGATOR "PMC Medical Investigator" +#define JOB_PMC_DETAINER "Weyland-Yutani PMC (Detainer)" #define JOB_PMC_ELITE "PMC Elite" #define JOB_PMC_GUNNER "PMC Support Weapons Specialist" //Renamed from Specialist to Support Specialist as it only has SG skills. #define JOB_PMC_SNIPER "PMC Weapons Specialist" //Renamed from Sharpshooter to specialist as it uses specialist skills. -#define JOB_PMC_CREWMAN "PMC Crewman" +#define JOB_PMC_CREWMAN "Weyland-Yutani PMC (Crewman)" #define JOB_PMC_NINJA "PMC Ninja" #define JOB_PMC_XENO_HANDLER "PMC Xeno Handler" #define JOB_PMC_COMMANDO "PMC Commando" #define JOB_PMC_LEADER "PMC Leader" #define JOB_PMC_LEAD_INVEST "PMC Lead Investigator" #define JOB_PMC_DIRECTOR "PMC Site Director" -#define JOB_PMC_SYNTH "PMC Support Synthetic" +#define JOB_PMC_SYNTH "PMC Support Synthetic" -#define JOB_PMC_GRUNT_LIST list(JOB_PMC, JOB_PMC_ENGINEER, JOB_PMC_MEDIC, JOB_PMC_INVESTIGATOR, JOB_PMC_ELITE, JOB_PMC_GUNNER, JOB_PMC_SNIPER, JOB_PMC_CREWMAN, JOB_PMC_NINJA, JOB_PMC_XENO_HANDLER, JOB_PMC_COMMANDO, JOB_PMC_LEADER, JOB_PMC_LEAD_INVEST) +#define JOB_PMC_GRUNT_LIST list(JOB_PMC_STANDARD, JOB_PMC_ENGINEER, JOB_PMC_MEDIC, JOB_PMC_INVESTIGATOR, JOB_PMC_DETAINER, JOB_PMC_ELITE, JOB_PMC_GUNNER, JOB_PMC_SNIPER, JOB_PMC_CREWMAN, JOB_PMC_NINJA, JOB_PMC_XENO_HANDLER, JOB_PMC_COMMANDO, JOB_PMC_LEADER, JOB_PMC_LEAD_INVEST) //-------- WY --------// diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 40023dcd9ec1..3cbd0d6dac44 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -124,12 +124,15 @@ #define FACEHUGGER_LAYER 4.13 /// For WEATHER #define WEATHER_LAYER 4.14 -#define INTERIOR_WALL_SOUTH_LAYER 5.2 -#define INTERIOR_DOOR_LAYER 5.21 //#define FLY_LAYER 5 #define RIPPLE_LAYER 5.1 +#define INTERIOR_DOOR_INSIDE_LAYER 5.19 +#define INTERIOR_WALL_SOUTH_LAYER 5.2 +#define INTERIOR_DOOR_LAYER 5.21 +#define INTERIOR_WALLMOUNT_LAYER 5.3 +#define INTERIOR_ROOF_LAYER 5.5 #define ABOVE_FLY_LAYER 6 @@ -174,9 +177,12 @@ /// NEVER HAVE ANYTHING BELOW THIS PLANE ADJUST IF YOU NEED MORE SPACE #define LOWEST_EVER_PLANE -200 +/// Floor plane, self explanatory. Used for Ambient Occlusion filter #define FLOOR_PLANE -7 +/// Game Plane, where most of the game objects reside #define GAME_PLANE -6 -#define ABOVE_GAME_PLANE -5 +/// Roof plane, disappearing when entering buildings +#define ROOF_PLANE -4 /// To keep from conflicts with SEE_BLACKNESS internals #define BLACKNESS_PLANE 0 diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 053dd58cabca..3f6a4a44ee07 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -104,8 +104,10 @@ require only minor tweaks. #define GROUND_MAP "ground_map" #define SHIP_MAP "ship_map" #define ALL_MAPTYPES list(GROUND_MAP, SHIP_MAP) +#define OVERRIDE_MAPS_TO_FILENAME list(GROUND_MAP = "next_map_override.dmm", SHIP_MAP = "next_ship_override.dmm") #define MAP_TO_FILENAME list(GROUND_MAP = "data/next_map.json", SHIP_MAP = "data/next_ship.json") #define HUNTERSHIPS_TEMPLATE_PATH "maps/predship/huntership.dmm" +#define OVERRIDE_DEFAULT_MAP_CONFIG list(GROUND_MAP = "maps/override_ground.json", SHIP_MAP = "maps/override_ship.json") // traity things #define MAP_COLD "COLD" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 313edfba29b3..2d39e0216ddd 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -11,8 +11,6 @@ #define OVEREAT_TIME 200 //================================================= -#define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien. - #define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point #define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point #define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 7736d2f51d8d..1f3c4ad22bf1 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -75,29 +75,6 @@ #define LATEJOIN_MARINES_PER_LATEJOIN_LARVA 3 -#define BE_ALIEN_AFTER_DEATH 1 -#define BE_AGENT 2 - -#define TOGGLE_IGNORE_SELF (1<<0) // Determines whether you will not hurt yourself when clicking yourself -#define TOGGLE_HELP_INTENT_SAFETY (1<<1) // Determines whether help intent will be completely harmless -#define TOGGLE_MIDDLE_MOUSE_CLICK (1<<2) // This toggles whether selected ability for xeno uses middle mouse clicking or shift clicking -#define TOGGLE_DIRECTIONAL_ATTACK (1<<3) // This toggles whether attacks for xeno use directional attacks -#define TOGGLE_AUTO_EJECT_MAGAZINE_OFF (1<<4) // This toggles whether guns with auto ejectors will not auto eject their magazines - // MUTUALLY EXCLUSIVE TO TOGGLE_AUTO_EJECT_MAGAZINE_TO_HAND -#define TOGGLE_AUTO_EJECT_MAGAZINE_TO_HAND (1<<5) // This toggles whether guns with auto ejectors will cause you to unwield your gun and put the empty magazine in your hand - // MUTUALLY EXCLUSIVE TO TOGGLE_AUTO_EJECT_MAGAZINE -#define TOGGLE_EJECT_MAGAZINE_TO_HAND (1<<6) // This toggles whether manuallyejecting magazines from guns will cause you to unwield your gun - // and put the empty magazine in your hand -#define TOGGLE_AUTOMATIC_PUNCTUATION (1<<7) // Whether your sentences will automatically be punctuated with a period -#define TOGGLE_COMBAT_CLICKDRAG_OVERRIDE (1<<8) // Whether disarm/harm intents cause clicks to trigger immediately when the mouse button is depressed. -#define TOGGLE_ALTERNATING_DUAL_WIELD (1<<9) // Whether dual-wielding fires both guns at once or swaps between them. -#define TOGGLE_FULLSCREEN (1<<10) // See /client/proc/toggle_fullscreen in client_procs.dm -#define TOGGLE_MEMBER_PUBLIC (1<<11) //determines if you get a byond logo by your name in ooc if you're a member or not -#define TOGGLE_OOC_FLAG (1<<12) // determines if your country flag appears by your name in ooc chat -#define TOGGLE_MIDDLE_MOUSE_SWAP_HANDS (1<<13) //Toggle whether middle click swaps your hands -#define TOGGLE_AMBIENT_OCCLUSION (1<<14) // toggles if ambient occlusion is turned on or off -#define TOGGLE_VEND_ITEM_TO_HAND (1<<15) // This toggles whether items from vendors will be automatically put into your hand. - //================================================= #define SHOW_ITEM_ANIMATIONS_NONE 0 //Do not show any item pickup animations #define SHOW_ITEM_ANIMATIONS_HALF 1 //Toggles tg-style item animations on and off, default on. @@ -111,16 +88,8 @@ //================================================= -var/list/be_special_flags = list( - "Xenomorph after unrevivable death" = BE_ALIEN_AFTER_DEATH, - "Agent" = BE_AGENT, -) - -#define AGE_MIN 19 //youngest a character can be -#define AGE_MAX 90 //oldest a character can be //no. you are not allowed to be 160. //Number of marine players against which the Marine's gear scales #define MARINE_GEAR_SCALING_NORMAL 30 -#define MAX_GEAR_COST 7 //Used in chargen for loadout limit. #define RESOURCE_NODE_SCALE 95 //How many players minimum per extra set of resource nodes #define RESOURCE_NODE_QUANTITY_PER_POP 11 //How many resources total per pop diff --git a/code/__DEFINES/objects.dm b/code/__DEFINES/objects.dm index 5617a2b47ec6..0a34ac9d6fe9 100644 --- a/code/__DEFINES/objects.dm +++ b/code/__DEFINES/objects.dm @@ -136,11 +136,16 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define CLEANABLE_MISC "misc" //Anything else //For nuke announcements -#define NUKE_SHOW_TIMER_TEN_SEC 1 -#define NUKE_SHOW_TIMER_MINUTE 2 -#define NUKE_SHOW_TIMER_HALF 4 +#define NUKE_SHOW_TIMER_TEN_SEC (1<<0) +#define NUKE_SHOW_TIMER_MINUTE (1<<1) +#define NUKE_SHOW_TIMER_HALF (1<<2) #define NUKE_SHOW_TIMER_ALL (NUKE_SHOW_TIMER_TEN_SEC|NUKE_SHOW_TIMER_MINUTE|NUKE_SHOW_TIMER_HALF) +#define NUKE_DECRYPT_SHOW_TIMER_COMPLETE (1<<3) +#define NUKE_DECRYPT_SHOW_TIMER_MINUTE (1<<4) +#define NUKE_DECRYPT_SHOW_TIMER_HALF (1<<5) +#define NUKE_DECRYPT_SHOW_TIMER_ALL (NUKE_SHOW_TIMER_TEN_SEC|NUKE_SHOW_TIMER_HALF|NUKE_DECRYPT_SHOW_TIMER_COMPLETE|NUKE_DECRYPT_SHOW_TIMER_MINUTE|NUKE_DECRYPT_SHOW_TIMER_HALF) + //For recipes #define ONE_TYPE_PER_TURF 1 #define ONE_TYPE_PER_BORDER 2 diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index fc9ac3327c20..8e1bde82c839 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -152,8 +152,8 @@ //pilot skill, hidden #define SKILL_PILOT_DEFAULT 0 -#define SKILL_PILOT_TRAINED 1 // DCC, Synth -#define SKILL_PILOT_EXPERT 2 // Pilot +#define SKILL_PILOT_TRAINED 1 // DCC +#define SKILL_PILOT_EXPERT 2 // Pilot, Synth #define SKILL_PILOT_MAX 2 //Navigations skill - for seting orbital alt diff --git a/code/__DEFINES/urls.dm b/code/__DEFINES/urls.dm index 98b8b409ae6a..e12ec1079589 100644 --- a/code/__DEFINES/urls.dm +++ b/code/__DEFINES/urls.dm @@ -50,6 +50,7 @@ #define URL_WIKI_MST_GUIDE "https://cm-ss13.com/wiki/Mess_Technician" #define URL_WIKI_CL_GUIDE "https://cm-ss13.com/wiki/Corporate_Liaison" // Misc // #define URL_WIKI_SURV_GUIDE "https://cm-ss13.com/wiki/Survivor" +#define URL_WIKI_WJ_GUIDE "https://cm-ss13.com/wiki/Seegson_Working_Joe_Manual" // ------ FORUM LINKS ------ // #define URL_FORUM "https://forum.cm-ss13.com/" diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 6d6bd64ea918..7741beecedef 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -154,6 +154,22 @@ #define WEED_BASE_GROW_SPEED (5 SECONDS) #define WEED_BASE_DECAY_SPEED (10 SECONDS) +/// The time you must be dead to join as a xeno larva +#define XENO_JOIN_DEAD_LARVA_TIME (2.5 MINUTES) +/// The time you must be dead to join as xeno (not larva) +#define XENO_JOIN_DEAD_TIME (5 MINUTES) +/// The time of inactivity you cannot exceed to join as a xeno +#define XENO_JOIN_AFK_TIME_LIMIT (5 MINUTES) +/// The amount of time after round start before buried larva spawns are disallowed +#define XENO_BURIED_LARVA_TIME_LIMIT (30 MINUTES) + +/// The time against away_timer when an AFK xeno larva can be replaced +#define XENO_LEAVE_TIMER_LARVA 80 //80 seconds +/// The time against away_timer when an AFK xeno (not larva) can be replaced +#define XENO_LEAVE_TIMER 300 //300 seconds +/// The time against away_timer when an AFK xeno gets listed in the available list so ghosts can get ready +#define XENO_AVAILABLE_TIMER 60 //60 seconds + /// Between 2% to 10% of explosion severity #define WEED_EXPLOSION_DAMAGEMULT rand(2, 10)*0.01 diff --git a/code/__HELPERS/_time.dm b/code/__HELPERS/_time.dm index 85acafa0e2f6..b929ae8636b3 100644 --- a/code/__HELPERS/_time.dm +++ b/code/__HELPERS/_time.dm @@ -15,10 +15,6 @@ #define DECISECONDS_TO_HOURS /36000 -#define XENO_LEAVE_TIMER_LARVA 80 //80 seconds -#define XENO_LEAVE_TIMER 300 //300 seconds -#define XENO_AVAILABLE_TIMER 60 //60 seconds, when to add a xeno to the avaliable list so ghosts can get ready - var/midnight_rollovers = 0 var/rollovercheck_last_timeofday = 0 diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 4ca0edcf43d0..888e3c2ce657 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -57,3 +57,12 @@ var/atom/cmp_dist_origin=null /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") + +/// Compares mobs based on their timeofdeath value in ascending order +/proc/cmp_mob_deathtime_asc(mob/A, mob/B) + return A.timeofdeath - B.timeofdeath + +/// Compares observers based on their larva_queue_time value in ascending order +/// Assumes the client on the observer is not null +/proc/cmp_obs_larvaqueuetime_asc(mob/dead/observer/A, mob/dead/observer/B) + return A.client.larva_queue_time - B.client.larva_queue_time diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 717a2ed5347b..f88fe7168f8d 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -12,11 +12,6 @@ return text -//Sends resource files to client cache -/client/proc/getFiles() - for(var/file in args) - src << browse_rsc(file) - /client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm")) var/path = root diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index a0bb9dd98423..61976f4dc903 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -241,35 +241,70 @@ else return get_step(start, EAST) -// Same as above but for alien candidates. -/proc/get_alien_candidates() +/// Get a list of observers that can be alien candidates, optionally sorted by larva_queue_time +/proc/get_alien_candidates(sorted = TRUE) var/list/candidates = list() - for(var/i in GLOB.observer_list) - var/mob/dead/observer/O = i + for(var/mob/dead/observer/cur_obs as anything in GLOB.observer_list) + // Preference check + if(!cur_obs.client || !cur_obs.client.prefs || !(cur_obs.client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) + continue + // Jobban check - if(!O.client || !O.client.prefs || !(O.client.prefs.be_special & BE_ALIEN_AFTER_DEATH) || jobban_isbanned(O, JOB_XENOMORPH)) + if(jobban_isbanned(cur_obs, JOB_XENOMORPH)) continue //players that can still be revived are skipped - if(O.mind && O.mind.original && ishuman(O.mind.original)) - var/mob/living/carbon/human/H = O.mind.original - if (H.check_tod() && H.is_revivable()) + if(cur_obs.mind && cur_obs.mind.original && ishuman(cur_obs.mind.original)) + var/mob/living/carbon/human/cur_human = cur_obs.mind.original + if(cur_human.check_tod() && cur_human.is_revivable()) continue // copied from join as xeno - var/deathtime = world.time - O.timeofdeath - if(deathtime < 3000 && ( !O.client.admin_holder || !(O.client.admin_holder.rights & R_ADMIN)) ) + var/deathtime = world.time - cur_obs.timeofdeath + if(deathtime < XENO_JOIN_DEAD_TIME && ( !cur_obs.client.admin_holder || !(cur_obs.client.admin_holder.rights & R_ADMIN)) ) continue - // Admins and AFK players cannot be drafted - if(O.client.inactivity / 600 > ALIEN_SELECT_AFK_BUFFER + 5 || (O.client.admin_holder && (O.client.admin_holder.rights & R_MOD)) && O.adminlarva == 0) + // AFK players cannot be drafted + if(cur_obs.client.inactivity > XENO_JOIN_AFK_TIME_LIMIT) continue - candidates += O + // Mods with larva protection cannot be drafted + if((cur_obs.client.admin_holder && (cur_obs.client.admin_holder.rights & R_MOD)) && !cur_obs.adminlarva) + continue + + candidates += cur_obs + + // Optionally sort by larva_queue_time + if(sorted && length(candidates)) + candidates = sort_list(candidates, GLOBAL_PROC_REF(cmp_obs_larvaqueuetime_asc)) return candidates +/** + * Messages observers that are currently candidates an update on the queue. + * + * Arguments: + * * candidates - The list of observers from get_alien_candidates() + * * dequeued - How many candidates to skip messaging because they were dequeued + * * cache_only - Whether to not actually send a to_chat message and instead only update larva_queue_cached_message + */ +/proc/message_alien_candidates(list/candidates, dequeued, cache_only = FALSE) + var/new_players = 0 + for(var/i in (1 + dequeued) to candidates.len) + var/mob/dead/observer/cur_obs = candidates[i] + + // Generate the messages + var/cached_message = SPAN_XENONOTICE("You are currently [i-dequeued]\th in the larva queue. There are [new_players] ahead of you that have yet to play this round.") + cur_obs.larva_queue_cached_message = cached_message + if(!cache_only) + var/chat_message = dequeued ? replacetext(cached_message, "currently", "now") : cached_message + to_chat(candidates[i], chat_message) + + // Count how many are prioritized + if(cur_obs.client.larva_queue_time < 2) // 0 and 1 because facehuggers/t-domers are slightly deprioritized + new_players++ + /proc/convert_k2c(temp) return ((temp - T0C)) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 187f179094b2..e2203aadce0c 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -23,6 +23,7 @@ GLOBAL_LIST_EMPTY_TYPED(alive_human_list, /mob/living/carbon/human) // list of a GLOBAL_LIST_EMPTY_TYPED(xeno_mob_list, /mob/living/carbon/xenomorph) GLOBAL_LIST_EMPTY_TYPED(living_xeno_list, /mob/living/carbon/xenomorph) GLOBAL_LIST_EMPTY_TYPED(xeno_cultists, /mob/living/carbon/human) +GLOBAL_LIST_EMPTY_TYPED(player_embryo_list, /obj/item/alien_embryo) GLOBAL_LIST_EMPTY_TYPED(hellhound_list, /mob/living/carbon/xenomorph/hellhound) GLOBAL_LIST_EMPTY_TYPED(zombie_list, /mob/living/carbon/human) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 10a125b29300..affbc28cdd45 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -71,7 +71,9 @@ return // Click handled elsewhere. (These clicks are not affected by the next_move cooldown) - if (click(A, mods) || A.clicked(src, mods, location, params)) + if(click(A, mods)) + return + if(A.clicked(src, mods, location, params)) return // Default click functions from here on. @@ -80,7 +82,8 @@ return face_atom(A) - + if(mods["middle"]) + return // Special type of click. if (is_mob_restrained()) RestrainedClickOn(A) diff --git a/code/_onclick/hud/rendering/plane_master.dm b/code/_onclick/hud/rendering/plane_master.dm index 9e6ff21aac18..d29228f4c16e 100644 --- a/code/_onclick/hud/rendering/plane_master.dm +++ b/code/_onclick/hud/rendering/plane_master.dm @@ -56,6 +56,13 @@ blend_mode = BLEND_OVERLAY render_relay_plane = RENDER_PLANE_NON_GAME +/// Plane master handling display of building roofs. They're meant to become invisible when inside a building. +/atom/movable/screen/plane_master/roof + name = "roof plane master" + plane = ROOF_PLANE + appearance_flags = PLANE_MASTER + blend_mode = BLEND_OVERLAY + /** * Plane master handling byond internal blackness * vars are set as to replicate behavior when rendering to other planes diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 21ac66e5f222..5acfe74f2965 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -45,11 +45,11 @@ return FALSE var/deathtime = world.time - timeofdeath - if(deathtime < 2.5 MINUTES) + if(deathtime < XENO_JOIN_DEAD_LARVA_TIME) var/message = "You have been dead for [DisplayTimeText(deathtime)]." message = SPAN_WARNING("[message]") to_chat(src, message) - to_chat(src, SPAN_WARNING("You must wait 2.5 minutes before rejoining the game!")) + to_chat(src, SPAN_WARNING("You must wait atleast 2.5 minutes before rejoining the game!")) ManualFollow(target) return FALSE diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index a8ed20f5c4b3..9c9784286d09 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -34,4 +34,4 @@ Have no reason to click on anything at all. */ /mob/new_player/click() - return 1 + return diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm index bb7b8cf41aca..62d612790930 100644 --- a/code/_onclick/xeno.dm +++ b/code/_onclick/xeno.dm @@ -127,7 +127,7 @@ so that it doesn't double up on the delays) so that it applies the delay immedia return TRUE if(next_move >= world.time) - return TRUE + return FALSE return ..() diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index ba3f0b2609b6..29dd0a88d3e0 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -263,7 +263,7 @@ Voting // Gamemode to auto-switch to at the start of the round /datum/config_entry/string/gamemode_default - config_entry_value = "extended" + config_entry_value = "Extended" // Rounds needed for gamemode vote /datum/config_entry/number/gamemode_rounds_needed diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 283fe79cfead..38e57df93cef 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -7,6 +7,20 @@ SUBSYSTEM_DEF(assets) var/list/preload = list() var/datum/asset_transport/transport = new() +/datum/controller/subsystem/assets/OnConfigLoad() + var/newtransporttype = /datum/asset_transport + switch (CONFIG_GET(string/asset_transport)) + if ("webroot") + newtransporttype = /datum/asset_transport/webroot + + if (newtransporttype == transport.type) + return + + var/datum/asset_transport/newtransport = new newtransporttype () + if (newtransport.validate_config()) + transport = newtransport + transport.Load() + /datum/controller/subsystem/assets/Initialize() for(var/type in typesof(/datum/asset)) var/datum/asset/A = type diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b05863b418b7..ed6e3cda15f5 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -85,7 +85,7 @@ SUBSYSTEM_DEF(mapping) z_list = SSmapping.z_list #define INIT_ANNOUNCE(X) to_chat(world, "[X]"); log_world(X) -/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE) +/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/") . = list() var/start_time = REALTIMEOFDAY @@ -96,7 +96,7 @@ SUBSYSTEM_DEF(mapping) var/total_z = 0 var/list/parsed_maps = list() for (var/file in files) - var/full_path = "maps/[path]/[file]" + var/full_path = "[override_map_path]/[path]/[file]" var/datum/parsed_map/pm = new(file(full_path)) var/bounds = pm?.bounds if (!bounds) @@ -131,11 +131,11 @@ SUBSYSTEM_DEF(mapping) INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") return parsed_maps -/datum/controller/subsystem/mapping/proc/Loadship(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE) - LoadGroup(errorList, name, path, files, traits, default_traits, silent) +/datum/controller/subsystem/mapping/proc/Loadship(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/") + LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path) -/datum/controller/subsystem/mapping/proc/Loadground(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE) - LoadGroup(errorList, name, path, files, traits, default_traits, silent) +/datum/controller/subsystem/mapping/proc/Loadground(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/") + LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path) /datum/controller/subsystem/mapping/proc/loadWorld() //if any of these fail, something has gone horribly, HORRIBLY, wrong @@ -149,12 +149,18 @@ SUBSYSTEM_DEF(mapping) var/datum/map_config/ground_map = configs[GROUND_MAP] INIT_ANNOUNCE("Loading [ground_map.map_name]...") - Loadground(FailedZs, ground_map.map_name, ground_map.map_path, ground_map.map_file, ground_map.traits, ZTRAITS_GROUND) + var/ground_base_path = "maps/" + if(ground_map.override_map) + ground_base_path = "data/" + Loadground(FailedZs, ground_map.map_name, ground_map.map_path, ground_map.map_file, ground_map.traits, ZTRAITS_GROUND, override_map_path = ground_base_path) if(!ground_map.disable_ship_map) var/datum/map_config/ship_map = configs[SHIP_MAP] + var/ship_base_path = "maps/" + if(ship_map.override_map) + ship_base_path = "data/" INIT_ANNOUNCE("Loading [ship_map.map_name]...") - Loadship(FailedZs, ship_map.map_name, ship_map.map_path, ship_map.map_file, ship_map.traits, ZTRAITS_MAIN_SHIP) + Loadship(FailedZs, ship_map.map_name, ship_map.map_path, ship_map.map_file, ship_map.traits, ZTRAITS_MAIN_SHIP, override_map_path = ship_base_path) if(LAZYLEN(FailedZs)) //but seriously, unless the server's filesystem is messed up this will never happen var/msg = "RED ALERT! The following map files failed to load: [FailedZs[1]]" diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 58910c45af75..0e23b99a9cc2 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -424,7 +424,7 @@ SUBSYSTEM_DEF(ticker) for(var/mob/living/carbon/human/player in GLOB.human_mob_list) if(player.mind) - if(player.job == "Commanding Officers") + if(player.job == JOB_CO) captainless = FALSE if(player.job) RoleAuthority.equip_role(player, RoleAuthority.roles_by_name[player.job], late_join = FALSE) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 312a133f8724..b60b20bc9026 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -305,8 +305,14 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) S.fields["criminal"] = "None" S.fields["incident"] = "" S.fields["ref"] = WEAKREF(H) + + if(H.sec_record && !jobban_isbanned(H, "Records")) + var/new_comment = list("entry" = H.sec_record, "created_by" = list("name" = "\[REDACTED\]", "rank" = "Military Police"), "deleted_by" = null, "deleted_at" = null, "created_at" = "Pre-Deployment") + S.fields["comments"] = list("1" = new_comment) + S.fields["notes"] = H.sec_record security += S + //Locked Record var/datum/data/record/L = new() L.fields["id"] = md5("[H.real_name][H.job]") diff --git a/code/datums/effects/neurotoxin.dm b/code/datums/effects/neurotoxin.dm index 0405c87bec8b..836fccf49ca3 100644 --- a/code/datums/effects/neurotoxin.dm +++ b/code/datums/effects/neurotoxin.dm @@ -21,9 +21,8 @@ /// Stamina damage per tick. Major balance number. var/stam_dam = 7 -/datum/effects/neurotoxin/New(atom/thing) - ..(thing) - cause_data = create_cause_data("neurotoxic gas") +/datum/effects/neurotoxin/New(atom/thing, mob/from = null) + ..(thing, from, effect_name) /datum/effects/neurotoxin/validate_atom(atom/thing) if(isxeno(thing) || isobj(thing)) @@ -36,9 +35,10 @@ var/mob/living/carbon/affected_mob = affected_atom if(!.) return FALSE - if(affected_mob.stat) + if(affected_mob.stat == DEAD) return // General effects + affected_mob.last_damage_data = cause_data affected_mob.apply_stamina_damage(stam_dam) affected_mob.make_dizzy(12) diff --git a/code/datums/elements/bloody_feet.dm b/code/datums/elements/bloody_feet.dm index 6a5a8a23ac6b..3bcccd8377c6 100644 --- a/code/datums/elements/bloody_feet.dm +++ b/code/datums/elements/bloody_feet.dm @@ -24,12 +24,12 @@ H.bloody_footsteps = steps_to_take LAZYADD(entered_bloody_turf, target) - RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(target, COMSIG_HUMAN_BLOOD_CROSSED, PROC_REF(blood_crossed)) - RegisterSignal(target, COMSIG_HUMAN_CLEAR_BLOODY_FEET, PROC_REF(clear_blood)) + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved), override = TRUE) + RegisterSignal(target, COMSIG_HUMAN_BLOOD_CROSSED, PROC_REF(blood_crossed), override = TRUE) + RegisterSignal(target, COMSIG_HUMAN_CLEAR_BLOODY_FEET, PROC_REF(clear_blood), override = TRUE) if(shoes) LAZYSET(target_shoes, target, shoes) - RegisterSignal(shoes, COMSIG_ITEM_DROPPED, PROC_REF(on_shoes_removed)) + RegisterSignal(shoes, COMSIG_ITEM_DROPPED, PROC_REF(on_shoes_removed), override = TRUE) if(dry_time) addtimer(CALLBACK(src, PROC_REF(clear_blood), target), dry_time) diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index fcd301158b8f..52da1c967a00 100644 --- a/code/datums/emergency_calls/cmb.dm +++ b/code/datums/emergency_calls/cmb.dm @@ -154,7 +154,7 @@ to_chat(M, SPAN_BOLD("You are the Anchorpoint QRF Fireteam Leader, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) to_chat(M, SPAN_BOLD("You've served on The Station for [pick(50; "a Sol year, and a tour of duty", 40;"a couple months", 10;"six years, three tours")].")) to_chat(M, SPAN_BOLD("Living, training and working alongside Colonial Marshals at Anchorpoint Station has kept you well disciplined, and you've always felt proud to be the cavalry.")) - to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the USS Almayer, and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) + to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the [MAIN_SHIP_NAME], and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) to_chat(M, SPAN_BOLD("Working on conjunction with the Colonial Marshals on many incidents has created a comradery between your organizations. The Marshals handle investigations and policing, while you come in to get the job done during riots or incursions. Any job where heavy lifting was required, you were there.")) to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't...")) @@ -163,7 +163,7 @@ to_chat(M, SPAN_BOLD("You are the Anchorpoint QRF Team Smartgunner, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) to_chat(M, SPAN_BOLD("You've served on The Station for [pick(45; "a Sol year, and a tour of duty", 20;"a couple months", 5;"six long years, three consecutive tours")].")) to_chat(M, SPAN_BOLD("Living, training and working alongside Colonial Marshals at Anchorpoint Station has kept you well disciplined, and you've always felt proud to be the cavalry.")) - to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the USS Almayer, and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) + to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the [MAIN_SHIP_NAME], and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) to_chat(M, SPAN_BOLD("Working on conjunction with the Colonial Marshals on many incidents has created a comradery between your organizations. The Marshals handle investigations and policing, while you come in to get the job done during riots or incursions. Any job where heavy lifting was required, you were there.")) to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't... But you've been waiting for an excuse to let loose that M56.")) @@ -172,7 +172,7 @@ to_chat(M, SPAN_BOLD("You are the Anchorpoint QRF Team Corpsman, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) to_chat(M, SPAN_BOLD("You've served on The Station for [pick(45; "a Sol year, and a tour of duty", 20;"a couple months", 5;"six long years, three consecutive tours")].")) to_chat(M, SPAN_BOLD("Living, training and working alongside Colonial Marshals at Anchorpoint Station has kept you well disciplined, and you've always felt proud to be the cavalry.")) - to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the USS Almayer, and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) + to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the [MAIN_SHIP_NAME], and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) to_chat(M, SPAN_BOLD("Working on conjunction with the Colonial Marshals on many incidents has created a comradery between your organizations. The Marshals handle investigations and policing, while you come in to get the job done during riots or incursions. Any job where heavy lifting was required, you were there.")) to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't...")) @@ -181,7 +181,7 @@ to_chat(M, SPAN_BOLD("You are the Anchorpoint QRF Team Technical Specialist, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) to_chat(M, SPAN_BOLD("You've served on The Station for [pick(45; "a Sol year, and a tour of duty", 20;"a couple months", 5;"six long years, three consecutive tours")].")) to_chat(M, SPAN_BOLD("Living, training and working alongside Colonial Marshals at Anchorpoint Station has kept you well disciplined, and you've always felt proud to be the cavalry.")) - to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the USS Almayer, and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) + to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the [MAIN_SHIP_NAME], and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) to_chat(M, SPAN_BOLD("Working on conjunction with the Colonial Marshals on many incidents has created a comradery between your organizations. The Marshals handle investigations and policing, while you come in to get the job done during riots or incursions. Any job where heavy lifting was required, you were there.")) to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't...")) @@ -190,7 +190,7 @@ to_chat(M, SPAN_BOLD("You are a Rifleman of the Anchorpoint Team QRF, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) to_chat(M, SPAN_BOLD("You've served on The Station for [pick(45; "a Sol year, and a tour of duty", 20;"a couple months", 5;"six long years, three consecutive tours")].")) to_chat(M, SPAN_BOLD("Living, training and working alongside Colonial Marshals at Anchorpoint Station has kept you well disciplined, and you've always felt proud to be the cavalry.")) - to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the USS Almayer, and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) + to_chat(M, SPAN_BOLD("During your time at Anchorpoint, you [pick(20; "had your life saved by a Colonial Marshal", 20;"quelled a corporate riot", 10; "defended the station against a UPP incursion", 10;"experienced a pathogenic outbreak", 10;"assisted the Colonial Marshals during an enacted martial law", 10;"were deployed to the [MAIN_SHIP_NAME], and understand its layout", 10;"assisted the Colonial Marshals with barricaded fugitive situation", 5;"helped the ICC take down a suspected smuggling ring", 5;"helped take down a human trafficking scheme alongside the Colonial Marshals" )].")) to_chat(M, SPAN_BOLD("Working on conjunction with the Colonial Marshals on many incidents has created a comradery between your organizations. The Marshals handle investigations and policing, while you come in to get the job done during riots or incursions. Any job where heavy lifting was required, you were there.")) to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't...")) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 5b8ec289ded9..c4b1000bb07b 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -79,12 +79,12 @@ else return chosen_call -/datum/game_mode/proc/get_specific_call(call_name, announce = TRUE, is_emergency = TRUE, info = "") +/datum/game_mode/proc/get_specific_call(call_name, announce = TRUE, is_emergency = TRUE, info = "", announce_dispatch_message = TRUE) for(var/datum/emergency_call/E in all_calls) //Loop through all potential candidates if(E.name == call_name) var/datum/emergency_call/em_call = new E.type() em_call.objective_info = info - em_call.activate(announce, is_emergency) + em_call.activate(announce, is_emergency, announce_dispatch_message) return error("get_specific_call could not find emergency call '[call_name]'") return @@ -180,7 +180,7 @@ else to_chat(src, SPAN_WARNING("You did not get enlisted in the response team. Better luck next time!")) -/datum/emergency_call/proc/activate(announce = TRUE, turf/override_spawn_loc) +/datum/emergency_call/proc/activate(announce = TRUE, turf/override_spawn_loc, announce_dispatch_message = TRUE) set waitfor = 0 if(!SSticker.mode) //Something horribly wrong with the gamemode ticker return @@ -193,9 +193,9 @@ if(announce) marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg') - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), announce, override_spawn_loc), 30 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), announce, override_spawn_loc, announce_dispatch_message), 30 SECONDS) -/datum/emergency_call/proc/spawn_candidates(announce = TRUE, override_spawn_loc) +/datum/emergency_call/proc/spawn_candidates(announce = TRUE, override_spawn_loc, announce_dispatch_message = TRUE) if(SSticker.mode) SSticker.mode.picked_calls -= src @@ -236,7 +236,7 @@ if(I.current) to_chat(I.current, SPAN_WARNING("You didn't get selected to join the distress team. Better luck next time!")) - if(announce) + if(announce_dispatch_message) marine_announcement(dispatch_message, "Distress Beacon", 'sound/AI/distressreceived.ogg') //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT message_admins("Distress beacon: [src.name] finalized, setting up candidates.") diff --git a/code/datums/emergency_calls/forsaken_xenos.dm b/code/datums/emergency_calls/forsaken_xenos.dm index 5db02f52bc84..d089830658d9 100644 --- a/code/datums/emergency_calls/forsaken_xenos.dm +++ b/code/datums/emergency_calls/forsaken_xenos.dm @@ -6,12 +6,6 @@ name_of_spawn = /obj/effect/landmark/ert_spawns/groundside_xeno objectives = "You have been left behind to safeguard the abandoned colony. Do not allow trespassers." -/datum/emergency_call/forsaken_xenos/spawn_items() - var/turf/drop_spawn = get_spawn_point(TRUE) - if(istype(drop_spawn)) - //drop some weeds for xeno plasma regen. - new /obj/effect/alien/weeds/node/forsaken(drop_spawn) - /datum/emergency_call/forsaken_xenos/create_member(datum/mind/new_member, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() @@ -20,15 +14,9 @@ var/mob/current_mob = new_member.current - var/picked - var/mob/living/carbon/xenomorph/new_xeno - if(!leader) - picked = pick(/mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/lurker, /mob/living/carbon/xenomorph/spitter) - leader = new_xeno - else - picked = pick(/mob/living/carbon/xenomorph/drone, /mob/living/carbon/xenomorph/runner) + var/picked = pick_weight(list(/mob/living/carbon/xenomorph/warrior = 2, /mob/living/carbon/xenomorph/lurker = 2, /mob/living/carbon/xenomorph/spitter = 2, /mob/living/carbon/xenomorph/drone = 5, /mob/living/carbon/xenomorph/runner = 5)) - new_xeno = new picked(spawn_loc) + var/mob/living/carbon/xenomorph/new_xeno = new picked(spawn_loc) new_member.transfer_to(new_xeno, TRUE) diff --git a/code/datums/emergency_calls/provost.dm b/code/datums/emergency_calls/provost.dm index 65bbb9753da7..92c33706c178 100644 --- a/code/datums/emergency_calls/provost.dm +++ b/code/datums/emergency_calls/provost.dm @@ -4,9 +4,11 @@ name = "USCM Provost Enforcers" mob_max = 5 mob_min = 5 - objectives = "Deploy to the USS Almayer and enforce Marine Law." probability = 0 +/datum/emergency_call/provost_enforcer/New() + objectives = "Deploy to the [MAIN_SHIP_NAME] and enforce Marine Law." + return ..() /datum/emergency_call/provost_enforcer/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/T = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/emergency_calls/souto.dm b/code/datums/emergency_calls/souto.dm index 4ff4b03076fc..44aa5284b862 100644 --- a/code/datums/emergency_calls/souto.dm +++ b/code/datums/emergency_calls/souto.dm @@ -4,10 +4,13 @@ name = "Souto Man" mob_max = 1 mob_min = 1 - arrival_message = "Give a round of applause for the marine who sent in ten-thousand Souto tabs to get me here! USS Almayer, Souto Man's here to party with YOU!" objectives = "Party like it's 1999!" probability = 0 +/datum/emergency_call/souto/New() + arrival_message = "Give a round of applause for the marine who sent in ten-thousand Souto tabs to get me here! [MAIN_SHIP_NAME], Souto Man's here to party with YOU!" + return ..() + /datum/emergency_call/souto/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/fluff_emails.dm b/code/datums/fluff_emails.dm index 6dd8cd590860..f7083541dd5a 100644 --- a/code/datums/fluff_emails.dm +++ b/code/datums/fluff_emails.dm @@ -93,9 +93,9 @@ /datum/fluff_email/almayer/themajor title = "The Major?" entry_text = {" - I keep forgetting what the new Major's name is. I got quizzed by one of the jackass staff officers last week about the captain's name, - and I absolutely spilled my marbles. PCF Mable was watching too, and she probably thinks I've got rocks in my head. I know it's been weeks - since the new captain took over, but for some reason the name keeps escaping me when it matters. Either the cryo-sleepers are juicing my + I keep forgetting what the new Major's name is. I got quizzed by one of the jackass staff officers last week about the Major's name, + and I absolutely spilled my marbles. PFC Mable was watching too, and she probably thinks I've got rocks in my head. I know it's been weeks + since the new Major took over, but for some reason the name keeps escaping me when it matters. Either the cryo-sleepers are juicing my memory capacity or the CO keeps changing their name and not telling anybody. Maybe next jump I'll scrawl it on a sticky note and plaster it to the inside of my sleeper pod. I can't be the only one having this problem. @@ -105,7 +105,8 @@ /datum/fluff_email/almayer/tunes title = "RE: Tunes" entry_text = {" - Cryosleep is killing me, man. Inside and outside. I mean really, they expect us to sit in that tube for god only knows how long, and when we wake up? It's all 'grab a crappy protein bar and grab your gear, you're going to war, Marine!' Bullshit. + Cryosleep is killing me, man. Inside and outside. I mean really, they expect us to sit in that tube for god only knows how long, and when we wake up? + It's all 'grab a crappy protein bar and grab your gear, you're going to war, Marine!' Bullshit.

Anywho, I've been thinking how to make the whole thing more bearable. Tried to take a plush from the bunks with me inside. That dickwad MP took it away from me though, said it was against Operating Procedure. Like I care. Can't do anything fun around here, right? @@ -113,82 +114,81 @@ I don't usually use these things, and frankly that vendor near Medbay has waaay too many cassettes to choose from. Not that I know most songs on them anywho.

- I saw you with a Walkman from time to time, so... any chances you could recommend a tape to me? Or two, I'm not gonna be picky. Just anything to start out with, I just want some nice sounds. Please, I'm gonna go mad if I don't do something about my cryophobia or whatever. This might just help with that. + I saw you with a Walkman from time to time, so... any chances you could recommend a tape to me? Or two, I'm not gonna be picky. + Just anything to start out with, I just want some nice sounds. Please, I'm gonna go mad if I don't do something about my cryophobia or whatever. + This might just help with that. "} -/datum/fluff_email/almayer/lasergun - title = "RE: Lasergun" +/datum/fluff_email/almayer/lasergun1 + title = "Prototype Weapon" entry_text = {" - Hey REDACTED. Thanks for letting me test out the laser gun. That thing is a factual blast to use. It literally set the targets down range on fire! Those cooling coils work wonders. Used it a good few times and the barrel didn't explode! + This thing is an absolute blast to use. + It disintegrated some of the targets down range but you're going to need to work on those cooling coils. + I used it a few times and I'm seeing the front barrel glow red.

- Hell, it's even pretty accurate too. I know there's like, a couple of prototypes issued to some USCM detachments but we got to have this shit in production one day. It's just good. Now, I don't think it's gonna replace the old Mark two's but it would be a nice addition for some of our grunts that prefer the high tech approach. You know the ones, all nerdy and gadget loving geeks in the corps. Hell I can already hear them glossing over this thing in their sleep. + Surprisingly accurate too despite being a prototype. + I know there's like, a couple of prototypes issued to some USCM detachments, but we got to have this shit in production one day.

- Anyway, I've already attached the weapon report you wanted on this thing back to the email. Hopefully you guys in R&D will get some useful info out of it. + Even as a prototype, it's leagues better than some of the junk we're issued. + Now, I don't think it's going to replace the old Mark Twos, but it would be a nice addition for some of our grunts that prefer the high-tech approach.
- Alright see you when I see you - REDACTED
-
- RE:RE: The Plasma Gun (It's called the XM99 Phased Plasma Pulse Rifle) - Hey REDACTED, REDACTED here. Thanks for the report but I'm going to need you to send the Phased Plasma Pulse Rifle back to me. Apparently we're not allowed to ship them out for testing... I guess I must've missed that memo. The memo came three days after I shipped it out to you. Sorry for the inconvenience. You know where to send it back to and how to. I did tell you how right? There was a small pamphlet in the casing if you forgot. -
-
- Don't think this is going to be issued en masse for a while, it's still going under trials and when I got the weapon report you sent me, they sent in a new updated design for the gun which invalidated most of the things in the report, shame. Looks more promising than the last one though. -
-
- Okay, I'll hopefully be seeing the XM99 Phased Plasma Pulse Rifle in the lab soon. -
-
- REDACTED RE:RE:RE: The Plasma Gun (It's called the XM99 Phased Plasma Pulse Rifle) -
- Holy shit, what the fuck did you do to the damned thing? When I opened the case, I could see fractures and scratches everywhere! Did you give this to the entire platoon to try out? And from the data I'm reading, you fired over 178 shots with this. I only gave you two batteries for the thing. -
-
- How the hell did you recharge it?! The prototype can't take any other forms of power other than those two batteries. And even then, you can't recharge those specially made batteries either without the equipment back in the lab here. And the inside of the barrel is all messed up man. The cooling coils expired and there're bits of the barrel loose inside of it. How the hell did you not notice bits of the inside of the barrel spewing out from the muzzle man?! -
-
- Right. They've threatened to drop me from the project if something like this happens again. In the rare case that I send another prototype out, it had better come back in one piece. And I mean in pristine condition, you got that? -
-
Regards, -
REDACTED + You know the ones, all nerdy and gadget loving geeks in the corps. Hell, I can already hear them glossing over this thing in their sleep. + My report has been sent back to you and I'm really excited to see how this turns out. + + "} + + +/datum/fluff_email/almayer/lasergun2 + title = "New Prototype Design" + entry_text = {" + Thanks for sending the report in, we've been mulling over the data you sent over. + We've updated the design for the prototype which solves most of the problems everyone has encountered. + This one looks more promising than the last one. + And as much as everyone wants this done and shippped, I don't think this is going to be issued en masse for a good while. "} /datum/fluff_email/almayer/beatup - title = "RE: Beat Up" + title = "Beat Up" entry_text = {" - Yo. -
-
- Man, last mission was an absolute shit show. The USS Heyst got their shit kicked in with a missile and we got our cargo hold set on fire by that damn suicide craft. They even blew up most of our good ammo too! Now we're left with the soft point backup munitions. Shit, most of 1st platoon is pretty much out of action. Lotta folks are in sickbay and the rest of us are heading off to cryosleep, well what's left of us. -
-
- When the comms got cut and we were cut off from command; Squad Foxtrot was immediately ambushed on the logistics route to get supplies in and out of the combat zone. I suspect they were taping into your comms to find the literal perfect moment to fuck with our logistics. Thankfully those trucks of ours had their engines tricked out by the techies back on LV-176 in the civilian garage. Those guys hosted rally races around their colony and Sergeant DATA EXPUNGED won a few races for us. Instead of taking their trophy, he pulled a few favors to get our trucks pimped out with better engines. We owe our lives to Sarge for winning one for the corps. -
-
- Hell, at least we're all going back to Chinook Station to get resupplied. Hopefully the wounded wake up to the docs on station rather than our poor and cramped excuse for a medical bay. The number of times the medbay has been packed with wounded where even the damn front lobby had bodies lining up on the sides of the walls waiting for treatment; it still amazes. Worse still was the stench from all the blood and guts, it made it hell for the maint. techs to clean up afterwards. -
- I'm still surprised those doctors we had on hand took care of most of them so quickly, even if most of them are still injured heading to the fridge. -
-
- I read the After-Action Report which the Heyst's XO did, and they're leaving out a few details. When it came to that city, they left out how we had to DATA EXPUNGED. The entire building collapsed with them in it too. Damn shame we couldn't save them. -
-
- The only damn silver lining i see in this shit is that the AI is going to cycle cryo again and we ain't waking to deal with whatever bullshit is happening next time. 2nd Platoon is dealing with that, cause 1st platoon is undermanned as is with our casualties. I heard they have a few screws loose, not that ours are entirely in either! But I don't care, it's their problem now y'know? -
-
- Worst case scenario, we don't wake up at all. -
- Right, see you back on station friend. -
-
- Regards, -
- REDACTED + Man last mission was an absolute shit show. +
+ The USS Heyst got their shit kicked in with a missile and we got our cargo hold set on fire. And most of our good ammo is gone too! + Now we're left with the FMJs and the older AP munitions. What's worse is that most of 1st platoon is pretty much out of action. + Lotta folks are in the sickbay and the rest of us are heading off to cryosleep, well what's left of us. There's not many of the old guard left I'm afraid. + Until we get reinforced with more bodies, command has given the go ahead to merge 2nd platoon into 1st for the time being. + + "} + + +/datum/fluff_email/almayer/rallyrace + title = "Rally Racing" + entry_text = {" + Hey, remember last shore leave on LV-179? Man, that was one crazy night. The folks at the colony had setup a rally race with their tractors all stripped of non-essentials. + LCPL Millard got pretty friendly with the locals and got himself into the competition. + We all put in a little wager to see if he'd even get close to first place or even survive to the finish line. + Now most of the boys bet a fair amount against him since he was pretty new to our outfit, yet I've been out on detail with the guy. +
+
+ Millard grew up on one of those shake and bake colonies and used to drive the big daisies around. + He knew the ins and outs of what made them tick. The few of us who had faith in him reaped everyone else's + paycheck for the week with Millard finishing first place by a near country mile. "} + +/datum/fluff_email/almayer/missing + title = "Missing Personnel" + entry_text = {" + Has anyone seen Mendoza around? He owes me half of his paycheck from last month's poker game. + Everyone's payday was a week ago and we're all set to head back to Chinook station. + Could have sworn I saw him near the cargo elevator yesterday. + I'll catch him back at base once we've docked because I need that money to pay off my tab at the bar. + + "} + diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm index 65133a93d155..c37bf802f12b 100644 --- a/code/datums/map_config.dm +++ b/code/datums/map_config.dm @@ -23,9 +23,10 @@ var/traits = null var/space_empty_levels = 1 var/list/environment_traits = list() - var/armor_style = "default" var/list/gamemodes = list() + var/camouflage_type = "classic" + var/allow_custom_shuttles = TRUE var/shuttles = list() @@ -63,6 +64,9 @@ var/nightmare_path + /// If truthy this is config for a round overriden map: search for override maps in data/, instead of using a path in maps/ + var/override_map + /datum/map_config/New() survivor_types = list( /datum/equipment_preset/survivor/scientist, @@ -147,24 +151,35 @@ config_filename = filename + override_map = json["override_map"] + CHECK_EXISTS("map_name") map_name = json["map_name"] - CHECK_EXISTS("map_path") - map_path = json["map_path"] webmap_url = json["webmap_url"] short_name = json["short_name"] map_file = json["map_file"] + + var/dirpath = "maps/" + if(override_map) + dirpath = "data/" + map_path = "/" + map_file = OVERRIDE_MAPS_TO_FILENAME[maptype] + else + CHECK_EXISTS("map_path") + map_path = json["map_path"] + dirpath = "[dirpath]/[map_path]" + // "map_file": "BoxStation.dmm" if (istext(map_file)) - if (!fexists("maps/[map_path]/[map_file]")) + if (!fexists("[dirpath]/[map_file]")) log_world("Map file ([map_file]) does not exist!") return // "map_file": ["Lower.dmm", "Upper.dmm"] else if (islist(map_file)) for (var/file in map_file) - if (!fexists("maps/[map_path]/[file]")) + if (!fexists("[dirpath]/[file]")) log_world("Map file ([file]) does not exist!") return else @@ -303,8 +318,8 @@ allow_custom_shuttles = json["allow_custom_shuttles"] != FALSE - if(json["armor"]) - armor_style = json["armor"] + if(json["camouflage"]) + camouflage_type = json["camouflage"] if(json["survivor_message"]) survivor_message = json["survivor_message"] @@ -372,11 +387,14 @@ #undef CHECK_EXISTS /datum/map_config/proc/GetFullMapPaths() + var/dirpath = "maps/[map_path]" + if(override_map) + dirpath = "data/[map_path]" if (istext(map_file)) - return list("maps/[map_path]/[map_file]") + return list("[dirpath]/[map_file]") . = list() for (var/file in map_file) - . += "maps/[map_path]/[file]" + . += "[dirpath]/[file]" /datum/map_config/proc/MakeNextMap(maptype = GROUND_MAP) diff --git a/code/datums/skills.dm b/code/datums/skills.dm index 986b449f5ea9..ef86b726a3c1 100644 --- a/code/datums/skills.dm +++ b/code/datums/skills.dm @@ -873,7 +873,7 @@ SYNTHETIC /datum/skills/working_joe name = SYNTH_WORKING_JOE skills = list( - SKILL_CQC = SKILL_CQC_SKILLED, + SKILL_CQC = SKILL_CQC_EXPERT, SKILL_ENGINEER = SKILL_ENGINEER_MASTER, //So they can fully use the Maintenance Jack SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_POLICE = SKILL_POLICE_SKILLED, diff --git a/code/datums/supply_packs/ammo.dm b/code/datums/supply_packs/ammo.dm index bd0e57f4017b..e598a11be5e0 100644 --- a/code/datums/supply_packs/ammo.dm +++ b/code/datums/supply_packs/ammo.dm @@ -308,15 +308,17 @@ //------------------------Smartgunner stuff---------------- -/datum/supply_packs/ammo_smartgun_powerpack - name = "M56 smartgun powerpack crate (x2)" +/datum/supply_packs/ammo_smartgun_battery_pack + name = "M56 smartgun battery crate (x4)" contains = list( - /obj/item/smartgun_powerpack, - /obj/item/smartgun_powerpack, + /obj/item/smartgun_battery, + /obj/item/smartgun_battery, + /obj/item/smartgun_battery, + /obj/item/smartgun_battery, ) cost = 40 containertype = /obj/structure/closet/crate/ammo - containername = "\improper smartgun powerpacks crate" + containername = "\improper smartgun battery crate" group = "Ammo" /datum/supply_packs/ammo_smartgun diff --git a/code/datums/supply_packs/black_market.dm b/code/datums/supply_packs/black_market.dm index 7b036d592675..65b15997d1b4 100644 --- a/code/datums/supply_packs/black_market.dm +++ b/code/datums/supply_packs/black_market.dm @@ -257,16 +257,6 @@ Additionally, weapons that are way too good to put in the basically-flavor black containertype = /obj/structure/largecrate/black_market // Shotguns - -/datum/supply_packs/contraband/seized/sawny - name = "Sawn-off Spearhead Rival 78 crate (x1 ammo box included)" - contains = list( - /obj/item/weapon/gun/shotgun/double/damaged, //its not actually sawed off........... get fuked - /obj/item/ammo_magazine/shotgun/buckshot, - ) - dollar_cost = 45 - containertype = /obj/structure/largecrate/black_market - /datum/supply_packs/contraband/seized/custom name = "custom-built shotgun crate (x1 ammo box included)" contains = list( diff --git a/code/datums/supply_packs/operations.dm b/code/datums/supply_packs/operations.dm index cc4408659d09..610503d6c25d 100644 --- a/code/datums/supply_packs/operations.dm +++ b/code/datums/supply_packs/operations.dm @@ -101,6 +101,14 @@ group = "Operations" iteration_needed = null +/datum/supply_packs/technuclearbomb + name = "Intel Operational Nuke" + cost = 0 + containertype = /obj/structure/machinery/nuclearbomb/tech + buyable = 0 + group = "Operations" + iteration_needed = null + /datum/supply_packs/spec_kits name = "Weapons Specialist Kits" contains = list( diff --git a/code/game/area/LV522_Chances_Claim.dm b/code/game/area/LV522_Chances_Claim.dm index c19a13d26204..8a424148d3b5 100644 --- a/code/game/area/LV522_Chances_Claim.dm +++ b/code/game/area/LV522_Chances_Claim.dm @@ -28,6 +28,10 @@ is_resin_allowed = FALSE flags_area = AREA_NOTUNNEL +/area/lv522/oob/w_y_vault + name = "LV522 - Weyland Secure Vault" + icon_state = "blue" + //Landing Zone 1 /area/lv522/landing_zone_1 diff --git a/code/game/area/admin_level.dm b/code/game/area/admin_level.dm index 3a79546d177d..501047c46d08 100644 --- a/code/game/area/admin_level.dm +++ b/code/game/area/admin_level.dm @@ -110,9 +110,25 @@ /area/adminlevel/ert_station name = "ERT Station" icon_state = "green" - requires_power = 0 + requires_power = FALSE flags_area = AREA_NOTUNNEL +/area/adminlevel/ert_station/upp_station + name = "UPP Station" + icon_state = "green" + +/area/adminlevel/ert_station/clf_station + name = "CLF Station" + icon_state = "white" + +/area/adminlevel/ert_station/weyland_station + name = "Weyland-Yutani Station" + icon_state = "red" + +/area/adminlevel/ert_station/freelancer_station + name = "Freelancer Station" + icon_state = "yellow" + /area/adminlevel/ert_station/shuttle_dispatch name = "Shuttle Dispatch Station" soundscape_playlist = SCAPE_PL_ELEVATOR_MUSIC diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index e0464be1250e..2f6dc6e38118 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -214,6 +214,8 @@ Additional game mode variables. log_debug("Null client attempted to transform_predator") return + pred_candidate.client.prefs.find_assigned_slot(JOB_PREDATOR) // Probably does not do anything relevant, predator preferences are not tied to specific slot. + var/clan_id = CLAN_SHIP_PUBLIC var/datum/entity/clan_player/clan_info = pred_candidate?.client?.clan_info clan_info?.sync() @@ -352,7 +354,7 @@ Additional game mode variables. var/datum/hive_status/hive for(var/hivenumber in GLOB.hive_datum) hive = GLOB.hive_datum[hivenumber] - if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < 30 MINUTES + SSticker.round_start_time))) + if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time))) if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) available_xenos |= "any buried larva" LAZYADD(available_xenos["any buried larva"], hive) @@ -362,7 +364,27 @@ Additional game mode variables. available_xenos[larva_option] = list(hive) if(!available_xenos.len || (instant_join && !available_xenos_non_ssd.len)) - to_chat(xeno_candidate, SPAN_WARNING("There aren't any available xenomorphs or burrowed larvae. You can try getting spawned as a chestburster larva by toggling your Xenomorph candidacy in Preferences -> Toggle SpecialRole Candidacy.")) + if(!xeno_candidate.client || !xeno_candidate.client.prefs || !(xeno_candidate.client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) + to_chat(xeno_candidate, SPAN_WARNING("There aren't any available xenomorphs or burrowed larvae. You can try getting spawned as a chestburster larva by toggling your Xenomorph candidacy in Preferences -> Toggle SpecialRole Candidacy.")) + return FALSE + to_chat(xeno_candidate, SPAN_WARNING("There aren't any available xenomorphs or burrowed larvae.")) + + // Give the player a cached message of their queue status if they are an observer + var/mob/dead/observer/candidate_observer = xeno_candidate + if(istype(candidate_observer)) + if(candidate_observer.larva_queue_cached_message) + to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) + return FALSE + + // No cache, lets check now then + message_alien_candidates(get_alien_candidates(), dequeued = 0, cache_only = TRUE) + if(candidate_observer.larva_queue_cached_message) + to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) + return FALSE + + // We aren't in queue yet, lets teach them about the queue then + candidate_observer.larva_queue_cached_message = SPAN_XENONOTICE("You are currently still awaiting assignment in the larva queue. Priority is given to players who have yet to play in the round, but otherwise the ordering is based on your time of death. When you have been dead long enough and are not inactive, you will periodically receive messages where you are in the queue relative to other currently valid xeno candidates. Note: Playing as a facehugger or in the thunderdome will not alter your time of death. This means you won't lose your relative place in queue if you step away, disconnect, play as a facehugger, or play in the thunderdome.") + to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) return FALSE var/mob/living/carbon/xenomorph/new_xeno @@ -375,11 +397,11 @@ Additional game mode variables. if(!xeno_bypass_timer) var/deathtime = world.time - xeno_candidate.timeofdeath if(isnewplayer(xeno_candidate)) - deathtime = 2.5 MINUTES //so new players don't have to wait to latejoin as xeno in the round's first 5 mins. - if(deathtime < 2.5 MINUTES && !check_client_rights(xeno_candidate.client, R_ADMIN, FALSE)) + deathtime = XENO_JOIN_DEAD_LARVA_TIME //so new players don't have to wait to latejoin as xeno in the round's first 5 mins. + if(deathtime < XENO_JOIN_DEAD_LARVA_TIME && !check_client_rights(xeno_candidate.client, R_ADMIN, FALSE)) var/message = SPAN_WARNING("You have been dead for [DisplayTimeText(deathtime)].") to_chat(xeno_candidate, message) - to_chat(xeno_candidate, SPAN_WARNING("You must wait 2.5 minutes before rejoining the game as a buried larva!")) + to_chat(xeno_candidate, SPAN_WARNING("You must wait 2 minutes and 30 seconds before rejoining the game as a buried larva!")) return FALSE for(var/mob_name in picked_hive.banished_ckeys) @@ -391,7 +413,7 @@ Additional game mode variables. noob.close_spawn_windows() if(picked_hive.hive_location) picked_hive.hive_location.spawn_burrowed_larva(xeno_candidate) - else if((world.time < 30 MINUTES + SSticker.round_start_time)) + else if((world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time)) picked_hive.do_buried_larva_spawn(xeno_candidate) else to_chat(xeno_candidate, SPAN_WARNING("Seems like something went wrong. Try again?")) @@ -415,8 +437,8 @@ Additional game mode variables. if(!xeno_bypass_timer) var/deathtime = world.time - xeno_candidate.timeofdeath if(istype(xeno_candidate, /mob/new_player)) - deathtime = 5 MINUTES //so new players don't have to wait to latejoin as xeno in the round's first 5 mins. - if(deathtime < 5 MINUTES && !check_client_rights(xeno_candidate.client, R_ADMIN, FALSE)) + deathtime = XENO_JOIN_DEAD_TIME //so new players don't have to wait to latejoin as xeno in the round's first 5 mins. + if(deathtime < XENO_JOIN_DEAD_TIME && !check_client_rights(xeno_candidate.client, R_ADMIN, FALSE)) var/message = "You have been dead for [DisplayTimeText(deathtime)]." message = SPAN_WARNING("[message]") to_chat(xeno_candidate, message) diff --git a/code/game/gamemodes/cm_self_destruct.dm b/code/game/gamemodes/cm_self_destruct.dm index 59ed5b66b12f..8c022fd0d916 100644 --- a/code/game/gamemodes/cm_self_destruct.dm +++ b/code/game/gamemodes/cm_self_destruct.dm @@ -256,17 +256,18 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi ship_status = 0 //Destroyed. break - var/L1[] = new //Everyone who will be destroyed on the zlevel(s). - var/L2[] = new //Everyone who only needs to see the cinematic. - var/mob/M - var/turf/T - for(M in GLOB.player_list) //This only does something cool for the people about to die, but should prove pretty interesting. - if(!M || !M.loc) continue //In case something changes when we sleep(). - if(M.stat == DEAD) - L2 |= M - else if(M.z in z_levels) - L1 |= M - shake_camera(M, 110, 4) + var/list/alive_mobs = list() //Everyone who will be destroyed on the zlevel(s). + var/list/dead_mobs = list() //Everyone who only needs to see the cinematic. + for(var/mob/current_mob as anything in GLOB.mob_list) //This only does something cool for the people about to die, but should prove pretty interesting. + if(!current_mob || !current_mob.loc) + continue //In case something changes when we sleep(). + if(current_mob.stat == DEAD) + dead_mobs |= current_mob + continue + var/turf/current_turf = get_turf(current_mob) + if(current_turf.z in z_levels) + alive_mobs |= current_mob + shake_camera(current_mob, 110, 4) sleep(100) @@ -275,23 +276,23 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi var/atom/movable/screen/cinematic/explosion/C = new if(play_anim) - for(M in L1 + L2) - if(M && M.loc && M.client) - M.client.screen |= C //They may have disconnected in the mean time. + for(var/mob/current_mob as anything in alive_mobs + dead_mobs) + if(current_mob && current_mob.loc && current_mob.client) + current_mob.client.screen |= C //They may have disconnected in the mean time. sleep(15) //Extra 1.5 seconds to look at the ship. flick(override ? "intro_override" : "intro_nuke", C) sleep(35) - for(M in L1) - if(M && M.loc) //Who knows, maybe they escaped, or don't exist anymore. - T = get_turf(M) - if(T.z in z_levels) - if(istype(M.loc, /obj/structure/closet/secure_closet/freezer/fridge)) + for(var/mob/current_mob in alive_mobs) + if(current_mob && current_mob.loc) //Who knows, maybe they escaped, or don't exist anymore. + var/turf/current_mob_turf = get_turf(current_mob) + if(current_mob_turf.z in z_levels) + if(istype(current_mob.loc, /obj/structure/closet/secure_closet/freezer/fridge)) continue - M.death(create_cause_data("nuclear explosion")) + current_mob.death(create_cause_data("nuclear explosion")) else if(play_anim) - M.client.screen -= C //those who managed to escape the z level at last second shouldn't have their view obstructed. + current_mob.client.screen -= C //those who managed to escape the z level at last second shouldn't have their view obstructed. if(play_anim) flick(ship_status ? "ship_spared" : "ship_destroyed", C) C.icon_state = ship_status ? "summary_spared" : "summary_destroyed" @@ -369,7 +370,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi name = "self-destruct control panel" icon_state = "console_1" base_icon_state = "console" - req_one_access = list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_SENIOR) + req_one_access = list(ACCESS_MARINE_CO, ACCESS_MARINE_SENIOR) /obj/structure/machinery/self_destruct/console/Destroy() . = ..() diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm index 6fae17b6aac9..65dc2666070d 100644 --- a/code/game/gamemodes/colonialmarines/colonialmarines.dm +++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm @@ -272,7 +272,7 @@ continue if(groundside_humans > (groundside_xenos * GROUNDSIDE_XENO_MULTIPLIER)) - SSticker.mode.get_specific_call("Xenomorphs Groundside (Forsaken)", FALSE, FALSE) + SSticker.mode.get_specific_call("Xenomorphs Groundside (Forsaken)", FALSE, FALSE, announce_dispatch_message = FALSE) TIMER_COOLDOWN_START(src, COOLDOWN_HIJACK_GROUND_CHECK, 1 MINUTES) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 272d3b264040..c4a3070dea2d 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -82,13 +82,14 @@ return return 1 -/proc/get_centcom_access(job) - return get_all_centcom_access() +///Grants access to EVERYWHERE +/proc/get_global_access() + return get_all_marine_access() + get_all_main_access() +///Grants standard access for all factions, does not include high restrictions like COs office. +/proc/get_all_main_access() + return get_antagonist_access() + get_all_civilian_access() + get_all_weyland_access() -/proc/get_all_accesses() - return get_all_marine_access() + get_all_civilian_accesses() - -/proc/get_all_civilian_accesses() +/proc/get_all_civilian_access() return list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, @@ -99,9 +100,13 @@ ACCESS_CIVILIAN_COMMAND, ) +///Includes restricted accesses /proc/get_all_marine_access() + return list(ACCESS_MARINE_CO) + get_main_marine_access() + +///All Almayer accesses other than the highly restricted ones, such as CO's office. +/proc/get_main_marine_access() return list( - ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_SENIOR, ACCESS_MARINE_DATABASE, ACCESS_MARINE_COMMAND, @@ -138,25 +143,29 @@ ACCESS_PRESS, ) -/proc/get_all_centcom_access() +/proc/get_all_weyland_access() return list(ACCESS_WY_PMC_GREEN, ACCESS_WY_PMC_ORANGE, ACCESS_WY_PMC_RED, ACCESS_WY_PMC_BLACK, ACCESS_WY_PMC_WHITE, ACCESS_WY_CORPORATE) -/proc/get_all_syndicate_access() - return list(ACCESS_ILLEGAL_PIRATE) - +///CLF & UPP, UPP Commandos have global. /proc/get_antagonist_access() - return get_all_accesses() + get_all_syndicate_access() + return get_main_marine_access() + list(ACCESS_ILLEGAL_PIRATE) + +///Used by PMCs and elite mercs. +/proc/get_weyland_pmc_access() + return get_all_main_access() -/proc/get_antagonist_pmc_access() - return get_antagonist_access() +///This is only used by USCM ERTs at present +/proc/get_friendly_ert_access() + return get_main_marine_access() + get_all_civilian_access() -/proc/get_freelancer_access() +///Pizza and Souto +/proc/get_civil_ert_access() return list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_CARGO, ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_ENGINEERING, ACCESS_CIVILIAN_LOGISTICS) /proc/get_region_accesses(code) switch(code) if(0) - return get_all_accesses() + return get_all_main_access() if(1) return list(ACCESS_MARINE_CMP, ACCESS_MARINE_BRIG, ACCESS_MARINE_ARMORY) // Security if(2) @@ -166,7 +175,7 @@ if(4) return list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_OT, ACCESS_MARINE_MAINT) // Engineering if(5) - return list(ACCESS_MARINE_CAPTAIN, ACCESS_MARINE_SENIOR, ACCESS_MARINE_DATABASE, ACCESS_MARINE_COMMAND, ACCESS_MARINE_RO, ACCESS_MARINE_CARGO, ACCESS_MARINE_SEA, ACCESS_MARINE_SYNTH) // Command + return list(ACCESS_MARINE_CO, ACCESS_MARINE_SENIOR, ACCESS_MARINE_DATABASE, ACCESS_MARINE_COMMAND, ACCESS_MARINE_RO, ACCESS_MARINE_CARGO, ACCESS_MARINE_SEA, ACCESS_MARINE_SYNTH) // Command if(6) return list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_ENGPREP, ACCESS_MARINE_SMARTPREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_SPECPREP, ACCESS_MARINE_TL_PREP, ACCESS_MARINE_KITCHEN)//spess mahreens if(7) @@ -218,7 +227,7 @@ if(ACCESS_MARINE_ENGINEERING) return "[MAIN_SHIP_NAME] Engineering" if(ACCESS_MARINE_OT) return "[MAIN_SHIP_NAME] Ordnance Workshop" if(ACCESS_MARINE_SENIOR) return "[MAIN_SHIP_NAME] Senior Command" - if(ACCESS_MARINE_CAPTAIN) return "Commander's Quarters" + if(ACCESS_MARINE_CO) return "Commander's Quarters" if(ACCESS_MARINE_DATABASE) return "[MAIN_SHIP_NAME]'s Database" if(ACCESS_MARINE_COMMAND) return "[MAIN_SHIP_NAME] Command" if(ACCESS_MARINE_CREWMAN) return "Vehicle Crewman" @@ -248,7 +257,7 @@ if(ACCESS_MARINE_KITCHEN) return "Kitchen" if(ACCESS_MARINE_SYNTH) return "Synthetic Storage" -/proc/get_centcom_access_desc(A) +/proc/get_weyland_access_desc(A) switch(A) if(ACCESS_WY_PMC_GREEN) return "Wey-Yu PMC Green" if(ACCESS_WY_PMC_ORANGE) return "Wey-Yu PMC Orange" diff --git a/code/game/jobs/job/civilians/other/reporter.dm b/code/game/jobs/job/civilians/other/reporter.dm index c1cedbb3ecd2..c681768f93bc 100644 --- a/code/game/jobs/job/civilians/other/reporter.dm +++ b/code/game/jobs/job/civilians/other/reporter.dm @@ -25,9 +25,9 @@ /datum/job/civilian/reporter/generate_entry_message(mob/living/carbon/human/H) if(military) - . = {"The USCM has assigned you to the USS Almayer to better handle messaging on how things run in the Neroid Sector. Get out there and show the universe that the USCM is doing great things!"} + . = {"The USCM has assigned you to the [MAIN_SHIP_NAME] to better handle messaging on how things run in the Neroid Sector. Get out there and show the universe that the USCM is doing great things!"} else - . = {"What a scoop! You've been assigned to the USS Almayer to see what kinda mischief they'd get into and it seems trouble is here! + . = {"What a scoop! You've been assigned to the [MAIN_SHIP_NAME] to see what kinda mischief they'd get into and it seems trouble is here! This could be the story of the sector! 'Brave Marines responding to dangerous distress signal!' It'd surely get Mr. Parkerson to notice you in the office if you brought him a story like this!"} /obj/effect/landmark/start/reporter diff --git a/code/game/jobs/job/civilians/support/working_joe.dm b/code/game/jobs/job/civilians/support/working_joe.dm index 78c6ad2fcca4..d4b575f324f2 100644 --- a/code/game/jobs/job/civilians/support/working_joe.dm +++ b/code/game/jobs/job/civilians/support/working_joe.dm @@ -1,17 +1,53 @@ +#define STANDARD_VARIANT "Working Joe" +#define HAZMAT_VARIANT "Hazmat Joe" + /datum/job/civilian/working_joe title = JOB_WORKING_JOE - total_positions = 3 - spawn_positions = 3 - allow_additional = 1 - supervisors = "ARES and the acting commanding officer" + total_positions = 6 + spawn_positions = 6 + allow_additional = TRUE + scaled = TRUE + supervisors = "ARES and APOLLO" selection_class = "job_working_joe" flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_WHITELISTED|ROLE_CUSTOM_SPAWN flags_whitelist = WHITELIST_JOE gear_preset = /datum/equipment_preset/synth/working_joe - entry_message_body = "You are a Working Joe! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Synthetic Rules. Failure to do so may result in your White-list Removal. Your primary job is to maintain the cleanliness of the ship, putting things in their proper place. Your capacities are limited, but you have all the equipment you need, and the central AI has a plan!" + + job_options = list(STANDARD_VARIANT = "JOE", HAZMAT_VARIANT = "HAZ") + var/standard = TRUE + +/datum/job/civilian/working_joe/handle_job_options(option) + if(option != HAZMAT_VARIANT) + standard = TRUE + gear_preset = /datum/equipment_preset/synth/working_joe + else + standard = FALSE + gear_preset = /datum/equipment_preset/synth/working_joe/engi + +/datum/job/civilian/working_joe/set_spawn_positions(count) + spawn_positions = working_joe_slot_formula(count) + +/datum/job/civilian/working_joe/get_total_positions(latejoin = 0) + var/positions = spawn_positions + if(latejoin) + positions = working_joe_slot_formula(get_total_marines()) + if(positions <= total_positions_so_far) + positions = total_positions_so_far + else + total_positions_so_far = positions + else + total_positions_so_far = positions + return positions + +/datum/job/civilian/working_joe/generate_entry_message(mob/living/carbon/human/H) + if(standard) + . = {"You are a Working Joe. You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. Your primary task is to maintain the cleanliness of the ship, putting things in their proper place. Alternatively, your primary task may be to assist with manual labor in limited capacity, or clerical duties. Your capacities are limited, but you have all the equipment you need, and the central AI has a plan! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} + else + . = {"You are a Working Joe for Hazardous Environments! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. You are a variant of the Working Joe built for tougher environments and fulfill the specific duty of dangerous repairs or maintenance. Your primary task is to maintain the reactor, SMES and AI Core. Your secondary task is to respond to hazardous environments, such as an atmospheric breach or biohazard spill, and assist with repairs when ordered to by either an AI Mainframe, or a Commisioned Officer. You should not be seen outside of emergencies besides in Engineering and the AI Core! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} + /datum/job/civilian/working_joe/announce_entry_message(mob/living/carbon/human/H) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ai_announcement), "[H.real_name] has been deployed to help with operations."), 1.5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ai_announcement), "[H.real_name] has been activated."), 1.5 SECONDS) return ..() /obj/effect/landmark/start/working_joe diff --git a/code/game/jobs/job/command/cic/captain.dm b/code/game/jobs/job/command/cic/captain.dm index 23084d0c5f72..4049554f7799 100644 --- a/code/game/jobs/job/command/cic/captain.dm +++ b/code/game/jobs/job/command/cic/captain.dm @@ -6,7 +6,6 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADMIN_NOTIFY|ROLE_WHITELISTED flags_whitelist = WHITELIST_COMMANDER gear_preset = /datum/equipment_preset/uscm_ship/commander - entry_message_body = "You are the Commanding Officer of the USS Almayer as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." /datum/job/command/commander/New() . = ..() @@ -16,6 +15,10 @@ "[JOB_CO][WHITELIST_LEADER]" = /datum/equipment_preset/uscm_ship/commander/council/plus ) +/datum/job/command/commander/generate_entry_message() + entry_message_body = "You are the Commanding Officer of the [MAIN_SHIP_NAME] as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." + return ..() + /datum/job/command/commander/get_whitelist_status(list/roles_whitelist, client/player) . = ..() if(!.) diff --git a/code/game/jobs/job/command/cic/executive.dm b/code/game/jobs/job/command/cic/executive.dm index d8691e1df4cf..cc9b4f65e624 100644 --- a/code/game/jobs/job/command/cic/executive.dm +++ b/code/game/jobs/job/command/cic/executive.dm @@ -3,9 +3,9 @@ title = JOB_XO flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADMIN_NOTIFY gear_preset = /datum/equipment_preset/uscm_ship/xo - entry_message_body = "You are second in command aboard the ship, and are in next in the chain of command after the commanding officer. You may need to fill in for other duties if areas are understaffed, and you are given access to do so. Make the USCM proud!" /datum/job/command/executive/generate_entry_message(mob/living/carbon/human/H) + entry_message_body = "You are second in command aboard the [MAIN_SHIP_NAME], and are in next in the chain of command after the Commanding Officer. Where applicable, you must abide by the Commanding Officer Code of Conduct. You may need to fill in for other duties if areas are understaffed, and you are given access to do so. Make the USCM proud!" return ..() /datum/job/command/executive/generate_entry_conditions(mob/living/M, whitelist_status) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 3ef06ecfd576..b860667486be 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -221,7 +221,7 @@ var/mob/living/carbon/human/new_character = new(NP.loc) new_character.lastarea = get_area(NP.loc) - NP.client.prefs.copy_all_to(new_character) + NP.client.prefs.copy_all_to(new_character, title) if (NP.client.prefs.be_random_body) var/datum/preferences/TP = new() diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index a241bf259913..b909c38cd9e6 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -23,7 +23,7 @@ var/global/datum/authority/branch/role/RoleAuthority #define MED_PRIORITY 2 #define LOW_PRIORITY 3 -#define SHIPSIDE_ROLE_WEIGHT 0.5 +#define SHIPSIDE_ROLE_WEIGHT 0.25 var/global/players_preassigned = 0 diff --git a/code/game/jobs/slot_scaling.dm b/code/game/jobs/slot_scaling.dm index 7e6b0140531b..7230f57eb745 100644 --- a/code/game/jobs/slot_scaling.dm +++ b/code/game/jobs/slot_scaling.dm @@ -47,3 +47,6 @@ /proc/synth_slot_formula(playercount) return job_slot_formula(playercount,120,1,1,2) + +/proc/working_joe_slot_formula(playercount) + return job_slot_formula(playercount,30,1,3,6) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index fecedda22a14..8fa0b9b86a0c 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -11,6 +11,7 @@ unslashable = TRUE var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled. var/processing = FALSE //Set to true if computer needs to do /process() + var/deconstructible = TRUE var/exproof = 0 /obj/structure/machinery/computer/Initialize() @@ -96,6 +97,9 @@ /obj/structure/machinery/computer/attackby(obj/item/I, mob/user) if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER) && circuit) + if(!deconstructible) + to_chat(user, SPAN_WARNING("You can't figure out how to deconstruct [src]...")) + return if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) to_chat(user, SPAN_WARNING("You don't know how to deconstruct [src]...")) return diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm index 6cefa28a2c95..9856ae8f970e 100644 --- a/code/game/machinery/computer/groundside_operations.dm +++ b/code/game/machinery/computer/groundside_operations.dm @@ -286,7 +286,7 @@ usr.RegisterSignal(cam, COMSIG_PARENT_QDELETING, TYPE_PROC_REF(/mob, reset_observer_view_on_deletion)) if("activate_echo") - var/reason = input(usr, "What is the purpose of Echo Squad?", "Activation Reason") + var/reason = strip_html(input(usr, "What is the purpose of Echo Squad?", "Activation Reason")) if(!reason) return if(alert(usr, "Confirm activation of Echo Squad for [reason]", "Confirm Activation", "Yes", "No") != "Yes") return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 5ba958ad95fe..ed06c0117f33 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -185,6 +185,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li flags_atom |= USES_HEARING /obj/structure/machinery/cryopod/Destroy() + SetLuminosity(0) QDEL_NULL(occupant) QDEL_NULL(announce) . = ..() @@ -367,6 +368,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li qdel(G) icon_state = "body_scanner_open" + SetLuminosity(0) if(occupant.key) occupant.ghostize(0) @@ -507,6 +509,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li M.forceMove(src) occupant = M icon_state = "body_scanner_closed" + SetLuminosity(2) time_entered = world.time start_processing() @@ -527,6 +530,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li occupant = null stop_processing() icon_state = "body_scanner_open" + SetLuminosity(0) playsound(src, 'sound/machines/pod_open.ogg', 30) #ifdef OBJECTS_PROXY_SPEECH diff --git a/code/game/machinery/groundmap_geothermal.dm b/code/game/machinery/groundmap_geothermal.dm index 6714e3ef669b..4be9c53f0094 100644 --- a/code/game/machinery/groundmap_geothermal.dm +++ b/code/game/machinery/groundmap_geothermal.dm @@ -198,6 +198,9 @@ else return ..() //Deal with everything else, like hitting with stuff +/obj/structure/machinery/power/geothermal/ex_act(severity, direction) + return FALSE //gameplay-wise these should really never go away + //Putting these here since it's power-related /obj/structure/machinery/colony_floodlight_switch name = "Colony Floodlight Switch" diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 7dcdb9e39914..6c0ec4cc0389 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -55,31 +55,35 @@ var/bomb_set = FALSE /obj/structure/machinery/nuclearbomb/process() . = ..() - if(timing) - bomb_set = TRUE //So long as there is one nuke timing, it means one nuke is armed. - timeleft = explosion_time - world.time - if(world.time >= explosion_time) - explode() - //3 warnings: 1. Halfway through, 2. 1 minute left, 3. 10 seconds left. - //this structure allows varedits to var/timeleft without losing or spamming warnings. - else if(timer_announcements_flags) - if(timer_announcements_flags & NUKE_SHOW_TIMER_HALF) - if(timeleft <= initial(timeleft) / 2 && timeleft >= initial(timeleft) / 2 - 30) - announce_to_players(NUKE_SHOW_TIMER_HALF) - timer_announcements_flags &= ~NUKE_SHOW_TIMER_HALF - return - if(timer_announcements_flags & NUKE_SHOW_TIMER_MINUTE) - if(timeleft <= 600 && timeleft >= 570) - announce_to_players(NUKE_SHOW_TIMER_MINUTE) - timer_announcements_flags = NUKE_SHOW_TIMER_TEN_SEC - return - if(timer_announcements_flags & NUKE_SHOW_TIMER_TEN_SEC) - if(timeleft <= 100 && timeleft >= 70) - announce_to_players(NUKE_SHOW_TIMER_TEN_SEC) - timer_announcements_flags = 0 - return - else - stop_processing() + if(!timing) + update_minimap_icon() + return PROCESS_KILL + + bomb_set = TRUE //So long as there is one nuke timing, it means one nuke is armed. + timeleft = explosion_time - world.time + if(world.time >= explosion_time) + explode() + return + //3 warnings: 1. Halfway through, 2. 1 minute left, 3. 10 seconds left. + //this structure allows varedits to var/timeleft without losing or spamming warnings. + if(!timer_announcements_flags) + return + + if(timer_announcements_flags & NUKE_SHOW_TIMER_HALF) + if(timeleft <= initial(timeleft) / 2 && timeleft >= initial(timeleft) / 2 - 30) + announce_to_players(NUKE_SHOW_TIMER_HALF) + timer_announcements_flags &= ~NUKE_SHOW_TIMER_HALF + return + if(timer_announcements_flags & NUKE_SHOW_TIMER_MINUTE) + if(timeleft <= 600 && timeleft >= 570) + announce_to_players(NUKE_SHOW_TIMER_MINUTE) + timer_announcements_flags = NUKE_SHOW_TIMER_TEN_SEC + return + if(timer_announcements_flags & NUKE_SHOW_TIMER_TEN_SEC) + if(timeleft <= 100 && timeleft >= 70) + announce_to_players(NUKE_SHOW_TIMER_TEN_SEC) + timer_announcements_flags = 0 + return /obj/structure/machinery/nuclearbomb/attack_alien(mob/living/carbon/xenomorph/M) INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, attack_hand), M) @@ -87,10 +91,10 @@ var/bomb_set = FALSE /obj/structure/machinery/nuclearbomb/attackby(obj/item/O as obj, mob/user as mob) if(anchored && timing && bomb_set && HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS)) - user.visible_message(SPAN_DANGER("[user] begins to defuse \the [src]."), SPAN_DANGER("You begin to defuse \the [src]. This will take some time...")) + user.visible_message(SPAN_INFO("[user] begins to defuse \the [src]."), SPAN_INFO("You begin to defuse \the [src]. This will take some time...")) if(do_after(user, 150 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) disable() - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) return ..() @@ -103,12 +107,12 @@ var/bomb_set = FALSE if(deployable) if(!ishuman(user) && !isqueen(user)) - to_chat(usr, SPAN_DANGER("You don't have the dexterity to do this!")) + to_chat(usr, SPAN_INFO("You don't have the dexterity to do this!")) return if(isqueen(user)) if(timing && bomb_set) - user.visible_message(SPAN_DANGER("[user] begins to defuse \the [src]."), SPAN_DANGER("You begin to defuse \the [src]. This will take some time...")) + user.visible_message(SPAN_INFO("[user] begins to defuse \the [src]."), SPAN_INFO("You begin to defuse \the [src]. This will take some time...")) if(do_after(user, 5 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) disable() return @@ -162,37 +166,38 @@ var/bomb_set = FALSE if(timing == -1) return - if(!ishuman(usr)) + if(!ishuman(ui.user)) return - if(!allowed(usr)) - to_chat(usr, SPAN_DANGER("Access denied!")) + if(!allowed(ui.user)) + to_chat(ui.user, SPAN_INFO("Access denied!")) return if(!anchored) - to_chat(usr, SPAN_DANGER("Engage anchors first!")) + to_chat(ui.user, SPAN_INFO("Engage anchors first!")) return if(safety) - to_chat(usr, SPAN_DANGER("The safety is still on.")) + to_chat(ui.user, SPAN_INFO("The safety is still on.")) return if(!A.can_build_special) - to_chat(usr, SPAN_DANGER("You cannot deploy [src] here!")) + to_chat(ui.user, SPAN_INFO("You cannot deploy [src] here!")) return - if(usr.action_busy) + if(ui.user.action_busy) return - usr.visible_message(SPAN_WARNING("[usr] begins to [timing ? "disengage" : "engage"] [src]!"), SPAN_WARNING("You begin to [timing ? "disengage" : "engage"] [src].")) + ui.user.visible_message(SPAN_WARNING("[ui.user] begins to [timing ? "disengage" : "engage"] [src]!"), SPAN_WARNING("You begin to [timing ? "disengage" : "engage"] [src].")) being_used = TRUE - ui = SStgui.try_update_ui(usr, src, ui) - if(do_after(usr, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) + ui = SStgui.try_update_ui(ui.user, src, ui) + if(do_after(ui.user, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) timing = !timing if(timing) if(!safety) bomb_set = TRUE explosion_time = world.time + timeleft + update_minimap_icon() start_processing() announce_to_players() message_admins("\The [src] has been activated by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") @@ -201,28 +206,28 @@ var/bomb_set = FALSE else disable() message_admins("\The [src] has been deactivated by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") - playsound(src.loc, 'sound/effects/thud.ogg', 100, 1) + playsound(loc, 'sound/effects/thud.ogg', 100, 1) being_used = FALSE . = TRUE if("toggleSafety") - if(!allowed(usr)) - to_chat(usr, SPAN_DANGER("Access denied!")) + if(!allowed(ui.user)) + to_chat(ui.user, SPAN_INFO("Access denied!")) return if(timing) - to_chat(usr, SPAN_DANGER("Disengage first!")) + to_chat(ui.user, SPAN_INFO("Disengage first!")) return if(!A.can_build_special) - to_chat(usr, SPAN_DANGER("You cannot deploy [src] here!")) + to_chat(ui.user, SPAN_INFO("You cannot deploy [src] here!")) return - if(usr.action_busy) + if(ui.user.action_busy) return - usr.visible_message(SPAN_WARNING("[usr] begins to [safety ? "disable" : "enable"] the safety on [src]!"), SPAN_WARNING("You begin to [safety ? "disable" : "enable"] the safety on [src].")) + ui.user.visible_message(SPAN_WARNING("[ui.user] begins to [safety ? "disable" : "enable"] the safety on [src]!"), SPAN_WARNING("You begin to [safety ? "disable" : "enable"] the safety on [src].")) being_used = TRUE - ui = SStgui.try_update_ui(usr, src, ui) - if(do_after(usr, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) + ui = SStgui.try_update_ui(ui.user, src, ui) + if(do_after(ui.user, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) safety = !safety - playsound(src.loc, 'sound/items/poster_being_created.ogg', 100, 1) + playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) being_used = FALSE if(safety) timing = FALSE @@ -230,63 +235,55 @@ var/bomb_set = FALSE . = TRUE if("toggleCommandLockout") - if(!ishuman(usr)) + if(!ishuman(ui.user)) return - if(!allowed(usr)) - to_chat(usr, SPAN_DANGER("Access denied!")) + if(!allowed(ui.user)) + to_chat(ui.user, SPAN_INFO("Access denied!")) return if(command_lockout) command_lockout = FALSE req_one_access = list() - to_chat(usr, SPAN_DANGER("Command lockout disengaged.")) + to_chat(ui.user, SPAN_INFO("Command lockout disengaged.")) else //Check if they have command access var/list/acc = list() - var/mob/living/carbon/human/H = usr + var/mob/living/carbon/human/H = ui.user if(H.wear_id) acc += H.wear_id.GetAccess() if(H.get_active_hand()) acc += H.get_active_hand().GetAccess() if(!(ACCESS_MARINE_COMMAND in acc)) - to_chat(usr, SPAN_DANGER("Access denied!")) + to_chat(ui.user, SPAN_INFO("Access denied!")) return command_lockout = TRUE req_one_access = list(ACCESS_MARINE_COMMAND) - to_chat(usr, SPAN_DANGER("Command lockout engaged.")) + to_chat(ui.user, SPAN_INFO("Command lockout engaged.")) . = TRUE if("toggleAnchor") if(timing) - to_chat(usr, SPAN_DANGER("Disengage first!")) + to_chat(ui.user, SPAN_INFO("Disengage first!")) return if(!A.can_build_special) - to_chat(usr, SPAN_DANGER("You cannot deploy [src] here!")) + to_chat(ui.user, SPAN_INFO("You cannot deploy [src] here!")) return - if(usr.action_busy) + if(ui.user.action_busy) return being_used = TRUE - ui = SStgui.try_update_ui(usr, src, ui) - if(do_after(usr, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) + ui = SStgui.try_update_ui(ui.user, src, ui) + if(do_after(ui.user, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) if(!anchored) - visible_message(SPAN_DANGER("With a steely snap, bolts slide out of [src] and anchor it to the flooring.")) + visible_message(SPAN_INFO("With a steely snap, bolts slide out of [src] and anchor it to the flooring.")) else - visible_message(SPAN_DANGER("The anchoring bolts slide back into the depths of [src].")) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 100, 1) + visible_message(SPAN_INFO("The anchoring bolts slide back into the depths of [src].")) + playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1) anchored = !anchored being_used = FALSE . = TRUE update_icon() - add_fingerprint(usr) - -/obj/structure/machinery/nuclearbomb/start_processing() - . = ..() - update_minimap_icon() - -/obj/structure/machinery/nuclearbomb/stop_processing() - . = ..() - update_minimap_icon() + add_fingerprint(ui.user) /obj/structure/machinery/nuclearbomb/verb/make_deployable() set category = "Object" @@ -297,12 +294,12 @@ var/bomb_set = FALSE return if(!ishuman(usr)) - to_chat(usr, SPAN_DANGER("You don't have the dexterity to do this!")) + to_chat(usr, SPAN_INFO("You don't have the dexterity to do this!")) return var/area/A = get_area(src) if(!A.can_build_special) - to_chat(usr, SPAN_DANGER("You don't want to deploy this here!")) + to_chat(usr, SPAN_INFO("You don't want to deploy this here!")) return usr.visible_message(SPAN_WARNING("[usr] begins to [deployable ? "close" : "adjust"] several panels to make [src] [deployable ? "undeployable" : "deployable"]."), SPAN_WARNING("You begin to [deployable ? "close" : "adjust"] several panels to make [src] [deployable ? "undeployable" : "deployable"].")) @@ -314,26 +311,25 @@ var/bomb_set = FALSE else deployable = TRUE anchored = TRUE - playsound(src.loc, 'sound/items/Deconstruct.ogg', 100, 1) + playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1) being_used = FALSE update_icon() //unified all announcements to one proc /obj/structure/machinery/nuclearbomb/proc/announce_to_players(timer_warning) + + var/list/humans_other = GLOB.human_mob_list + GLOB.dead_mob_list + var/list/humans_uscm = list() + for(var/mob/current_mob as anything in humans_other) + if(current_mob.stat != CONSCIOUS || isyautja(current_mob)) + humans_other -= current_mob + continue + if(current_mob.faction == FACTION_MARINE || current_mob.faction == FACTION_SURVIVOR) //separating marines from other factions. Survs go here too + humans_uscm += current_mob + humans_other -= current_mob + if(timer_warning) //we check for timer warnings first - //humans part - var/list/humans_other = GLOB.human_mob_list + GLOB.dead_mob_list - var/list/humans_USCM = list() - for(var/mob/M in humans_other) - var/mob/living/carbon/human/H = M - if(istype(H)) //if it's unconsious human or yautja, we remove them - if(H.stat != CONSCIOUS || isyautja(H)) - humans_other.Remove(M) - continue - if(M.faction == FACTION_MARINE || M.faction == FACTION_SURVIVOR) //separating marines from other factions. Survs go here too - humans_USCM += M - humans_other -= M - announcement_helper("WARNING.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_USCM, 'sound/misc/notice1.ogg') + announcement_helper("WARNING.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("WARNING.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') //preds part var/t_left = duration2text_sec(round(rand(timeleft - timeleft / 10, timeleft + timeleft / 10))) @@ -354,21 +350,9 @@ var/bomb_set = FALSE xeno_announcement(SPAN_XENOANNOUNCE(warning), hive.hivenumber, XENO_GENERAL_ANNOUNCE) return - //deal with start/stop announcements for players - var/list/humans_other = GLOB.human_mob_list + GLOB.dead_mob_list - var/list/humans_USCM = list() - for(var/mob/M in humans_other) - var/mob/living/carbon/human/H = M - if(istype(H)) //if it's unconsious human or yautja, we remove them - if(H.stat != CONSCIOUS || isyautja(H)) - humans_other.Remove(M) - continue - if(M.faction == FACTION_MARINE || M.faction == FACTION_SURVIVOR) //separating marines from other factions. Survs go here too - humans_USCM += M - humans_other -= M var/datum/hive_status/hive if(timing) - announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE ACTIVATED.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_USCM, 'sound/misc/notice1.ogg') + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE ACTIVATED.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE ACTIVATED.\n\nDETONATION IN [round(timeleft/10)] SECONDS.", "HQ Nuclear Tracker", humans_other, 'sound/misc/notice1.ogg') var/t_left = duration2text_sec(round(rand(timeleft - timeleft / 10, timeleft + timeleft / 10))) yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human Purification Device has been detected. You have approximately [t_left] to abandon the hunting grounds before it activates.")) @@ -378,7 +362,7 @@ var/bomb_set = FALSE continue xeno_announcement(SPAN_XENOANNOUNCE("The tallhosts have deployed a hive killer at [get_area_name(loc)]! Stop it at all costs!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) else - announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DEACTIVATED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_USCM, 'sound/misc/notice1.ogg') + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DEACTIVATED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DEACTIVATED.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human Purification Device's signature has disappeared.")) for(var/hivenumber in GLOB.hive_datum) @@ -401,6 +385,7 @@ var/bomb_set = FALSE /obj/structure/machinery/nuclearbomb/proc/explode() if(safety) timing = FALSE + update_minimap_icon() stop_processing() update_icon() return FALSE @@ -422,3 +407,200 @@ var/bomb_set = FALSE bomb_set = FALSE SSminimaps.remove_marker(src) return ..() + +/obj/structure/machinery/nuclearbomb/tech + var/decryption_time = 10 MINUTES + var/decryption_end_time = null + var/decrypting = FALSE + + timeleft = 1 MINUTES + timer_announcements_flags = NUKE_DECRYPT_SHOW_TIMER_ALL + + var/list/linked_decryption_towers + +/obj/structure/machinery/nuclearbomb/tech/Initialize(mapload) + . = ..() + + linked_decryption_towers = list() + + return INITIALIZE_HINT_LATELOAD + +/obj/structure/machinery/nuclearbomb/tech/LateInitialize() + . = ..() + + for(var/obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/possible_telecomm in GLOB.all_static_telecomms_towers) + if(is_ground_level(possible_telecomm.z)) + linked_decryption_towers += possible_telecomm + + RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_TELECOMM_TURNED_OFF, PROC_REF(connected_comm_shutdown)) + +/obj/structure/machinery/nuclearbomb/tech/ui_data(mob/user) + . = ..() + + .["decrypting"] = decrypting + .["decryption_time"] = duration2text_sec(decryption_time) + + .["decryption_complete"] = decryption_time ? FALSE : TRUE + +/obj/structure/machinery/nuclearbomb/tech/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if(..()) + return + + switch(action) + if("toggleEncryption") + if(!ishuman(ui.user)) + return + + if(!allowed(ui.user)) + to_chat(ui.user, SPAN_INFO("Access denied!")) + return + + if(!anchored) + to_chat(ui.user, SPAN_INFO("Engage anchors first!")) + return + + var/area/current_area = get_area(src) + if(!current_area.can_build_special) + to_chat(ui.user, SPAN_INFO("You cannot deploy [src] here!")) + return + + if(is_ground_level(z)) + for(var/obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/telecomm_unit in linked_decryption_towers) + if(!telecomm_unit.on) + to_chat(ui.user, SPAN_INFO("The groundside telecommunication relays must be activated!")) + return + + if(ui.user.action_busy) + return + + if(being_used) + return + + ui.user.visible_message(SPAN_WARNING("[ui.user] begins to [decrypting ? "stop the decryption process." : "start decrypting."]!"), SPAN_WARNING("You begin to [decrypting ? "stop the decryption process." : "start decrypting."].")) + being_used = TRUE + ui = SStgui.try_update_ui(ui.user, src, ui) + if(do_after(ui.user, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) + decrypting = !decrypting + if(decrypting) + //add signal handlers + decryption_end_time = world.time + decryption_time + start_processing() + announce_to_players() + message_admins("[src]'s encryption process has been started by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") + else + //remove signal handlers + decryption_end_time = null + announce_to_players() + message_admins("[src]'s encryption process has been deactivated by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") + playsound(loc, 'sound/effects/thud.ogg', 100, 1) + being_used = FALSE + return TRUE + +/obj/structure/machinery/nuclearbomb/tech/process() + if(!decrypting) + return ..() + + decryption_time = decryption_end_time - world.time + + if(world.time > decryption_end_time) + decrypting = FALSE + decryption_time = 0 + announce_to_players(NUKE_DECRYPT_SHOW_TIMER_COMPLETE) + timer_announcements_flags &= ~NUKE_DECRYPT_SHOW_TIMER_COMPLETE + return PROCESS_KILL + + if(!timer_announcements_flags) + return + + if(timer_announcements_flags & NUKE_DECRYPT_SHOW_TIMER_HALF) + if(decryption_time <= initial(decryption_time) / 2 && decryption_time >= initial(decryption_time) / 2 - 30) + announce_to_players(NUKE_DECRYPT_SHOW_TIMER_HALF) + timer_announcements_flags &= ~NUKE_DECRYPT_SHOW_TIMER_HALF + return + if(timer_announcements_flags & NUKE_DECRYPT_SHOW_TIMER_MINUTE) + if(decryption_time <= 600 && decryption_time >= 570) + announce_to_players(NUKE_DECRYPT_SHOW_TIMER_MINUTE) + timer_announcements_flags &= ~NUKE_DECRYPT_SHOW_TIMER_MINUTE + return + +/obj/structure/machinery/nuclearbomb/tech/announce_to_players(timer_warning) + if(!decryption_time && (timer_warning != NUKE_DECRYPT_SHOW_TIMER_COMPLETE)) + return ..() + + var/list/humans_other = GLOB.human_mob_list + GLOB.dead_mob_list + var/list/humans_uscm = list() + for(var/mob/current_mob as anything in humans_other) + var/mob/living/carbon/human/current_human = current_mob + if(istype(current_human)) //if it's unconsious human or yautja, we remove them + if(current_human.stat != CONSCIOUS || isyautja(current_human)) + humans_other -= current_mob + continue + if(current_mob.faction == FACTION_MARINE || current_mob.faction == FACTION_SURVIVOR) + humans_uscm += current_mob + humans_other -= current_mob + + if(timer_warning) + if(timer_warning == NUKE_DECRYPT_SHOW_TIMER_COMPLETE) + announcement_helper("DECRYPTION COMPLETE", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') + announcement_helper("DECRYPTION COMPLETE", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') + + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nThe human Purification Device is able to be activated.")) + + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!length(hive.totalXenos)) + return + xeno_announcement(SPAN_XENOANNOUNCE("The hive killer is ready to be activated! Assault at once!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + return + + announcement_helper("DECRYPTION IN [round(decryption_time/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') + announcement_helper("DECRYPTION IN [round(decryption_time/10)] SECONDS.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') + + //preds part + var/time_left = duration2text_sec(round(rand(decryption_time - decryption_time / 10, decryption_time + decryption_time / 10))) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!\n\nYou have approximately [time_left] seconds to abandon the hunting grounds before human Purification Device is able to be activated.")) + + //xenos part + var/warning = "Hive killer is almost prepared to be activated!" + if(timer_warning & NUKE_DECRYPT_SHOW_TIMER_HALF) + warning = "Hive killer is halfway through its initial phase!" + + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!hive.totalXenos.len) + return + xeno_announcement(SPAN_XENOANNOUNCE(warning), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + return + + var/datum/hive_status/hive + if(decrypting) + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DECRYPTION STARTED.\n\nDECRYPTION IN [round(decryption_time/10)] SECONDS.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE ORDNANCE DECRYPTION STARTED.\n\nDECRYPTION IN [round(decryption_time/10)] SECONDS.", "HQ Nuclear Tracker", humans_other, 'sound/misc/notice1.ogg') + var/time_left = duration2text_sec(round(rand(decryption_time - decryption_time / 10, decryption_time + decryption_time / 10))) + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
A human Purification Device has been detected. You have approximately [time_left] before it finishes its initial phase.")) + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!length(hive.totalXenos)) + continue + xeno_announcement(SPAN_XENOANNOUNCE("The tallhosts have started the initial phase of a hive killer at [get_area_name(loc)]! Destroy their communications relays!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + return + + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE DECRYPTION HALTED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') + announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE DECRYPTION HALTED.", "HQ Intel Division", humans_other, 'sound/misc/notice1.ogg') + yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING!
The human Purification Device's signature has disappeared.")) + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(!length(hive.totalXenos)) + continue + xeno_announcement(SPAN_XENOANNOUNCE("The hive killer's initial phase has been halted! Rejoice!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + +/obj/structure/machinery/nuclearbomb/tech/proc/connected_comm_shutdown(obj/structure/machinery/telecomms/relay/preset/tower/telecomm_unit) + SIGNAL_HANDLER + + if(!decrypting) + return + + decrypting = FALSE + announce_to_players() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 1ef3a326485d..7855f446c805 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -11,7 +11,7 @@ black_market_value = 35 var/obj/item/charging = null var/percent_charge_complete = 0 - var/list/allowed_devices = list(/obj/item/weapon/baton, /obj/item/cell, /obj/item/weapon/gun/energy, /obj/item/device/defibrillator, /obj/item/tool/portadialysis, /obj/item/clothing/suit/auto_cpr) + var/list/allowed_devices = list(/obj/item/weapon/baton, /obj/item/cell, /obj/item/weapon/gun/energy, /obj/item/device/defibrillator, /obj/item/tool/portadialysis, /obj/item/clothing/suit/auto_cpr, /obj/item/smartgun_battery) var/charge_amount = 1000 @@ -166,6 +166,21 @@ update_icon() return + if(istype(charging, /obj/item/smartgun_battery)) + var/obj/item/smartgun_battery/charging_smartgun_battery = charging + if(charging_smartgun_battery.power_cell) + if(!charging_smartgun_battery.power_cell.fully_charged()) + charging_smartgun_battery.power_cell.give(charge_amount) + percent_charge_complete = charging_smartgun_battery.power_cell.percent() + update_use_power(USE_POWER_ACTIVE) + update_icon() + return + + percent_charge_complete = 100 + update_use_power(USE_POWER_IDLE) + update_icon() + return + /* Disable defib recharging if(istype(charging, /obj/item/device/defibrillator)) var/obj/item/device/defibrillator/D = charging diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 66f3a92cbdf2..644402128852 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -1,8 +1,8 @@ /obj/structure/machinery/recharge_station - name = "robot recharge station" + name = "synthetic maintenance station" icon = 'icons/obj/objects.dmi' icon_state = "borgcharger0" - desc = "A recharge and repair station for robots and synthetics. Simply put the synthetic in need of repair in here and they will be fixed up in no time!" + desc = "A Synthetic Maintenance Station designed to recharge, repair and maintain various sizes of artificial people. Simply place the synthetic or android in need of repair in here and they will be fixed up in no time!" density = TRUE anchored = TRUE use_power = USE_POWER_IDLE @@ -14,8 +14,10 @@ var/charging_cap_active = 25000 // Active Cap - When cyborg is inside var/charging_cap_passive = 2500 // Passive Cap - Recharging internal capacitor when no cyborg is inside var/icon_update_tick = 0 // Used to update icon only once every 10 ticks + var/known_implants = list(/obj/item/implant/chem, /obj/item/implant/death_alarm, /obj/item/implant/loyalty, /obj/item/implant/tracking, /obj/item/implant/neurostim) can_buckle = TRUE + /obj/structure/machinery/recharge_station/Initialize(mapload, ...) . = ..() update_icon() @@ -157,21 +159,42 @@ doing_stuff = TRUE else update_use_power(USE_POWER_IDLE) - if (isrobot(occupant) || issynth(occupant)) + if (issynth(occupant)) + var/mob/living/carbon/human/humanoid_occupant = occupant //for special synth surgeries if(occupant.getBruteLoss() > 0 || occupant.getFireLoss() > 0 || occupant.getBrainLoss() > 0) occupant.heal_overall_damage(10, 10, TRUE) occupant.apply_damage(-10, BRAIN) current_internal_charge = max(current_internal_charge - 500, 0) - to_chat(occupant, "Repairing...") + to_chat(occupant, "Structural damage detected. Repairing...") doing_stuff = TRUE occupant.pain.recalculate_pain() if(!doing_stuff && occupant.blood_volume < initial(occupant.blood_volume)) occupant.blood_volume = min(occupant.blood_volume + 10, initial(occupant.blood_volume)) - to_chat(occupant, "Refreshing liquids...") + to_chat(occupant, "Fluid volume low. Refreshing liquids...") doing_stuff = TRUE + if(!doing_stuff) + for(var/obj/limb/current_limb in humanoid_occupant.limbs) + if(current_limb.implants.len) + doing_stuff = TRUE + to_chat(occupant, "Foreign material detected. Beginning removal process...") + for(var/obj/item/current_implant in current_limb.implants) + if(!is_type_in_list(current_implant,known_implants)) + sleep(REMOVE_OBJECT_MAX_DURATION) + current_limb.implants -= current_implant + humanoid_occupant.embedded_items -= current_implant + qdel(current_implant) + to_chat(occupant, "Foreign object removed.") + for(var/datum/internal_organ/current_organ in humanoid_occupant.internal_organs) + if(current_organ.robotic == ORGAN_ASSISTED||current_organ.robotic == ORGAN_ROBOT) //this time the machine can *only* fix robotic organs + if(current_organ.damage > 0) + to_chat(occupant, "Damaged internal component detected. Beginning repair process.") + doing_stuff = TRUE + sleep(FIX_ORGAN_MAX_DURATION) + current_organ.rejuvenate() + to_chat(occupant, "Internal component repaired.") if(!doing_stuff) - to_chat(occupant, "Maintenance complete! Have a nice day!") + to_chat(occupant, "Maintenance cycle completed. All systems nominal.") go_out() diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index ce5e9a743bc5..a25293aebbd3 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -60,7 +60,7 @@ return TRUE return FALSE -/obj/structure/machinery/telecomms/relay/preset/tower/tcomms_startup() +/obj/structure/machinery/telecomms/relay/preset/tower/update_state() . = ..() if(on) playsound(src, 'sound/machines/tcomms_on.ogg', vol = 80, vary = FALSE, sound_range = 16, falloff = 0.5) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 324a358d041f..255d70f45870 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -71,6 +71,9 @@ GLOBAL_LIST_EMPTY_TYPED(telecomms_list, /obj/structure/machinery/telecomms) // When effectively shut down /obj/structure/machinery/telecomms/proc/tcomms_shutdown() on = FALSE + + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_GROUNDSIDE_TELECOMM_TURNED_OFF) + if(tcomms_machine) SSradio.remove_tcomm_machine(src) diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 1e5f93e4b24a..50abb701145e 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -1240,6 +1240,31 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( vending_human.marine_buyable_categories[buying_category] -= 1 return TRUE +// Unload ALL the items throwing them around randomly, optionally destroying the vendor +/obj/structure/machinery/cm_vending/proc/catastrophic_failure(throw_objects = TRUE, destroy = FALSE) + stat |= IN_USE + var/list/products = get_listed_products() + var/i = 1 + while(i <= length(products)) + sleep(0.5) + var/list/itemspec = products[i] + if(!itemspec[2] || itemspec[2] <= 0) + i++ + continue + itemspec[2] -= 1 + var/list/spawned = list() + if(islist(itemspec[3])) + for(var/path in itemspec[3]) + spawned += new path(loc) + else if(itemspec[3]) + var/path = itemspec[3] + spawned += new path(loc) + if(throw_objects) + for(var/atom/movable/spawned_atom in spawned) + INVOKE_ASYNC(spawned_atom, TYPE_PROC_REF(/atom/movable, throw_atom), pick(orange(src, 4)), 4, SPEED_FAST) + stat &= ~IN_USE + if(destroy) + qdel(src) //------------HACKING--------------- diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index a16b9d2448be..1d8e5e289066 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -89,12 +89,10 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), list("UNIFORM (CHOOSE 1)", 0, null, null, null), - list("Medical Scrubs, Green", 0, /obj/item/clothing/under/rank/medical/green, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), list("Uniform, Outdated Synth", 0, /obj/item/clothing/under/rank/synthetic/old, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), list("Uniform, Standard Synth", 0, /obj/item/clothing/under/rank/synthetic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), list("USCM Standard Uniform", 0, /obj/item/clothing/under/marine, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), list("USCM Medical Uniform", 0, /obj/item/clothing/under/marine/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), - list("Working Joe Uniform", 0, /obj/item/clothing/under/rank/synthetic/joe, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), list("WEBBING (CHOOSE 1)", 0, null, null, null), list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), @@ -182,7 +180,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Medical Scrubs, Purple", 12, /obj/item/clothing/under/rank/medical/purple, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, White", 12, /obj/item/clothing/under/rank/medical, null, VENDOR_ITEM_REGULAR), list("USCM Service Uniform", 12, /obj/item/clothing/under/marine/officer/bridge, null, VENDOR_ITEM_REGULAR), - list("USCM Flightsuit", 12, /obj/item/clothing/under/marine/officer/pilot/flight, null, VENDOR_ITEM_REGULAR), + list("USCM Flightsuit", 12, /obj/item/clothing/under/rank/synthetic/flight, null, VENDOR_ITEM_REGULAR), list("Engineer Uniform", 12, /obj/item/clothing/under/marine/officer/engi, null, VENDOR_ITEM_REGULAR), list("White T-Shirt and Brown Jeans", 12, /obj/item/clothing/under/tshirt/w_br, null, VENDOR_ITEM_REGULAR), list("Gray T-Shirt and Blue Jeans", 12, /obj/item/clothing/under/tshirt/gray_blu, null, VENDOR_ITEM_REGULAR), @@ -190,6 +188,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Gray Utilities", 12, /obj/item/clothing/under/colonist/ua_civvies, null, VENDOR_ITEM_REGULAR), list("Brown Utilities", 12, /obj/item/clothing/under/colonist/wy_davisone, null, VENDOR_ITEM_REGULAR), list("Steward Utilities", 12, /obj/item/clothing/under/colonist/wy_joliet_shopsteward, null, VENDOR_ITEM_REGULAR), + list("Working Joe Uniform", 36, /obj/item/clothing/under/rank/synthetic/joe, null, VENDOR_ITEM_REGULAR), list("GLASSES", 0, null, null, null), list("HealthMate HUD", 12, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_REGULAR), @@ -245,6 +244,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Labcoat", 12, /obj/item/clothing/suit/storage/labcoat, null, VENDOR_ITEM_REGULAR), list("Labcoat, Researcher", 12, /obj/item/clothing/suit/storage/labcoat/researcher, null, VENDOR_ITEM_REGULAR), list("RO Jacket", 12, /obj/item/clothing/suit/storage/RO, null, VENDOR_ITEM_REGULAR), + list("USCM Poncho", 12, /obj/item/clothing/accessory/poncho, null, VENDOR_ITEM_REGULAR), list("BACKPACK", 0, null, null, null), list("Backpack, Industrial", 12, /obj/item/storage/backpack/industrial, null, VENDOR_ITEM_REGULAR), @@ -267,7 +267,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( use_snowflake_points = TRUE vendor_theme = VENDOR_THEME_COMPANY req_access = list(ACCESS_MARINE_SYNTH) - vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR) + vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_WORKING_JOE) vend_delay = 1 SECONDS diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index f36aae09b6a0..838b21a00e6f 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -239,7 +239,7 @@ list("M41A MK2 Extended Magazine (10x24mm)", round(scale * 8.1), /obj/item/ammo_magazine/rifle/extended, VENDOR_ITEM_REGULAR), list("SPECIAL AMMUNITION", -1, null, null), - list("M56 Powerpack", 2, /obj/item/smartgun_powerpack, VENDOR_ITEM_REGULAR), + list("M56 Battery", 4, /obj/item/smartgun_battery, VENDOR_ITEM_REGULAR), list("M56 Smartgun Drum", 4, /obj/item/ammo_magazine/smartgun, VENDOR_ITEM_REGULAR), list("M44 Heavy Speed Loader (.44)", round(scale * 10.5), /obj/item/ammo_magazine/revolver/heavy, VENDOR_ITEM_REGULAR), list("M44 Marksman Speed Loader (.44)", round(scale * 5.7), /obj/item/ammo_magazine/revolver/marksman, VENDOR_ITEM_REGULAR), @@ -426,6 +426,7 @@ list("ARMOR", -1, null, null), list("M10 Pattern Marine Helmet", 20, /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR), list("M10 Pattern Technician Helmet", 20, /obj/item/clothing/head/helmet/marine/tech, VENDOR_ITEM_REGULAR), + list("M10 Pattern Corpman Helmet", 20, /obj/item/clothing/head/helmet/marine/medic, VENDOR_ITEM_REGULAR), list("M3 Pattern Carrier Marine Armor", 20, /obj/item/clothing/suit/storage/marine/carrier, VENDOR_ITEM_REGULAR), list("M3 Pattern Padded Marine Armor", 20, /obj/item/clothing/suit/storage/marine/padded, VENDOR_ITEM_REGULAR), list("M3 Pattern Padless Marine Armor", 20, /obj/item/clothing/suit/storage/marine/padless, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index 47b0881daff0..907cb99a94d2 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("SQUAD KIT (CHOOSE 1, for yourself or your squad)", 0, null, null, null), list("M4RA Sniper Kit", 0, /obj/item/storage/box/kit/mini_sniper, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("M41A Standard Kit", 0, /obj/item/storage/box/kit/m41a_kit , MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), list("M240 Pyrotechnician Support Kit", 0, /obj/item/storage/box/kit/mini_pyro, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), list("M2C Heavy Machine Gun", 0, /obj/item/storage/box/guncase/m2c, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), list("M56D Heavy Machine Gun", 0, /obj/item/storage/box/guncase/m56d, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm index fae628dfeb0c..b471d61628e0 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm @@ -7,9 +7,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list( list("SMARTGUN AMMUNITION", 0, null, null, null), list("M56 Smartgun Drum", 15, /obj/item/ammo_magazine/smartgun, null, VENDOR_ITEM_RECOMMENDED), - list("SMARTGUN EXTRA UTILITIES (CHOOSE 1)", 0, null, null, null), - list("High-Capacity Power Cell", 0, /obj/item/cell/high, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED), - list("GUN ATTACHMENTS (CHOOSE 1)", 0, null, null, null), list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/wo_vendors.dm b/code/game/machinery/vending/vendor_types/wo_vendors.dm index 01f66fbfaf48..bdba638c577e 100644 --- a/code/game/machinery/vending/vendor_types/wo_vendors.dm +++ b/code/game/machinery/vending/vendor_types/wo_vendors.dm @@ -151,7 +151,7 @@ list("M44 Heavy Speed Loader (.44)", round(scale * 2), /obj/item/ammo_magazine/revolver/heavy, VENDOR_ITEM_REGULAR), list("M44 Marksman Speed Loader (.44)", round(scale * 2), /obj/item/ammo_magazine/revolver/marksman, VENDOR_ITEM_REGULAR), list("M4A3 HP Magazine (9mm)", round(scale * 5), /obj/item/ammo_magazine/pistol/hp, VENDOR_ITEM_REGULAR), - list("M56 Powerpack", round(scale * 5), /obj/item/smartgun_powerpack, VENDOR_ITEM_REGULAR), + list("M56 Battery", round(scale * 5), /obj/item/smartgun_battery, VENDOR_ITEM_REGULAR), list("M56 Smartgun Drum", round(scale * 2), /obj/item/ammo_magazine/smartgun, VENDOR_ITEM_REGULAR), list("SU-6 Smartpistol Magazine (.45)", round(scale * 6), /obj/item/ammo_magazine/pistol/smart, VENDOR_ITEM_REGULAR), list("VP78 Magazine", round(scale * 6), /obj/item/ammo_magazine/pistol/vp78, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index ce33ea9184c2..7322d56fdc3a 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -291,6 +291,8 @@ var/ticks = 0 var/acid_strength = 1 //100% speed, normal var/barricade_damage = 40 + /// How much fuel the acid drains from the flare every acid tick + var/flare_damage = 500 var/barricade_damage_ticks = 10 // tick is once per 5 seconds. This tells us how many times it will try damaging barricades var/in_weather = FALSE @@ -299,13 +301,15 @@ name = "weak acid" acid_strength = 2.5 //250% normal speed barricade_damage = 20 + flare_damage = 150 icon_state = "acid_weak" //Superacid /obj/effect/xenomorph/acid/strong name = "strong acid" - acid_strength = 0.4 //20% normal speed + acid_strength = 0.4 //40% normal speed barricade_damage = 100 + flare_damage = 1875 icon_state = "acid_strong" /obj/effect/xenomorph/acid/New(loc, target) @@ -355,6 +359,12 @@ sleep(50) .() return + if(istype(acid_t, /obj/item/device/flashlight/flare)) + var/obj/item/device/flashlight/flare/flare = acid_t + if(flare.fuel > 0) //Flares that have fuel in them lose fuel instead of melting + flare.fuel -= flare_damage + sleep(rand(150,250) * (acid_strength)) + return .() if(++ticks >= strength_t) visible_message(SPAN_XENODANGER("[acid_t] collapses under its own weight into a puddle of goop and undigested debris!")) @@ -394,8 +404,6 @@ sleep(rand(200,300) * (acid_strength)) .() - - /obj/effect/xenomorph/boiler_bombard name = "???" desc = "" diff --git a/code/game/objects/effects/effect_system/chemsmoke.dm b/code/game/objects/effects/effect_system/chemsmoke.dm index 8ecdb2c07db9..c2323c32c934 100644 --- a/code/game/objects/effects/effect_system/chemsmoke.dm +++ b/code/game/objects/effects/effect_system/chemsmoke.dm @@ -40,7 +40,8 @@ // Culls the selected turfs to a (roughly) circle shape, then calls smokeFlow() to make // sure the smoke can actually path to the turfs. This culls any turfs it can't reach. //------------------------------------------ -/datum/effect_system/smoke_spread/chem/set_up(datum/reagents/carry = null, n = 10, c = 0, loca, direct) +/datum/effect_system/smoke_spread/chem/set_up(datum/reagents/carry = null, n = 10, c = 0, loca, direct, datum/cause_data/new_cause_data) + cause_data = istype(new_cause_data) ? new_cause_data : cause_data range = n * 0.3 cardinals = c carry.copy_to(chemholder, carry.total_volume) diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index a02069087412..9f7a9c8143c7 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -283,14 +283,14 @@ var/gas_damage = 20 /obj/effect/particle_effect/smoke/xeno_burn/Initialize(mapload, amount, datum/cause_data/cause_data) - var/mob/living/carbon/xenomorph/xeno = cause_data?.resolve_mob() - if (istype(xeno) && xeno.hivenumber) - hivenumber = xeno.hivenumber - - set_hive_data(src, hivenumber) - - . = ..() + if(istype(cause_data)) + var/datum/ui_state/hive_state/cause_data_hive_state = GLOB.hive_state[cause_data.faction] + var/new_hive_number = cause_data_hive_state?.hivenumber + if(new_hive_number) + hivenumber = new_hive_number + set_hive_data(src, new_hive_number) + return ..() /obj/effect/particle_effect/smoke/xeno_burn/apply_smoke_effect(turf/T) ..() @@ -387,7 +387,7 @@ if(!issynth(moob)) var/datum/effects/neurotoxin/neuro_effect = locate() in moob.effects_list if(!neuro_effect) - neuro_effect = new /datum/effects/neurotoxin(moob) + neuro_effect = new(moob, cause_data.resolve_mob()) neuro_effect.strength = effect_amt neuro_effect.duration += neuro_dose if(moob.coughedtime != 1 && !moob.stat) //Coughing/gasping diff --git a/code/game/objects/effects/spawners/random.dm b/code/game/objects/effects/spawners/random.dm index 7405e01893dd..4d5bf88b9e6c 100644 --- a/code/game/objects/effects/spawners/random.dm +++ b/code/game/objects/effects/spawners/random.dm @@ -467,7 +467,6 @@ /obj/item/weapon/gun/lever_action/r4t = /obj/item/ammo_magazine/lever_action, /obj/item/weapon/gun/shotgun/merc = null, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717 = null, - /obj/item/weapon/gun/shotgun/double = null ) //no ammotypes needed as it spawns random 12g boxes. Apart from the r4t. why is the r4t in the shotgun pool? fuck you, that's why. /obj/effect/spawner/random/gun/shotgun/lowchance diff --git a/code/game/objects/effects/spawners/wo_spawners/supplies.dm b/code/game/objects/effects/spawners/wo_spawners/supplies.dm index e38641592bc4..f2ef887d076c 100644 --- a/code/game/objects/effects/spawners/wo_spawners/supplies.dm +++ b/code/game/objects/effects/spawners/wo_spawners/supplies.dm @@ -194,7 +194,7 @@ /obj/effect/landmark/wo_supplies/ammo/powerpack icon = 'icons/obj/items/clothing/backpacks.dmi' icon_state = "powerpack" - stuff = list(/obj/item/smartgun_powerpack) + stuff = list(/obj/item/smartgun_battery) /obj/effect/landmark/wo_supplies/ammo/box icon = 'icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi' diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 04308492752c..976ec285c8f4 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -210,7 +210,7 @@ assignment = "Corporate Mercenary" /obj/item/card/id/pmc/New() - access = get_all_centcom_access() + access = get_all_weyland_access() ..() /obj/item/card/id/pmc/ds @@ -236,7 +236,7 @@ assignment = "General" /obj/item/card/id/general/New() - access = get_all_centcom_access() + access = get_all_weyland_access() /obj/item/card/id/provost name = "provost holo-badge" @@ -246,7 +246,7 @@ assignment = "Provost" /obj/item/card/id/provost/New() - access = get_all_centcom_access() + access = get_all_weyland_access() /obj/item/card/id/syndicate name = "agent card" @@ -342,7 +342,7 @@ assignment = "General" /obj/item/card/id/centcom/New() - access = get_all_centcom_access() + access = get_all_weyland_access() ..() diff --git a/code/game/objects/items/circuitboards/airlock.dm b/code/game/objects/items/circuitboards/airlock.dm index 6fa986e9d17c..873d326847ec 100644 --- a/code/game/objects/items/circuitboards/airlock.dm +++ b/code/game/objects/items/circuitboards/airlock.dm @@ -44,7 +44,7 @@ t1 += "
" - var/list/accesses = get_all_accesses() + var/list/accesses = get_all_main_access() for (var/acc in accesses) var/aname = get_access_desc(acc) diff --git a/code/game/objects/items/devices/coins.dm b/code/game/objects/items/devices/coins.dm index 9af5f855b0fa..6ab79e3216d4 100644 --- a/code/game/objects/items/devices/coins.dm +++ b/code/game/objects/items/devices/coins.dm @@ -30,7 +30,7 @@ black_market_value = 25 /obj/item/coin/copper - name = "gold coin" + name = "copper coin" desc = "A familiar, but cheap form of currency." icon_state = "coin_copper" black_market_value = 30 @@ -43,7 +43,7 @@ /obj/item/coin/iron name = "iron coin" - desc = "You fear this might get rusty." + desc = "A coin made of sturdy iron. You fear this might become rusty." icon_state = "coin_iron" black_market_value = 15 @@ -55,13 +55,13 @@ /obj/item/coin/uranium name = "uranium coin" - desc = "Don't touch it!" + desc = "A radioactive coin. Don't touch it!" icon_state = "coin_uranium" black_market_value = 35 /obj/item/coin/platinum name = "platinum coin" - desc = "This is quite valuable." + desc = "A coin made of shiny platinum. It is quite valuable." icon_state = "coin_platinum" black_market_value = 35 @@ -73,7 +73,7 @@ /obj/item/coin/chitin name = "chitin coin" - desc = "Durable chitin pressed into a coin. Why would anyone make this?" + desc = "Durable alien chitin pressed into a coin. There are much better uses for chitin..." icon_state = "coin_chitin" black_market_value = 35 diff --git a/code/game/objects/items/devices/data_detector.dm b/code/game/objects/items/devices/data_detector.dm index ad1b9c3bb05f..6a358ec09bd8 100644 --- a/code/game/objects/items/devices/data_detector.dm +++ b/code/game/objects/items/devices/data_detector.dm @@ -17,6 +17,7 @@ /obj/structure/machinery/computer/objective, /obj/item/limb/head/synth, ) + var/detect_empty_vial_boxes = FALSE /obj/item/device/motiondetector/intel/get_help_text() . = "Green indicators on your HUD will show the location of intelligence objects detected by the scanner. Has two modes: slow long-range [SPAN_HELPFUL("(14 tiles)")] and fast short-range [SPAN_HELPFUL("(7 tiles)")]." @@ -42,10 +43,16 @@ var/detected for(var/DT in objects_to_detect) if(istype(I, DT)) + if(!detect_empty_vial_boxes && istype(I, /obj/item/storage/fancy/vials/random)) + if(!I.contents) + continue detected = TRUE if(I.contents) for(var/obj/item/CI in I.contents) if(istype(CI, DT)) + if(!detect_empty_vial_boxes && istype(I, /obj/item/storage/fancy/vials/random)) + if(!I.contents) + continue detected = TRUE break if(human_user && detected) @@ -69,6 +76,9 @@ for(var/obj/I in M.contents_twice()) for(var/DT in objects_to_detect) if(istype(I, DT)) + if(!detect_empty_vial_boxes && istype(I, /obj/item/storage/fancy/vials/random)) + if(!I.contents) + continue detected = TRUE break if(detected) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 6fe39172d783..a3e587089997 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -286,7 +286,7 @@ /obj/item/device/flashlight/flare/Initialize() . = ..() - fuel = rand(1600 SECONDS, 2000 SECONDS) + fuel = rand(9.5 MINUTES, 10.5 MINUTES) /obj/item/device/flashlight/flare/update_icon() overlays?.Cut() @@ -416,7 +416,7 @@ /obj/item/device/flashlight/flare/on/illumination/Initialize() . = ..() - fuel = rand(800 SECONDS, 1000 SECONDS) // Half the duration of a flare, but justified since it's invincible + fuel = rand(4.5 MINUTES, 5.5 MINUTES) // Half the duration of a flare, but justified since it's invincible /obj/item/device/flashlight/flare/on/illumination/update_icon() return diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 7026f2a3e7d0..3e2c1445f8e5 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -446,6 +446,8 @@ FORENSIC SCANNER /obj/item/device/black_market_scanner/afterattack(atom/hit_atom, mob/user, proximity) if(!proximity) return + if(!ismovable(hit_atom)) + return ..() var/market_value = get_black_market_value(hit_atom) if(isnull(market_value)) return ..() diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm index 0fffb245bc1a..4c2a1774d4db 100644 --- a/code/game/objects/items/explosives/plastic.dm +++ b/code/game/objects/items/explosives/plastic.dm @@ -62,10 +62,6 @@ /obj/item/explosive/plastic/afterattack(atom/target, mob/user, flag) setDir(get_dir(user, target)) - if(antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) - to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from planting it!")) - msg_admin_niche("[key_name(user)] attempted to prime \a [name] in [get_area(src)] [ADMIN_JMP(src.loc)]") - return if(user.action_busy || !flag) return @@ -75,6 +71,11 @@ if(!can_place(user, target)) return + if(antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) + to_chat(user, SPAN_WARNING("[name]'s safe-area accident inhibitor prevents you from planting it!")) + msg_admin_niche("[key_name(user)] attempted to prime \a [name] in [get_area(src)] [ADMIN_JMP(src.loc)]") + return + user.visible_message(SPAN_WARNING("[user] is trying to plant [name] on [target]!"), SPAN_WARNING("You are trying to plant [name] on [target]!")) if(ismob(target)) diff --git a/code/game/objects/items/reagent_containers/food/cans.dm b/code/game/objects/items/reagent_containers/food/cans.dm index c14ee4d7a4ee..aab2ee066e12 100644 --- a/code/game/objects/items/reagent_containers/food/cans.dm +++ b/code/game/objects/items/reagent_containers/food/cans.dm @@ -175,7 +175,8 @@ /obj/item/reagent_container/food/drinks/cans/thirteenloko name = "\improper Thirteen Loko" - desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." + desc = "Consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." + desc_lore = "A rarity among modern markets, Thirteen Loko is an all-Earth original. With a name coined by the general consensus that only the mildly insane willing to imbibe it, this energy drink has garnered a notorious reputation for itself and a sizeable cult following to match it. After a series of legal proceedings by Weyland-Yutani, denatured cobra venom was removed from the recipe, much to the disappointment of the drink's consumers." icon_state = "thirteen_loko" center_of_mass = "x=16;y=8" @@ -269,6 +270,7 @@ /obj/item/reagent_container/food/drinks/cans/boda name = "\improper Boda" desc = "State regulated soda beverage. Enjoy comrades." + desc_lore = "Designed back in 2159, the advertising campaign for BODA started out as an attempt by the UPP to win the hearts and minds of colonists and settlers across the galaxy. Soon after, the ubiquitous cyan vendors and large supplies of the drink began to crop up in UA warehouses with seemingly no clear origin. Despite some concerns, after initial testing determined that the stored products were safe for consumption and surprisingly popular when blind-tested with focus groups, the strange surplus of BODA was authorized for usage within the UA-associated colonies. Subsequently, it enjoyed a relative popularity before falling into obscurity in the coming decades as supplies dwindled." icon_state = "boda" center_of_mass = "x=16;y=10" diff --git a/code/game/objects/items/reagent_containers/food/condiment.dm b/code/game/objects/items/reagent_containers/food/condiment.dm index 7318a7b0165d..a13489f0af1e 100644 --- a/code/game/objects/items/reagent_containers/food/condiment.dm +++ b/code/game/objects/items/reagent_containers/food/condiment.dm @@ -202,6 +202,7 @@ /obj/item/reagent_container/food/condiment/hotsauce/franks name = "\improper Frank's Red Hot bottle" desc = "A bottle of Weyland-Yutani brand Frank's Red Hot hot sauce." + desc_lore = "Supposedly designed as a middle-ground flavor between ketchup and cayenne, this brand of spicy goodness achieved critical acclaim throughout UA space within both colonies and vessels alike. The sudden and widespread adoption was curiously timed with the near-simultaneous shelving of the original Frank's 'ULTRA' hot sauce." icon_state = "hotsauce_franks" item_state = "hotsauce_franks" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index ab424883f34a..e36225177d91 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -210,8 +210,8 @@ to_chat(user, SPAN_DANGER("The Bluespace portal resists your attempt to add another item.")) //light failure else to_chat(user, SPAN_DANGER("The Bluespace generator malfunctions!")) - for (var/obj/O in src.contents) //it broke, delete what was in it - qdel(O) + for (var/obj/thing in contents) //it broke, delete what was in it + qdel(thing) crit_fail = 1 icon_state = "brokenpack" @@ -883,17 +883,21 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r return . = ..() -/obj/item/storage/backpack/marine/engineerpack/afterattack(obj/O as obj, mob/user as mob, proximity) - if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously - return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) - O.reagents.trans_to(src, max_fuel) - to_chat(user, SPAN_NOTICE(" You crack the cap off the top of the pack and fill it back up again from the tank.")) - playsound(loc, 'sound/effects/refill.ogg', 25, TRUE, 3) - return - else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel) - to_chat(user, SPAN_NOTICE(" The pack is already full!")) +/obj/item/storage/backpack/marine/engineerpack/afterattack(obj/target, mob/user, proximity) + if(!proximity) return + if(istype(target, /obj/structure/reagent_dispensers)) + if(!(istypestrict(target, /obj/structure/reagent_dispensers/fueltank))) + to_chat(user, SPAN_NOTICE("This must be filled with a fuel tank.")) + return + if(reagents.total_volume < max_fuel) + target.reagents.trans_to(src, max_fuel) + to_chat(user, SPAN_NOTICE("You crack the cap off the top of the pack and fill it back up again from the tank.")) + playsound(loc, 'sound/effects/refill.ogg', 25, TRUE, 3) + return + if(reagents.total_volume == max_fuel) + to_chat(user, SPAN_NOTICE("The pack is already full!")) + return ..() /obj/item/storage/backpack/marine/engineerpack/get_examine_text(mob/user) @@ -919,6 +923,42 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r fuel_type = "utnapthal" has_gamemode_skin = TRUE +/obj/item/storage/backpack/marine/engineerpack/flamethrower/verb/remove_reagents() + set name = "Empty canister" + set category = "Object" + + set src in usr + + if(usr.get_active_hand() != src) + return + + if(alert(usr, "Do you really want to empty out [src]?", "Empty canister", "Yes", "No") != "Yes") + return + + reagents.clear_reagents() + + playsound(loc, 'sound/effects/refill.ogg', 25, 1, 3) + to_chat(usr, SPAN_NOTICE("You empty out [src]")) + update_icon() + +//this is to revert change for the backpack that are for flametrower usage. +// so that they can use custom mix to refill those backpack +/obj/item/storage/backpack/marine/engineerpack/flamethrower/afterattack(obj/target, mob/user, proximity) + if(!proximity) + return + if (!(istype(target, /obj/structure/reagent_dispensers/fueltank))) + return + + if (reagents.total_volume >= max_fuel) + to_chat(user, SPAN_NOTICE("The pack is already full!")) + return + + if(reagents.total_volume < max_fuel) + target.reagents.trans_to(src, max_fuel) + to_chat(user, SPAN_NOTICE("You crack the cap off the top of the pack and fill it back up again from the tank.")) + playsound(loc, 'sound/effects/refill.ogg', 25, TRUE, 3) + return + /obj/item/storage/backpack/marine/engineerpack/flamethrower/attackby(obj/item/W, mob/living/user) if (istype(W, /obj/item/ammo_magazine/flamer_tank)) var/obj/item/ammo_magazine/flamer_tank/FTL = W diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 5900097e030e..198e5b3b9960 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -1126,6 +1126,7 @@ /obj/item/stock_parts/micro_laser, /obj/item/stock_parts/scanning_module, /obj/item/stock_parts/capacitor, + /obj/item/smartgun_battery, ) /obj/item/storage/pouch/electronics/full/fill_preset_inventory() diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index c064508c4d7c..25bcefc1cc34 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -256,12 +256,12 @@ else return ..() -/obj/item/tool/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity) +/obj/item/tool/weldingtool/afterattack(obj/target, mob/user, proximity) if(!proximity) return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1) + if (istype(target, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,target) <= 1) if(!welding) - O.reagents.trans_to(src, max_fuel) + target.reagents.trans_to(src, max_fuel) weld_tick = 0 user.visible_message(SPAN_NOTICE("[user] refills [src]."), \ SPAN_NOTICE("You refill [src].")) @@ -270,14 +270,14 @@ message_admins("[key_name_admin(user)] triggered a fueltank explosion with a blowtorch.") log_game("[key_name(user)] triggered a fueltank explosion with a blowtorch.") to_chat(user, SPAN_DANGER("You begin welding on the fueltank, and in a last moment of lucidity realize this might not have been the smartest thing you've ever done.")) - var/obj/structure/reagent_dispensers/fueltank/tank = O + var/obj/structure/reagent_dispensers/fueltank/tank = target tank.explode() return if (welding) remove_fuel(1) - if(isliving(O)) - var/mob/living/L = O + if(isliving(target)) + var/mob/living/L = target L.IgniteMob() @@ -709,17 +709,22 @@ Welding backpack to_chat(user, SPAN_NOTICE("You cannot figure out how to use \the [W] with [src].")) return -/obj/item/tool/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity) - if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously - return - if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) - O.reagents.trans_to(src, max_fuel) - to_chat(user, SPAN_NOTICE(" You crack the cap off the top of \the [src] and fill it back up again from the tank.")) - playsound(src.loc, 'sound/effects/refill.ogg', 25, 1, 3) - return - else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel) - to_chat(user, SPAN_NOTICE(" \The [src] is already full!")) +/obj/item/tool/weldpack/afterattack(obj/target as obj, mob/user as mob, proximity) + if(!proximity) // this replaces and improves the get_dist(src,target) <= 1 checks used previously return + if(istype(target, /obj/structure/reagent_dispensers)) + if(!(istypestrict(target, /obj/structure/reagent_dispensers/fueltank))) + to_chat(user, SPAN_NOTICE("This must be filled with a fuel tank.")) + return + if(reagents.total_volume < max_fuel) + target.reagents.trans_to(src, max_fuel) + to_chat(user, SPAN_NOTICE("You crack the cap off the top of \the [src] and fill it back up again from the tank.")) + playsound(loc, 'sound/effects/refill.ogg', 25, 1, 3) + return + if (reagents.total_volume >= max_fuel) + to_chat(user, SPAN_NOTICE("[src] is already full!")) + return + ..() /obj/item/tool/weldpack/get_examine_text(mob/user) . = ..() diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm index b71873261f34..a7328a9191f4 100644 --- a/code/game/objects/structures/barricade/barricade.dm +++ b/code/game/objects/structures/barricade/barricade.dm @@ -30,6 +30,8 @@ var/brute_multiplier = 1 var/burn_multiplier = 1 var/explosive_multiplier = 1 + var/brute_projectile_multiplier = 1 + var/burn_flame_multiplier = 1 var/repair_materials = list() var/metallic = TRUE @@ -95,7 +97,7 @@ overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+burn_upgrade_[damage_state]") if(BARRICADE_UPGRADE_BRUTE) overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+brute_upgrade_[damage_state]") - if(BARRICADE_UPGRADE_EXPLOSIVE) + if(BARRICADE_UPGRADE_ANTIFF) overlays += image('icons/obj/structures/barricades.dmi', icon_state = "+explosive_upgrade_[damage_state]") if(is_wired) @@ -106,34 +108,34 @@ ..() -/obj/structure/barricade/hitby(atom/movable/AM) - if(AM.throwing && is_wired) - if(iscarbon(AM)) - var/mob/living/carbon/C = AM - if(C.mob_size <= MOB_SIZE_XENO) - C.visible_message(SPAN_DANGER("The barbed wire slices into [C]!"), +/obj/structure/barricade/hitby(atom/movable/atom_movable) + if(atom_movable.throwing && is_wired) + if(iscarbon(atom_movable)) + var/mob/living/carbon/living_carbon = atom_movable + if(living_carbon.mob_size <= MOB_SIZE_XENO) + living_carbon.visible_message(SPAN_DANGER("The barbed wire slices into [living_carbon]!"), SPAN_DANGER("The barbed wire slices into you!")) - C.apply_damage(10) - C.apply_effect(2, WEAKEN) //Leaping into barbed wire is VERY bad - playsound(C, "bonk", 75, FALSE) + living_carbon.apply_damage(10) + living_carbon.apply_effect(2, WEAKEN) //Leaping into barbed wire is VERY bad + playsound(living_carbon, "bonk", 75, FALSE) ..() -/obj/structure/barricade/Collided(atom/movable/AM) +/obj/structure/barricade/Collided(atom/movable/atom_movable) ..() - if(istype(AM, /mob/living/carbon/xenomorph/crusher)) - var/mob/living/carbon/xenomorph/crusher/C = AM + if(istype(atom_movable, /mob/living/carbon/xenomorph/crusher)) + var/mob/living/carbon/xenomorph/crusher/living_carbon = atom_movable - if (!C.throwing) + if (!living_carbon.throwing) return if(crusher_resistant) - visible_message(SPAN_DANGER("[C] smashes into [src]!")) + visible_message(SPAN_DANGER("[living_carbon] smashes into [src]!")) take_damage(150) playsound(src, barricade_hitsound, 25, TRUE) - else if(!C.stat) - visible_message(SPAN_DANGER("[C] smashes through [src]!")) + else if(!living_carbon.stat) + visible_message(SPAN_DANGER("[living_carbon] smashes through [src]!")) deconstruct(FALSE) playsound(src, barricade_hitsound, 25, TRUE) @@ -163,8 +165,8 @@ if(closed) return NO_BLOCKED_MOVEMENT - var/obj/structure/S = locate(/obj/structure) in get_turf(mover) - if(S && S.climbable && !(S.flags_atom & ON_BORDER) && climbable && isliving(mover)) //Climbable objects allow you to universally climb over others + var/obj/structure/structure = locate(/obj/structure) in get_turf(mover) + if(structure && structure.climbable && !(structure.flags_atom & ON_BORDER) && climbable && isliving(mover)) //Climbable objects allow you to universally climb over others return NO_BLOCKED_MOVEMENT return ..() @@ -180,33 +182,33 @@ /obj/structure/barricade/attack_animal(mob/user as mob) return attack_alien(user) -/obj/structure/barricade/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/weapon/zombie_claws)) +/obj/structure/barricade/attackby(obj/item/item, mob/user) + if(istype(item, /obj/item/weapon/zombie_claws)) user.visible_message(SPAN_DANGER("The zombie smashed at the [src.barricade_type] barricade!"), SPAN_DANGER("You smack the [src.barricade_type] barricade!")) if(barricade_hitsound) playsound(src, barricade_hitsound, 35, 1) - hit_barricade(W) + hit_barricade(item) return - for(var/obj/effect/xenomorph/acid/A in src.loc) - if(A.acid_t == src) + for(var/obj/effect/xenomorph/acid/acid in src.loc) + if(acid.acid_t == src) to_chat(user, "You can't get near that, it's melting!") return - if(istype(W, /obj/item/stack/barbed_wire)) - var/obj/item/stack/barbed_wire/B = W + if(istype(item, /obj/item/stack/barbed_wire)) + var/obj/item/stack/barbed_wire/barbed_wire = item if(can_wire) - user.visible_message(SPAN_NOTICE("[user] starts setting up [W.name] on [src]."), - SPAN_NOTICE("You start setting up [W.name] on [src].")) + user.visible_message(SPAN_NOTICE("[user] starts setting up [item.name] on [src]."), + SPAN_NOTICE("You start setting up [item.name] on [src].")) if(do_after(user, 20, INTERRUPT_NO_NEEDHAND|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src) && can_wire) // Make sure there's still enough wire in the stack - if(!B.use(1)) + if(!barbed_wire.use(1)) return playsound(src.loc, 'sound/effects/barbed_wire_movement.ogg', 25, 1) - user.visible_message(SPAN_NOTICE("[user] sets up [W.name] on [src]."), - SPAN_NOTICE("You set up [W.name] on [src].")) + user.visible_message(SPAN_NOTICE("[user] sets up [item.name] on [src]."), + SPAN_NOTICE("You set up [item.name] on [src].")) maxhealth += 50 update_health(-50) @@ -218,7 +220,7 @@ update_icon() return - if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS)) + if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS)) if(is_wired) user.visible_message(SPAN_NOTICE("[user] begin removing the barbed wire on [src]."), SPAN_NOTICE("You begin removing the barbed wire on [src].")) @@ -240,27 +242,27 @@ new/obj/item/stack/barbed_wire( src.loc ) return - if(W.force > force_level_absorption) + if(item.force > force_level_absorption) ..() if(barricade_hitsound) playsound(src, barricade_hitsound, 35, 1) - hit_barricade(W) + hit_barricade(item) -/obj/structure/barricade/bullet_act(obj/item/projectile/P) - bullet_ping(P) +/obj/structure/barricade/bullet_act(obj/item/projectile/bullet) + bullet_ping(bullet) - if(P.ammo.damage_type == BURN) - P.damage = P.damage * burn_multiplier + if(bullet.ammo.damage_type == BURN) + bullet.damage = bullet.damage * burn_multiplier else - P.damage = P.damage * brute_multiplier + bullet.damage = bullet.damage * brute_projectile_multiplier - if(istype(P.ammo, /datum/ammo/xeno/boiler_gas)) + if(istype(bullet.ammo, /datum/ammo/xeno/boiler_gas)) take_damage(round(50 * burn_multiplier)) - else if(P.ammo.flags_ammo_behavior & AMMO_ANTISTRUCT) - take_damage(P.damage * ANTISTRUCT_DMG_MULT_BARRICADES) + else if(bullet.ammo.flags_ammo_behavior & AMMO_ANTISTRUCT) + take_damage(bullet.damage * ANTISTRUCT_DMG_MULT_BARRICADES) - take_damage(P.damage) + take_damage(bullet.damage) return TRUE @@ -282,11 +284,11 @@ /obj/structure/barricade/ex_act(severity, direction, cause_data) - for(var/obj/structure/barricade/B in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade - if(B.dir == reverse_direction(dir)) + for(var/obj/structure/barricade/barricade in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade + if(barricade.dir == reverse_direction(dir)) spawn(1) - if(B) - B.ex_act(severity, direction) + if(barricade) + barricade.ex_act(severity, direction) if(health <= 0) var/location = get_turf(src) handle_debris(severity, direction) @@ -321,15 +323,15 @@ new /datum/effects/acid(src, null, null) /obj/structure/barricade/flamer_fire_act(dam = BURN_LEVEL_TIER_1) - take_damage(dam * burn_multiplier) + take_damage(dam * burn_flame_multiplier) -/obj/structure/barricade/proc/hit_barricade(obj/item/I) - take_damage(I.force * 0.5 * brute_multiplier) +/obj/structure/barricade/proc/hit_barricade(obj/item/item) + take_damage(item.force * 0.5 * brute_multiplier) /obj/structure/barricade/proc/take_damage(damage) - for(var/obj/structure/barricade/B in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade - if(B.dir == reverse_direction(dir)) - B.update_health(damage) + for(var/obj/structure/barricade/barricade in get_step(src,dir)) //discourage double-stacking barricades by removing health from opposing barricade + if(barricade.dir == reverse_direction(dir)) + barricade.update_health(damage) update_health(damage) @@ -357,12 +359,12 @@ if(50 to 75) damage_state = BARRICADE_DMG_SLIGHT if(75 to INFINITY) damage_state = BARRICADE_DMG_NONE -/obj/structure/barricade/proc/weld_cade(obj/item/tool/weldingtool/WT, mob/user) +/obj/structure/barricade/proc/weld_cade(obj/item/tool/weldingtool/welder, mob/user) if(!metallic) user.visible_message(SPAN_WARNING("You can't weld \the [src]!")) return FALSE - if(!(WT.remove_fuel(2, user))) + if(!(welder.remove_fuel(2, user))) return FALSE user.visible_message(SPAN_NOTICE("[user] begins repairing damage to [src]."), @@ -413,20 +415,20 @@ return ..() -/obj/structure/barricade/proc/try_nailgun_usage(obj/item/W, mob/user) - if(length(repair_materials) == 0 || health >= maxhealth || !istype(W, /obj/item/weapon/gun/smg/nailgun)) +/obj/structure/barricade/proc/try_nailgun_usage(obj/item/item, mob/user) + if(length(repair_materials) == 0 || health >= maxhealth || !istype(item, /obj/item/weapon/gun/smg/nailgun)) return FALSE - var/obj/item/weapon/gun/smg/nailgun/NG = W + var/obj/item/weapon/gun/smg/nailgun/nailgun = item - if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < 3) + if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3) to_chat(user, SPAN_WARNING("You require at least 4 nails to complete this task!")) return FALSE // Check if either hand has a metal stack by checking the weapon offhand // Presume the material is a sheet until proven otherwise. var/obj/item/stack/sheet/material = null - if(user.l_hand == NG) + if(user.l_hand == nailgun) material = user.r_hand else material = user.l_hand @@ -445,8 +447,8 @@ to_chat(user, SPAN_WARNING("You'll need some adequate repair material in your other hand to patch up [src]!")) return FALSE - var/soundchannel = playsound(src, NG.repair_sound, 25, 1) - if(!do_after(user, NG.nailing_speed, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src)) + var/soundchannel = playsound(src, nailgun.repair_sound, 25, 1) + if(!do_after(user, nailgun.nailing_speed, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src)) playsound(src, null, channel = soundchannel) return FALSE @@ -454,7 +456,7 @@ to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!")) return FALSE - if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < 3) + if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3) to_chat(user, SPAN_WARNING("You require at least 4 nails to complete this task!")) return FALSE @@ -462,7 +464,7 @@ to_chat(user, SPAN_WARNING("You nail [material] to [src], restoring some of its integrity!")) update_damage_state() material.use(1) - NG.current_mag.current_rounds -= 3 - NG.in_chamber = null - NG.load_into_chamber() + nailgun.current_mag.current_rounds -= 3 + nailgun.in_chamber = null + nailgun.load_into_chamber() return TRUE diff --git a/code/game/objects/structures/barricade/deployable.dm b/code/game/objects/structures/barricade/deployable.dm index b64d0ab1bd0e..7ed2eefd75fb 100644 --- a/code/game/objects/structures/barricade/deployable.dm +++ b/code/game/objects/structures/barricade/deployable.dm @@ -4,7 +4,7 @@ icon_state = "folding_0" health = 350 maxhealth = 350 - burn_multiplier = 1.15 + burn_multiplier = 0.85 brute_multiplier = 1 crusher_resistant = TRUE force_level_absorption = 15 @@ -88,7 +88,7 @@ usr.visible_message(SPAN_NOTICE("[usr] starts collapsing [src]."), SPAN_NOTICE("You begin collapsing [src].")) playsound(src.loc, 'sound/items/Crowbar.ogg', 25, 1) - if(do_after(usr, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, src)) + if(do_after(usr, 3 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY, src)) collapse(usr) else to_chat(usr, SPAN_WARNING("You stop collapsing [src].")) @@ -107,6 +107,7 @@ ..() if(PF) PF.flags_can_pass_front &= ~PASS_OVER_THROW_MOB + PF.flags_can_pass_behind &= ~PASS_OVER_THROW_MOB // Cade in hands diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm index 40f784b064e4..4056ac9021f8 100644 --- a/code/game/objects/structures/barricade/metal.dm +++ b/code/game/objects/structures/barricade/metal.dm @@ -39,12 +39,12 @@ . += SPAN_NOTICE("The cade is protected by a biohazardous upgrade.") if(BARRICADE_UPGRADE_BRUTE) . += SPAN_NOTICE("The cade is protected by a reinforced upgrade.") - if(BARRICADE_UPGRADE_EXPLOSIVE) - . += SPAN_NOTICE("The cade is protected by an explosive upgrade.") + if(BARRICADE_UPGRADE_ANTIFF) + . += SPAN_NOTICE("The cade is protected by a composite upgrade.") -/obj/structure/barricade/metal/attackby(obj/item/W, mob/user) - if(iswelder(W)) - if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) +/obj/structure/barricade/metal/attackby(obj/item/item, mob/user) + if(iswelder(item)) + if(!HAS_TRAIT(item, TRAIT_TOOL_BLOWTORCH)) to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) return if(user.action_busy) @@ -52,7 +52,7 @@ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You're not trained to repair [src]...")) return - var/obj/item/tool/weldingtool/WT = W + var/obj/item/tool/weldingtool/welder = item if(damage_state == BARRICADE_DMG_HEAVY) to_chat(user, SPAN_WARNING("[src] has sustained too much structural damage to be repaired.")) return @@ -61,10 +61,10 @@ to_chat(user, SPAN_WARNING("[src] doesn't need repairs.")) return - weld_cade(WT, user) + weld_cade(welder, user) return - if(try_nailgun_usage(W, user)) + if(try_nailgun_usage(item, user)) return for(var/obj/effect/xenomorph/acid/A in src.loc) @@ -74,7 +74,7 @@ switch(build_state) if(BARRICADE_BSTATE_SECURED) //Fully constructed step. Use screwdriver to remove the protection panels to reveal the bolts - if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) + if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER)) if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to touch [src]...")) return @@ -88,16 +88,16 @@ build_state = BARRICADE_BSTATE_UNSECURED return - if(istype(W, /obj/item/stack/sheet/metal)) + if(istype(item, /obj/item/stack/sheet/metal)) if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to touch [src]...")) return if(upgraded) to_chat(user, SPAN_NOTICE("This barricade is already upgraded.")) return - var/obj/item/stack/sheet/metal/M = W + var/obj/item/stack/sheet/metal/metal = item if(user.client?.prefs?.no_radials_preference) - var/choice = tgui_input_list(user, "Choose an upgrade to apply to the barricade", "Apply Upgrade", list(BARRICADE_UPGRADE_BURN, BARRICADE_UPGRADE_BRUTE, BARRICADE_UPGRADE_EXPLOSIVE)) + var/choice = tgui_input_list(user, "Choose an upgrade to apply to the barricade", "Apply Upgrade", list(BARRICADE_UPGRADE_BURN, BARRICADE_UPGRADE_BRUTE, BARRICADE_UPGRADE_ANTIFF)) if(!choice) return if(!user.Adjacent(src)) @@ -106,33 +106,37 @@ if(upgraded) to_chat(user, SPAN_NOTICE("This barricade is already upgraded.")) return - if(M.get_amount() < 2) + if(metal.get_amount() < 2) to_chat(user, SPAN_NOTICE("You lack the required metal.")) return - if((usr.get_active_hand()) != M) - to_chat(user, SPAN_WARNING("You must be holding the [M] to upgrade \the [src]!")) + if((usr.get_active_hand()) != metal) + to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!")) return switch(choice) if(BARRICADE_UPGRADE_BURN) burn_multiplier = 0.75 + burn_flame_multiplier = 0.75 upgraded = BARRICADE_UPGRADE_BURN to_chat(user, SPAN_NOTICE("You applied a biohazardous upgrade.")) if(BARRICADE_UPGRADE_BRUTE) brute_multiplier = 0.75 + brute_projectile_multiplier = 0.75 upgraded = BARRICADE_UPGRADE_BRUTE to_chat(user, SPAN_NOTICE("You applied a reinforced upgrade.")) - if(BARRICADE_UPGRADE_EXPLOSIVE) - explosive_multiplier = 0.75 - upgraded = BARRICADE_UPGRADE_EXPLOSIVE - to_chat(user, SPAN_NOTICE("You applied an explosive upgrade.")) + if(BARRICADE_UPGRADE_ANTIFF) + explosive_multiplier = 0.5 + brute_projectile_multiplier = 0.5 + burn_flame_multiplier = 0.5 + upgraded = BARRICADE_UPGRADE_ANTIFF + to_chat(user, SPAN_NOTICE("You applied a composite upgrade.")) - M.use(2) + metal.use(2) user.count_niche_stat(STATISTICS_NICHE_UPGRADE_CADES) update_icon() return else - var/static/list/cade_types = list(BARRICADE_UPGRADE_EXPLOSIVE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "explosive_obj"), BARRICADE_UPGRADE_BRUTE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "brute_obj"), BARRICADE_UPGRADE_BURN = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "burn_obj")) + var/static/list/cade_types = list(BARRICADE_UPGRADE_ANTIFF = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "explosive_obj"), BARRICADE_UPGRADE_BRUTE = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "brute_obj"), BARRICADE_UPGRADE_BURN = image(icon = 'icons/obj/structures/barricades.dmi', icon_state = "burn_obj")) var/choice = show_radial_menu(user, src, cade_types, require_near = TRUE) if(!choice) return @@ -142,33 +146,37 @@ if(upgraded) to_chat(user, SPAN_NOTICE("This barricade is already upgraded.")) return - if(M.get_amount() < 2) + if(metal.get_amount() < 2) to_chat(user, SPAN_NOTICE("You lack the required metal.")) return - if((usr.get_active_hand()) != M) - to_chat(user, SPAN_WARNING("You must be holding the [M] to upgrade \the [src]!")) + if((usr.get_active_hand()) != metal) + to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!")) return switch(choice) if(BARRICADE_UPGRADE_BURN) burn_multiplier = 0.75 + burn_flame_multiplier = 0.75 upgraded = BARRICADE_UPGRADE_BURN to_chat(user, SPAN_NOTICE("You applied a biohazardous upgrade.")) if(BARRICADE_UPGRADE_BRUTE) brute_multiplier = 0.75 + brute_projectile_multiplier = 0.75 upgraded = BARRICADE_UPGRADE_BRUTE to_chat(user, SPAN_NOTICE("You applied a reinforced upgrade.")) - if(BARRICADE_UPGRADE_EXPLOSIVE) - explosive_multiplier = 0.75 - upgraded = BARRICADE_UPGRADE_EXPLOSIVE - to_chat(user, SPAN_NOTICE("You applied an explosive upgrade.")) + if(BARRICADE_UPGRADE_ANTIFF) + explosive_multiplier = 0.5 + brute_projectile_multiplier = 0.5 + burn_flame_multiplier = 0.5 + upgraded = BARRICADE_UPGRADE_ANTIFF + to_chat(user, SPAN_NOTICE("You applied a composite upgrade.")) - M.use(2) + metal.use(2) user.count_niche_stat(STATISTICS_NICHE_UPGRADE_CADES) update_icon() return - if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) + if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL)) if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to touch [src]...")) return @@ -181,13 +189,15 @@ upgraded = null explosive_multiplier = initial(explosive_multiplier) brute_multiplier = initial(brute_multiplier) + brute_projectile_multiplier = initial(brute_projectile_multiplier) burn_multiplier = initial(burn_multiplier) + burn_flame_multiplier = initial(burn_flame_multiplier) new stack_type (loc, 1) update_icon() return if(BARRICADE_BSTATE_UNSECURED) //Protection panel removed step. Screwdriver to put the panel back, wrench to unsecure the anchor bolts - if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) + if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER)) if(user.action_busy) return if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) @@ -199,7 +209,7 @@ SPAN_NOTICE("You set [src]'s protection panel back.")) build_state = BARRICADE_BSTATE_SECURED return - if(HAS_TRAIT(W, TRAIT_TOOL_WRENCH)) + if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH)) if(user.action_busy) return if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) @@ -214,7 +224,7 @@ update_icon() //unanchored changes layer return if(BARRICADE_BSTATE_MOVABLE) //Anchor bolts loosened step. Apply crowbar to unseat the panel and take apart the whole thing. Apply wrench to resecure anchor bolts - if(HAS_TRAIT(W, TRAIT_TOOL_WRENCH)) + if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH)) if(user.action_busy) return if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) @@ -224,8 +234,8 @@ if(B != src && B.dir == dir) to_chat(user, SPAN_WARNING("There's already a barricade here.")) return - var/turf/open/T = loc - if(!(istype(T) && T.allow_construction)) + var/turf/open/turf = loc + if(!(istype(turf) && turf.allow_construction)) to_chat(user, SPAN_WARNING("[src] must be secured on a proper surface!")) return playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1) @@ -236,7 +246,7 @@ anchored = TRUE update_icon() //unanchored changes layer return - if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR)) + if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR)) if(user.action_busy) return if(!skillcheck(user, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_TRAINED)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm index 56328404702e..4d275ee7b9d8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(co_secure_boxes) //MARINE COMMAND CLOSET /obj/structure/closet/secure_closet/commander name = "commanding officer's locker" - req_access = list(ACCESS_MARINE_CAPTAIN) + req_access = list(ACCESS_MARINE_CO) icon_state = "secure_locked_commander" icon_closed = "secure_unlocked_commander" icon_locked = "secure_locked_commander" @@ -22,7 +22,7 @@ GLOBAL_LIST_EMPTY(co_secure_boxes) /obj/structure/closet/secure_closet/securecom name = "commanding officer's secure box" - req_access = list(ACCESS_MARINE_CAPTAIN) + req_access = list(ACCESS_MARINE_CO) desc = "A safe for the Commanding Officer to store any equipment they need to have ready at a moment's notice. There's a note inside saying that whatever was inside it before was moved out." icon = 'icons/obj/structures/marine_closet.dmi' icon_state = "commander_safe" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 11bd32b8fdb7..435dfce3f122 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -41,7 +41,7 @@ open() else src.req_access = list() - src.req_access += pick(get_all_accesses()) + src.req_access += pick(get_all_main_access()) ..() /obj/structure/closet/secure_closet/proc/togglelock(mob/living/user) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 99a4686663af..2393b5df8265 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -64,7 +64,7 @@ M.animation_attack_on(src) unpack() M.visible_message(SPAN_DANGER("[M] smashes [src] apart!"), \ - SPAN_DANGER("You smash [src] apart!"), 5, CHAT_TYPE_XENO_COMBAT) + SPAN_DANGER("You smash [src] apart!"), null, 5, CHAT_TYPE_XENO_COMBAT) return XENO_ATTACK_ACTION /obj/structure/largecrate/ex_act(power) @@ -356,8 +356,6 @@ /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb, /obj/item/weapon/gun/shotgun/merc = /obj/item/ammo_magazine/handful/shotgun/buckshot, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = /obj/item/ammo_magazine/handful/shotgun/buckshot, - /obj/item/weapon/gun/shotgun/double = /obj/item/ammo_magazine/handful/shotgun/buckshot, - /obj/item/weapon/gun/shotgun/double/with_stock = /obj/item/ammo_magazine/handful/shotgun/buckshot, /obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27, /obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion, /obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15, diff --git a/code/game/objects/structures/crates_lockers/secure_crates.dm b/code/game/objects/structures/crates_lockers/secure_crates.dm index abdab195fa11..b4ebb6d5e827 100644 --- a/code/game/objects/structures/crates_lockers/secure_crates.dm +++ b/code/game/objects/structures/crates_lockers/secure_crates.dm @@ -104,7 +104,7 @@ open() else src.req_access = list() - src.req_access += pick(get_all_accesses()) + src.req_access += pick(get_all_main_access()) ..() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index b19fc4788c01..e8e4b3b0966e 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -62,7 +62,38 @@ PLANT_CUT_MACHETE = 3 = Needs at least a machete to be cut down /obj/structure/flora/flamer_fire_act() fire_act() +/obj/structure/flora/fire_act() + if(QDELETED(src) || (fire_flag & FLORA_NO_BURN) || burning) + return + burning = TRUE + var/spread_time = rand(75, 150) + if(!(fire_flag & FLORA_BURN_NO_SPREAD)) + addtimer(CALLBACK(src, PROC_REF(spread_fire)), spread_time) + addtimer(CALLBACK(src, PROC_REF(burn_up)), spread_time + 5 SECONDS) +/obj/structure/flora/proc/spread_fire() + for(var/D in cardinal) //Spread fire + var/turf/T = get_step(src.loc, D) + if(T) + for(var/obj/structure/flora/F in T) + if(fire_flag & FLORA_BURN_SPREAD_ONCE) + F.fire_flag |= FLORA_BURN_NO_SPREAD + if(!(locate(/obj/flamer_fire) in T)) + new /obj/flamer_fire(T, create_cause_data("wildfire")) + +/obj/structure/flora/proc/burn_up() + new /obj/effect/decal/cleanable/dirt(loc) + if(center) + new /obj/effect/decal/cleanable/dirt(loc) //Produces more ash at the center + qdel(src) + +/obj/structure/flora/ex_act(power) + if(power >= EXPLOSION_THRESHOLD_VLOW) + deconstruct(FALSE) + +/obj/structure/flora/get_projectile_hit_boolean(obj/item/projectile/P) + . = ..() + return FALSE //trees /obj/structure/flora/tree @@ -83,6 +114,7 @@ PLANT_CUT_MACHETE = 3 = Needs at least a machete to be cut down //dead /obj/structure/flora/tree/dead icon = 'icons/obj/structures/props/deadtrees.dmi' + icon_state = "tree_1" /obj/structure/flora/tree/dead/tree_1 icon_state = "tree_1" @@ -149,6 +181,7 @@ ICE GRASS //brown /obj/structure/flora/grass/ice/brown + icon_state = "snowgrassbb_1" icon_tag = "snowgrassbb" /obj/structure/flora/grass/ice/brown/snowgrassbb_1 @@ -162,8 +195,8 @@ ICE GRASS //green /obj/structure/flora/grass/ice/green - icon_tag = "snowgrassgb" icon_state = "snowgrassgb_1" + icon_tag = "snowgrassgb" //both /obj/structure/flora/grass/ice/both @@ -202,6 +235,7 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. /obj/structure/flora/grass/desert icon = 'icons/obj/structures/props/dam.dmi' + icon_state = "lightgrass_1" // to replace with /obj/structure/flora/grass/desert/lightgrass_1 @@ -241,6 +275,8 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. icon_state = "lightgrass_12" //heavy desert grass +/obj/structure/flora/grass/desert/heavy + icon_state = "heavygrass_1" /obj/structure/flora/grass/desert/heavygrass_1 icon_state = "heavygrass_1" @@ -295,35 +331,6 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. overlays.Cut() overlays += image("icon"=src.icon,"icon_state"=overlay_type,"layer"=ABOVE_XENO_LAYER,"dir"=dir) -/obj/structure/flora/fire_act() - if(QDELETED(src) || (fire_flag & FLORA_NO_BURN) || burning) - return - burning = TRUE - var/spread_time = rand(75, 150) - if(!(fire_flag & FLORA_BURN_NO_SPREAD)) - addtimer(CALLBACK(src, PROC_REF(spread_fire)), spread_time) - addtimer(CALLBACK(src, PROC_REF(burn_up)), spread_time + 5 SECONDS) - -/obj/structure/flora/proc/spread_fire() - for(var/D in cardinal) //Spread fire - var/turf/T = get_step(src.loc, D) - if(T) - for(var/obj/structure/flora/F in T) - if(fire_flag & FLORA_BURN_SPREAD_ONCE) - F.fire_flag |= FLORA_BURN_NO_SPREAD - if(!(locate(/obj/flamer_fire) in T)) - new /obj/flamer_fire(T, create_cause_data("wildfire")) - -/obj/structure/flora/proc/burn_up() - new /obj/effect/decal/cleanable/dirt(loc) - if(center) - new /obj/effect/decal/cleanable/dirt(loc) //Produces more ash at the center - qdel(src) - -/obj/structure/flora/ex_act(power) - if(power >= EXPLOSION_THRESHOLD_VLOW) - deconstruct(FALSE) - // MAP VARIANTS // // PARENT FOR COLOR, CORNERS AND CENTERS, BASED ON DIRECTIONS // @@ -618,6 +625,7 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. name = "vines" desc = "A mass of twisted vines." icon = 'icons/effects/spacevines.dmi' + icon_state = "light_1" icon_tag = "light" variations = 3 cut_level = PLANT_CUT_MACHETE diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index e6abda3d1534..f6905d4d044d 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -740,7 +740,7 @@ icon_state = "small_wire" /obj/structure/prop/ice_colony/poly_kevlon_roll - name = "poly_kevlon roll" + name = "plastic roll" desc = "A big roll of poly-kevlon plastic used in temporary shelter construction." icon_state = "kevlon_roll" anchored = FALSE diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index ee0486846ec0..090c5ad56f87 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -439,11 +439,20 @@ desc = "An ultra-reinforced window designed to keep the briefing podium a secure area." icon_state = "fwindow" basestate = "fwindow" - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE +/obj/structure/window/reinforced/ultra/initialize_pass_flags(datum/pass_flags_container/PF) + . = ..() + if (PF) + PF.flags_can_pass_all = NONE + PF.flags_can_pass_front = NONE + PF.flags_can_pass_behind = PASS_OVER^(PASS_OVER_ACID_SPRAY) + flags_can_pass_front_temp = NONE + flags_can_pass_behind_temp = NONE + /obj/structure/window/reinforced/ultra/Initialize() . = ..() GLOB.hijack_bustable_windows += src @@ -566,8 +575,8 @@ name = "hull window" desc = "A glass window with a special rod matrix inside a wall frame. This one was made out of exotic materials to prevent hull breaches. No way to get through here." //icon_state = "rwindow0_debug" //Uncomment to check hull in the map editor - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 //Failsafe, shouldn't matter @@ -589,8 +598,8 @@ /obj/structure/window/framed/almayer/white/hull name = "hull window" desc = "An ultra-reinforced window designed to keep research a secure area. This one was made out of exotic materials to prevent hull breaches. No way to get through here." - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 //Failsafe, shouldn't matter @@ -619,8 +628,8 @@ name = "hull window" desc = "A glass window with a special rod matrix inside a wall frame. This one was made out of exotic materials to prevent hull breaches. No way to get through here." //icon_state = "rwindow0_debug" //Uncomment to check hull in the map editor - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 //Failsafe, shouldn't matter @@ -711,6 +720,16 @@ reinf = 1 window_frame = /obj/structure/window_frame/strata/reinforced +/obj/structure/window/framed/strata/hull + icon_state = "strata_window0" + basestate = "strata_window" + desc = "A glass window. Something tells you this one is somehow indestructible." + not_damageable = TRUE + not_deconstructable = TRUE + unslashable = TRUE + unacidable = TRUE + health = 1000000 + //Kutjevo Windows /obj/structure/window/framed/kutjevo @@ -734,8 +753,8 @@ /obj/structure/window/framed/kutjevo/reinforced/hull icon_state = "kutjevo_window_hull" desc = "A glass window. Something tells you this one is somehow indestructible." - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 @@ -771,8 +790,8 @@ /obj/structure/window/framed/solaris/reinforced/hull desc = "A glass window. Something tells you this one is somehow indestructible." - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 @@ -803,8 +822,8 @@ /obj/structure/window/framed/dev/reinforced/hull desc = "A glass window. Something tells you this one is somehow indestructible." - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unslashable = TRUE unacidable = TRUE health = 1000000 @@ -893,8 +912,8 @@ icon_state = "padded_cellwindow0" basestate = "padded_cellwindow" desc = "A glass window with a special rod matrix inside a wall frame. This one was made out of exotic materials to prevent hull breaches. No way to get through here." - not_damageable = 1 - not_deconstructable = 1 + not_damageable = TRUE + not_deconstructable = TRUE unacidable = TRUE health = 1000000 //Failsafe, shouldn't matter @@ -913,9 +932,15 @@ var/triggered = FALSE //indicates if the shutters have already been triggered /obj/structure/window/framed/corsat/hull/research + icon_state = "paddedresearch_rwindow0" + basestate = "paddedresearch_rwindow" + window_frame = /obj/structure/window_frame/corsat/research health = 300 /obj/structure/window/framed/corsat/hull/security + icon_state = "paddedsec_rwindow0" + basestate = "paddedsec_rwindow" + window_frame = /obj/structure/window_frame/corsat/security health = 400 /obj/structure/window/framed/corsat/hull/Destroy() @@ -942,3 +967,22 @@ P.setDir(EAST) INVOKE_ASYNC(P, TYPE_PROC_REF(/obj/structure/machinery/door, close)) + +/obj/structure/window/framed/corsat/indestructible/ + name = "hull window" + desc = "A glass window with a special rod matrix inside a wall frame. This one has been reinforced to take almost anything the universe can throw at it." + not_damageable = TRUE + not_deconstructable = TRUE + unslashable = TRUE + unacidable = TRUE + health = 1000000 + +/obj/structure/window/framed/corsat/indestructible/research + icon_state = "paddedresearch_rwindow0" + basestate = "paddedresearch_rwindow" + window_frame = /obj/structure/window_frame/corsat/research + +/obj/structure/window/framed/corsat/indestructible/security + icon_state = "paddedsec_rwindow0" + basestate = "paddedsec_rwindow" + window_frame = /obj/structure/window_frame/corsat/security diff --git a/code/game/objects/structures/window_frame.dm b/code/game/objects/structures/window_frame.dm index 445b9a0ecb8f..810b0560bf8b 100644 --- a/code/game/objects/structures/window_frame.dm +++ b/code/game/objects/structures/window_frame.dm @@ -236,6 +236,12 @@ basestate = "strata_window" reinforced = TRUE +/obj/structure/window_frame/strata/hull + icon_state = "strata_window0_frame" + basestate = "strata_window" + unslashable = TRUE + unacidable = TRUE + //Kutjevo frames /obj/structure/window_frame/kutjevo diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index baebe7cae5c8..3f7192b0090b 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -327,6 +327,7 @@ /turf/open/gm/grass name = "grass" + icon_state = "grass1" baseturfs = /turf/open/gm/grass scorchable = "grass1" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 1012944f4518..54cfdf6e34ea 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -245,6 +245,7 @@ if(!istype(A)) return + SEND_SIGNAL(src, COMSIG_TURF_ENTERED, A) SEND_SIGNAL(A, COMSIG_MOVABLE_TURF_ENTERED, src) // Let explosions know that the atom entered @@ -560,10 +561,10 @@ return NOT_WEEDABLE /turf/open/auto_turf/shale/layer1/is_weedable() - return FALSE + return SEMI_WEEDABLE /turf/open/auto_turf/shale/layer2/is_weedable() - return FALSE + return SEMI_WEEDABLE /turf/closed/wall/is_weedable() return FULLY_WEEDABLE //so we can spawn weeds on the walls diff --git a/code/game/turfs/walls/r_wall.dm b/code/game/turfs/walls/r_wall.dm index a3572138c287..8933ad31c0e8 100644 --- a/code/game/turfs/walls/r_wall.dm +++ b/code/game/turfs/walls/r_wall.dm @@ -265,7 +265,7 @@ name = "heavy reinforced wall" desc = "A huge chunk of ultra-reinforced metal used to separate rooms. Looks virtually indestructible." icon_state = "h_dome" - hull = 1 + hull = TRUE /turf/closed/wall/r_wall/biodome/biodome_unmeltable/ex_act(severity) //Should make it indestructible return diff --git a/code/game/world.dm b/code/game/world.dm index 3b3a1c2625d3..d6ddd1fa41f6 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -98,7 +98,7 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") // If the server's configured for local testing, get everything set up ASAP. // Shamelessly stolen from the test manager's host_tests() proc if(testing_locally) - master_mode = "extended" + master_mode = "Extended" // Wait for the game ticker to initialize while(!SSticker.initialized) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 8936131182c0..debffa9b25b0 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -172,9 +172,11 @@ var/list/admin_verbs_server = list( /datum/admins/proc/change_ground_map, /datum/admins/proc/change_ship_map, /datum/admins/proc/vote_ground_map, + /datum/admins/proc/override_ground_map, /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ /client/proc/cmd_debug_del_all, /datum/admins/proc/togglejoin, + /client/proc/toggle_cdn, ) var/list/admin_verbs_debug = list( diff --git a/code/modules/admin/server_verbs.dm b/code/modules/admin/server_verbs.dm index 0d35bd084196..47a60c043741 100644 --- a/code/modules/admin/server_verbs.dm +++ b/code/modules/admin/server_verbs.dm @@ -50,6 +50,42 @@ log_admin("[key_name(usr)] started a groundmap vote.") message_admins("[key_name_admin(usr)] started a groundmap vote.") +/datum/admins/proc/override_ground_map() + set category = "Server" + set name = "M: Override Next Map" + + if(!check_rights(R_SERVER)) + return + + var/map_type = tgui_alert(usr, "Override Ship or Ground Map?", "Map selection", list(GROUND_MAP, SHIP_MAP, "Cancel")) + if(map_type == "Cancel") + return + + var/map = input(usr, "Choose a custom map to run for next round","Upload Map") as null|file + if(!map) + return + if(copytext("[map]", -4) != ".dmm")//4 == length(".dmm") + to_chat(usr, SPAN_WARNING("Filename must end in '.dmm': [map]"), confidential = TRUE) + return + + message_admins(SPAN_ADMINNOTICE("[key_name_admin(usr)] is overriding the next '[map_type]' map with a custom one.")) + fcopy(map, "data/[OVERRIDE_MAPS_TO_FILENAME[map_type]]") + if(tgui_alert(usr, "Do you want to upload a custom map config or use defaults? Config controls things like survivors and monkey types, camouflages, lore messages, map items, nightmare, special environmental features...", "Map Config Flavor", list("Default", "Override")) == "Override") + tgui_alert(usr, "Choose the custom map configuration for next round. Make sure it's VALID. It MUST have \"override_map\":true !", "Warning", list("OK!")) + var/map_config = input(usr, "Choose custom map configuration to upload", "Upload Map Config") as null|file + if(map_config) + var/parse_check = json_decode(file2text(map_config)) + if(parse_check && parse_check["override_map"]) + fcopy(map_config, MAP_TO_FILENAME[map_type]) + tgui_alert(usr, "Done, using uploaded map_config. ALWAYS check at start of round that the map loaded correctly when using this. Passing a map vote or changing it with verb vote will revert these changes. Good luck!", "One little thing...", list("OK")) + message_admins(SPAN_ADMINNOTICE("[key_name_admin(usr)] overrode next '[map_type]' map with '[map]' and '[map_config]' for settings.")) + return + to_chat(usr, SPAN_ADMINNOTICE("Couldn't retrieve map_config file or it was invalid, using default config.")) + + fcopy(OVERRIDE_DEFAULT_MAP_CONFIG[map_type], MAP_TO_FILENAME[map_type]) + tgui_alert(usr, "Done, using default map_config ('Unknown' map). ALWAYS check at start of round that the map loaded correctly when using this. Passing a map vote or changing it with verb vote will revert these changes. Good luck!", "One little thing...", list("OK")) + message_admins(SPAN_ADMINNOTICE("[key_name_admin(usr)] overrode next '[map_type]' map with '[map]' and default settings.")) + /datum/admins/proc/change_ship_map() set category = "Server" set name = "M: Change Ship Map" diff --git a/code/modules/admin/tabs/round_tab.dm b/code/modules/admin/tabs/round_tab.dm index 980de9eed855..deb27e73f7dc 100644 --- a/code/modules/admin/tabs/round_tab.dm +++ b/code/modules/admin/tabs/round_tab.dm @@ -181,3 +181,34 @@ else to_chat(usr, "Error: Start Now: Game has already started.") return FALSE + +/client/proc/toggle_cdn() + set name = "Toggle CDN" + set category = "Server" + var/static/admin_disabled_cdn_transport = null + if(alert(usr, "Are you sure you want to toggle CDN asset transport?", "Confirm", "Yes", "No") != "Yes") + return + + var/current_transport = CONFIG_GET(string/asset_transport) + if(!current_transport || current_transport == "simple") + if(admin_disabled_cdn_transport) + CONFIG_SET(string/asset_transport, admin_disabled_cdn_transport) + admin_disabled_cdn_transport = null + SSassets.OnConfigLoad() + message_admins("[key_name_admin(usr)] re-enabled the CDN asset transport") + log_admin("[key_name(usr)] re-enabled the CDN asset transport") + return + + to_chat(usr, SPAN_ADMINNOTICE("The CDN is not enabled!")) + if(alert(usr, "CDN asset transport is not enabled! If you're having issues with assets, you can also try disabling filename mutations.", "CDN asset transport is not enabled!", "Try disabling filename mutations", "Nevermind") == "Try disabling filename mutations") + SSassets.transport.dont_mutate_filenames = !SSassets.transport.dont_mutate_filenames + message_admins("[key_name_admin(usr)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms.") + log_admin("[key_name(usr)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms.") + return + + admin_disabled_cdn_transport = current_transport + CONFIG_SET(string/asset_transport, "simple") + SSassets.OnConfigLoad() + SSassets.transport.dont_mutate_filenames = TRUE + message_admins("[key_name_admin(usr)] disabled CDN asset transport") + log_admin("[key_name(usr)] disabled CDN asset transport") diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 52aae50a966a..c7a7664af3e8 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -203,6 +203,9 @@ message_admins(SPAN_DANGER("ERROR: Non-admin [key_name(usr)] attempted to execute a SDQL query!")) log_admin("non-admin attempted to execute a SDQL query!") return FALSE + var/prompt = tgui_alert(usr, "Run SDQL2 Query?", "SDQL2", list("Yes", "Cancel")) + if (prompt != "Yes") + return var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[key_name(usr)]") if(length(results) == 3) for(var/I in 1 to 3) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index be8a5693df6e..700d42808a07 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -23,7 +23,7 @@ stafftype = "[admin_holder.rank]" msg = strip_html(msg) - log_admin("[key_name(src)] : [msg]") + log_admin("DEAD: [key_name(src)] : [msg]") if (!msg) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 3b3240405e89..8a017446858d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -149,11 +149,11 @@ if (H.wear_id) var/obj/item/card/id/id = H.wear_id id.icon_state = "gold" - id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() + id:access = get_global_access() else var/obj/item/card/id/id = new/obj/item/card/id(M); id.icon_state = "gold" - id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() + id:access = get_all_main_access() id.registered_name = H.real_name id.registered_ref = WEAKREF(H) id.assignment = "Captain" diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm index 52ebc7190372..72d976bf11f1 100644 --- a/code/modules/asset_cache/asset_cache_item.dm +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -33,3 +33,9 @@ if (extstart) ext = ".[copytext(name, extstart+1)]" resource = file + +/datum/asset_cache_item/vv_edit_var(var_name, var_value) + return FALSE + +/datum/asset_cache_item/CanProcCall(procname) + return FALSE diff --git a/code/modules/asset_cache/transports/webroot_transport.dm b/code/modules/asset_cache/transports/webroot_transport.dm new file mode 100644 index 000000000000..e3cb33b8fabf --- /dev/null +++ b/code/modules/asset_cache/transports/webroot_transport.dm @@ -0,0 +1,87 @@ +/// CDN Webroot asset transport. +/datum/asset_transport/webroot + name = "CDN Webroot asset transport" + +/datum/asset_transport/webroot/Load() + if (validate_config(log = FALSE)) + load_existing_assets() + +/// Processes thru any assets that were registered before we were loaded as a transport. +/datum/asset_transport/webroot/proc/load_existing_assets() + for (var/asset_name in SSassets.cache) + var/datum/asset_cache_item/ACI = SSassets.cache[asset_name] + save_asset_to_webroot(ACI) + +/// Register a browser asset with the asset cache system +/// We also save it to the CDN webroot at this step instead of waiting for send_assets() +/// asset_name - the identifier of the asset +/// asset - the actual asset file or an asset_cache_item datum. +/datum/asset_transport/webroot/register_asset(asset_name, asset) + . = ..() + var/datum/asset_cache_item/ACI = . + + if (istype(ACI) && ACI.hash) + save_asset_to_webroot(ACI) + +/// Saves the asset to the webroot taking into account namespaces and hashes. +/datum/asset_transport/webroot/proc/save_asset_to_webroot(datum/asset_cache_item/ACI) + var/webroot = CONFIG_GET(string/asset_cdn_webroot) + var/newpath = "[webroot][get_asset_suffex(ACI)]" + if (fexists(newpath)) + return + if (fexists("[newpath].gz")) //its a common pattern in webhosting to save gzip'ed versions of text files and let the webserver serve them up as gzip compressed normal files, sometimes without keeping the original version. + return + return fcopy(ACI.resource, newpath) + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/webroot/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if (!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + var/url = CONFIG_GET(string/asset_cdn_url) //config loading will handle making sure this ends in a / + return "[url][get_asset_suffex(asset_cache_item)]" + +/datum/asset_transport/webroot/proc/get_asset_suffex(datum/asset_cache_item/asset_cache_item) + var/base = "[copytext(asset_cache_item.hash, 1, 3)]/" + var/filename = "asset.[asset_cache_item.hash][asset_cache_item.ext]" + if (length(asset_cache_item.namespace)) + base = "namespaces/[copytext(asset_cache_item.namespace, 1, 3)]/[asset_cache_item.namespace]/" + if (!asset_cache_item.namespace_parent) + filename = "[asset_cache_item.name]" + return base + filename + + +/// webroot asset sending - does nothing unless passed legacy assets +/datum/asset_transport/webroot/send_assets(client/client, list/asset_list) + . = FALSE + var/list/legacy_assets = list() + if (!islist(asset_list)) + asset_list = list(asset_list) + for (var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if (!istype(ACI)) + ACI = SSassets.cache[asset_name] + if (!ACI) + legacy_assets += asset_name //pass it on to base send_assets so it can output an error + continue + if (ACI.legacy) + legacy_assets[asset_name] = ACI + if (length(legacy_assets)) + . = ..(client, legacy_assets) + + +/// webroot slow asset sending - does nothing. +/datum/asset_transport/webroot/send_assets_slow(client/client, list/files, filerate) + return FALSE + +/datum/asset_transport/webroot/validate_config(log = TRUE) + if (!CONFIG_GET(string/asset_cdn_url)) + if (log) + log_asset("ERROR: [type]: Invalid Config: ASSET_CDN_URL") + return FALSE + if (!CONFIG_GET(string/asset_cdn_webroot)) + if (log) + log_asset("ERROR: [type]: Invalid Config: ASSET_CDN_WEBROOT") + return FALSE + return TRUE diff --git a/code/modules/character_traits/robotic_limbs.dm b/code/modules/character_traits/robotic_limbs.dm index ee72f22d9d07..be72eca2f6fc 100644 --- a/code/modules/character_traits/robotic_limbs.dm +++ b/code/modules/character_traits/robotic_limbs.dm @@ -20,7 +20,7 @@ /datum/character_trait/robo_limb/apply_trait(mob/living/carbon/human/target, datum/equipment_preset/preset) var/string_paygrade = preset.load_rank(target) var/datum/paygrade/paygrade_datum = GLOB.paygrades[string_paygrade] - if(paygrade_datum.ranking < minimum_ranking) + if(paygrade_datum?.ranking < minimum_ranking) to_chat(target, SPAN_WARNING("You aren't a high enough rank to be eligible to have a prosthetic [robo_limb_name]!")) return var/obj/limb/limb = target.get_limb(code_limb) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 8f0939474427..fbec4aa13f36 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -26,6 +26,8 @@ var/adminobs = null var/area = null var/time_died_as_mouse = null //when the client last died as a mouse + /// The descriminator for larva queue ordering: Generally set to timeofdeath except for facehuggers/admin z-level play + var/larva_queue_time var/donator = 0 var/adminhelped = 0 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ea2f7989942e..d2d69d095dbd 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -104,7 +104,9 @@ var/const/MAX_SAVE_SLOTS = 10 //SEA specific preferences ///holds our preferred job options for jobs - var/pref_special_job_options = list() + var/list/pref_special_job_options = list() + ///Holds assignment of character slots to jobs. + var/list/pref_job_slots = list() //WL Council preferences. var/yautja_status = WHITELIST_NORMAL @@ -331,6 +333,8 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "

Occupation Choices:

" dat += "
" dat += "\tSet Role Preferences" + dat += "
" + dat += "\tAssign Character Slots to Roles" dat += "" dat += "
" @@ -469,10 +473,6 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Be [role_name]: [be_special & (1<
" n++ - - dat += "
" - dat += "\tSet Role Preferences" - dat += "
" if(MENU_CO) if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) dat += "
" @@ -746,6 +746,83 @@ var/const/MAX_SAVE_SLOTS = 10 onclose(user, "mob_occupation", user.client, list("_src_" = "prefs", "preference" = "job", "task" = "close")) return +//limit - The amount of jobs allowed per column. Defaults to 13 to make it look nice. +//splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. +//width - Screen' width. Defaults to 550 to make it look nice. +//height - Screen's height. Defaults to 500 to make it look nice. +/datum/preferences/proc/set_job_slots(mob/user, limit = 19, list/splitJobs = list(JOB_CHIEF_REQUISITION), width = 950, height = 700) + if(!RoleAuthority) + return + + var/HTML = "" + HTML += "
" + HTML += "Assign character slots to jobs.
Unavailable occupations are crossed out.

" + HTML += "
Done

" // Easier to press up here. + HTML += "
" // Table within a table for alignment, also allows you to easily add more colomns. + HTML += "" + var/index = -1 + + //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. + + var/list/active_role_names = GLOB.gamemode_roles[GLOB.master_mode] + if(!active_role_names) + active_role_names = ROLES_DISTRESS_SIGNAL + + for(var/role_name as anything in active_role_names) + var/datum/job/job = RoleAuthority.roles_by_name[role_name] + if(!job) + debug_log("Missing job for prefs: [role_name]") + continue + index++ + if((index >= limit) || (job.title in splitJobs)) + HTML += "
" + index = 0 + + HTML += "" + continue + else if(job.flags_startup_parameters & ROLE_WHITELISTED && !(RoleAuthority.roles_whitelist[user.ckey] & job.flags_whitelist)) + HTML += "[job.disp_title]" + continue + else if(!job.can_play_role(user.client)) + HTML += "[job.disp_title]" + continue + + HTML += "[job.disp_title]" + + var/slot_name = get_job_slot_name(job.title) + HTML += "" + + HTML += "
" + if(jobban_isbanned(user, job.title)) + HTML += "[job.disp_title]BANNED
WHITELISTED
TIMELOCKED
[slot_name]" + HTML += "
" + HTML += "

" + + var/b_color + var/msg + if(toggle_prefs & TOGGLE_START_JOIN_CURRENT_SLOT) + b_color = "red" + msg = "This preference is ignored when joining at the start of the round." + else + b_color = "green" + msg = "This preference is used when joining at the start of the round." + HTML += "
[msg]
" + if(toggle_prefs & TOGGLE_LATE_JOIN_CURRENT_SLOT) + b_color = "red" + msg = "This preference is ignored when joining a round in progress." + else + b_color = "green" + msg = "This preference is used when joining a round in progress." + HTML += "
[msg]
" + + HTML += "
Reset
" + HTML += "
" + + close_browser(user, "preferences") + show_browser(user, HTML, "Job Assignment", "job_slots_assignment", "size=[width]x[height]") + onclose(user, "job_slots_assignment", user.client, list("_src_" = "prefs", "preference" = "job_slot", "task" = "close")) + return + /datum/preferences/proc/SetRecords(mob/user) var/HTML = "" HTML += "
" @@ -836,6 +913,40 @@ var/const/MAX_SAVE_SLOTS = 10 job_preference_list[J.title] = priority return TRUE +/datum/preferences/proc/assign_job_slot(mob/user, target_job) + var/list/slot_options = list(JOB_SLOT_RANDOMISED_TEXT = JOB_SLOT_RANDOMISED_SLOT, JOB_SLOT_CURRENT_TEXT = JOB_SLOT_CURRENT_SLOT) + var/savefile/S = new /savefile(path) + var/slot_name + for(var/slot in 1 to MAX_SAVE_SLOTS) + S.cd = "/character[slot]" + S["real_name"] >> slot_name + if(slot_name) + slot_options["[slot_name] (slot #[slot])"] = slot + var/chosen_slot = tgui_input_list(user, "Assign character for [target_job] job", "Slot assignment", slot_options) + if(chosen_slot) + pref_job_slots[target_job] = slot_options[chosen_slot] + set_job_slots(user) + +/datum/preferences/proc/get_job_slot_name(job_title) + . = JOB_SLOT_CURRENT_TEXT + if(!(job_title in pref_job_slots)) + return + var/slot_number = pref_job_slots[job_title] + switch(slot_number) + if(JOB_SLOT_RANDOMISED_SLOT) + return JOB_SLOT_RANDOMISED_TEXT + if(1 to MAX_SAVE_SLOTS) + var/savefile/S = new /savefile(path) + S.cd = "/character[slot_number]" + return "[S["real_name"]] (slot #[slot_number])" + +/datum/preferences/proc/reset_job_slots() + pref_job_slots = list() + var/datum/job/J + for(var/role in RoleAuthority.roles_by_path) + J = RoleAuthority.roles_by_path[role] + pref_job_slots[J.title] = JOB_SLOT_CURRENT_SLOT + /datum/preferences/proc/process_link(mob/user, list/href_list) var/whitelist_flags = RoleAuthority.roles_whitelist[user.ckey] @@ -861,7 +972,26 @@ var/const/MAX_SAVE_SLOTS = 10 SetJob(user, href_list["text"], priority) else SetChoices(user) - return 1 + return TRUE + if("job_slot") + switch(href_list["task"]) + if("close") + close_browser(user, "job_slots_assignment") + ShowChoices(user) + if("assign") + assign_job_slot(user, href_list["target_job"]) + if("start_join") + toggle_prefs ^= TOGGLE_START_JOIN_CURRENT_SLOT + set_job_slots(user) + if("late_join") + toggle_prefs ^= TOGGLE_LATE_JOIN_CURRENT_SLOT + set_job_slots(user) + if("reset") + reset_job_slots() + set_job_slots(user) + else + set_job_slots(user) + return TRUE if("loadout") switch(href_list["task"]) if("input") @@ -1098,8 +1228,9 @@ var/const/MAX_SAVE_SLOTS = 10 if("pred_gender") predator_gender = predator_gender == MALE ? FEMALE : MALE if("pred_age") - var/new_predator_age = tgui_input_number(user, "Choose your Predator's age(20 to 10000):", "Character Preference", 1234, 10000, 20) - if(new_predator_age) predator_age = max(min( round(text2num(new_predator_age)), 10000),20) + var/new_predator_age = tgui_input_number(user, "Choose your Predator's age(175 to 3000):", "Character Preference", 1234, 3000, 175) + if(new_predator_age) + predator_age = max(min( round(text2num(new_predator_age)), 3000),175) if("pred_trans_type") var/new_translator_type = tgui_input_list(user, "Choose your translator type.", "Translator Type", PRED_TRANSLATORS) if(!new_translator_type) @@ -1808,11 +1939,26 @@ var/const/MAX_SAVE_SLOTS = 10 ShowChoices(user) return 1 -// Transfers both physical characteristics and character information to character -/datum/preferences/proc/copy_all_to(mob/living/carbon/human/character, safety = 0) + +/// Loads appropriate character slot for the given job as assigned in preferences. +/datum/preferences/proc/find_assigned_slot(job_title, is_late_join = FALSE) + if(toggle_prefs & (is_late_join ? TOGGLE_LATE_JOIN_CURRENT_SLOT : TOGGLE_START_JOIN_CURRENT_SLOT)) + return + var/slot_for_job = pref_job_slots[job_title] + switch(slot_for_job) + if(JOB_SLOT_RANDOMISED_SLOT) + be_random_body = TRUE + be_random_name = TRUE + if(1 to MAX_SAVE_SLOTS) + load_character(slot_for_job) + +/// Transfers both physical characteristics and character information to character +/datum/preferences/proc/copy_all_to(mob/living/carbon/human/character, job_title, is_late_join = FALSE) if(!istype(character)) return + find_assigned_slot(job_title, is_late_join) + if(be_random_name) real_name = random_name(gender) @@ -1828,15 +1974,16 @@ var/const/MAX_SAVE_SLOTS = 10 character.voice = real_name character.name = character.real_name - character.flavor_texts["general"] = flavor_texts["general"] - character.flavor_texts["head"] = flavor_texts["head"] - character.flavor_texts["face"] = flavor_texts["face"] - character.flavor_texts["eyes"] = flavor_texts["eyes"] - character.flavor_texts["torso"] = flavor_texts["torso"] - character.flavor_texts["arms"] = flavor_texts["arms"] - character.flavor_texts["hands"] = flavor_texts["hands"] - character.flavor_texts["legs"] = flavor_texts["legs"] - character.flavor_texts["feet"] = flavor_texts["feet"] + if(!be_random_body) + character.flavor_texts["general"] = flavor_texts["general"] + character.flavor_texts["head"] = flavor_texts["head"] + character.flavor_texts["face"] = flavor_texts["face"] + character.flavor_texts["eyes"] = flavor_texts["eyes"] + character.flavor_texts["torso"] = flavor_texts["torso"] + character.flavor_texts["arms"] = flavor_texts["arms"] + character.flavor_texts["hands"] = flavor_texts["hands"] + character.flavor_texts["legs"] = flavor_texts["legs"] + character.flavor_texts["feet"] = flavor_texts["feet"] character.med_record = strip_html(med_record) character.sec_record = strip_html(sec_record) @@ -1990,47 +2137,6 @@ var/const/MAX_SAVE_SLOTS = 10 message_admins("[character] ([character.ckey]) has spawned with their gender as plural or neuter. Please notify coders.") character.gender = MALE - -// Transfers the character's information (name, flavor text, records, roundstart clothes, etc.) to the mob -/datum/preferences/proc/copy_information_to(mob/living/carbon/human/character, safety = 0) - if(!istype(character)) - return - - if(be_random_name) - real_name = random_name(gender) - - if(CONFIG_GET(flag/humans_need_surnames)) - var/firstspace = findtext(real_name, " ") - var/name_length = length(real_name) - if(!firstspace) //we need a surname - real_name += " [pick(last_names)]" - else if(firstspace == name_length) - real_name += "[pick(last_names)]" - - character.real_name = real_name - character.voice = real_name - character.name = character.real_name - - character.flavor_texts["general"] = flavor_texts["general"] - character.flavor_texts["head"] = flavor_texts["head"] - character.flavor_texts["face"] = flavor_texts["face"] - character.flavor_texts["eyes"] = flavor_texts["eyes"] - character.flavor_texts["torso"] = flavor_texts["torso"] - character.flavor_texts["arms"] = flavor_texts["arms"] - character.flavor_texts["hands"] = flavor_texts["hands"] - character.flavor_texts["legs"] = flavor_texts["legs"] - character.flavor_texts["feet"] = flavor_texts["feet"] - - character.med_record = med_record - character.sec_record = sec_record - character.gen_record = gen_record - character.exploit_record = exploit_record - - character.origin = origin - character.personal_faction = faction - character.religion = religion - - /datum/preferences/proc/open_load_dialog(mob/user) var/dat = "" dat += "
" diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index ee8c855d8b31..1d4b77f15550 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -415,6 +415,33 @@ var/global/list/gear_datums_by_name = list() display_name = "Camera" path = /obj/item/device/camera +/datum/gear/toy/mags + cost = 1 + +/datum/gear/toy/mags/magazine_dirty + display_name = "Magazine" + path = /obj/item/prop/magazine/dirty + +/datum/gear/toy/mags/boots_magazine_one + display_name = "Boots Issue No.117" + path = /obj/item/prop/magazine/boots/n117 + +/datum/gear/toy/mags/boots_magazine_two + display_name = "Boots Issue No.150" + path = /obj/item/prop/magazine/boots/n150 + +/datum/gear/toy/mags/boot_magazine_three + display_name = "Boots Issue No.160" + path = /obj/item/prop/magazine/boots/n160 + +/datum/gear/toy/mags/boots_magazine_four + display_name = "Boots Issue No.54" + path = /obj/item/prop/magazine/boots/n054 + +/datum/gear/toy/mags/boots_magazine_five + display_name = "Boots Issue No.55" + path = /obj/item/prop/magazine/boots/n055 + /datum/gear/toy/film display_name = "Camera film" path = /obj/item/device/camera_film @@ -463,6 +490,10 @@ var/global/list/gear_datums_by_name = list() display_name = "Walkman" path = /obj/item/device/walkman +/datum/gear/toy/crayon + display_name = "Crayon" + path = /obj/item/toy/crayon/rainbow + /datum/gear/weapon category = "Weapons" cost = 4 diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 49ffc911ecbc..0a1b54112f18 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -150,6 +150,7 @@ S["view_controller"] >> View_MC S["observer_huds"] >> observer_huds S["pref_special_job_options"] >> pref_special_job_options + S["pref_job_slots"] >> pref_job_slots S["synth_name"] >> synthetic_name S["synth_type"] >> synthetic_type @@ -253,6 +254,7 @@ hotkeys = sanitize_integer(hotkeys, FALSE, TRUE, TRUE) custom_cursors = sanitize_integer(custom_cursors, FALSE, TRUE, TRUE) pref_special_job_options = sanitize_islist(pref_special_job_options, list()) + pref_job_slots = sanitize_islist(pref_job_slots, list()) vars["fps"] = fps if(remembered_key_bindings) @@ -328,6 +330,7 @@ S["view_controller"] << View_MC S["observer_huds"] << observer_huds S["pref_special_job_options"] << pref_special_job_options + S["pref_job_slots"] << pref_job_slots S["synth_name"] << synthetic_name S["synth_type"] << synthetic_type diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 48fc73def2f0..9e3d9eb33766 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -201,13 +201,19 @@ to_chat(src, SPAN_BOLDNOTICE("The icon on your taskbar will no longer flash when an admin messages you. Warning, use at own risk.")) //be special -/client/verb/toggle_be_special(role in be_special_flags) +/client/verb/toggle_be_special() set name = "Toggle SpecialRole Candidacy" set category = "Preferences" set desc = "Toggles which special roles you would like to be a candidate for, during events." + + var/list/be_special_flags = list( + "Xenomorph after unrevivable death" = BE_ALIEN_AFTER_DEATH, + "Agent" = BE_AGENT, + ) + var/role = tgui_input_list(usr, "Toggle which candidacy?", "Select role", be_special_flags) + if(!role) + return var/role_flag = be_special_flags[role] - - if(!role_flag) return prefs.be_special ^= role_flag prefs.save_preferences() to_chat(src, SPAN_BOLDNOTICE("You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible).")) diff --git a/code/modules/clothing/glasses/night.dm b/code/modules/clothing/glasses/night.dm index be58dd80cc25..63d0c8f364af 100644 --- a/code/modules/clothing/glasses/night.dm +++ b/code/modules/clothing/glasses/night.dm @@ -100,27 +100,25 @@ req_skill_level = SKILL_SPEC_SMARTGUN var/far_sight = FALSE - var/powerpack = null + var/obj/item/weapon/gun/smartgun/linked_smartgun = null /obj/item/clothing/glasses/night/m56_goggles/Destroy() - powerpack = null + linked_smartgun = null disable_far_sight() return ..() -/obj/item/clothing/glasses/night/m56_goggles/proc/link_powerpack(mob/user) - if(!QDELETED(user) && !QDELETED(user.back)) - if(istype(user.back, /obj/item/smartgun_powerpack)) - powerpack = user.back +/obj/item/clothing/glasses/night/m56_goggles/proc/link_smartgun(mob/user) + if(!QDELETED(user)) + linked_smartgun = locate() in user + if(linked_smartgun) return TRUE return FALSE /obj/item/clothing/glasses/night/m56_goggles/mob_can_equip(mob/user, slot) if(slot == WEAR_EYES) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(!istype(H.back, /obj/item/smartgun_powerpack)) - to_chat(user, "You must be wearing an M56 Powerpack on your back to wear these.") - return FALSE + if(!link_smartgun(user)) + to_chat(user, SPAN_NOTICE("You must have your smartgun equipped to wear these.")) + return FALSE return ..() /obj/item/clothing/glasses/night/m56_goggles/equipped(mob/user, slot) @@ -129,6 +127,7 @@ return ..() /obj/item/clothing/glasses/night/m56_goggles/dropped(mob/living/carbon/human/user) + linked_smartgun = null disable_far_sight(user) return ..() @@ -137,8 +136,8 @@ if(user.glasses != src) to_chat(user, SPAN_WARNING("You can't activate far sight without wearing \the [src]!")) return - if(!link_powerpack(user)) - to_chat(user, SPAN_WARNING("You can't use this without a powerpack!")) + if(!link_smartgun(user)) + to_chat(user, SPAN_WARNING("You can't use this without a smartgun!")) return far_sight = TRUE if(user) @@ -146,7 +145,7 @@ user.client.change_view(8, src) START_PROCESSING(SSobj, src) else - powerpack = null + linked_smartgun = null far_sight = FALSE if(user) if(user.client) @@ -154,8 +153,8 @@ STOP_PROCESSING(SSobj, src) var/datum/action/item_action/m56_goggles/far_sight/FT = locate(/datum/action/item_action/m56_goggles/far_sight) in actions - FT.update_button_icon() - + if(FT) + FT.update_button_icon() /obj/item/clothing/glasses/night/m56_goggles/proc/disable_far_sight(mob/living/carbon/human/user) if(!istype(user)) @@ -169,14 +168,11 @@ if(!istype(user)) set_far_sight(null, FALSE) return PROCESS_KILL - if(powerpack != user.back) + if(!link_smartgun(user)) set_far_sight(user, FALSE) return PROCESS_KILL - var/obj/item/smartgun_powerpack/pp = user.back - if(istype(pp)) - var/obj/item/cell/c = pp.pcell - if(!pp.drain_powerpack(25 * delta_time, c)) - set_far_sight(user, FALSE) + if(!linked_smartgun.drain_battery(25 * delta_time)) + set_far_sight(user, FALSE) /datum/action/item_action/m56_goggles/far_sight/New() . = ..() diff --git a/code/modules/clothing/gloves/marine_gloves.dm b/code/modules/clothing/gloves/marine_gloves.dm index 4d5b17f35847..bbddc1f10bb7 100644 --- a/code/modules/clothing/gloves/marine_gloves.dm +++ b/code/modules/clothing/gloves/marine_gloves.dm @@ -163,3 +163,18 @@ /obj/item/clothing/gloves/marine/veteran/insulated/van_bandolier name = "custom shooting gloves" desc = "Highly protective against injury, temperature, and electric shock. Cool in the summer, warm in the winter, and a secure grip on any surface. You could buy a lot for the price of these, and they're worth every penny." + +/obj/item/clothing/gloves/marine/joe + name = "Seegson hazardous gloves" + desc = "Special Synthetic gloves made for touching and interacting with extremely hazardous materials. Resistant to biohazard liquids, corrosive materials and more. SEEGSON is proudly displayed on the back, along with a biohazard symbol. Tomorrow, Together." + icon_state = "working_joe" + item_state = "working_joe" + siemens_coefficient = 0 + armor_melee = CLOTHING_ARMOR_LOW + armor_energy = CLOTHING_ARMOR_MEDIUM + armor_bomb = CLOTHING_ARMOR_MEDIUM + armor_bio = CLOTHING_ARMOR_VERYHIGH + armor_rad = CLOTHING_ARMOR_VERYHIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUM + unacidable = TRUE + adopts_squad_color = FALSE diff --git a/code/modules/clothing/shoes/marine_shoes.dm b/code/modules/clothing/shoes/marine_shoes.dm index b9aa567d1f61..d4c772336e2a 100644 --- a/code/modules/clothing/shoes/marine_shoes.dm +++ b/code/modules/clothing/shoes/marine_shoes.dm @@ -63,6 +63,16 @@ /obj/item/clothing/shoes/marine/upp_knife knife_type = /obj/item/attachable/bayonet/upp +/obj/item/clothing/shoes/marine/joe + name = "biohazard boots" + desc = "A pair of somewhat cheaply made biohazard boots. Tomorrow, Together." + armor_bullet = CLOTHING_ARMOR_LOW + armor_energy = CLOTHING_ARMOR_MEDIUMLOW + armor_bio = CLOTHING_ARMOR_MEDIUMHIGH + armor_rad = CLOTHING_ARMOR_MEDIUMHIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUMLOW + knife_type = /obj/item/attachable/bayonet + /obj/item/clothing/shoes/dress name = "dress shoes" desc = "Pre-polished fancy dress shoes. You can see your reflection in them." diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 1c74080a928f..c621f112d7fc 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -297,3 +297,7 @@ /obj/item/device/walkman, ) +/obj/item/clothing/suit/storage/snow_suit/liaison + name = "liaison's winter coat" + desc = "A Weyland-Yutani winter coat. Only the best comfort for the liaison in a cold environment." + icon_state = "snowsuit_liaison" diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index db7f725a0c73..ab62ea782a09 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -184,7 +184,7 @@ var/list/squad_colors_chat = list(rgb(230,125,125), rgb(255,230,80), rgb(255,150 new_look = GLOB.armor_style_list[user.client.prefs.preferred_armor] icon_state = replacetext(icon_state,"1","[new_look]") - update_icon() + update_icon(user) /obj/item/clothing/suit/storage/marine/pickup(mob/user) if(flags_marine_armor & ARMOR_LAMP_ON) @@ -416,7 +416,7 @@ var/list/squad_colors_chat = list(rgb(230,125,125), rgb(255,230,80), rgb(255,150 /obj/item/clothing/suit/storage/marine/smartgunner - name = "M56 combat harness" + name = "\improper M56 combat harness" desc = "A heavy protective vest designed to be worn with the M56 Smartgun System. \nIt has specially designed straps and reinforcement to carry the Smartgun and accessories." icon_state = "8" item_state = "armor" @@ -446,6 +446,35 @@ var/list/squad_colors_chat = list(rgb(230,125,125), rgb(255,230,80), rgb(255,150 name = "M56 combat harness" //select_gamemode_skin(type) +/obj/item/clothing/suit/storage/marine/smartgunner/mob_can_equip(mob/equipping_mob, slot, disable_warning = FALSE) + . = ..() + + if(equipping_mob.back) + to_chat(equipping_mob, SPAN_WARNING("You can't equip [src] while wearing a backpack.")) + return FALSE + +/obj/item/clothing/suit/storage/marine/smartgunner/equipped(mob/user, slot, silent) + . = ..() + + if(slot == WEAR_JACKET) + RegisterSignal(user, COMSIG_HUMAN_ATTEMPTING_EQUIP, PROC_REF(check_equipping)) + +/obj/item/clothing/suit/storage/marine/smartgunner/proc/check_equipping(mob/living/carbon/human/equipping_human, obj/item/equipping_item, slot) + SIGNAL_HANDLER + + if(slot != WEAR_BACK) + return + + . = COMPONENT_HUMAN_CANCEL_ATTEMPT_EQUIP + + if(equipping_item.flags_equip_slot == SLOT_BACK) + to_chat(equipping_human, SPAN_WARNING("You can't equip [equipping_item] on your back while wearing [src].")) + return + +/obj/item/clothing/suit/storage/marine/smartgunner/unequipped(mob/user, slot) + . = ..() + + UnregisterSignal(user, COMSIG_HUMAN_ATTEMPTING_EQUIP) /obj/item/clothing/suit/storage/marine/leader name = "\improper B12 pattern marine armor" diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 4b679c77c247..540c311f9221 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -161,7 +161,7 @@ flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE flags_atom = NO_NAME_OVERRIDE flags_cold_protection = ICE_PLANET_MIN_COLD_PROT - suit_restricted = list(/obj/item/clothing/suit/armor/vest/pilot, /obj/item/clothing/suit/storage/marine/light/vest/dcc, /obj/item/clothing/suit/storage/jacket/marine/pilot) + suit_restricted = list(/obj/item/clothing/suit/armor/vest/pilot, /obj/item/clothing/suit/storage/marine/light/vest/dcc, /obj/item/clothing/suit/storage/jacket/marine/pilot, /obj/item/clothing/suit/storage/marine/light/vest) /obj/item/clothing/under/marine/officer/pilot/flight name = "tactical pilot officer flightsuit" @@ -777,12 +777,22 @@ icon_state = "liaison_regular" worn_state = "liaison_regular" +/obj/item/clothing/under/liaison_suit/charcoal + name = "liaison's charcoal suit" + desc = "A stiff, stylish charcoal suit commonly worn by businessmen from the Weyland-Yutani corporation. Expertly crafted to make you look like a prick." + icon_state = "liaison_charcoal" + worn_state = "liaison_charcoal" + /obj/item/clothing/under/liaison_suit/outing name = "liaison's outfit" desc = "A casual outfit consisting of a collared shirt and a vest. Looks like something you might wear on the weekends, or on a visit to a derelict colony." icon_state = "liaison_outing" worn_state = "liaison_outing" +/obj/item/clothing/under/liaison_suit/outing/red + icon_state = "liaison_outing_red" + worn_state = "liaison_outing_red" + /obj/item/clothing/under/liaison_suit/formal name = "liaison's white suit" desc = "A formal, white suit. Looks like something you'd wear to a funeral, a Weyland-Yutani corporate dinner, or both. Stiff as a board, but makes you feel like rolling out of a Rolls-Royce." @@ -795,6 +805,12 @@ icon_state = "liaison_suspenders" worn_state = "liaison_suspenders" +/obj/item/clothing/under/liaison_suit/blazer + name = "liaison's blue blazer" + desc = "A stiff but casual blue blazer. Similar can be found in any Weyland-Yutani office. Only the finest wear for the galaxy's most cunning." + icon_state = "liaison_blue_blazer" + worn_state = "liaison_blue_blazer" + /obj/item/clothing/under/marine/reporter name = "combat correspondent uniform" desc = "A relaxed and robust uniform fit for any potential reporting needs." @@ -842,12 +858,44 @@ worn_state = "synth_councillor" displays_id = FALSE +/obj/item/clothing/under/rank/synthetic/flight + name = "tactical flightsuit" + desc = "A flightsuit with plenty of leather straps, pouches, and other essential gear." + icon_state = "pilot_flightsuit_alt" + item_state = "pilot_flightsuit_alt" + worn_state = "pilot_flightsuit_alt" + flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE + flags_atom = NO_NAME_OVERRIDE|NO_SNOW_TYPE + flags_cold_protection = ICE_PLANET_MIN_COLD_PROT + /obj/item/clothing/under/rank/synthetic/old icon_state = "rdalt_s" worn_state = "rdalt_s" /obj/item/clothing/under/rank/synthetic/joe name = "\improper Working Joe Uniform" - desc = "A cheap uniform made for Synthetic labor." + desc = "A cheap uniform made for Synthetic labor. Tomorrow, Together." icon_state = "working_joe" worn_state = "working_joe" + +/obj/item/clothing/under/rank/synthetic/joe/engi + name = "\improper Working Joe Hazardous Uniform" + desc = "A reinforced uniform used for Synthetic labor in hazardous areas. Tomorrow, Together." + icon_state = "working_joe_engi" + worn_state = "working_joe_engi" + flags_inventory = CANTSTRIP + armor_melee = CLOTHING_ARMOR_LOW + armor_energy = CLOTHING_ARMOR_MEDIUMLOW + armor_bomb = CLOTHING_ARMOR_MEDIUMLOW + armor_bio = CLOTHING_ARMOR_MEDIUM + armor_rad = CLOTHING_ARMOR_HIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUMLOW + flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE + +/obj/item/clothing/under/rank/synthetic/joe/engi/overalls + name = "\improper Working Joe Hazardous Uniform" + desc = "A reinforced uniform used for Synthetic labor in hazardous areas. Comes with an additional layer for liquid hazards. Tomorrow, Together." + icon_state = "working_joe_overalls" + worn_state = "working_joe_overalls" + armor_bio = CLOTHING_ARMOR_MEDIUMHIGH + unacidable = TRUE diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 87f0e3b6548c..f21cd6498615 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -512,27 +512,33 @@ START_PROCESSING(SSprocessing, src) -/obj/effect/alien/resin/acid_pillar/proc/can_target(mob/living/carbon/C, position_to_get = 0) - if(get_dist(src, C) > range) +/obj/effect/alien/resin/acid_pillar/proc/can_target(mob/living/carbon/current_mob, position_to_get = 0) + /// Is it a friendly xenomorph that is on fire + var/burning_friendly = FALSE + + if(get_dist(src, current_mob) > range) return FALSE - var/check_dead = FALSE - if(C.ally_of_hivenumber(hivenumber)) - if(!C.on_fire || !isxeno(C)) + if(current_mob.ally_of_hivenumber(hivenumber)) + if(!isxeno(current_mob)) + return FALSE + if(!current_mob.on_fire) return FALSE - else if(C.lying || C.is_mob_incapacitated(TRUE)) + burning_friendly = TRUE + + else if(current_mob.lying || current_mob.is_mob_incapacitated(TRUE)) return FALSE - if(!check_dead && C.health < 0) + if(!burning_friendly && current_mob.health < 0) return FALSE - if(check_dead && C.stat == DEAD) + if(current_mob.stat == DEAD) return FALSE var/turf/current_turf var/turf/last_turf = loc var/atom/temp_atom = new acid_type() var/current_pos = 1 - for(var/i in getline(src, C)) + for(var/i in getline(src, current_mob)) current_turf = i if(LinkBlocked(temp_atom, last_turf, current_turf)) qdel(temp_atom) diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 9376e2b6e914..c38e540efb30 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -108,6 +108,7 @@ var/last_healed = 0 var/last_attempt = 0 // logs time of last attempt to prevent spam. if you want to destroy it, you must commit. var/last_larva_time = 0 + var/last_larva_queue_time = 0 var/last_surge_time = 0 var/spawn_cooldown = 30 SECONDS var/surge_cooldown = 90 SECONDS @@ -135,25 +136,40 @@ // Handle spawning larva if core is connected to a hive if(linked_hive) - for(var/mob/living/carbon/xenomorph/larva/L in range(2, src)) - if(!L.ckey && L.burrowable && !QDELETED(L)) - visible_message(SPAN_XENODANGER("[L] quickly burrows into \the [src].")) - linked_hive.stored_larva++ - linked_hive.hive_ui.update_burrowed_larva() - qdel(L) - - if((last_larva_time + spawn_cooldown) < world.time && can_spawn_larva()) // every minute + for(var/mob/living/carbon/xenomorph/larva/worm in range(2, src)) + if((!worm.ckey || worm.stat == DEAD) && worm.burrowable && (worm.hivenumber == linked_hive.hivenumber) && !QDELETED(worm)) + visible_message(SPAN_XENODANGER("[worm] quickly burrows into \the [src].")) + if(!worm.banished) + // Goob job bringing her back home, but no doubling please + linked_hive.stored_larva++ + linked_hive.hive_ui.update_burrowed_larva() + qdel(worm) + + var/spawning_larva = can_spawn_larva() && (last_larva_time + spawn_cooldown) < world.time + if(spawning_larva) last_larva_time = world.time + if(spawning_larva || (last_larva_queue_time + spawn_cooldown * 4) < world.time) + last_larva_queue_time = world.time var/list/players_with_xeno_pref = get_alien_candidates() - if(players_with_xeno_pref && players_with_xeno_pref.len && can_spawn_larva()) - spawn_burrowed_larva(pick(players_with_xeno_pref)) + if(players_with_xeno_pref && players_with_xeno_pref.len) + if(spawning_larva && spawn_burrowed_larva(players_with_xeno_pref[1])) + // We were in spawning_larva mode and successfully spawned someone + message_alien_candidates(players_with_xeno_pref, dequeued = 1) + else + // Just time to update everyone their queue status (or the spawn failed) + message_alien_candidates(players_with_xeno_pref, dequeued = 0) if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time) last_surge_time = world.time linked_hive.stored_larva++ + linked_hive.hijack_burrowed_left-- announce_dchat("The hive has gained another burrowed larva! Use the Join As Xeno verb to take it.", src) if(surge_cooldown > 30 SECONDS) //mostly for sanity purposes surge_cooldown = surge_cooldown - surge_incremental_reduction //ramps up over time + if(linked_hive.hijack_burrowed_left < 1) + linked_hive.hijack_burrowed_surge = FALSE + xeno_message(SPAN_XENOANNOUNCE("The hive's power wanes. You will no longer gain pooled larva over time."), 3, linked_hive.hivenumber) + // Hive core can repair itself over time if(health < maxhealth && last_healed <= world.time) diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 172cbb671997..4ce6be802f3d 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -366,6 +366,17 @@ new /obj/item/ammo_magazine/rifle/m4ra/ap(src) new /obj/item/ammo_magazine/rifle/m4ra/ap(src) +/obj/item/storage/box/kit/m41a_kit + name = "\improper M41A Rifle Kit" + pro_case_overlay = "pursuit" + +/obj/item/storage/box/kit/m41a_kit/fill_preset_inventory() + new /obj/item/weapon/gun/rifle/m41a(src) + new /obj/item/attachable/angledgrip(src) + new /obj/item/attachable/suppressor(src) + new /obj/item/attachable/extended_barrel(src) + new /obj/item/ammo_magazine/rifle/ap(src) + new /obj/item/ammo_magazine/rifle/ap(src) /obj/item/storage/box/kit/heavy_support name = "\improper Forward HPR Shield Kit" diff --git a/code/modules/cm_marines/equipment/weapons.dm b/code/modules/cm_marines/equipment/weapons.dm index 97484d8b13c1..858b9dbeb79d 100644 --- a/code/modules/cm_marines/equipment/weapons.dm +++ b/code/modules/cm_marines/equipment/weapons.dm @@ -14,7 +14,7 @@ . = ..() new /obj/item/clothing/glasses/night/m56_goggles(src) new /obj/item/weapon/gun/smartgun(src) - new /obj/item/smartgun_powerpack(src) + new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner(src) update_icon() @@ -42,7 +42,7 @@ . = ..() new /obj/item/clothing/glasses/night/m56_goggles(src) new /obj/item/weapon/gun/smartgun/co(src) - new /obj/item/smartgun_powerpack(src) + new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner(src) new /obj/item/storage/belt/marine/smartgunner(src) update_icon() @@ -71,7 +71,7 @@ . = ..() new /obj/item/clothing/glasses/night/m56_goggles(src) new /obj/item/weapon/gun/smartgun/dirty(src) - new /obj/item/smartgun_powerpack/pmc(src) + new /obj/item/smartgun_battery(src) new /obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc(src) new /obj/item/clothing/head/helmet/marine/veteran/pmc/gunner(src) new /obj/item/storage/belt/gun/smartgunner/pmc/full(src) @@ -85,84 +85,3 @@ overlays += image(icon, "smartgun") else icon_state = "kit_case_e" - -/obj/item/smartgun_powerpack - name = "\improper M56 powerpack" - desc = "A heavy reinforced backpack with support equipment and power cells for the M56 Smartgun System." - icon = 'icons/obj/items/clothing/backpacks.dmi' - icon_state = "powerpack" - flags_atom = FPRINT|CONDUCT - flags_equip_slot = SLOT_BACK - w_class = SIZE_HUGE - var/obj/item/cell/pcell = null - var/reloading = 0 - -/obj/item/smartgun_powerpack/Initialize(mapload, ...) - . = ..() - pcell = new /obj/item/cell/high(src) - -/obj/item/smartgun_powerpack/Destroy() - . = ..() - QDEL_NULL(pcell) - -/obj/item/smartgun_powerpack/dropped(mob/living/user) // called on unequip - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/night/m56_goggles)) - if(H.back == src) - to_chat(H, SPAN_NOTICE("You remove \the [H.glasses].")) - H.drop_inv_item_on_ground(H.glasses) - ..() - - -/obj/item/smartgun_powerpack/attackby(obj/item/A as obj, mob/user as mob) - if(istype(A,/obj/item/cell)) - var/obj/item/cell/C = A - visible_message("[user.name] swaps out the power cell in the [src.name].","You swap out the power cell in the [src] and drop the old one.") - to_chat(user, "The new cell contains: [C.charge] power.") - pcell.update_icon() - pcell.forceMove(get_turf(user)) - pcell = C - user.drop_inv_item_to_loc(C, src) - playsound(src,'sound/machines/click.ogg', 25, 1) - else - ..() - -/obj/item/smartgun_powerpack/get_examine_text(mob/user) - . = ..() - if (pcell && get_dist(user, src) <= 1) - . += "A small gauge in the corner reads: Power: [pcell.charge] / [pcell.maxcharge]." - -/obj/item/smartgun_powerpack/proc/drain_powerpack(drain = 0, obj/item/cell/c) - var/actual_drain = (rand(drain/2,drain)/25) - if(c && c.charge > 0) - if(c.charge > actual_drain) - c.charge -= actual_drain - else - c.charge = 0 - to_chat(usr, SPAN_WARNING("[src] emits a low power warning and immediately shuts down!")) - return TRUE - if(!c || c.charge == 0) - to_chat(usr, SPAN_WARNING("[src] emits a low power warning and immediately shuts down!")) - return FALSE - return FALSE - -/obj/item/smartgun_powerpack/pmc - icon_state = "powerpack" - -/obj/item/smartgun_powerpack/pmc/Initialize(mapload, ...) - . = ..() - pcell = new /obj/item/cell/hyper(src) - -/obj/item/smartgun_powerpack/snow - icon_state = "powerpack" - -/obj/item/smartgun_powerpack/fancy - icon_state = "powerpackw" - -/obj/item/smartgun_powerpack/merc - icon_state = "powerpackp" - -/obj/item/smartgun_powerpack/clf - name = "\improper M56 'Freedom' powerpack" - desc = "A heavy reinforced backpack with support equipment and power cells for the M56 Smartgun System. This one has the CLF logo carved into the backplate." diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm index 1327788af55f..3539a43e6c15 100644 --- a/code/modules/cm_marines/marines_consoles.dm +++ b/code/modules/cm_marines/marines_consoles.dm @@ -109,7 +109,7 @@ Access:
"} - var/known_access_rights = get_all_accesses() + var/known_access_rights = get_all_main_access() for(var/A in target_id_card.access) if(A in known_access_rights) contents += " [get_access_desc(A)]" @@ -177,7 +177,7 @@ if(!authenticated || !target_id_card) return - var/new_name = params["name"] // reject_bad_name() can be added here + var/new_name = strip_html(params["name"]) if(!new_name) visible_message(SPAN_NOTICE("[src] buzzes rudely.")) return @@ -191,13 +191,13 @@ return if(target == "Custom") - var/custom_name = params["custom_name"] + var/custom_name = strip_html(params["custom_name"]) if(custom_name) target_id_card.assignment = custom_name else var/list/new_access = list() if(is_centcom) - new_access = get_centcom_access(target) + new_access = get_all_weyland_access() else var/datum/job/job = RoleAuthority.roles_for_mode[target] @@ -205,7 +205,7 @@ visible_message("[SPAN_BOLD("[src]")] states, \"DATA ERROR: Can not find next entry in database: [target]\"") return new_access = job.get_access() - target_id_card.access -= get_all_centcom_access() + get_all_accesses() + target_id_card.access -= get_all_weyland_access() + get_all_main_access() target_id_card.access |= new_access target_id_card.assignment = target target_id_card.rank = target @@ -227,7 +227,7 @@ log_idmod(target_id_card, " [key_name_admin(usr)] granted [access_type] IFF. ") return TRUE access_type = text2num(params["access_target"]) - if(access_type in (is_centcom ? get_all_centcom_access() : get_all_accesses())) + if(access_type in (is_centcom ? get_all_weyland_access() : get_main_marine_access())) if(access_type in target_id_card.access) target_id_card.access -= access_type log_idmod(target_id_card, " [key_name_admin(usr)] revoked access '[access_type]'. ") @@ -239,7 +239,7 @@ if(!authenticated || !target_id_card) return - target_id_card.access |= (is_centcom ? get_all_centcom_access() : get_all_accesses()) + target_id_card.access |= (is_centcom ? get_all_weyland_access() : get_main_marine_access()) target_id_card.faction_group |= factions log_idmod(target_id_card, " [key_name_admin(usr)] granted the ID all access and USCM IFF. ") return TRUE @@ -984,7 +984,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) JOB_PMC_MEDIC = 224, JOB_PMC_INVESTIGATOR = 224, JOB_PMC_ENGINEER = 225, - JOB_PMC = 226, + JOB_PMC_STANDARD = 226, JOB_PMC_DOCTOR = 227, JOB_WY_GOON_LEAD = 228, JOB_WY_GOON = 229, @@ -1014,6 +1014,91 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) "[squad_name][JOB_SQUAD_MARINE]" = (squad_number + 6), ) squad_number += 10 + if(FACTION_WY, FACTION_PMC) + jobs = list( + // Note that jobs divisible by 10 are considered heads of staff, and bolded + // 00-09: High Command + JOB_DIRECTOR = 00, + JOB_CHIEF_EXECUTIVE = 01, + // 10-19: Command Level Staff + JOB_PMC_DIRECTOR = 10, + JOB_DIVISION_MANAGER = 10, + JOB_ASSISTANT_MANAGER = 11, + // 20-29: Corporate Staff + JOB_EXECUTIVE_SUPERVISOR = 20, + JOB_SENIOR_EXECUTIVE = 21, + JOB_EXECUTIVE_SPECIALIST = 22, + JOB_EXECUTIVE = 23, + JOB_JUNIOR_EXECUTIVE = 24, + // 30-39: Security + JOB_WY_GOON_LEAD = 30, + JOB_WY_GOON = 31, + // 40-49: MedSci + JOB_PMC_SYNTH = 40, + JOB_PMC_XENO_HANDLER = 41, + JOB_PMC_DOCTOR = 42, + JOB_WY_GOON_RESEARCHER = 43, + // 50-59: Engineering & Vehicle Crew + JOB_PMC_CREWMAN = 51, + JOB_PMC_ENGINEER = 52, + // 60-69: Investigation Team + JOB_PMC_LEAD_INVEST = 60, + JOB_PMC_INVESTIGATOR = 61, + JOB_PMC_DETAINER = 62, + + // 70-79 PMCs Combat Team + JOB_PMC_LEADER = 70, + JOB_PMC_SNIPER = 71, + JOB_PMC_GUNNER = 72, + JOB_PMC_MEDIC = 73, + JOB_PMC_STANDARD = 75, + + // ANYTHING ELSE = UNKNOWN_JOB_ID, Unknowns/custom jobs will appear after civilians, and before stowaways + JOB_STOWAWAY = 999, + + // 200-229: Visitors + JOB_UPP_REPRESENTATIVE = 201, + JOB_TWE_REPRESENTATIVE = 201, + JOB_COLONEL = 201, + JOB_TRAINEE = 202, //Trainees aren't really cared about + ) + if(FACTION_UPP) + jobs = list( + // Note that jobs divisible by 10 are considered heads of staff, and bolded + // 00-09: High Command + JOB_UPP_KOL_OFFICER = 00, + // 10-19: Command Team + JOB_UPP_MAY_OFFICER = 10, + JOB_UPP_KPT_OFFICER = 11, + JOB_UPP_SRLT_OFFICER = 13, + JOB_UPP_LT_OFFICER = 14, + // 20-29: Commandos + JOB_UPP_COMMANDO_LEADER = 20, + JOB_UPP_COMMANDO_MEDIC = 21, + JOB_UPP_COMMANDO = 22, + // 30-39: Security + JOB_UPP_POLICE = 31, + // 40-49: MedSci + JOB_UPP_LT_DOKTOR = 41, + // 50-59: Engineering + JOB_UPP_COMBAT_SYNTH = 50, + JOB_UPP_CREWMAN = 51, + // 60-69: Soldiers + JOB_UPP_LEADER = 60, + JOB_UPP_SPECIALIST = 61, + JOB_UPP_MEDIC = 62, + JOB_UPP_ENGI = 63, + JOB_UPP = 64, + JOB_UPP_CONSCRIPT = 65, + + // ANYTHING ELSE = UNKNOWN_JOB_ID, Unknowns/custom jobs will appear after civilians, and before stowaways + JOB_STOWAWAY = 999, + + // 200-229: Visitors + JOB_UPP_REPRESENTATIVE = 201, + JOB_TWE_REPRESENTATIVE = 201, + JOB_COLONEL = 201 + ) else jobs = list() diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index 431b03fb31d3..14e990809f4f 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -484,14 +484,13 @@ var/list/ob_type_fuel_requirements var/list/turf_list = list() for(var/turf/T in range(range_num, target)) - if(protected_by_pylon(TURF_PROTECTION_OB, T)) - continue - turf_list += T for(var/i = 1 to total_amount) for(var/k = 1 to instant_amount) var/turf/U = pick(turf_list) + if(protected_by_pylon(TURF_PROTECTION_OB, U)) //If the turf somehow gained OB protection while the cluster was firing + continue fire_in_a_hole(U) sleep(delay_between_clusters) diff --git a/code/modules/cm_tech/tech.dm b/code/modules/cm_tech/tech.dm index 5c37dafef3f3..dea505f3237a 100644 --- a/code/modules/cm_tech/tech.dm +++ b/code/modules/cm_tech/tech.dm @@ -21,6 +21,9 @@ var/background_icon = "background" var/background_icon_locked = "marine" + var/announce_name + var/announce_message + /datum/tech/proc/can_unlock(mob/M) SHOULD_CALL_PARENT(TRUE) @@ -68,6 +71,10 @@ log_admin("[key_name_admin(user)] has bought '[name]' via tech points.") holder.spend_points(required_points) update_icon(node) + + if(!(tech_flags & TECH_FLAG_NO_ANNOUNCE) && announce_message && announce_name) + marine_announcement(announce_message, announce_name, 'sound/misc/notice2.ogg') + return TRUE /datum/tech/ui_status(mob/user, datum/ui_state/state) diff --git a/code/modules/cm_tech/techs/abstract/repeatable.dm b/code/modules/cm_tech/techs/abstract/repeatable.dm index e9706538071c..4b240814e0c6 100644 --- a/code/modules/cm_tech/techs/abstract/repeatable.dm +++ b/code/modules/cm_tech/techs/abstract/repeatable.dm @@ -4,9 +4,6 @@ /datum/tech/repeatable name = "Repeatable Tech" - var/announce_name - var/announce_message - tech_flags = TECH_FLAG_MULTIUSE var/purchase_cooldown = 10 SECONDS var/next_purchase = 0 @@ -35,8 +32,6 @@ /datum/tech/repeatable/on_unlock() ..() - if(!(tech_flags & TECH_FLAG_NO_ANNOUNCE) && announce_message && announce_name) - marine_announcement(announce_message, announce_name, 'sound/misc/notice2.ogg') next_purchase = world.time + purchase_cooldown required_points += increase_per_purchase diff --git a/code/modules/cm_tech/techs/abstract/transitory.dm b/code/modules/cm_tech/techs/abstract/transitory.dm index 09301b6ba205..7798b6053d0e 100644 --- a/code/modules/cm_tech/techs/abstract/transitory.dm +++ b/code/modules/cm_tech/techs/abstract/transitory.dm @@ -87,3 +87,22 @@ required_points = 5 flags = TREE_FLAG_MARINE + +/datum/tech/transitory/tier4 + name = "Unlock Tier 4" + tier = /datum/tier/three_transition_four + + before = /datum/tier/three + next = /datum/tier/four + +/datum/tech/transitory/tier4/xeno + techs_to_unlock = 0 + required_points = 5 + + flags = TREE_FLAG_XENO + +/datum/tech/transitory/tier4/marine + techs_to_unlock = 0 + required_points = 5 + + flags = TREE_FLAG_MARINE diff --git a/code/modules/cm_tech/techs/marine/tier3/cryorine.dm b/code/modules/cm_tech/techs/marine/tier3/cryorine.dm index fb9666623e1c..84361baa618f 100644 --- a/code/modules/cm_tech/techs/marine/tier3/cryorine.dm +++ b/code/modules/cm_tech/techs/marine/tier3/cryorine.dm @@ -23,4 +23,4 @@ /datum/tech/repeatable/cryomarine/on_unlock() . = ..() - SSticker.mode.get_specific_call("Marine Cryo Reinforcements (Squad)", FALSE, FALSE) + SSticker.mode.get_specific_call("Marine Cryo Reinforcements (Squad)", FALSE, FALSE, announce_dispatch_message = FALSE) diff --git a/code/modules/cm_tech/techs/marine/tier4/nuke.dm b/code/modules/cm_tech/techs/marine/tier4/nuke.dm new file mode 100644 index 000000000000..eb4e64b59951 --- /dev/null +++ b/code/modules/cm_tech/techs/marine/tier4/nuke.dm @@ -0,0 +1,43 @@ +#define NUKE_UNLOCK_TIME (120 MINUTES) + +/datum/tech/nuke + name = "Nuclear Device" + //desc = "Purchase a nuclear device. Only able to purchase after X minutes into the operation. It's the only way to be sure." //See New() + icon_state = "nuke" + + required_points = 20 + + tier = /datum/tier/four + + announce_name = "NUCLEAR ARSENAL ACQUIRED" + announce_message = "A nuclear device has been purchased and will be delivered to requisitions via ASRS." + + flags = TREE_FLAG_MARINE + +/datum/tech/nuke/New() + desc = "Purchase a nuclear device. Only able to purchase [NUKE_UNLOCK_TIME / (1 MINUTES)] minutes into the operation. It's the only way to be sure." + +/datum/tech/nuke/on_unlock() + . = ..() + + var/datum/supply_order/new_order = new /datum/supply_order() + new_order.ordernum = supply_controller.ordernum + supply_controller.ordernum++ + new_order.object = supply_controller.supply_packs["Intel Operational Nuke"] + new_order.orderedby = MAIN_AI_SYSTEM + + supply_controller.shoppinglist += new_order + +/datum/tech/nuke/can_unlock(mob/unlocking_mob) + . = ..() + + if(!.) + return + + if(ROUND_TIME < NUKE_UNLOCK_TIME) + to_chat(unlocking_mob, SPAN_WARNING("You cannot purchase this node before [NUKE_UNLOCK_TIME / (1 MINUTES)] minutes into the operation.")) + return FALSE + + return TRUE + +#undef NUKE_UNLOCK_TIME diff --git a/code/modules/decorators/weapon_map_decorator.dm b/code/modules/decorators/weapon_map_decorator.dm index b724fac1c1d2..55e78f349a60 100644 --- a/code/modules/decorators/weapon_map_decorator.dm +++ b/code/modules/decorators/weapon_map_decorator.dm @@ -1,5 +1,5 @@ /datum/decorator/weapon_map_decorator - var/list/map_array = list() + var/list/camouflage_type var/icon/c_icon var/icon/l_icon @@ -8,7 +8,7 @@ var/icon/j_icon /datum/decorator/weapon_map_decorator/is_active_decor() - return map_array.Find(SSmapping.configs[GROUND_MAP].map_name) + return SSmapping.configs[GROUND_MAP].camouflage_type == camouflage_type /datum/decorator/weapon_map_decorator/get_decor_types() return typesof(/obj/item/weapon/gun) - /obj/item/weapon/gun @@ -28,41 +28,41 @@ gun.item_icons[WEAR_J_STORE] = j_icon /datum/decorator/weapon_map_decorator/classic + camouflage_type = "classic" c_icon = 'icons/obj/items/weapons/guns/guns_by_map/classic/guns_obj.dmi' l_icon = 'icons/obj/items/weapons/guns/guns_by_map/classic/guns_lefthand.dmi' r_icon = 'icons/obj/items/weapons/guns/guns_by_map/classic/guns_righthand.dmi' b_icon = 'icons/obj/items/weapons/guns/guns_by_map/classic/back.dmi' j_icon = 'icons/obj/items/weapons/guns/guns_by_map/classic/suit_slot.dmi' - map_array = list(MAP_PRISON_STATION, MAP_PRISON_STATION_V3, MAP_LV522_CHANCES_CLAIM) /datum/decorator/weapon_map_decorator/desert + camouflage_type = "desert" c_icon = 'icons/obj/items/weapons/guns/guns_by_map/desert/guns_obj.dmi' l_icon = 'icons/obj/items/weapons/guns/guns_by_map/desert/guns_lefthand.dmi' r_icon = 'icons/obj/items/weapons/guns/guns_by_map/desert/guns_righthand.dmi' b_icon = 'icons/obj/items/weapons/guns/guns_by_map/desert/back.dmi' j_icon = 'icons/obj/items/weapons/guns/guns_by_map/desert/suit_slot.dmi' - map_array = list(MAP_WHISKEY_OUTPOST, MAP_DESERT_DAM, MAP_BIG_RED, MAP_KUTJEVO) /datum/decorator/weapon_map_decorator/jungle + camouflage_type = "jungle" c_icon = 'icons/obj/items/weapons/guns/guns_by_map/jungle/guns_obj.dmi' l_icon = 'icons/obj/items/weapons/guns/guns_by_map/jungle/guns_lefthand.dmi' r_icon = 'icons/obj/items/weapons/guns/guns_by_map/jungle/guns_righthand.dmi' b_icon = 'icons/obj/items/weapons/guns/guns_by_map/jungle/back.dmi' j_icon = 'icons/obj/items/weapons/guns/guns_by_map/jungle/suit_slot.dmi' - map_array = list(MAP_LV_624, MAP_RUNTIME,MAP_NEW_VARADERO) /datum/decorator/weapon_map_decorator/snow + camouflage_type = "snow" c_icon = 'icons/obj/items/weapons/guns/guns_by_map/snow/guns_obj.dmi' l_icon = 'icons/obj/items/weapons/guns/guns_by_map/snow/guns_lefthand.dmi' r_icon = 'icons/obj/items/weapons/guns/guns_by_map/snow/guns_righthand.dmi' b_icon = 'icons/obj/items/weapons/guns/guns_by_map/snow/back.dmi' j_icon = 'icons/obj/items/weapons/guns/guns_by_map/snow/suit_slot.dmi' - map_array = list(MAP_CORSAT, MAP_SOROKYNE_STRATA, MAP_ICE_COLONY, MAP_ICE_COLONY_V3) /datum/decorator/weapon_map_decorator/urban + camouflage_type = "urban" // Sprites not currently all done! c_icon = 'icons/obj/items/weapons/guns/guns_by_map/urban/guns_obj.dmi' l_icon = 'icons/obj/items/weapons/guns/guns_by_map/urban/guns_lefthand.dmi' r_icon = 'icons/obj/items/weapons/guns/guns_by_map/urban/guns_righthand.dmi' b_icon = 'icons/obj/items/weapons/guns/guns_by_map/urban/back.dmi' j_icon = 'icons/obj/items/weapons/guns/guns_by_map/urban/suit_slot.dmi' - map_array = list() diff --git a/code/modules/defenses/planted_flag.dm b/code/modules/defenses/planted_flag.dm index 18300c63ffa1..fac725047fa9 100644 --- a/code/modules/defenses/planted_flag.dm +++ b/code/modules/defenses/planted_flag.dm @@ -27,6 +27,8 @@ /obj/structure/machinery/defenses/planted_flag/Initialize() . = ..() + RegisterSignal(src, COMSIG_ATOM_TURF_CHANGE, PROC_REF(turf_changed)) + if(turned_on) apply_area_effect() start_processing() @@ -80,6 +82,11 @@ apply_buff_to_player(H) +/obj/structure/machinery/defenses/planted_flag/proc/turf_changed() + SIGNAL_HANDLER + if(range_bounds) + QDEL_NULL(range_bounds) + /obj/structure/machinery/defenses/planted_flag/proc/apply_buff_to_player(mob/living/carbon/human/H) H.activate_order_buff(COMMAND_ORDER_HOLD, buff_intensity, 1.5 SECONDS) H.activate_order_buff(COMMAND_ORDER_FOCUS, buff_intensity, 1.5 SECONDS) diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index 959376d12cba..4357564afa77 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -63,6 +63,7 @@ start_processing() set_range() update_icon() + RegisterSignal(src, COMSIG_ATOM_TURF_CHANGE, PROC_REF(unset_range)) /obj/structure/machinery/defenses/sentry/Destroy() //Clear these for safety's sake. targets = null @@ -107,7 +108,9 @@ range_bounds = RECT(x, y - 4, 7, 7) /obj/structure/machinery/defenses/sentry/proc/unset_range() - qdel(range_bounds) + SIGNAL_HANDLER + if(range_bounds) + QDEL_NULL(range_bounds) /obj/structure/machinery/defenses/sentry/update_icon() ..() diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm index c669a8a3c61e..311605a407c7 100644 --- a/code/modules/gear_presets/clf.dm +++ b/code/modules/gear_presets/clf.dm @@ -566,7 +566,6 @@ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/mateba/highimpact(new_human), WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/mateba/highimpact(new_human), WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/clf(new_human), WEAR_J_STORE) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack/clf(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/clf/full(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) @@ -1023,7 +1022,6 @@ H.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/mateba/highimpact(H), WEAR_IN_JACKET) H.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/mateba/highimpact(H), WEAR_IN_JACKET) H.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/clf(H), WEAR_J_STORE) - H.equip_to_slot_or_del(new /obj/item/smartgun_powerpack/clf(H), WEAR_BACK) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), WEAR_HANDS) H.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/clf/full(H), WEAR_WAIST) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(H), WEAR_FEET) diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 3d8d1a6883ef..a1ea205a8f61 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -1,47 +1,3 @@ -/datum/equipment_preset/cmb - name = "Colonial Marshal" - - assignment = "CMB Deputy" - rank = JOB_CMB - faction = FACTION_USCM - -/datum/equipment_preset/cmb/New() - . = ..() - access = get_all_accesses() + get_all_civilian_accesses() - -/datum/equipment_preset/cmb/load_name(mob/living/carbon/human/new_human, randomise) - new_human.gender = pick(80;MALE,20;FEMALE) - var/datum/preferences/A = new() - A.randomize_appearance(new_human) - var/random_name - var/static/list/colors = list("BLACK" = list(15, 15, 25), "BROWN" = list(102, 51, 0), "AUBURN" = list(139, 62, 19)) - var/static/list/hair_colors = colors.Copy() + list("BLONDE" = list(197, 164, 30), "CARROT" = list(174, 69, 42)) - var/hair_color = pick(hair_colors) - new_human.r_hair = hair_colors[hair_color][1] - new_human.g_hair = hair_colors[hair_color][2] - new_human.b_hair = hair_colors[hair_color][3] - new_human.r_facial = hair_colors[hair_color][1] - new_human.g_facial = hair_colors[hair_color][2] - new_human.b_facial = hair_colors[hair_color][3] - var/eye_color = pick(colors) - new_human.r_eyes = colors[eye_color][1] - new_human.g_eyes = colors[eye_color][2] - new_human.b_eyes = colors[eye_color][3] - if(new_human.gender == MALE) - random_name = "[pick(first_names_male)] [pick(last_names)]" - new_human.h_style = pick("Crewcut", "Shaved Head", "Buzzcut", "Undercut", "Side Undercut", "Pvt. Joker", "Marine Fade", "Low Fade", "Medium Fade", "High Fade", "No Fade", "Coffee House Cut", "Flat Top",) - new_human.f_style = pick("5 O'clock Shadow", "Shaved", "Full Beard", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache", "7 O'clock Shadow", "7 O'clock Moustache",) - else - random_name = "[pick(first_names_female)] [pick(last_names)]" - new_human.h_style = pick("Ponytail 1", "Ponytail 2", "Ponytail 3", "Ponytail 4", "Pvt. Redding", "Pvt. Clarison", "Cpl. Dietrich", "Pvt. Vasquez", "Marine Bun", "Marine Bun 2", "Marine Flat Top",) - new_human.change_real_name(new_human, random_name) - new_human.age = rand(20,45) - new_human.r_hair = rand(15,35) - new_human.g_hair = rand(15,35) - new_human.b_hair = rand(25,45) - -//*****************************************************************************************************/ - /datum/equipment_preset/cmb name = "Colonial Marshal" faction = FACTION_USCM @@ -53,8 +9,7 @@ /datum/equipment_preset/cmb/New() . = ..() - access = get_all_accesses() + get_all_civilian_accesses() - + access = get_friendly_ert_access() /datum/equipment_preset/cmb/load_name(mob/living/carbon/human/new_human) new_human.gender = pick(80;MALE,20;FEMALE) @@ -448,7 +403,7 @@ /datum/equipment_preset/uscm/cmb/New() . = ..() - access = get_all_accesses() + list(ACCESS_MARINE_PREP) + access = get_friendly_ert_access() assignment = "Anchorpoint Station Marine Rifleman" rank = JOB_SQUAD_MARINE @@ -504,7 +459,6 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE /datum/equipment_preset/uscm/cmb/leader/New() . = ..() - access = get_all_accesses() + list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = "Anchorpoint Station Marine Team Leader" rank = JOB_SQUAD_LEADER @@ -550,7 +504,6 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE /datum/equipment_preset/uscm/cmb/rto/New() . = ..() - access = get_all_accesses() + list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = "Anchorpoint Station Marine Technical Specialist" rank = JOB_SQUAD_TEAM_LEADER @@ -598,7 +551,6 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE /datum/equipment_preset/uscm/cmb/medic/New() . = ..() - access = get_all_accesses() + list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = "Anchorpoint Station Hospital Corpsman" rank = JOB_SQUAD_MEDIC @@ -660,7 +612,6 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE /datum/equipment_preset/uscm/cmb/smartgunner/New() . = ..() - access = get_all_accesses() + list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = "Anchorpoint Station Marine Smartgunner" rank = JOB_SQUAD_SMARTGUN @@ -670,7 +621,6 @@ /datum/equipment_preset/uscm/cmb/smartgunner/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m4a3/custom, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/hp, WEAR_IN_ACCESSORY) @@ -679,7 +629,6 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full, WEAR_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_L_STORE) @@ -688,3 +637,4 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/smartgunner/full/, WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/headband/red, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles, WEAR_EYES) diff --git a/code/modules/gear_presets/contractor.dm b/code/modules/gear_presets/contractor.dm index c318eb6b76d4..62495ac59213 100644 --- a/code/modules/gear_presets/contractor.dm +++ b/code/modules/gear_presets/contractor.dm @@ -8,7 +8,7 @@ /datum/equipment_preset/contractor/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_all_main_access() /datum/equipment_preset/contractor/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(80;MALE,20;FEMALE) @@ -57,7 +57,7 @@ /datum/equipment_preset/contractor/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_all_main_access() /datum/equipment_preset/dust_raider/load_name(mob/living/carbon/human/new_human) @@ -598,7 +598,7 @@ /datum/equipment_preset/contractor/covert/heavy/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/contractor/covert/heavy/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) @@ -651,7 +651,7 @@ /datum/equipment_preset/contractor/covert/engi/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/contractor/covert/engi/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist/wy_davisone, WEAR_BODY) @@ -703,7 +703,7 @@ /datum/equipment_preset/contractor/covert/medic/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/contractor/covert/medic/load_gear(mob/living/carbon/human/new_human) //clothing diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index 08389ed00a60..02671cc02a93 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -217,7 +217,7 @@ /datum/equipment_preset/corpse/clown/New() . = ..() //As a joke, clown has all access so they can clown everywhere... - access = get_all_accesses() + access = get_all_main_access() /datum/equipment_preset/corpse/clown/load_name(mob/living/carbon/human/new_human, randomise) . = ..() //To load gender, randomise appearance, etc. @@ -711,7 +711,7 @@ assignment = "Colonial Liberation Front Soldier" idtype = /obj/item/card/id/silver xenovictim = FALSE - faction = FACTION_UPP + faction = FACTION_CLF access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -753,6 +753,7 @@ assignment = "Union of Progressive Peoples Soldier" idtype = /obj/item/card/id/silver xenovictim = FALSE + faction = FACTION_UPP access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -792,10 +793,10 @@ /datum/equipment_preset/corpse/pmc name = "Corpse - Weyland-Yutani PMC (Standard)" flags = EQUIPMENT_PRESET_START_OF_ROUND - assignment = "Weyland-Yutani PMC (Standard)" + assignment = JOB_PMC_STANDARD faction = FACTION_PMC faction_group = FACTION_LIST_WY - rank = JOB_PMC + rank = JOB_PMC_STANDARD paygrade = "PMC-OP" idtype = /obj/item/card/id/pmc skills = /datum/skills/civilian/survivor/pmc diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm index 0f62ae71fbb7..e6464d56085e 100644 --- a/code/modules/gear_presets/dust_raider.dm +++ b/code/modules/gear_presets/dust_raider.dm @@ -83,7 +83,6 @@ //TODO: add backpacks and satchels new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) add_common_wo_equipment(new_human) //Backup SMG Weapon diff --git a/code/modules/gear_presets/forcon_survivors.dm b/code/modules/gear_presets/forcon_survivors.dm index c18582ff44e1..a883759a2f7f 100644 --- a/code/modules/gear_presets/forcon_survivors.dm +++ b/code/modules/gear_presets/forcon_survivors.dm @@ -158,7 +158,6 @@ skills = /datum/skills/military/survivor/forecon_smartgunner /datum/equipment_preset/survivor/forecon/smartgunner/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_R_HAND) ..() new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m1911(new_human), WEAR_IN_BELT) diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm index 19eb64942f10..3930f6fb9999 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -246,7 +246,7 @@ /datum/equipment_preset/fun/santa/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_global_access() /datum/equipment_preset/fun/santa/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = MALE @@ -342,7 +342,7 @@ /datum/equipment_preset/fun/van_bandolier/New() . = ..() - access = get_all_accesses() + access = get_global_access() /datum/equipment_preset/fun/van_bandolier/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = MALE diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm index 6dd3f830eb12..c2beca202e84 100644 --- a/code/modules/gear_presets/other.dm +++ b/code/modules/gear_presets/other.dm @@ -38,7 +38,7 @@ /datum/equipment_preset/other/freelancer/New() . = ..() - access = get_all_accesses() + access = get_all_main_access() /datum/equipment_preset/other/freelancer/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(60;MALE,40;FEMALE) @@ -247,7 +247,7 @@ /datum/equipment_preset/other/elite_merc/New() . = ..() - access = get_all_accesses() + access = get_all_main_access() /datum/equipment_preset/other/elite_merc/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(70;MALE,30;FEMALE) @@ -280,7 +280,7 @@ /datum/equipment_preset/other/elite_merc/standard/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/other/elite_merc/standard/load_gear(mob/living/carbon/human/new_human) //TODO: add unique backpacks and satchels @@ -321,7 +321,7 @@ /datum/equipment_preset/other/elite_merc/heavy/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/other/elite_merc/heavy/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -365,7 +365,7 @@ /datum/equipment_preset/other/elite_merc/engineer/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/other/elite_merc/engineer/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -422,7 +422,7 @@ /datum/equipment_preset/other/elite_merc/medic/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/other/elite_merc/medic/load_gear(mob/living/carbon/human/new_human) //webbing @@ -472,7 +472,7 @@ /datum/equipment_preset/other/elite_merc/leader/New() . = ..() - access = get_antagonist_pmc_access() + access = get_weyland_pmc_access() /datum/equipment_preset/other/elite_merc/leader/load_gear(mob/living/carbon/human/new_human) //clothes @@ -512,7 +512,7 @@ /datum/equipment_preset/other/business_person/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_all_main_access() /datum/equipment_preset/other/business_person/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -562,7 +562,7 @@ /datum/equipment_preset/other/pizza/New() . = ..() - access = get_freelancer_access() + access = get_civil_ert_access() /datum/equipment_preset/other/pizza/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(MALE,FEMALE) @@ -607,7 +607,7 @@ /datum/equipment_preset/other/souto/New() . = ..() - access = get_freelancer_access() + access = get_civil_ert_access() /datum/equipment_preset/other/souto/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = MALE @@ -789,7 +789,7 @@ /datum/equipment_preset/other/xeno_cultist/New() . = ..() - access = get_all_civilian_accesses() + access = get_all_civilian_access() /datum/equipment_preset/other/xeno_cultist/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain/cultist(new_human), WEAR_BODY) diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm index 789d40f09706..59f1b9e09cdf 100644 --- a/code/modules/gear_presets/pmc.dm +++ b/code/modules/gear_presets/pmc.dm @@ -12,7 +12,7 @@ /datum/equipment_preset/pmc/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + get_antagonist_access() + access = get_weyland_pmc_access() /datum/equipment_preset/pmc/load_name(mob/living/carbon/human/new_human, randomise) @@ -59,8 +59,8 @@ name = "Weyland-Yutani PMC (Standard)" flags = EQUIPMENT_PRESET_EXTRA - assignment = "Weyland-Yutani PMC (Standard)" - rank = JOB_PMC + assignment = JOB_PMC_STANDARD + rank = JOB_PMC_STANDARD paygrade = "PMC-OP" skills = /datum/skills/pmc @@ -201,8 +201,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), name = "Weyland-Yutani PMC (Detainer)" flags = EQUIPMENT_PRESET_EXTRA - assignment = "Weyland-Yutani PMC (Detainer)" - rank = JOB_PMC + assignment = JOB_PMC_DETAINER + rank = JOB_PMC_DETAINER paygrade = "PMC-EN" skills = /datum/skills/pmc @@ -995,8 +995,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/stack/medical/splint, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/cell/hyper, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack/pmc, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/smartgun_battery, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/dirty, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/pistol/large/vp78, WEAR_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_L_STORE) @@ -1203,7 +1202,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), name = "Weyland-Yutani PMC (Crewman)" flags = EQUIPMENT_PRESET_EXTRA - assignment = "Weyland-Yutani PMC (Crewman)" + assignment = JOB_PMC_CREWMAN rank = JOB_PMC_CREWMAN paygrade = "PMC-VS" skills = /datum/skills/pmc/tank_crew diff --git a/code/modules/gear_presets/survivors.dm b/code/modules/gear_presets/survivors.dm index d29498ee9f89..42d5ec0915bb 100644 --- a/code/modules/gear_presets/survivors.dm +++ b/code/modules/gear_presets/survivors.dm @@ -961,6 +961,7 @@ /datum/equipment_preset/survivor/colonial_marshal/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) add_ice_colony_survivor_equipment(new_human) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) @@ -1007,6 +1008,7 @@ name = "Survivor - Solaris Colonial Marshal Deputy" assignment = "CMB Deputy" + /datum/equipment_preset/survivor/colonial_marshal/solaris/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB(new_human), WEAR_HEAD) @@ -1057,6 +1059,7 @@ /datum/equipment_preset/survivor/interstellar_commerce_commission_liason/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit(new_human), WEAR_BODY) + if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD]) add_ice_colony_survivor_equipment(new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest(new_human), WEAR_JACKET) diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 50c2edfea3eb..f2a5283e2a26 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -9,7 +9,7 @@ /datum/equipment_preset/synth/New() . = ..() - access = get_all_accesses() + access = get_global_access() /datum/equipment_preset/synth/load_race(mob/living/carbon/human/new_human) if(new_human.client?.prefs?.synthetic_type) @@ -141,7 +141,7 @@ /datum/equipment_preset/synth/survivor/New() . = ..() - access = get_all_civilian_accesses() + get_region_accesses(2) + get_region_accesses(4) + ACCESS_MARINE_RESEARCH + ACCESS_WY_CORPORATE //Access to civillians stuff + medbay stuff + engineering stuff + research + access = get_all_civilian_access() + get_region_accesses(2) + get_region_accesses(4) + ACCESS_MARINE_RESEARCH + ACCESS_WY_CORPORATE //Access to civillians stuff + medbay stuff + engineering stuff + research /datum/equipment_preset/synth/survivor/load_gear(mob/living/carbon/human/new_human) for(var/equipment in equipment_to_spawn) @@ -454,7 +454,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/synth/working_joe - name = "Working Joe" + name = "Synthetic - Working Joe" flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE faction = FACTION_MARINE faction_group = list(FACTION_MARINE) @@ -465,7 +465,7 @@ /datum/equipment_preset/synth/working_joe/New() . = ..() - access = get_all_accesses() + access = get_global_access() /datum/equipment_preset/synth/working_joe/load_race(mob/living/carbon/human/new_human) new_human.set_species(SYNTH_WORKING_JOE) @@ -475,7 +475,7 @@ /datum/equipment_preset/synth/working_joe/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/synthetic/joe(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET) //don't remove shrap by yourself, go to android maintenance or have ARES call a human handler! new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mt(new_human), WEAR_L_EAR) @@ -486,11 +486,47 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/bucket(new_human.back), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/mop(new_human.back), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/wet_sign(new_human.back), WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/bag/trash(new_human.back), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/lights/mixed(new_human.back), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/bag/trash(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/circuitboard/apc(new_human.back), WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/circuitboard/airlock(new_human.back), WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/cell(new_human.back), WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/cell(new_human.back), WEAR_IN_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/device/lightreplacer(new_human.back), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/medium_stack(new_human.back), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/glass/medium_stack(new_human.back), WEAR_IN_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/maintenance_jack(new_human), WEAR_J_STORE) + +/datum/equipment_preset/synth/working_joe/engi + name = "Synthetic - Hazmat Joe" + +/datum/equipment_preset/synth/working_joe/engi/load_gear(mob/living/carbon/human/new_human) + var/choice = rand(1,2) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/joe(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mt(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/joe(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/inflatable/door(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/inflatable/door(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/inflatable(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/inflatable(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/maintenance_jack(new_human), WEAR_J_STORE) + + switch(choice) + if(1) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/synthetic/joe/engi(new_human), WEAR_BODY) + if(2) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/synthetic/joe/engi/overalls(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tank(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/lightreplacer(new_human.back), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human.back), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/glass/large_stack(new_human.back), WEAR_IN_R_STORE) + /datum/equipment_preset/synth/working_joe/load_race(mob/living/carbon/human/new_human) . = ..() new_human.h_style = "Bald" @@ -589,7 +625,7 @@ /datum/equipment_preset/synth/infiltrator/New() . = ..() - access = get_all_accesses() + access = get_global_access() /datum/equipment_preset/synth/infiltrator/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(MALE,FEMALE) diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 00d8f126bdb5..2f7148302485 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -2103,6 +2103,10 @@ idtype = /obj/item/card/id/data languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE) +/datum/equipment_preset/upp/commando/New() + . = ..() + access = get_global_access() + /datum/equipment_preset/upp/commando/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo, WEAR_L_EAR) diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index 0afe09c831b7..6165a7eaaa56 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -131,11 +131,10 @@ /datum/equipment_preset/uscm/sg/full/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/specrag(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/full(new_human), WEAR_WAIST) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles(new_human), WEAR_EYES) @@ -551,21 +550,17 @@ /datum/equipment_preset/uscm/smartgunner_equipped/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_R_HAND) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles(new_human), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full(new_human), WEAR_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/storage/box/attachments(new_human), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_BACK) - //Backup SMG Weapon + new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/full(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles(new_human), WEAR_EYES) /datum/equipment_preset/uscm/smartgunner_equipped/cryo name = "USCM Cryo Squad Smartgunner (Equipped)" @@ -790,7 +785,7 @@ /datum/equipment_preset/uscm/marsoc/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_global_access() /datum/equipment_preset/uscm/marsoc/load_gear(mob/living/carbon/human/new_human) //back diff --git a/code/modules/gear_presets/uscm_dress.dm b/code/modules/gear_presets/uscm_dress.dm index cf95bca252cc..600b8dcce1b2 100644 --- a/code/modules/gear_presets/uscm_dress.dm +++ b/code/modules/gear_presets/uscm_dress.dm @@ -111,7 +111,7 @@ /datum/equipment_preset/uscm_event/dress/officer/capt/New() . = ..() - access = get_all_marine_access() - ACCESS_MARINE_CAPTAIN + access = get_main_marine_access() /datum/equipment_preset/uscm_event/dress/officer/co name = "Dress Blues - (O-4) Major" diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 52e7b2a83e48..1af69f567077 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -39,7 +39,7 @@ /datum/equipment_preset/uscm_event/colonel/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_global_access() /datum/equipment_preset/uscm_event/colonel/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/highcom(new_human), WEAR_L_EAR) @@ -74,7 +74,7 @@ /datum/equipment_preset/uscm_event/general/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_global_access() /datum/equipment_preset/uscm_event/general/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -206,7 +206,7 @@ /datum/equipment_preset/uscm_event/provost/New() . = ..() - access = get_all_marine_access() + access = get_global_access() /datum/equipment_preset/uscm_event/provost/enforcer name = "Provost Enforcer (ME5)" @@ -485,7 +485,7 @@ /datum/equipment_preset/uscm_event/uaac/tis/New() . = ..() - access = get_all_marine_access() + access = get_global_access() /datum/equipment_preset/uscm_event/uaac/tis/io name = "UAAC-TIS Intelligence Officer (NO2)" diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm index 5b921f07f219..2b8cb2ce453c 100644 --- a/code/modules/gear_presets/uscm_police.dm +++ b/code/modules/gear_presets/uscm_police.dm @@ -204,7 +204,7 @@ /datum/equipment_preset/uscm_ship/uscm_police/riot_mp/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_main_marine_access() /datum/equipment_preset/uscm_ship/uscm_police/riot_mp/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index 1569d282807e..688a55d0f0f6 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -510,7 +510,7 @@ /datum/equipment_preset/uscm_ship/xo/New() . = ..() - access = get_all_marine_access() - ACCESS_MARINE_CAPTAIN + access = get_main_marine_access() /datum/equipment_preset/uscm_ship/xo/load_gear(mob/living/carbon/human/new_human) var/back_item = /obj/item/storage/backpack/satchel @@ -581,7 +581,7 @@ /datum/equipment_preset/uscm_ship/sea/New() . = ..() - access = get_all_marine_access() - ACCESS_MARINE_CAPTAIN + access = get_main_marine_access() /datum/equipment_preset/uscm_ship/sea/load_gear(mob/living/carbon/human/new_human) var/back_item = /obj/item/storage/backpack/satchel @@ -733,7 +733,7 @@ /datum/equipment_preset/uscm_ship/officer/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_all_marine_access() /datum/equipment_preset/uscm_ship/officer/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm index 3c242cd506d3..78128c32a44a 100644 --- a/code/modules/gear_presets/whiteout.dm +++ b/code/modules/gear_presets/whiteout.dm @@ -13,7 +13,7 @@ /datum/equipment_preset/pmc/w_y_whiteout/New() . = ..() - access = get_antagonist_pmc_access() + access = get_global_access() /datum/equipment_preset/pmc/w_y_whiteout/load_race(mob/living/carbon/human/new_human) new_human.set_species(SYNTH_COMBAT) @@ -136,10 +136,7 @@ role_comm_title = "WO-TT" /datum/equipment_preset/pmc/w_y_whiteout/terminator/load_gear(mob/living/carbon/human/new_human) - // back - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack/pmc, WEAR_BACK) //face - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles/whiteout, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/leader, WEAR_FACE) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/commando, WEAR_L_EAR) //head @@ -166,6 +163,8 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_sg, WEAR_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_sg, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles/whiteout, WEAR_EYES) + var/obj/item/device/internal_implant/agility/implant = new() implant.on_implanted(new_human) diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm index 5ca610c06434..1033a5f14db3 100644 --- a/code/modules/gear_presets/wo.dm +++ b/code/modules/gear_presets/wo.dm @@ -109,7 +109,7 @@ /datum/equipment_preset/wo/xo/New() . = ..() - access = get_all_marine_access() + access = get_main_marine_access() /datum/equipment_preset/wo/xo/load_gear(mob/living/carbon/human/new_human) var/back_item = /obj/item/storage/backpack/satchel @@ -156,8 +156,6 @@ //jacket new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) - //back - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_BACK) //head new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/mp_honor/com(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/chiefofficer(new_human), WEAR_HEAD) @@ -702,10 +700,8 @@ skills = /datum/skills/smartgunner /datum/equipment_preset/wo/marine/sg/load_gear(mob/living/carbon/human/new_human) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/smartgun_powerpack(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/full(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD) diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm index 8532391dd2c5..c773ea9b9b4e 100644 --- a/code/modules/gear_presets/wy.dm +++ b/code/modules/gear_presets/wy.dm @@ -21,7 +21,7 @@ /datum/equipment_preset/wy/New() . = ..() - access += get_all_civilian_accesses() + get_all_centcom_access() + access += get_all_civilian_access() + get_all_weyland_access() /datum/equipment_preset/wy/load_id(mob/living/carbon/human/new_human) . = ..() @@ -86,7 +86,7 @@ /datum/equipment_preset/wy/manager/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_global_access() /datum/equipment_preset/wy/manager/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/manager(new_human), WEAR_BODY) @@ -103,7 +103,7 @@ paygrade = "WYC7" /datum/equipment_preset/wy/manager/division_manager - name = "Corporate - new_human - Division Manager" + name = "Corporate - H - Division Manager" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIVISION_MANAGER rank = JOB_DIVISION_MANAGER diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm index 8bc4cd1ad681..753693ef31f9 100644 --- a/code/modules/gear_presets/wy_goons.dm +++ b/code/modules/gear_presets/wy_goons.dm @@ -9,7 +9,7 @@ /datum/equipment_preset/goon/New() . = ..() - access = get_all_accesses() + get_all_centcom_access() + access = get_all_main_access() /datum/equipment_preset/goon/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(MALE, FEMALE) diff --git a/code/modules/mapping/preloader.dm b/code/modules/mapping/preloader.dm index 0cd73d499e35..e8eee898a711 100644 --- a/code/modules/mapping/preloader.dm +++ b/code/modules/mapping/preloader.dm @@ -22,10 +22,12 @@ GLOBAL_DATUM_INIT(_preloader, /datum/map_preloader, new) value = deepCopyList(value) what.vars[attribute] = value +/// Area passthrough: do not instanciate a new area, reuse the current one /area/template_noop name = "Area Passthrough" icon_state = "noop" +/// Turf passthrough: do not instanciate a new turf, reuse the current one /turf/template_noop name = "Turf Passthrough" icon_state = "noop" diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm index 8413b6d118e6..84dacf4f8bfb 100644 --- a/code/modules/mentor/mentorhelp.dm +++ b/code/modules/mentor/mentorhelp.dm @@ -108,28 +108,28 @@ sound_to(recipient, 'sound/effects/mhelp.ogg') to_chat(recipient, wrap_message(msg, sender)) - for(var/client/C in GLOB.admins) + for(var/client/admin_client in GLOB.admins) var/formatted = msg var/soundfile - if(!C || C == recipient) + if(!admin_client || admin_client == recipient) continue // Initial broadcast - else if(!staff_only && !recipient && CLIENT_HAS_RIGHTS(C, R_MENTOR)) + else if(!staff_only && !recipient && CLIENT_HAS_RIGHTS(admin_client, R_MENTOR)) formatted = wrap_message(formatted, sender) soundfile = 'sound/effects/mhelp.ogg' - // Staff eavesdrop - else if(CLIENT_HAS_RIGHTS(C, R_MENTOR) && CLIENT_IS_STAFF(C)) + // Eavesdrop + else if(CLIENT_HAS_RIGHTS(admin_client, R_MENTOR) && (!staff_only || CLIENT_IS_STAFF(admin_client)) && admin_client != sender) if(include_keys) formatted = SPAN_MENTORHELP(key_name(sender, TRUE) + " -> " + key_name(recipient, TRUE) + ": ") + msg else continue - if(soundfile && with_sound && (C.prefs?.toggles_sound & SOUND_ADMINHELP)) - sound_to(C, soundfile) - to_chat(C, formatted) + if(soundfile && with_sound && (admin_client.prefs?.toggles_sound & SOUND_ADMINHELP)) + sound_to(admin_client, soundfile) + to_chat(admin_client, formatted) return // Makes the sender input a message and sends it diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 20c8b7f374db..fcb95a6fd783 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -33,8 +33,8 @@ plane = GHOST_PLANE layer = ABOVE_FLY_LAYER stat = DEAD - var/adminlarva = 0 - var/ghostvision = 1 + var/adminlarva = FALSE + var/ghostvision = TRUE var/can_reenter_corpse var/started_as_observer //This variable is set to 1 when you enter the game as an observer. //If you died in the game and are a ghost - this will remain as null. @@ -45,7 +45,7 @@ "Squad HUD" = FALSE, "Xeno Status HUD" = FALSE ) - universal_speak = 1 + universal_speak = TRUE var/updatedir = TRUE //Do we have to update our dir as the ghost moves around? var/atom/movable/following = null var/datum/orbit_menu/orbit_menu @@ -55,6 +55,8 @@ var/own_orbit_size = 0 var/observer_actions = list(/datum/action/observer_action/join_xeno) var/datum/action/minimap/observer/minimap + var/larva_queue_cached_message + alpha = 127 /mob/dead/observer/verb/toggle_ghostsee() @@ -327,8 +329,8 @@ Works together with spawning an observer, noted above. ghost.langchat_make_image() SStgui.on_transfer(src, ghost) - if(is_admin_level(z)) - ghost.timeofdeath = 0 // Bypass respawn limit if you die on the admin zlevel + if(is_admin_level((get_turf(src))?.z)) // Gibbed humans ghostize the brain in their head which itself is z 0 + ghost.timeofdeath = 1 // Bypass respawn limit if you die on the admin zlevel ghost.key = key ghost.mind = mind @@ -363,6 +365,12 @@ Works together with spawning an observer, noted above. if(ghost.client.player_data) ghost.client.player_data.load_timestat_data() + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers + // We don't change facehugger timeofdeath because they are still on cooldown if they died as a hugger + // Facehuggers are atleast 1 because they did get some action compared to those at 0 timeofdeath + var/new_tod = isfacehugger(src) ? 1 : ghost.timeofdeath + ghost.client.larva_queue_time = max(ghost.client.larva_queue_time, new_tod) + ghost.set_huds_from_prefs() return ghost @@ -386,7 +394,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/list/options = list("Ghost", "Stay in body") if(check_rights(R_MOD)) options = list("Aghost") + options - var/response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to your body. You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", options) + var/text_prompt = "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to return to your body. You can't change your mind so choose wisely!)" + var/is_nested = (buckled && istype(buckled, /obj/structure/bed/nest)) ? TRUE : FALSE + var/obj/structure/bed/nest/nest = FALSE + if(is_nested) + text_prompt += "\nSince you're nested, you will be given a chance to reenter your body upon being freed." + nest = buckled + var/response = tgui_alert(src, text_prompt, "Are you sure you want to ghost?", options) if(response == "Aghost") client.admin_ghost() return @@ -396,9 +410,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(location) //to avoid runtime when a mob ends up in nullspace msg_admin_niche("[key_name_admin(usr)] has ghosted. [ADMIN_JMP(location)]") log_game("[key_name_admin(usr)] has ghosted.") - var/mob/dead/observer/ghost = ghostize(FALSE) //FALSE parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 + var/mob/dead/observer/ghost = ghostize((is_nested && nest && !QDELETED(nest))) //FALSE parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 if(ghost && !is_admin_level(z)) ghost.timeofdeath = world.time + ghost.client?.larva_queue_time = world.time + if(is_nested && nest && !QDELETED(nest)) + ghost.can_reenter_corpse = FALSE + nest.ghost_of_buckled_mob = ghost /mob/dead/observer/Move(atom/newloc, direct) following = null @@ -433,6 +451,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp for(var/obj/effect/step_trigger/S in new_turf) //<-- this is dumb S.Crossed(src) + // CRUTCH because ghost don't respect normal movement rules + SEND_SIGNAL(new_turf, COMSIG_TURF_ENTERED, src) + SEND_SIGNAL(src, COMSIG_GHOST_MOVED, new_turf) + /mob/dead/observer/get_examine_text(mob/user) return list(desc) @@ -1061,6 +1083,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!(RoleAuthority.roles_whitelist[key_to_use] & WHITELIST_PREDATOR)) return + if(!SSticker.mode) + SSticker.OnRoundstart(CALLBACK(src, PROC_REF(toggle_predator_action))) + return + if(SSticker.mode.flags_round_type & MODE_PREDATOR) if(locate(/datum/action/join_predator) in actions) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c5fed21671c4..d01416b2443f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1722,3 +1722,10 @@ to_chat(src, SPAN_DANGER("You are currently unable to throw harmful items.")) return . = ..() + +/mob/living/carbon/human/equip_to_slot_if_possible(obj/item/equipping_item, slot, ignore_delay = 1, del_on_fail = 0, disable_warning = 0, redraw_mob = 1, permanent = 0) + + if(SEND_SIGNAL(src, COMSIG_HUMAN_ATTEMPTING_EQUIP, equipping_item, slot) & COMPONENT_HUMAN_CANCEL_ATTEMPT_EQUIP) + return FALSE + + . = ..() diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm index fdfb0c10fa43..0339bf6ec742 100644 --- a/code/modules/mob/living/carbon/human/life/life_helpers.dm +++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm @@ -200,7 +200,9 @@ if(thermal_protection_flags & BODY_FLAG_HAND_RIGHT) thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1, thermal_protection) + var/list/protection_data = list("protection" = thermal_protection) + SEND_SIGNAL(src, COMSIG_HUMAN_COLD_PROTECTION_APPLY_MODIFIERS, protection_data) + return min(1, protection_data["protection"]) /mob/living/carbon/human/proc/process_glasses(obj/item/clothing/glasses/G) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 415344d04254..355f69ca05a9 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -209,6 +209,22 @@ There are several things that need to be remembered: overlays_standing[HAIR_LAYER] = hair_s apply_overlay(HAIR_LAYER) +//Call when target overlay should be added/removed +/mob/living/carbon/human/update_targeted() + remove_overlay(TARGETED_LAYER) + + var/image/holo_card_image + + if(holo_card_color) + holo_card_image = image("icon" = 'icons/effects/Targeted.dmi', "icon_state" = "holo_card_[holo_card_color]") + + if(!holo_card_image) + return + + holo_card_image.layer = -TARGETED_LAYER + overlays_standing[TARGETED_LAYER] = holo_card_image + apply_overlay(TARGETED_LAYER) + //Call when someone is gauzed or splinted, or when one of those items are removed /mob/living/carbon/human/update_med_icon() remove_overlay(MEDICAL_LAYER) diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index e03f225ccade..29779480f143 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -12,6 +12,8 @@ var/hivenumber = XENO_HIVE_NORMAL var/faction = FACTION_XENOMORPH var/flags_embryo = FALSE // Used in /ciphering/predator property + /// The ckey of any player hugger that made this embryo + var/hugger_ckey /obj/item/alien_embryo/Initialize(mapload, ...) . = ..() @@ -33,6 +35,7 @@ C.med_hud_set_status() STOP_PROCESSING(SSobj, src) affected_mob = null + GLOB.player_embryo_list -= src . = ..() /obj/item/alien_embryo/process() @@ -145,19 +148,33 @@ var/mob/picked // If the bursted person themselves has Xeno enabled, they get the honor of first dibs on the new larva. - if((!isyautja(affected_mob) || (isyautja(affected_mob) && prob(20))) && istype(affected_mob.buckled, /obj/structure/bed/nest)) + if((!isyautja(affected_mob) || (isyautja(affected_mob) && prob(20))) && istype(affected_mob.buckled, /obj/structure/bed/nest)) if(affected_mob.first_xeno || (affected_mob.client && affected_mob.client.prefs && (affected_mob.client.prefs.be_special & BE_ALIEN_AFTER_DEATH) && !jobban_isbanned(affected_mob, JOB_XENOMORPH))) picked = affected_mob else if(affected_mob.mind && affected_mob.mind.ghost_mob && affected_mob.client && affected_mob.client.prefs && (affected_mob.client.prefs.be_special & BE_ALIEN_AFTER_DEATH) && !jobban_isbanned(affected_mob, JOB_XENOMORPH)) picked = affected_mob.mind.ghost_mob - if(!picked) // Get a candidate from observers var/list/candidates = get_alien_candidates() - if(candidates && candidates.len) - picked = pick(candidates) + // If they were facehugged by a player thats still in queue, they get second dibs on the new larva. + if(hugger_ckey) + for(var/mob/dead/observer/cur_obs as anything in candidates) + if(cur_obs.ckey == hugger_ckey) + picked = cur_obs + candidates -= cur_obs + message_alien_candidates(candidates, dequeued = 0) + for(var/obj/item/alien_embryo/embryo as anything in GLOB.player_embryo_list) + if(embryo.hugger_ckey == cur_obs.ckey && embryo != src) + // Skipping src just in case an admin wants to quickly check before this thing fully deletes + // If this nulls out any embryo, wow + embryo.hugger_ckey = null + break + + if(!picked) + picked = candidates[1] + message_alien_candidates(candidates, dequeued = 1) // Spawn the larva var/mob/living/carbon/xenomorph/larva/new_xeno diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index 1f88643db764..4806f7528582 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -140,6 +140,7 @@ if(3) hive.tier_3_xenos |= new_xeno + log_game("EVOLVE: [key_name(src)] evolved into [new_xeno].") if(mind) mind.transfer_to(new_xeno) else @@ -327,6 +328,7 @@ qdel(new_xeno) return + log_game("EVOLVE: [key_name(src)] de-evolved into [new_xeno].") if(mind) mind.transfer_to(new_xeno) else diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index 121a231b7bf8..8b3b1d54f26d 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -209,6 +209,11 @@ if(stat == UNCONSCIOUS) return + // Force reset throw now because [/atom/movable/proc/launch_impact] only does that later on + // If we DON'T, step()'s move below can collide, rebound, trigger this proc again, into infinite recursion + throwing = FALSE + rebounding = FALSE + if(leaping && can_hug(L, hivenumber)) attach(L) else if(L.density) @@ -241,46 +246,46 @@ throw_atom(target, 3, SPEED_FAST) return TRUE -/obj/item/clothing/mask/facehugger/proc/attach(mob/living/M, silent = FALSE, knockout_mod = 1) - if(attached || !can_hug(M, hivenumber)) +/obj/item/clothing/mask/facehugger/proc/attach(mob/living/living_mob, silent = FALSE, knockout_mod = 1, hugger_ckey = null) + if(attached || !can_hug(living_mob, hivenumber)) return FALSE // This is always going to be valid because of the can_hug check above - var/mob/living/carbon/human/H = M + var/mob/living/carbon/human/human = living_mob if(!silent) - H.visible_message(SPAN_DANGER("[src] leaps at [H]'s face!")) + human.visible_message(SPAN_DANGER("[src] leaps at [human]'s face!")) if(isxeno(loc)) //Being carried? Drop it var/mob/living/carbon/xenomorph/X = loc X.drop_inv_item_on_ground(src) - if(isturf(H.loc)) - forceMove(H.loc)//Just checkin + if(isturf(human.loc)) + forceMove(human.loc)//Just checkin - if(!H.handle_hugger_attachment(src)) + if(!human.handle_hugger_attachment(src)) return FALSE attached = TRUE - forceMove(H) + forceMove(human) icon_state = initial(icon_state) - H.equip_to_slot(src, WEAR_FACE) - H.update_inv_wear_mask() - H.disable_lights() - H.disable_special_items() - if(ishuman_strict(H)) - playsound(loc, H.gender == "male" ? 'sound/misc/facehugged_male.ogg' : 'sound/misc/facehugged_female.ogg' , 25, 0) - else if(isyautja(H)) + human.equip_to_slot(src, WEAR_FACE) + human.update_inv_wear_mask() + human.disable_lights() + human.disable_special_items() + if(ishuman_strict(human)) + playsound(loc, human.gender == "male" ? 'sound/misc/facehugged_male.ogg' : 'sound/misc/facehugged_female.ogg' , 25, 0) + else if(isyautja(human)) playsound(loc, 'sound/voice/pred_facehugged.ogg', 65, FALSE) if(!sterile) - if(!H.species || !(H.species.flags & IS_SYNTHETIC)) //synthetics aren't paralyzed - H.apply_effect(MIN_IMPREGNATION_TIME * 0.5 * knockout_mod, PARALYZE) //THIS MIGHT NEED TWEAKS + if(!human.species || !(human.species.flags & IS_SYNTHETIC)) //synthetics aren't paralyzed + human.apply_effect(MIN_IMPREGNATION_TIME * 0.5 * knockout_mod, PARALYZE) //THIS MIGHT NEED TWEAKS - addtimer(CALLBACK(src, PROC_REF(impregnate), H), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) + addtimer(CALLBACK(src, PROC_REF(impregnate), human, hugger_ckey), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) return TRUE -/obj/item/clothing/mask/facehugger/proc/impregnate(mob/living/carbon/human/target) +/obj/item/clothing/mask/facehugger/proc/impregnate(mob/living/carbon/human/target, hugger_ckey = null) if(!target || target.wear_mask != src) //Was taken off or something return if(SEND_SIGNAL(target, COMSIG_HUMAN_IMPREGNATE, src) & COMPONENT_NO_IMPREGNATE) @@ -295,6 +300,8 @@ if(!embryos) var/obj/item/alien_embryo/embryo = new /obj/item/alien_embryo(target) embryo.hivenumber = hivenumber + embryo.hugger_ckey = hugger_ckey + GLOB.player_embryo_list += embryo embryo.flags_embryo = flags_embryo flags_embryo = NO_FLAGS diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm index e745e8940063..dff6c82efbf8 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm @@ -139,7 +139,8 @@ spicy_gas = new /datum/effect_system/smoke_spread/xeno_weaken else CRASH("Globber has unknown ammo [xeno.ammo]! Oh no!") - spicy_gas.set_up(1, 0, get_turf(xeno), null, 6) + var/datum/cause_data/cause_data = create_cause_data("acid shroud gas", owner) + spicy_gas.set_up(1, 0, get_turf(xeno), null, 6, new_cause_data = cause_data) spicy_gas.start() to_chat(xeno, SPAN_XENOHIGHDANGER("You dump your acid through your pores, creating a shroud of gas!")) for (var/action_type in action_types_to_cd) @@ -166,9 +167,9 @@ if(!actually_moving) return - var/obj/effect/particle_effect/smoke/S = new /obj/effect/particle_effect/smoke/xeno_burn(get_turf(mover), 1, create_cause_data(initial(mover.caste_type), mover)) - S.time_to_live = 3 - S.spread_speed = 1000000 + var/obj/effect/particle_effect/smoke/xeno_burn/smoke_effect = new(get_turf(mover), 1, create_cause_data("dumped acid gas", mover)) + smoke_effect.time_to_live = 3 + smoke_effect.spread_speed = 1000000 /datum/action/xeno_action/onclick/dump_acid/remove_from() remove_speed_buff() @@ -283,27 +284,25 @@ apply_cooldown() return ..() -/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) +/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/target) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return if (!action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc) || !X.check_state()) + if(!target || target.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) return - X.visible_message(SPAN_XENOWARNING("The [X] fires a blast of acid at [A]!"), SPAN_XENOWARNING("You fire a blast of acid at [A]!")) - - var/turf/target = locate(A.x, A.y, A.z) - var/obj/item/projectile/P = new /obj/item/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) + xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [target]!"), SPAN_XENOWARNING("You fire a blast of acid at [target]!")) + var/turf/target_turf = locate(target.x, target.y, target.z) + var/obj/item/projectile/proj = new(xeno.loc, create_cause_data("acid shotgun", xeno)) var/datum/ammo/ammoDatum = new ammo_type() - P.generate_bullet(ammoDatum) - - P.fire_at(target, X, X, ammoDatum.max_range, ammoDatum.shell_speed) + proj.generate_bullet(ammoDatum) + proj.fire_at(target_turf, xeno, xeno, ammoDatum.max_range, ammoDatum.shell_speed) apply_cooldown() return ..() @@ -347,7 +346,7 @@ else if(stabbing_xeno.ammo == GLOB.ammo_list[/datum/ammo/xeno/boiler_gas]) var/datum/effects/neurotoxin/neuro_effect = locate() in carbon_target.effects_list if(!neuro_effect) - neuro_effect = new /datum/effects/neurotoxin(carbon_target) + neuro_effect = new(carbon_target, owner) neuro_effect.duration += 16 to_chat(carbon_target,SPAN_HIGHDANGER("You are injected with something from [stabbing_xeno]'s tailstab!")) else diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm index 0ddec1e59d70..dc3aef7ed3b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm @@ -154,6 +154,13 @@ to_chat(src, SPAN_NOTICE("You must be burrowed to do this.")) return + if(tunnel) + tunnel = FALSE + to_chat(src, SPAN_NOTICE("You stop tunneling.")) + used_tunnel = TRUE + addtimer(CALLBACK(src, PROC_REF(do_tunnel_cooldown)), (caste ? caste.tunnel_cooldown : 5 SECONDS)) + return + if(used_tunnel) to_chat(src, SPAN_NOTICE("You must wait some time to do this.")) return @@ -186,13 +193,6 @@ to_chat(src, SPAN_WARNING("There's something solid there to stop you emerging.")) return - if(tunnel) - tunnel = FALSE - to_chat(src, SPAN_NOTICE("You stop tunneling.")) - used_tunnel = TRUE - addtimer(CALLBACK(src, PROC_REF(do_tunnel_cooldown)), (caste ? caste.tunnel_cooldown : 5 SECONDS)) - return - if(!T || T.density) to_chat(src, SPAN_NOTICE("You cannot tunnel to there!")) tunnel = TRUE @@ -202,6 +202,9 @@ /mob/living/carbon/xenomorph/proc/process_tunnel(turf/T) + if(!tunnel) + return + if(world.time > tunnel_timer) tunnel = FALSE do_tunnel(T) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 20d84976b14c..90c1ee1f00a4 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -760,12 +760,12 @@ SPAN_XENOWARNING("You spit a [xeno.ammo.name] at [atom]!") ) playsound(xeno.loc, sound_to_play, 25, 1) + var/obj/item/projectile/proj = new (current_turf, create_cause_data(xeno.ammo.name, xeno)) + proj.generate_bullet(xeno.ammo) + proj.permutated += xeno + proj.def_zone = xeno.get_limbzone_target() + proj.fire_at(spit_target, xeno, xeno, xeno.ammo.max_range, xeno.ammo.shell_speed) - var/obj/item/projectile/Proj = new (current_turf, create_cause_data(initial(xeno.caste_type), xeno)) - Proj.generate_bullet(xeno.ammo) - Proj.permutated += xeno - Proj.def_zone = xeno.get_limbzone_target() - Proj.fire_at(spit_target, xeno, xeno, xeno.ammo.max_range, xeno.ammo.shell_speed) spitting = FALSE SEND_SIGNAL(xeno, COMSIG_XENO_POST_SPIT) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index 20bd029f5c94..944192530b0d 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -472,22 +472,6 @@ user_xeno.hive.banished_ckeys.Remove(banished_name) return ..() -/datum/action/xeno_action/activable/secrete_resin/remote/queen/use_ability(atom/A) - . = ..() - if(!.) - return - - if(!boosted) - return - var/mob/living/carbon/xenomorph/X = owner - var/datum/hive_status/HS = X.hive - if(!HS || !HS.hive_location) - return - // 5 screen radius - if(get_dist(A, HS.hive_location) > 35) - // Apply the normal cooldown if not building near the hive - apply_cooldown_override(initial(xeno_cooldown)) - /datum/action/xeno_action/onclick/eye name = "Enter Eye Form" action_icon_state = "queen_eye" diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 1a847217d881..246e2d2809db 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -12,8 +12,13 @@ if(M.fortify || M.burrow) return XENO_NO_DELAY_ACTION + var/intent = M.a_intent + + if(M.behavior_delegate) + intent = M.behavior_delegate.override_intent(src) + //Reviewing the four primary intents - switch(M.a_intent) + switch(intent) if(INTENT_HELP) if(on_fire) @@ -282,6 +287,9 @@ SPAN_DANGER("You nudge your head against [src]."), null, 5, CHAT_TYPE_XENO_FLUFF) /mob/living/proc/is_xeno_grabbable() + if(stat == DEAD) + return FALSE + return TRUE /mob/living/carbon/human/is_xeno_grabbable() @@ -302,20 +310,6 @@ /obj/item/attack_alien(mob/living/carbon/xenomorph/M) return -/obj/vehicle/attack_alien(mob/living/carbon/xenomorph/M) - if(M.a_intent == INTENT_HARM) - M.animation_attack_on(src) - M.flick_attack_overlay(src, "slash") - health -= 15 - playsound(loc, "alien_claw_metal", 25, 1) - M.visible_message(SPAN_DANGER("[M] [M.slashes_verb] [src]."),SPAN_DANGER("You [M.slash_verb] [src]."), null, 5, CHAT_TYPE_XENO_COMBAT) - healthcheck() - return XENO_ATTACK_ACTION - else - attack_hand(M) - return XENO_NONCOMBAT_ACTION - - /obj/attack_larva(mob/living/carbon/xenomorph/larva/M) return //larva can't do anything @@ -628,12 +622,6 @@ SPAN_DANGER("You pry [src] open."), null, 5, CHAT_TYPE_XENO_COMBAT) return XENO_NO_DELAY_ACTION - -//Nerfing the damn Cargo Tug Train -/obj/vehicle/train/attack_alien(mob/living/carbon/xenomorph/M) - attack_hand(M) - return XENO_NONCOMBAT_ACTION - /obj/structure/mineral_door/resin/attack_larva(mob/living/carbon/xenomorph/larva/M) var/turf/cur_loc = M.loc if(!istype(cur_loc)) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index 1bb8b42775ee..1b8ac2ee05dc 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -66,7 +66,7 @@ PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/facehugger/Life(delta_time) - if(stat != DEAD && !lying) + if(stat != DEAD && !lying && !(locate(/obj/effect/alien/weeds) in get_turf(src))) adjustBruteLoss(1) return ..() @@ -143,9 +143,9 @@ /mob/living/carbon/xenomorph/facehugger/proc/handle_hug(mob/living/carbon/human/human) var/obj/item/clothing/mask/facehugger/hugger = new /obj/item/clothing/mask/facehugger(loc, hivenumber) - var/did_hug = hugger.attach(human, TRUE, 0.5) + var/did_hug = hugger.attach(human, TRUE, 0.5, client?.ckey) if(client) - client?.player_data?.adjust_stat(PLAYER_STAT_FACEHUGS, STAT_CATEGORY_XENO, 1) + client.player_data?.adjust_stat(PLAYER_STAT_FACEHUGS, STAT_CATEGORY_XENO, 1) var/area/hug_area = get_area(src) if(hug_area) for(var/mob/dead/observer/observer as anything in GLOB.observer_list) @@ -155,6 +155,7 @@ for(var/mob/dead/observer/observer as anything in GLOB.observer_list) to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [src]" + " [OBSERVER_JMP(observer, human)]")) to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [src]")) + timeofdeath = 1 // Ever so slightly deprioritized for larva queue qdel(src) if(hug_area) xeno_message(SPAN_XENOMINORWARNING("You sense that [src] has facehugged a host at \the [hug_area]!"), 1, src.hivenumber) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm index 04b7e04c2da5..4cf0ff113615 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm @@ -170,3 +170,5 @@ /mob/living/carbon/xenomorph/larva/emote(act, m_type, message, intentional, force_silence) playsound(loc, "alien_roar_larva", 15) +/mob/living/carbon/xenomorph/larva/is_xeno_grabbable() + return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm index 1fd1b44cda7a..1269f89f9144 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm @@ -88,6 +88,15 @@ return original_damage +/datum/behavior_delegate/lurker_base/override_intent(mob/living/carbon/target_carbon) + . = ..() + + if(!isxeno_human(target_carbon)) + return + + if(next_slash_buffed) + return INTENT_HARM + /datum/behavior_delegate/lurker_base/melee_attack_additional_effects_target(mob/living/carbon/target_carbon) if (!isxeno_human(target_carbon)) return diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index ce3f55700753..182d3d965832 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -37,12 +37,13 @@ if(GLOB.hive_datum[hivenumber].stored_larva) GLOB.hive_datum[hivenumber].stored_larva = round(GLOB.hive_datum[hivenumber].stored_larva * 0.5) //Lose half on dead queen - var/turf/larva_spawn + var/list/players_with_xeno_pref = get_alien_candidates() - while(GLOB.hive_datum[hivenumber].stored_larva > 0 && istype(GLOB.hive_datum[hivenumber].hive_location, /obj/effect/alien/resin/special/pylon/core)) // stil some left - larva_spawn = get_turf(GLOB.hive_datum[hivenumber].hive_location) - if(players_with_xeno_pref && players_with_xeno_pref.len) - var/mob/xeno_candidate = pick(players_with_xeno_pref) + if(players_with_xeno_pref && istype(GLOB.hive_datum[hivenumber].hive_location, /obj/effect/alien/resin/special/pylon/core)) + var/turf/larva_spawn = get_turf(GLOB.hive_datum[hivenumber].hive_location) + var/count = 0 + while(GLOB.hive_datum[hivenumber].stored_larva > 0 && count < length(players_with_xeno_pref)) // still some left + var/mob/xeno_candidate = players_with_xeno_pref[++count] var/mob/living/carbon/xenomorph/larva/new_xeno = new /mob/living/carbon/xenomorph/larva(larva_spawn) new_xeno.set_hive_and_update(hivenumber) @@ -50,11 +51,14 @@ if(!SSticker.mode.transfer_xeno(xeno_candidate, new_xeno)) qdel(new_xeno) return + new_xeno.visible_message(SPAN_XENODANGER("A larva suddenly burrows out of the ground!"), SPAN_XENODANGER("You burrow out of the ground after feeling an immense tremor through the hive, which quickly fades into complete silence...")) - GLOB.hive_datum[hivenumber].stored_larva-- - GLOB.hive_datum[hivenumber].hive_ui.update_burrowed_larva() + GLOB.hive_datum[hivenumber].stored_larva-- + GLOB.hive_datum[hivenumber].hive_ui.update_burrowed_larva() + if(count) + message_alien_candidates(players_with_xeno_pref, dequeued = count) if(hive && hive.living_xeno_queen == src) xeno_message(SPAN_XENOANNOUNCE("A sudden tremor ripples through the hive... the Queen has been slain! Vengeance!"),3, hivenumber) @@ -134,10 +138,10 @@ switch(caste.caste_type) //This will need to be changed later, when we have proper xeno pathing. Might do it on caste or something. if(XENO_CASTE_BOILER) - var/mob/living/carbon/xenomorph/boiler/B = src + var/mob/living/carbon/xenomorph/boiler/src_boiler = src visible_message(SPAN_DANGER("[src] begins to bulge grotesquely, and explodes in a cloud of corrosive gas!")) - B.smoke.set_up(2, 0, get_turf(src)) - B.smoke.start() + src_boiler.smoke.set_up(2, 0, get_turf(src), new_cause_data = src_boiler.smoke.cause_data) + src_boiler.smoke.start() remains.icon_state = "gibbed-a-corpse" if(XENO_CASTE_RUNNER) remains.icon_state = "gibbed-a-corpse-runner" diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index 4fa3470a6031..842e3b45a76d 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -48,8 +48,15 @@ if(!got_evolution_message) evolve_message() got_evolution_message = TRUE + if(ROUND_TIME < XENO_ROUNDSTART_PROGRESS_TIME_2) evolution_stored += progress_amount + return + + if(evolution_stored > evolution_threshold + progress_amount) + evolution_stored -= progress_amount + return + else evolution_stored += progress_amount diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm b/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm index 756be3bedf6f..1cb563461138 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm @@ -100,3 +100,7 @@ /// Handling the xeno icon state or overlays, return TRUE if icon state should not be changed /datum/behavior_delegate/proc/on_update_icons() return + +/// Used to override an intent for some abilities that must force harm on next attack_alien() +/datum/behavior_delegate/proc/override_intent(mob/living/carbon/target_carbon) + return bound_xeno.a_intent diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/dancer.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/dancer.dm index 841c06151aa5..a21f549ea8cd 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/dancer.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/praetorian/dancer.dm @@ -1,7 +1,7 @@ /datum/xeno_mutator/praetorian_dancer // My name is Cuban Pete, I'm the King of the Rumba Beat name = "STRAIN: Praetorian - Dancer" - description = "You lose all of your acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility that gives you an ability to move even more quickly, dodge bullets, and phase through tallhosts. By slashing tallhosts, you temporarily increase your evasion and you also you apply a tag that changes how your two new tail abilities function. By tagging hosts, you will make Impale hit twice and instead of once and make Tail Trip knock hosts down instead of stunning them." + description = "You lose all of your acid-based abilities and a small amount of your armor in exchange for increased movement speed, evasion, and unparalleled agility that gives you an ability to move even more quickly, dodge bullets, and phase through tallhosts. By slashing tallhosts, you temporarily increase your movement speed and you also you apply a tag that changes how your two new tail abilities function. By tagging hosts, you will make Impale hit twice instead of once and make Tail Trip knock hosts down instead of stunning them." flavor_description = "Demonstrate to the talls what 'there is beauty in death' truly symbolizes, then dance upon their graves!" cost = MUTATOR_COST_EXPENSIVE individual_only = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index b5431720e14a..5d3ee0b04ba7 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -285,6 +285,8 @@ var/larva_gestation_multiplier = 1 var/bonus_larva_spawn_chance = 1 var/hijack_burrowed_surge = FALSE //at hijack, start spawning lots of burrowed + /// how many burrowed is going to spawn during larva surge + var/hijack_burrowed_left = 0 var/ignore_slots = FALSE var/dynamic_evolution = TRUE @@ -877,6 +879,8 @@ /datum/hive_status/proc/abandon_on_hijack() var/area/hijacked_dropship = get_area(living_xeno_queen) + var/shipside_humans_weighted_count = 0 + var/xenos_count = 0 for(var/name_ref in hive_structures) for(var/obj/effect/alien/resin/special/S in hive_structures[name_ref]) if(get_area(S) == hijacked_dropship) @@ -885,6 +889,10 @@ qdel(S) for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos) if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z)) + if(isfacehugger(xeno)) + to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind.")) + qdel(xeno) + continue if(xeno.hunter_data.hunted && !isqueen(xeno)) to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, seperating you from her hive! You must defend yourself from the headhunter before you can enter hibernation...")) xeno.set_hive_and_update(XENO_HIVE_FORSAKEN) @@ -895,6 +903,9 @@ xeno.handle_stomach_contents() qdel(xeno) stored_larva++ + continue + if(!isfacehugger(xeno)) + xenos_count++ for(var/i in GLOB.alive_mob_list) var/mob/living/potential_host = i if(!(potential_host.status_flags & XENO_HOST)) @@ -907,7 +918,13 @@ for(var/obj/item/alien_embryo/embryo in potential_host) embryo.hivenumber = XENO_HIVE_FORSAKEN potential_host.update_med_icon() + for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list) + if((isspecieshuman(current_human) || isspeciessynth(current_human)) && current_human.job) + var/turf/turf = get_turf(current_human) + if(is_mainship_level(turf?.z)) + shipside_humans_weighted_count += RoleAuthority.calculate_role_weight(current_human.job) hijack_burrowed_surge = TRUE + hijack_burrowed_left = max(n_ceil(shipside_humans_weighted_count * 0.5) - xenos_count, 5) hivecore_cooldown = FALSE xeno_message(SPAN_XENOBOLDNOTICE("The weeds have recovered! A new hive core can be built!"),3,hivenumber) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 652d11b2a70b..0c182fb0fe9c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -258,6 +258,9 @@ if(!istype(W)) return FALSE + if(SEND_SIGNAL(src, COMSIG_MOB_ATTEMPTING_EQUIP, W, slot) & COMPONENT_MOB_CANCEL_ATTEMPT_EQUIP) + return FALSE + if(!W.mob_can_equip(src, slot, disable_warning)) if(del_on_fail) qdel(W) @@ -840,7 +843,7 @@ note dizziness decrements automatically in the mob's Life() proc. return FALSE to_chat(src, SPAN_WARNING("You attempt to get a good grip on [selection] in your body.")) else - if(get_active_hand()) + if(usr.get_active_hand()) to_chat(usr, SPAN_WARNING("You need an empty hand for this!")) return FALSE to_chat(usr, SPAN_WARNING("You attempt to get a good grip on [selection] in [src]'s body.")) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 81296f346d50..39cc5b25e519 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -141,10 +141,9 @@ X.visible_message(SPAN_WARNING("[X] devours [pulled]!"), \ SPAN_WARNING("You devour [pulled]!"), null, 5) - //IMPORTANT CODER NOTE: Due to us using the old lighting engine, we need to hacky hack hard to get this working properly - //So we're just going to get the lights out of here by forceMoving them to a far-away place - //They will be recovered when regurgitating, since this also calls forceMove - pulled.moveToNullspace() + if(ishuman(pulled)) + var/mob/living/carbon/human/pulled_human = pulled + pulled_human.disable_lights() //Then, we place the mob where it ought to be X.stomach_contents.Add(pulled) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f1ff7aa7282c..9f88f0f9d611 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -243,7 +243,7 @@ spawning = TRUE close_spawn_windows() - var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind + var/mob/living/carbon/human/character = create_character(TRUE) //creates the human and transfers vars and mind RoleAuthority.equip_role(character, RoleAuthority.roles_for_mode[rank], late_join = TRUE) EquipCustomItems(character) @@ -349,7 +349,7 @@ show_browser(src, dat, "Late Join", "latechoices", "size=420x700") -/mob/new_player/proc/create_character() +/mob/new_player/proc/create_character(is_late_join = FALSE) spawning = TRUE close_spawn_windows() @@ -368,7 +368,7 @@ new_character.lastarea = get_area(loc) - client.prefs.copy_all_to(new_character) + client.prefs.copy_all_to(new_character, job, is_late_join) if (client.prefs.be_random_body) var/datum/preferences/TP = new() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 918d3ab60a7f..60aa2f2c16e7 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -509,7 +509,7 @@ /obj/item/paper/flag name = "paper flag" - desc = "Somebody attached a blank piece of paper to a stick. You feel like waving it around like an idiot." + desc = "Somebody crudely glued a piece of paper to a stick. You feel like waving it around like an idiot." icon_state = "paper_flag" item_state = "paper_flag" diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 67003d4f79d0..5a335002d71d 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -102,6 +102,30 @@ display round(lastgen) and phorontank amount else . += SPAN_NOTICE("The generator is off.") +/obj/structure/machinery/power/port_gen/attack_alien(mob/living/carbon/xenomorph/attacking_xeno) + if(!active && !anchored) + return ..() + + if(attacking_xeno.mob_size < MOB_SIZE_XENO) + to_chat(attacking_xeno, SPAN_XENOWARNING("You're too small to do any significant damage to affect this!")) + return XENO_NO_DELAY_ACTION + + attacking_xeno.animation_attack_on(src) + attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno] slashes [src]!"), SPAN_DANGER("You slash [src]!")) + playsound(attacking_xeno, pick('sound/effects/metalhit.ogg', 'sound/weapons/alien_claw_metal1.ogg', 'sound/weapons/alien_claw_metal2.ogg', 'sound/weapons/alien_claw_metal3.ogg'), 25, 1) + + if(active) + active = FALSE + stop_processing() + icon_state = initial(icon_state) + visible_message(SPAN_NOTICE("[src] sputters to a stop!")) + return XENO_NONCOMBAT_ACTION + + if(anchored) + anchored = FALSE + visible_message(SPAN_NOTICE("[src]'s bolts are dislodged!")) + return XENO_NONCOMBAT_ACTION + //A power generator that runs on solid plasma sheets. /obj/structure/machinery/power/port_gen/pacman name = "P.A.C.M.A.N.-type Portable Generator" diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 05a4256efb49..d8b158485501 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -2740,7 +2740,7 @@ return var/datum/effects/neurotoxin/neuro_effect = locate() in moob.effects_list if(!neuro_effect) - neuro_effect = new /datum/effects/neurotoxin(moob) + neuro_effect = new /datum/effects/neurotoxin(moob, proj.firer) neuro_effect.duration += 5 moob.apply_effect(3, DAZE) to_chat(moob, SPAN_HIGHDANGER("Neurotoxic liquid spreads all over you and immediately soaks into your pores and orifices! Oh fuck!")) // Fucked up but have a chance to escape rather than being game-ended @@ -2763,9 +2763,10 @@ /datum/ammo/xeno/boiler_gas/proc/drop_nade(turf/turf, obj/item/projectile/proj) var/lifetime_mult = 1.0 + var/datum/cause_data if(isboiler(proj.firer)) - smoke_system.cause_data = proj.weapon_cause_data - smoke_system.set_up(smokerange, 0, turf) + cause_data = proj.weapon_cause_data + smoke_system.set_up(smokerange, 0, turf, new_cause_data = cause_data) smoke_system.lifetime = 12 * lifetime_mult smoke_system.start() turf.visible_message(SPAN_DANGER("A glob of acid lands with a splat and explodes into noxious fumes!")) diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index 98d1be3a9c64..d8ea29cd92f8 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -143,7 +143,7 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w /obj/item/weapon/gun/dropped(mob/user) . = ..() - turn_off_light(user) + disconnect_light_from_mob(user) var/delay_left = (last_fired + fire_delay + additional_fire_group_delay) - world.time if(fire_delay_group && delay_left > 0) @@ -160,7 +160,8 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w for(var/group in fire_delay_group) LAZYSET(user.fire_delay_next_fire, group, world.time + delay_left) -/obj/item/weapon/gun/proc/turn_off_light(mob/bearer) +/// This function disconnects the luminosity from the mob and back to the gun +/obj/item/weapon/gun/proc/disconnect_light_from_mob(mob/bearer) if (!(flags_gun_features & GUN_FLASHLIGHT_ON)) return FALSE for (var/slot in attachments) @@ -172,6 +173,18 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w return TRUE return FALSE +/// This function actually turns the lights on the gun off +/obj/item/weapon/gun/proc/turn_off_light(mob/bearer) + if (!(flags_gun_features & GUN_FLASHLIGHT_ON)) + return FALSE + for (var/slot in attachments) + var/obj/item/attachable/attachment = attachments[slot] + if (!attachment || !attachment.light_mod) + continue + attachment.activate_attachment(src, bearer) + return TRUE + return FALSE + /obj/item/weapon/gun/pickup(mob/user) ..() diff --git a/code/modules/projectiles/guns/lever_action.dm b/code/modules/projectiles/guns/lever_action.dm index d611605cd0e5..259c6170ae48 100644 --- a/code/modules/projectiles/guns/lever_action.dm +++ b/code/modules/projectiles/guns/lever_action.dm @@ -71,7 +71,7 @@ their unique feature is that a direct hit will buff your damage and firerate /obj/item/weapon/gun/lever_action/dropped(mob/user) . = ..() - reset_hit_buff() + reset_hit_buff(user) addtimer(VARSET_CALLBACK(src, cur_onehand_chance, reset_onehand_chance), 4 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) /obj/item/weapon/gun/lever_action/proc/direct_hit_buff(mob/user, mob/target, one_hand_lever = FALSE) @@ -110,7 +110,7 @@ their unique feature is that a direct hit will buff your damage and firerate if(!(flags_gun_lever_action & USES_STREAKS)) return apply_hit_buff(user, target, one_hand_lever) //this is a separate proc so it's configgable - addtimer(CALLBACK(src, PROC_REF(reset_hit_buff), one_hand_lever), hit_buff_reset_cooldown, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(reset_hit_buff), user, one_hand_lever), hit_buff_reset_cooldown, TIMER_OVERRIDE|TIMER_UNIQUE) /obj/item/weapon/gun/lever_action/proc/apply_hit_buff(mob/user, mob/target, one_hand_lever = FALSE) lever_sound = lever_super_sound @@ -126,7 +126,7 @@ their unique feature is that a direct hit will buff your damage and firerate fire_delay += AM.delay_mod wield_delay = 0 //for one-handed levering -/obj/item/weapon/gun/lever_action/proc/reset_hit_buff(one_hand_lever) //why does this need a user arg when it doesn't use user at all? +/obj/item/weapon/gun/lever_action/proc/reset_hit_buff(mob/user, one_hand_lever) if(!(flags_gun_lever_action & USES_STREAKS)) return SIGNAL_HANDLER @@ -513,10 +513,12 @@ their unique feature is that a direct hit will buff your damage and firerate levered = FALSE return empty_chamber(user) -/obj/item/weapon/gun/lever_action/xm88/reset_hit_buff(one_hand_lever) //why does this need a user arg when it doesn't use user at all? +/obj/item/weapon/gun/lever_action/xm88/reset_hit_buff(mob/user, one_hand_lever) if(!(flags_gun_lever_action & USES_STREAKS)) return SIGNAL_HANDLER + if(streak > 0) + to_chat(user, SPAN_WARNING("[src] beeps as it loses its targeting data, and returns to normal firing procedures.")) streak = 0 lever_sound = initial(lever_sound) lever_message = initial(lever_message) @@ -531,7 +533,6 @@ their unique feature is that a direct hit will buff your damage and firerate lever_delay = FIRE_DELAY_TIER_3 damage_mult = BASE_BULLET_DAMAGE_MULT recalculate_attachment_bonuses() //stock wield delay - visible_message(SPAN_WARNING("\The [src] beeps as it loses its targeting data, and returns to normal firing procedures."), max_distance = 1) // tell them they've lost stacks if(one_hand_lever) addtimer(VARSET_CALLBACK(src, cur_onehand_chance, reset_onehand_chance), 4 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) diff --git a/code/modules/projectiles/guns/smartgun.dm b/code/modules/projectiles/guns/smartgun.dm index 4378a41aac19..c73d9c0f6423 100644 --- a/code/modules/projectiles/guns/smartgun.dm +++ b/code/modules/projectiles/guns/smartgun.dm @@ -18,11 +18,11 @@ force = 20 wield_delay = WIELD_DELAY_FAST aim_slowdown = SLOWDOWN_ADS_SPECIALIST - var/powerpack = null - /// Whether the smartgun drains the powerpack battery (Ignored if requires_powerpack is false) + var/obj/item/smartgun_battery/battery = null + /// Whether the smartgun drains the battery (Ignored if requires_battery is false) var/requires_power = TRUE - /// Whether the smartgun requires a powerpack to be worn - var/requires_powerpack = TRUE + /// Whether the smartgun requires a battery + var/requires_battery = TRUE /// Whether the smartgun requires a harness to use var/requires_harness = TRUE ammo = /datum/ammo/bullet/smartgun @@ -69,6 +69,7 @@ ammo_primary = GLOB.ammo_list[ammo_primary] //Gun initialize calls replace_ammo() so we need to set these first. ammo_secondary = GLOB.ammo_list[ammo_secondary] MD = new(src) + battery = new /obj/item/smartgun_battery(src) . = ..() update_icon() @@ -76,6 +77,7 @@ ammo_primary = null ammo_secondary = null QDEL_NULL(MD) + QDEL_NULL(battery) . = ..() /obj/item/weapon/gun/smartgun/set_gun_attachment_offsets() @@ -116,6 +118,9 @@ . += message . += "The restriction system is [iff_enabled ? "on" : "off"]." + if(battery && get_dist(user, src) <= 1) + . += "A small gauge on [battery] reads: Power: [battery.power_cell.charge] / [battery.power_cell.maxcharge]." + /obj/item/weapon/gun/smartgun/clicked(mob/user, list/mods) if(mods["alt"]) if(!CAN_PICKUP(user, src)) @@ -138,6 +143,20 @@ else return ..() +/obj/item/weapon/gun/smartgun/attackby(obj/item/attacking_object, mob/user) + if(istype(attacking_object, /obj/item/smartgun_battery)) + var/obj/item/smartgun_battery/new_cell = attacking_object + visible_message("[user] swaps out the power cell in the [src].","You swap out the power cell in the [src] and drop the old one.") + to_chat(user, SPAN_NOTICE("The new cell contains: [new_cell.power_cell.charge] power.")) + battery.update_icon() + battery.forceMove(get_turf(user)) + battery = new_cell + user.drop_inv_item_to_loc(new_cell, src) + playsound(src, 'sound/machines/click.ogg', 25, 1) + return + + return ..() + /obj/item/weapon/gun/smartgun/replace_magazine(mob/user, obj/item/ammo_magazine/magazine) if(!cover_open) to_chat(user, SPAN_WARNING("\The [src]'s feed cover is closed! You can't put a new drum in! (alt-click to open it)")) @@ -166,8 +185,6 @@ var/mob/living/carbon/human/H = owner if(H.is_mob_incapacitated() || G.get_active_firearm(H, FALSE) != holder_item) return - if(!G.powerpack) - G.link_powerpack(usr) /datum/action/item_action/smartgun/update_button_icon() return @@ -313,8 +330,6 @@ /obj/item/weapon/gun/smartgun/unique_action(mob/user) if(isobserver(usr) || isxeno(usr)) return - if(!powerpack) - link_powerpack(usr) toggle_ammo_type(usr) /obj/item/weapon/gun/smartgun/proc/toggle_ammo_type(mob/user) @@ -346,45 +361,38 @@ remove_bullet_trait("iff") drain -= 10 MD.iff_signal = null - if(!powerpack) - link_powerpack(usr) /obj/item/weapon/gun/smartgun/Fire(atom/target, mob/living/user, params, reflex = 0, dual_wield) - if(!requires_powerpack) + if(!requires_battery) ..() return - if(!powerpack || (powerpack && user.back != powerpack)) - if(!link_powerpack(user)) - to_chat(user, SPAN_WARNING("You need a powerpack to be able to fire \the [src]...")) - unlink_powerpack() - return - if(powerpack) + if(battery) if(!requires_power) ..() return - var/obj/item/smartgun_powerpack/pp = user.back - if(istype(pp)) - var/obj/item/cell/c = pp.pcell - var/d = drain - if(flags_gun_features & GUN_BURST_ON) - d = drain*burst_amount*1.5 - if(pp.drain_powerpack(d, c)) - ..() - - -/obj/item/weapon/gun/smartgun/proc/link_powerpack(mob/user) - if(!requires_powerpack) - return TRUE + if(drain_battery()) + ..() - if(!QDELETED(user) && !QDELETED(user.back)) - if(istype(user.back, /obj/item/smartgun_powerpack)) - powerpack = user.back - return TRUE - return FALSE +/obj/item/weapon/gun/smartgun/proc/drain_battery(override_drain) + + var/actual_drain = (rand(drain / 2, drain) / 25) -/obj/item/weapon/gun/smartgun/proc/unlink_powerpack() - powerpack = null + if(override_drain) + actual_drain = (rand(override_drain / 2, override_drain) / 25) + + if(battery && battery.power_cell.charge > 0) + if(battery.power_cell.charge > actual_drain) + battery.power_cell.charge -= actual_drain + else + battery.power_cell.charge = 0 + to_chat(usr, SPAN_WARNING("[src] emits a low power warning and immediately shuts down!")) + return FALSE + return TRUE + if(!battery || battery.power_cell.charge == 0) + to_chat(usr, SPAN_WARNING("[src] emits a low power warning and immediately shuts down!")) + return FALSE + return FALSE /obj/item/weapon/gun/smartgun/proc/toggle_recoil_compensation(mob/user) to_chat(user, "[icon2html(src, usr)] You [recoil_compensation? "disable" : "enable"] \the [src]'s recoil compensation.") @@ -704,5 +712,30 @@ /obj/item/weapon/gun/smartgun/admin requires_power = FALSE - requires_powerpack = FALSE + requires_battery = FALSE requires_harness = FALSE + +/obj/item/smartgun_battery + name = "smartgun DV9 battery" + desc = "A standard-issue 9-volt lithium dry-cell battery, most commonly used within the USCMC to power smartguns. Per the manual, one battery is good for up to 50000 rounds and plugs directly into the smartgun's power receptacle, which is only compatible with this type of battery. Various auxiliary modes usually bring the round count far lower. While this cell is incompatible with most standard electrical system, it can be charged by common rechargers in a pinch. USCMC smartgunners often guard them jealously." + + icon = 'icons/obj/structures/machinery/power.dmi' + icon_state = "smartguncell" + + force = 5 + throwforce = 5 + throw_speed = SPEED_VERY_FAST + throw_range = 5 + w_class = SIZE_SMALL + + var/obj/item/cell/high/power_cell + +/obj/item/smartgun_battery/Initialize(mapload) + . = ..() + + power_cell = new(src) + +/obj/item/smartgun_battery/get_examine_text(mob/user) + . = ..() + + . += SPAN_NOTICE("The power indicator reads [power_cell.charge] charge out of [power_cell.maxcharge] total.") diff --git a/code/modules/projectiles/magazines/flamer.dm b/code/modules/projectiles/magazines/flamer.dm index 782b6bfe8910..787a0585640a 100644 --- a/code/modules/projectiles/magazines/flamer.dm +++ b/code/modules/projectiles/magazines/flamer.dm @@ -58,6 +58,7 @@ reagents.clear_reagents() + playsound(loc, 'sound/effects/refill.ogg', 25, 1, 3) to_chat(usr, SPAN_NOTICE("You empty out [src]")) update_icon() @@ -71,22 +72,21 @@ G.update_icon() /obj/item/ammo_magazine/flamer_tank/afterattack(obj/target, mob/user , flag) //refuel at fueltanks when we run out of ammo. - if(!istype(target, /obj/structure/reagent_dispensers/fueltank) && !istype(target, /obj/item/tool/weldpack) && !istype(target, /obj/item/storage/backpack/marine/engineerpack)) - return ..() if(get_dist(user,target) > 1) return ..() + if(!istype(target, /obj/structure/reagent_dispensers/fueltank) && !istype(target, /obj/item/tool/weldpack) && !istype(target, /obj/item/storage/backpack/marine/engineerpack)) + return ..() - var/obj/O = target - if(!O.reagents || O.reagents.reagent_list.len < 1) - to_chat(user, SPAN_WARNING("[O] is empty!")) + if(!target.reagents || target.reagents.reagent_list.len < 1) + to_chat(user, SPAN_WARNING("[target] is empty!")) return if(!reagents) create_reagents(max_rounds) - var/datum/reagent/to_add = O.reagents.reagent_list[1] + var/datum/reagent/to_add = target.reagents.reagent_list[1] - if(!istype(to_add) || (length(reagents.reagent_list) && flamer_chem != to_add.id) || length(O.reagents.reagent_list) > 1) + if(!istype(to_add) || (length(reagents.reagent_list) && flamer_chem != to_add.id) || length(target.reagents.reagent_list) > 1) to_chat(user, SPAN_WARNING("You can't mix fuel mixtures!")) return @@ -96,10 +96,11 @@ var/fuel_amt_to_remove = Clamp(to_add.volume, 0, max_rounds - reagents.get_reagent_amount(to_add.id)) if(!fuel_amt_to_remove) - to_chat(user, SPAN_WARNING("[O] is empty!")) + if(!max_rounds) + to_chat(user, SPAN_WARNING("[target] is empty!")) return - O.reagents.remove_reagent(to_add.id, fuel_amt_to_remove) + target.reagents.remove_reagent(to_add.id, fuel_amt_to_remove) reagents.add_reagent(to_add.id, fuel_amt_to_remove) playsound(loc, 'sound/effects/refill.ogg', 25, 1, 3) caliber = to_add.name diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index cec04ca66616..7c96169d199f 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -96,7 +96,7 @@ H.contract_disease(new /datum/disease/xeno_transformation(0),1) //This is the real reason PMCs are being sent to retrieve it. /datum/chem_property/special/DNA_Disintegrating/trigger() - SSticker.mode.get_specific_call("Weyland-Yutani Goon (Chemical Investigation Squad)", TRUE, FALSE, holder.name) + SSticker.mode.get_specific_call("Weyland-Yutani Goon (Chemical Investigation Squad)", FALSE, FALSE, holder.name, TRUE) chemical_data.update_credits(10) message_admins("The research department has discovered DNA_Disintegrating in [holder.name] adding 10 bonus tech points.") var/datum/techtree/tree = GET_TREE(TREE_MARINE) diff --git a/code/modules/shuttle/dropship_hijack.dm b/code/modules/shuttle/dropship_hijack.dm index 4798279a8b94..35009ad42485 100644 --- a/code/modules/shuttle/dropship_hijack.dm +++ b/code/modules/shuttle/dropship_hijack.dm @@ -1,3 +1,5 @@ +#define HIJACK_CRASH_SITE_OFFSET_X -5 +#define HIJACK_CRASH_SITE_OFFSET_Y -11 /datum/dropship_hijack var/obj/docking_port/mobile/shuttle @@ -83,18 +85,17 @@ /datum/dropship_hijack/almayer/proc/target_crash_site(ship_section) target_ship_section = ship_section - var/area/target_area = get_crashsite_area(ship_section) - // spawn crash location - var/turf/target = pick(get_area_turfs(target_area)) + var/turf/target = get_crashsite_turf(ship_section) if(!target) to_chat(usr, SPAN_WARNING("No area available")) return var/obj/docking_port/stationary/marine_dropship/crash_site/target_site = new() crash_site = target_site - crash_site.x = target.x - 5 - crash_site.y = target.y - 11 - crash_site.z = target.z + var/turf/offset_target = locate(target.x + HIJACK_CRASH_SITE_OFFSET_X, target.y + HIJACK_CRASH_SITE_OFFSET_Y, target.z) + if(!offset_target) + offset_target = target // Welp the offsetting failed so... + target_site.forceMove(offset_target) target_site.name = "[shuttle] crash site" target_site.id = "crash_site_[shuttle.id]" @@ -117,10 +118,11 @@ var/list/remaining_crash_sites = almayer_ship_sections.Copy() remaining_crash_sites -= target_ship_section var/new_target_ship_section = pick(remaining_crash_sites) - var/area/target_area = get_crashsite_area(new_target_ship_section) - // spawn crash location - var/turf/target = pick(get_area_turfs(target_area)) - crash_site.Move(target) + var/turf/target = get_crashsite_turf(new_target_ship_section) + var/turf/offset_target = locate(target.x + HIJACK_CRASH_SITE_OFFSET_X, target.y + HIJACK_CRASH_SITE_OFFSET_Y, target.z) + if(!offset_target) + offset_target = target // Welp the offsetting failed so... + crash_site.forceMove(offset_target) marine_announcement("A hostile aircraft on course for the [target_ship_section] has been successfully deterred.", "IX-50 MGAD System") target_ship_section = new_target_ship_section // TODO mobs not alerted @@ -172,53 +174,56 @@ /datum/dropship_hijack/almayer/proc/disable_latejoin() enter_allowed = FALSE -/datum/dropship_hijack/almayer/proc/get_crashsite_area(ship_section) - var/list/areas = list() +/datum/dropship_hijack/almayer/proc/get_crashsite_turf(ship_section) + var/list/turfs = list() switch(ship_section) if("Upper deck Foreship") - areas += typesof(/area/almayer/shipboard/brig) - areas += list(/area/almayer/command/cichallway) - areas += list(/area/almayer/command/cic) + turfs += get_area_turfs(/area/almayer/shipboard/brig/armory) + turfs += get_area_turfs(/area/almayer/shipboard/brig/cells) + turfs += get_area_turfs(/area/almayer/shipboard/brig/cic_hallway) + turfs += get_area_turfs(/area/almayer/shipboard/brig/cryo) + turfs += get_area_turfs(/area/almayer/shipboard/brig/evidence_storage) + turfs += get_area_turfs(/area/almayer/shipboard/brig/execution) + turfs += get_area_turfs(/area/almayer/shipboard/brig/general_equipment) + turfs += get_area_turfs(/area/almayer/shipboard/brig/lobby) + turfs += get_area_turfs(/area/almayer/shipboard/brig/main_office) + turfs += get_area_turfs(/area/almayer/shipboard/brig/perma) + turfs += get_area_turfs(/area/almayer/shipboard/brig/processing) + turfs += get_area_turfs(/area/almayer/shipboard/brig/surgery) + turfs += get_area_turfs(/area/almayer/command/cichallway) + turfs += get_area_turfs(/area/almayer/command/cic) if("Upper deck Midship") - areas += list( - /area/almayer/medical/morgue, - /area/almayer/medical/upper_medical, - /area/almayer/medical/containment, - /area/almayer/medical/containment/cell, - /area/almayer/medical/medical_science, - /area/almayer/medical/testlab, - /area/almayer/medical/hydroponics, - ) + turfs += get_area_turfs(/area/almayer/medical/morgue) + turfs += get_area_turfs(/area/almayer/medical/upper_medical) + turfs += get_area_turfs(/area/almayer/medical/containment) + turfs += get_area_turfs(/area/almayer/medical/containment/cell) + turfs += get_area_turfs(/area/almayer/medical/medical_science) + turfs += get_area_turfs(/area/almayer/medical/testlab) + turfs += get_area_turfs(/area/almayer/medical/hydroponics) if("Upper deck Aftship") - areas += list( - /area/almayer/engineering/upper_engineering, - /area/almayer/command/computerlab, - /area/almayer/engineering/laundry, - ) + turfs += get_area_turfs(/area/almayer/engineering/upper_engineering) + turfs += get_area_turfs(/area/almayer/command/computerlab) + turfs += get_area_turfs(/area/almayer/engineering/laundry) if("Lower deck Foreship") - areas += list( - /area/almayer/hallways/hangar, - /area/almayer/hallways/vehiclehangar - ) + turfs += get_area_turfs(/area/almayer/hallways/hangar) + turfs += get_area_turfs(/area/almayer/hallways/vehiclehangar) if("Lower deck Midship") - areas += list( - /area/almayer/medical/chemistry, - /area/almayer/medical/lower_medical_lobby, - /area/almayer/medical/lockerroom, - /area/almayer/medical/lower_medical_medbay, - /area/almayer/medical/operating_room_one, - /area/almayer/medical/operating_room_two, - /area/almayer/medical/operating_room_three, - /area/almayer/medical/operating_room_four, - /area/almayer/living/briefing, - /area/almayer/squads/req, - - ) + turfs += get_area_turfs(/area/almayer/medical/chemistry) + turfs += get_area_turfs(/area/almayer/medical/lower_medical_lobby) + turfs += get_area_turfs(/area/almayer/medical/lockerroom) + turfs += get_area_turfs(/area/almayer/medical/lower_medical_medbay) + turfs += get_area_turfs(/area/almayer/medical/operating_room_one) + turfs += get_area_turfs(/area/almayer/medical/operating_room_two) + turfs += get_area_turfs(/area/almayer/medical/operating_room_three) + turfs += get_area_turfs(/area/almayer/medical/operating_room_four) + turfs += get_area_turfs(/area/almayer/living/briefing) + turfs += get_area_turfs(/area/almayer/squads/req) if("Lower deck Aftship") - areas += list( - /area/almayer/living/cryo_cells, - /area/almayer/engineering/engineering_workshop, - ) + turfs += get_area_turfs(/area/almayer/living/cryo_cells) + turfs += get_area_turfs(/area/almayer/engineering/engineering_workshop) else CRASH("Crash site [ship_section] unknown.") - return pick(areas) + return pick(turfs) + +#undef HIJACK_CRASH_SITE_OFFSET_X +#undef HIJACK_CRASH_SITE_OFFSET_Y diff --git a/code/modules/shuttle/helpers.dm b/code/modules/shuttle/helpers.dm index 14cfcc3cd691..1d841581faa0 100644 --- a/code/modules/shuttle/helpers.dm +++ b/code/modules/shuttle/helpers.dm @@ -8,7 +8,8 @@ /datum/door_controller/aggregate/Destroy(force, ...) . = ..() - QDEL_NULL_LIST(door_controllers) + QDEL_LIST_ASSOC_VAL(door_controllers) + door_controllers = null /datum/door_controller/aggregate/proc/set_label(label) for(var/datum/door_controller/single/cont in door_controllers) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 0582c1dbcc06..7e181ed470cb 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -180,18 +180,20 @@ if(P) return P.id -/obj/docking_port/proc/is_in_shuttle_bounds(atom/A) - var/turf/T = get_turf(A) - if(T.z != z) +/obj/docking_port/proc/is_in_shuttle_bounds(atom/target) + if(!target) + return FALSE + var/turf/target_turf = get_turf(target) + if(!target_turf || target_turf.z != z) return FALSE var/list/bounds = return_coords() var/x0 = bounds[1] var/y0 = bounds[2] var/x1 = bounds[3] var/y1 = bounds[4] - if(!ISINRANGE(T.x, min(x0, x1), max(x0, x1))) + if(!ISINRANGE(target_turf.x, min(x0, x1), max(x0, x1))) return FALSE - if(!ISINRANGE(T.y, min(y0, y1), max(y0, y1))) + if(!ISINRANGE(target_turf.y, min(y0, y1), max(y0, y1))) return FALSE return TRUE @@ -626,15 +628,15 @@ /obj/docking_port/mobile/proc/intoTheSunset() // Loop over mobs - for(var/t in return_turfs()) - var/turf/T = t - for(var/mob/living/L in T.GetAllContents()) + for(var/turf/turf as anything in return_turfs()) + for(var/mob/living/mob in turf.GetAllContents()) // Ghostize them and put them in nullspace stasis (for stat & possession checks) - //L.notransform = TRUE - var/mob/dead/observer/O = L.ghostize(FALSE) - if(O) - O.timeofdeath = world.time - L.moveToNullspace() + //mob.notransform = TRUE + var/mob/dead/observer/obs = mob.ghostize(FALSE) + if(obs) + obs.timeofdeath = world.time + obs.client?.larva_queue_time = world.time + mob.moveToNullspace() // Now that mobs are stowed, delete the shuttle jumpToNullSpace() diff --git a/code/modules/shuttle/shuttles/escape_shuttle.dm b/code/modules/shuttle/shuttles/escape_shuttle.dm index d1dc52dd8465..a4bce9910bb7 100644 --- a/code/modules/shuttle/shuttles/escape_shuttle.dm +++ b/code/modules/shuttle/shuttles/escape_shuttle.dm @@ -1,3 +1,5 @@ +#define CRASH_LAND_PROBABILITY 50 + /obj/docking_port/mobile/escape_shuttle name = "Escape Pod" id = ESCAPE_SHUTTLE @@ -5,13 +7,13 @@ width = 4 height = 5 preferred_direction = SOUTH - callTime = DROPSHIP_TRANSIT_DURATION rechargeTime = SHUTTLE_RECHARGE ignitionTime = 8 SECONDS ignition_sound = 'sound/effects/escape_pod_warmup.ogg' var/datum/door_controller/single/door_handler = new() var/launched = FALSE + var/crash_land = FALSE var/evac_set = FALSE /obj/docking_port/mobile/escape_shuttle/Initialize(mapload) @@ -46,12 +48,14 @@ if(mode == SHUTTLE_CRASHED) return + if(launched) + return + var/obj/structure/machinery/computer/shuttle/escape_pod_panel/panel = getControlConsole() if(panel.pod_state == STATE_DELAYED) return door_handler.control_doors("force-lock-launch") - destination = null var/occupant_count = 0 var/list/cryos = list() for(var/area/interior_area in shuttle_areas) @@ -71,11 +75,103 @@ door_handler.control_doors("force-unlock") return + destination = null + if(prob(CRASH_LAND_PROBABILITY)) + create_crash_point() + set_mode(SHUTTLE_IGNITING) on_ignition() setTimer(ignitionTime) launched = TRUE +/obj/docking_port/mobile/escape_shuttle/proc/create_crash_point() + for(var/i = 1 to 10) + var/list/all_ground_levels = SSmapping.levels_by_trait(ZTRAIT_GROUND) + var/ground_z_level = all_ground_levels[1] + + var/list/area/potential_areas = SSmapping.areas_in_z["[ground_z_level]"] + + var/area/area_picked = pick(potential_areas) + + var/list/potential_turfs = list() + + for(var/turf/turf_in_area in area_picked) + potential_turfs += turf_in_area + + if(!length(potential_turfs)) + continue + + var/turf/turf_picked = pick(potential_turfs) + + var/obj/docking_port/stationary/escape_pod/crash_land/temp_escape_pod_port = new(turf_picked) + temp_escape_pod_port.width = width + temp_escape_pod_port.height = height + temp_escape_pod_port.id = id + + if(!check_crash_point(temp_escape_pod_port)) + qdel(temp_escape_pod_port) + continue + + destination = temp_escape_pod_port + break + + if(destination) + crash_land = TRUE + +/obj/docking_port/mobile/escape_shuttle/proc/check_crash_point(obj/docking_port/stationary/escape_pod/crash_land/checked_escape_pod_port) + for(var/turf/found_turf as anything in checked_escape_pod_port.return_turfs()) + var/area/found_area = get_area(found_turf) + if(found_area.flags_area & AREA_NOTUNNEL) + return FALSE + + if(!found_area.can_build_special) + return FALSE + + if(istype(found_turf, /turf/closed/wall)) + var/turf/closed/wall/found_closed_turf = found_turf + if(found_closed_turf.hull) + return FALSE + + if(istype(found_turf, /turf/closed/shuttle)) + return FALSE + + return TRUE + +/obj/docking_port/mobile/escape_shuttle/enterTransit() + . = ..() + + if(!crash_land) + return + + for(var/area/shuttle_area in shuttle_areas) + shuttle_area.flags_alarm_state |= ALARM_WARNING_FIRE + shuttle_area.updateicon() + for(var/mob/evac_mob in shuttle_area) + if(evac_mob.client) + playsound_client(evac_mob.client, 'sound/effects/bomb_fall.ogg', vol = 50) + + for(var/turf/found_turf as anything in destination.return_turfs()) + if(istype(found_turf, /turf/closed)) + found_turf.ChangeTurf(/turf/open/floor) + + cell_explosion(destination.return_center_turf(), 300, 25, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data("evac pod crash")) + +/obj/docking_port/mobile/escape_shuttle/on_prearrival() + . = ..() + + if(!crash_land) + return + + movement_force = list("KNOCKDOWN" = 0, "THROW" = 5) + + for(var/area/shuttle_area in shuttle_areas) + for(var/mob/evac_mob in shuttle_area) + shake_camera(evac_mob, 20, 2) + if(evac_mob.client) + playsound_client(evac_mob.client, get_sfx("bigboom"), vol = 50) + + door_handler.control_doors("force-unlock") + /obj/docking_port/mobile/escape_shuttle/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() playsound(src,'sound/effects/escape_pod_launch.ogg', 50, 1) @@ -138,6 +234,23 @@ width = 4 height = 5 +/obj/docking_port/stationary/escape_pod/crash_land + name = "Crash Escape Pod Dock" + +/obj/docking_port/stationary/escape_pod/crash_land/on_arrival(obj/docking_port/mobile/arriving_shuttle) + . = ..() + + if(istype(arriving_shuttle, /obj/docking_port/mobile/escape_shuttle)) + var/obj/docking_port/mobile/escape_shuttle/escape_shuttle = arriving_shuttle + escape_shuttle.door_handler.control_doors("force-unlock") + + for(var/area/shuttle_area in arriving_shuttle.shuttle_areas) + shuttle_area.SetDynamicLighting() + shuttle_area.SetLightLevel(0) + + shuttle_area.flags_alarm_state &= ~ALARM_WARNING_FIRE + shuttle_area.updateicon() + /datum/map_template/shuttle/escape_pod_w name = "Escape Pod W" shuttle_id = ESCAPE_SHUTTLE_WEST @@ -157,3 +270,6 @@ /datum/map_template/shuttle/escape_pod_e_cl name = "Escape Pod E CL" shuttle_id = ESCAPE_SHUTTLE_EAST_CL + + +#undef CRASH_LAND_PROBABILITY diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 4a44c3ce7b67..767f50fc9750 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -176,9 +176,25 @@ SPAN_NOTICE("[user] clamps bleeders in your [parse_zone(target_zone)]."), SPAN_NOTICE("[user] clamps bleeders in [target]'s [parse_zone(target_zone)].")) - surgery.affected_limb.remove_all_bleeding(TRUE, FALSE) log_interact(user, target, "[key_name(user)] clamped bleeders in [key_name(target)]'s [surgery.affected_limb.display_name], possibly ending [surgery].") + var/surface_modifier = target.buckled?.surgery_duration_multiplier + if(!surface_modifier) + surface_modifier = SURGERY_SURFACE_MULT_AWFUL + for(var/obj/surface in get_turf(target)) + if(surface_modifier > surface.surgery_duration_multiplier) + surface_modifier = surface.surgery_duration_multiplier + + if(surface_modifier == SURGERY_SURFACE_MULT_IDEAL) + surgery.affected_limb.remove_all_bleeding(TRUE, FALSE) + return + + var/bleeding_multiplier_bad_surface = surface_modifier - 1 + for(var/datum/effects/bleeding/external/external_bleed in surgery.affected_limb.bleeding_effects_list) + external_bleed.blood_loss *= bleeding_multiplier_bad_surface + to_chat(user, SPAN_WARNING("Stopping blood loss is less effective in these conditions.")) + + /datum/surgery_step/clamp_bleeders_step/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) user.affected_message(target, SPAN_WARNING("Your hand slips, tearing blood vessels in [target]'s [surgery.affected_limb.display_name] and causing massive bleeding!"), diff --git a/code/modules/surgery/surgery_steps.dm b/code/modules/surgery/surgery_steps.dm index ee6a0b1056e8..b58c62b57f68 100644 --- a/code/modules/surgery/surgery_steps.dm +++ b/code/modules/surgery/surgery_steps.dm @@ -114,6 +114,10 @@ affected_limb, or location vars. Also, in that case there may be a wait between step_duration *= surface_modifier + var/list/human_modifiers = list("surgery_speed" = 1.0, "pain_reduction" = 0) + SEND_SIGNAL(user, COMSIG_HUMAN_SURGERY_APPLY_MODIFIERS, human_modifiers) + step_duration *= human_modifiers["surgery_speed"] + var/try_to_fail if(user.a_intent != INTENT_HELP) try_to_fail = TRUE @@ -145,7 +149,7 @@ affected_limb, or location vars. Also, in that case there may be a wait between to_chat(user, SPAN_WARNING("[capitalize(english_list(message, final_comma_text = ","))].")) var/advance //Whether to continue to the next step afterwards. - var/pain_failure_chance = max(0, target.pain?.feels_pain ? surgery.pain_reduction_required - target.pain.reduction_pain : 0) * 2 //Each extra pain unit increases the chance by 2 + var/pain_failure_chance = max(0, (target.pain?.feels_pain ? surgery.pain_reduction_required - target.pain.reduction_pain : 0) * 2 - human_modifiers["pain_reduction"]) //Each extra pain unit increases the chance by 2 play_preop_sound(user, target, target_zone, tool, surgery) diff --git a/code/modules/tents/blockers.dm b/code/modules/tents/blockers.dm new file mode 100644 index 000000000000..3301768d9147 --- /dev/null +++ b/code/modules/tents/blockers.dm @@ -0,0 +1,38 @@ +/// Invisible Blocker Walls, they link up with the main tent and collapse with it +/obj/structure/blocker/tent + name = "Tent Blocker" + icon = 'icons/obj/structures/barricades.dmi' + icon_state = "folding_0" // for map editing only + flags_atom = ON_BORDER + invisibility = INVISIBILITY_MAXIMUM + density = TRUE + opacity = FALSE // Unfortunately this doesn't behave as we'd want with ON_BORDER so we can't make tent opaque + /// The tent this blocker relates to, will be destroyed along with it + var/obj/structure/tent/linked_tent + +/obj/structure/blocker/tent/Initialize(mapload, ...) + . = ..() + icon_state = null + linked_tent = locate(/obj/structure/tent) in loc + if(!linked_tent) + return INITIALIZE_HINT_QDEL + RegisterSignal(linked_tent, COMSIG_PARENT_QDELETING, PROC_REF(collapse)) + +/obj/structure/blocker/tent/Destroy(force) + . = ..() + linked_tent = null + +/obj/structure/blocker/tent/proc/collapse() + SIGNAL_HANDLER + qdel(src) + +/obj/structure/blocker/tent/initialize_pass_flags(datum/pass_flags_container/PF) + ..() + if (PF) + PF.flags_can_pass_all = NONE + PF.flags_can_pass_front = NONE + PF.flags_can_pass_behind = NONE + +/obj/structure/blocker/tent/get_projectile_hit_boolean(obj/item/projectile/P) + . = ..() + return FALSE // Always fly through the tent diff --git a/code/modules/tents/deployed_tents.dm b/code/modules/tents/deployed_tents.dm new file mode 100644 index 000000000000..c81beb318d5a --- /dev/null +++ b/code/modules/tents/deployed_tents.dm @@ -0,0 +1,124 @@ +/// Structures serving as landmarks and providing a buff to its users. +/// A notable code feature is that they use a separate roof image that phases out when you enter the tent. +/obj/structure/tent + name = "tent" + icon = 'icons/obj/structures/tents_deployed_classic.dmi' + opacity = FALSE // Seems only the initial turf blocks light, not all of the multitile. Therefore, useless. + layer = INTERIOR_WALL_SOUTH_LAYER // This should be below FLY_LAYER but just thank chairs and other bs + health = 200 + appearance_flags = TILE_BOUND + + /// Turf dimensions along the X axis, beginning from left, at ground level + var/x_dim = 2 + /// Turf dimensions along the Y axis, beginning from bottom, at ground level + var/y_dim = 3 + + /// How much cold protection to add to entering humans - Full body clothing means complete (1) protection + var/cold_protection_factor = 0.4 + + /// Roof display icon_state or null to disable + var/roof_state + /// Roof image displayed on the roof plane + var/image/roof_image + +/obj/structure/tent/Initialize(mapload, ...) + . = ..() + bound_width = x_dim * world.icon_size + bound_height = y_dim * world.icon_size + register_turf_signals() + RegisterSignal(src, COMSIG_ATOM_TURF_CHANGE, PROC_REF(register_turf_signals)) + + switch(SSmapping.configs[GROUND_MAP].camouflage_type) + if("jungle") + icon = 'icons/obj/structures/tents_deployed_jungle.dmi' + if("desert") + icon = 'icons/obj/structures/tents_deployed_desert.dmi' + if("snow") + icon = 'icons/obj/structures/tents_deployed_snow.dmi' + if("urban") + icon = 'icons/obj/structures/tents_deployed_urban.dmi' + + if(roof_state) + roof_image = image(icon, src, roof_state) + roof_image.plane = ROOF_PLANE + roof_image.appearance_flags = KEEP_APART + src.overlays += roof_image + +/obj/structure/tent/proc/register_turf_signals() + SIGNAL_HANDLER + for(var/turf/turf in locs) + RegisterSignal(turf, COMSIG_TURF_ENTERED, PROC_REF(movable_entering_tent), override = TRUE) + +/obj/structure/tent/proc/movable_entering_tent(turf/hooked, atom/movable/subject) + SIGNAL_HANDLER + if(!ismob(subject)) + return + var/mob/subject_mob = subject + RegisterSignal(subject_mob, list(COMSIG_MOVABLE_TURF_ENTERED, COMSIG_GHOST_MOVED), PROC_REF(mob_moved), override = TRUE) // Must override because we can't know if mob was already inside tent without keeping an awful ref list + var/atom/movable/screen/plane_master/roof/roof_plane = subject_mob.hud_used.plane_masters["[ROOF_PLANE]"] + roof_plane?.invisibility = INVISIBILITY_MAXIMUM + if(ishuman(subject)) + RegisterSignal(subject, COMSIG_HUMAN_COLD_PROTECTION_APPLY_MODIFIERS, PROC_REF(cold_protection), override = TRUE) + +/obj/structure/tent/proc/cold_protection(mob/source, list/protection_data) + SIGNAL_HANDLER + protection_data["protection"] += cold_protection_factor + +/obj/structure/tent/proc/mob_moved(mob/subject, turf/target_turf) + SIGNAL_HANDLER + if(!(target_turf in locs)) // Exited the tent + mob_exited_tent(subject) + +/obj/structure/tent/proc/mob_exited_tent(mob/subject) + UnregisterSignal(subject, list(COMSIG_MOVABLE_TURF_ENTERED, COMSIG_GHOST_MOVED, COMSIG_HUMAN_COLD_PROTECTION_APPLY_MODIFIERS)) + var/atom/movable/screen/plane_master/roof/roof_plane = subject.hud_used.plane_masters["[ROOF_PLANE]"] + roof_plane?.invisibility = 0 + +/obj/structure/tent/attack_alien(mob/living/carbon/xenomorph/M) + if(unslashable) + return + health -= 20 + if(health <= 0) + visible_message(SPAN_BOLDWARNING("The [src] collapses!")) + qdel(src) + +/// Command tent, providing basics for field command: a phone, and an overwatch console +/obj/structure/tent/cmd + icon_state = "cmd_interior" + roof_state = "cmd_top" + desc = "A standard USCM Command Tent. This one comes equipped with a self-powered Overwatch Console and a Telephone. It is very frail, do not burn, expose to sharp objects, or explosives." + +/// Medical tent, procures a buff to surgery speed +/obj/structure/tent/med + icon_state = "med_interior" + roof_state = "med_top" + desc = "A standard USCM Medical Tent. This one comes equipped with advanced field surgery facilities. It is very fragile however and won't withstand the rigors of war." + var/surgery_speed_mult = 0.9 + var/surgery_pain_reduction = 5 + +/obj/structure/tent/med/movable_entering_tent(turf/hooked, atom/movable/subject) + . = ..() + if(ishuman(subject)) + RegisterSignal(subject, COMSIG_HUMAN_SURGERY_APPLY_MODIFIERS, PROC_REF(apply_surgery_modifiers), override = TRUE) + +/obj/structure/tent/med/mob_exited_tent(mob/subject) + . = ..() + UnregisterSignal(subject, COMSIG_HUMAN_SURGERY_APPLY_MODIFIERS) + +/obj/structure/tent/med/proc/apply_surgery_modifiers(mob/living/carbon/human/source, list/surgery_data) + SIGNAL_HANDLER + surgery_data["surgery_speed"] *= surgery_speed_mult + surgery_data["pain_reduction"] += surgery_pain_reduction + +/// Big Tent. It's just Big. Use it for shelter or organization! +/obj/structure/tent/big + icon_state = "big_interior" + roof_state = "big_top" + x_dim = 3 + y_dim = 3 + +/obj/structure/tent/reqs + icon_state = "reqs_interior" + roof_state = "reqs_top" + x_dim = 4 + y_dim = 3 diff --git a/code/modules/tents/equipment.dm b/code/modules/tents/equipment.dm new file mode 100644 index 000000000000..f2f9175a240e --- /dev/null +++ b/code/modules/tents/equipment.dm @@ -0,0 +1,113 @@ +/// Component to handle power requirements following removal of the tent +/datum/component/tent_powered_machine + dupe_mode = COMPONENT_DUPE_HIGHLANDER + var/obj/structure/tent/linked_tent + +/datum/component/tent_powered_machine/Initialize(...) + . = ..() + if(!istype(parent, /obj/structure/machinery)) + return COMPONENT_INCOMPATIBLE + var/obj/structure/machinery/machine = parent + var/obj/structure/tent/located_tent = locate(/obj/structure/tent) in machine.loc + if(located_tent) + linked_tent = located_tent + machine.needs_power = FALSE + RegisterSignal(linked_tent, COMSIG_PARENT_QDELETING, PROC_REF(enable_power_requirement)) + +/datum/component/tent_powered_machine/proc/enable_power_requirement() + SIGNAL_HANDLER + var/obj/structure/machinery/machine = parent + machine.needs_power = TRUE + +/// Component to handle destruction of objects following removal of the tent +/datum/component/tent_supported_object + dupe_mode = COMPONENT_DUPE_HIGHLANDER + var/obj/structure/tent/linked_tent + +/datum/component/tent_supported_object/Initialize(...) + . = ..() + if(!istype(parent, /atom/movable)) + return COMPONENT_INCOMPATIBLE + var/atom/movable/source = parent + var/obj/structure/tent/located_tent = locate(/obj/structure/tent) in source.loc + if(located_tent) + linked_tent = located_tent + RegisterSignal(linked_tent, COMSIG_PARENT_QDELETING, PROC_REF(tent_collapse)) + +/datum/component/tent_supported_object/proc/tent_collapse() + SIGNAL_HANDLER + qdel(parent) + +/// Groundside console +/obj/structure/machinery/computer/overwatch/tent/Initialize(mapload, ...) + AddComponent(/datum/component/tent_supported_object) + return ..() + +/// Telephone +/obj/structure/transmitter/tent + layer = INTERIOR_WALLMOUNT_LAYER +/obj/structure/transmitter/tent/Initialize(mapload, ...) + AddComponent(/datum/component/tent_supported_object) + return ..() + +/// ASRS request console +/obj/structure/machinery/computer/ordercomp/tent + icon_state = "request_wall" + density = FALSE + deconstructible = FALSE + needs_power = FALSE + indestructible = TRUE // Goes with the tent instead + layer = INTERIOR_WALLMOUNT_LAYER +/obj/structure/machinery/computer/ordercomp/tent/Initialize() + AddComponent(/datum/component/tent_supported_object) + return ..() + +/// NanoMED +/obj/structure/machinery/cm_vending/sorted/medical/wall_med/tent + unacidable = FALSE + layer = INTERIOR_WALLMOUNT_LAYER + needs_power = FALSE +/obj/structure/machinery/cm_vending/sorted/medical/wall_med/tent/Initialize() + AddComponent(/datum/component/tent_supported_object) + return ..() + +/// Closeable curtains +/obj/structure/tent_curtain + icon = 'icons/obj/structures/tents_equipment.dmi' + icon_state = "curtains-classic-o" + desc = "USCM Curtains for USCM Tents used by USCM Personnel. Close this with right-click to ensure USCM Contents are contained." + flags_atom = ON_BORDER + layer = INTERIOR_DOOR_INSIDE_LAYER + dir = SOUTH + density = FALSE + alpha = 180 + +/obj/structure/tent_curtain/Initialize(mapload, ...) + . = ..() + AddComponent(/datum/component/tent_supported_object) + update_icon() + +/obj/structure/tent_curtain/get_projectile_hit_boolean(obj/item/projectile/P) + return FALSE + +/obj/structure/tent_curtain/update_icon() + . = ..() + var/camo = SSmapping.configs[GROUND_MAP].camouflage_type + if(density) + icon_state = "curtains-[camo]" + else + icon_state = "curtains-[camo]-o" + +/obj/structure/tent_curtain/attack_hand(mob/user) + . = ..() + if(!.) + playsound(loc, "rustle", 10, TRUE, 4) + density = !density + update_icon() + return TRUE + +/obj/structure/tent_curtain/attack_alien(mob/living/carbon/xenomorph/M) + if(unslashable) + return + visible_message(SPAN_BOLDWARNING("[src] gets torn to shreds!")) + qdel(src) diff --git a/code/modules/tents/folded_tents.dm b/code/modules/tents/folded_tents.dm new file mode 100644 index 000000000000..d1f922703500 --- /dev/null +++ b/code/modules/tents/folded_tents.dm @@ -0,0 +1,165 @@ +/obj/item/folded_tent + name = "Folded Abstract Tent" + icon = 'icons/obj/structures/tents_folded.dmi' + w_class = SIZE_LARGE + /// Required cleared area along X axis + var/dim_x = 1 + /// Required cleared area along Y axis + var/dim_y = 1 + /// Deployment X offset + var/off_x = 0 + /// Deployment Y offset + var/off_y = 0 + /// Map Template to use for the tent + var/template + +/// Check an area is clear for deployment of the tent +/obj/item/folded_tent/proc/check_area(turf/ref_turf, mob/message_receiver, display_error = FALSE) + SHOULD_NOT_SLEEP(TRUE) + . = TRUE + var/list/turf_block = get_deployment_area(ref_turf) + for(var/turf/turf as anything in turf_block) + var/area/area = get_area(turf) + if(!area.can_build_special) + if(message_receiver) + to_chat(message_receiver, SPAN_WARNING("You cannot deploy tents on restricted areas.")) + if(display_error) + new /obj/effect/overlay/temp/tent_deployment_area/error(turf) + return FALSE + if(istype(turf, /turf/open/shuttle)) + if(message_receiver) + to_chat(message_receiver, SPAN_BOLDWARNING("What are you doing?!! Don't build that on the shuttle please!")) + return FALSE + if(turf.density) + if(message_receiver) + to_chat(message_receiver, SPAN_WARNING("You cannot deploy the [src] here, something ([turf]) is in the way.")) + if(display_error) + new /obj/effect/overlay/temp/tent_deployment_area/error(turf) + return FALSE + for(var/atom/movable/atom as anything in turf) + if(isliving(atom) || (atom.density && atom.can_block_movement) || istype(atom, /obj/structure/tent)) + if(message_receiver) + to_chat(message_receiver, SPAN_WARNING("You cannot deploy the [src] here, something ([atom.name]) is in the way.")) + if(display_error) + new /obj/effect/overlay/temp/tent_deployment_area/error(turf) + return FALSE + return TRUE + +/obj/item/folded_tent/proc/unfold(turf/ref_turf) + var/datum/map_template/template_instance = new template() + template_instance.load(ref_turf, FALSE, FALSE) + +/obj/item/folded_tent/proc/get_deployment_area(turf/ref_turf) + RETURN_TYPE(/list/turf) + var/turf/block_end_turf = locate(ref_turf.x + dim_x - 1, ref_turf.y + dim_y - 1, ref_turf.z) + return block(ref_turf, block_end_turf) + +/obj/item/folded_tent/attack_self(mob/living/user) + . = ..() + var/turf/deploy_turf = user.loc + if(!istype(deploy_turf)) + return // In a locker or something. Get lost you already have a home. + + switch(user.dir) // Fix up offset deploy location so tent is better centered + can be deployed under all angles + if(NORTH) + deploy_turf = locate(deploy_turf.x + off_x, deploy_turf.y + 1, deploy_turf.z) + if(SOUTH) + deploy_turf = locate(deploy_turf.x + off_x, deploy_turf.y - dim_y, deploy_turf.z) + if(EAST) + deploy_turf = locate(deploy_turf.x + 1, deploy_turf.y + off_y, deploy_turf.z) + if(WEST) + deploy_turf = locate(deploy_turf.x - dim_x, deploy_turf.y + off_y, deploy_turf.z) + + if(!istype(deploy_turf) || (deploy_turf.x + dim_x > world.maxx) || (deploy_turf.y + dim_y > world.maxy)) // Map border basically + return + + if(!is_ground_level(deploy_turf.z)) + to_chat(user, SPAN_WARNING("USCM Operational Tents are intended for operations, not ship or space recreation.")) + return + + var/list/obj/effect/overlay/temp/tent_deployment_area/turf_overlay = list() + var/list/turf/deployment_area = get_deployment_area(deploy_turf) + + if(!check_area(deploy_turf, user, TRUE)) + for(var/turf/turf in deployment_area) + new /obj/effect/overlay/temp/tent_deployment_area(turf) // plus error in check_area + return + + for(var/turf/turf in deployment_area) + turf_overlay += new /obj/effect/overlay/temp/tent_deployment_area/casting(turf) + + user.visible_message(SPAN_INFO("[user] starts deploying the [src]..."), \ + SPAN_WARNING("You start assembling the [src]... Stand still, it might take a bit to figure it out...")) + if(!do_after(user, 6 SECONDS, INTERRUPT_ALL, BUSY_ICON_BUILD)) + to_chat(user, SPAN_WARNING("You were interrupted!")) + for(var/gfx in turf_overlay) + qdel(gfx) + return + + if(!check_area(deploy_turf, user, TRUE)) + for(var/gfx in turf_overlay) + QDEL_IN(gfx, 1.5 SECONDS) + return + + unfold(deploy_turf) + user.visible_message(SPAN_INFO("[user] finishes deploying the [src]!"), SPAN_INFO("You finish deploying the [src]!")) + for(var/gfx in turf_overlay) + qdel(gfx) + qdel(src) // Success! + +/obj/item/folded_tent/cmd + name = "folded USCM Command Tent" + icon_state = "cmd" + desc = "A standard USCM Command Tent. This one comes equipped with a self-powered Overwatch Console and a Telephone. Unfold in a suitable location to maximize usefulness. Staff Officer not included. ENTRANCE TO THE SOUTH." + dim_x = 2 + dim_y = 3 + off_x = -1 + template = /datum/map_template/tent/cmd + +/obj/item/folded_tent/med + name = "folded USCM Medical Tent" + icon_state = "med" + desc = "A standard USCM Medical Tent. This one comes equipped with advanced field surgery facilities. Unfold in a suitable location to maximize health gains. Surgical Tray not included. ENTRANCE TO THE SOUTH." + dim_x = 2 + dim_y = 3 + template = /datum/map_template/tent/med + +/obj/item/folded_tent/reqs + name = "folded USCM Requisitions Tent" + icon_state = "req" + desc = "A standard USCM Requisitions Tent. Now, you can enjoy req line anywhere you go! Unfold in a suitable location to maximize resource distribution. ASRS not included. ENTRANCE TO THE SOUTH." + dim_x = 4 + dim_y = 3 + off_x = -2 + template = /datum/map_template/tent/reqs + +/obj/item/folded_tent/big + name = "folded USCM Big Tent" + icon_state = "big" + desc = "A standard USCM Tent. This one is just a bigger, general purpose version. Unfold in a suitable location for maximum FOB vibes. Mess Tech not included. ENTRANCE TO THE SOUTH." + dim_x = 3 + dim_y = 3 + off_x = -2 + template = /datum/map_template/tent/big + +/obj/effect/overlay/temp/tent_deployment_error + icon = 'icons/effects/effects.dmi' + icon_state = "placement_zone" + color = "#bb0000" + effect_duration = 1.5 SECONDS + layer = ABOVE_FLY_LAYER + +/obj/effect/overlay/temp/tent_deployment_area + icon = 'icons/effects/effects.dmi' + icon_state = "placement_zone" + color = "#f39e00" + effect_duration = 1.5 SECONDS + layer = FLY_LAYER + +/obj/effect/overlay/temp/tent_deployment_area/casting + effect_duration = 10 SECONDS + color = "#228822" + +/obj/effect/overlay/temp/tent_deployment_area/error + layer = ABOVE_FLY_LAYER + color = "#bb0000" diff --git a/code/modules/tents/templates.dm b/code/modules/tents/templates.dm new file mode 100644 index 000000000000..c32c0214999e --- /dev/null +++ b/code/modules/tents/templates.dm @@ -0,0 +1,23 @@ +/datum/map_template/tent + name = "Base Tent" + var/map_id = "change this" + +/datum/map_template/tent/New() + mappath = "maps/tents/[map_id].dmm" + return ..() + +/datum/map_template/tent/cmd + name = "CMD Tent" + map_id = "tent_cmd" + +/datum/map_template/tent/med + name = "MED Tent" + map_id = "tent_med" + +/datum/map_template/tent/big + name = "Big Tent" + map_id = "tent_big" + +/datum/map_template/tent/reqs + name = "Reqs Tent" + map_id = "tent_reqs" diff --git a/code/modules/vehicles/interior/interactable/vendors.dm b/code/modules/vehicles/interior/interactable/vendors.dm index 717e9d131987..96a6f6b49c0f 100644 --- a/code/modules/vehicles/interior/interactable/vendors.dm +++ b/code/modules/vehicles/interior/interactable/vendors.dm @@ -252,7 +252,7 @@ list("M44 Heavy Speed Loader (.44)", 0, /obj/item/ammo_magazine/revolver/heavy, VENDOR_ITEM_REGULAR), list("M44 Marksman Speed Loader (.44)", 0, /obj/item/ammo_magazine/revolver/marksman, VENDOR_ITEM_REGULAR), list("M4A3 HP Magazine (9mm)", 0, /obj/item/ammo_magazine/pistol/hp, VENDOR_ITEM_REGULAR), - list("M56 Powerpack", 0, /obj/item/smartgun_powerpack, VENDOR_ITEM_REGULAR), + list("M56 Battery", 0, /obj/item/smartgun_battery, VENDOR_ITEM_REGULAR), list("M56 Smartgun Drum", 0, /obj/item/ammo_magazine/smartgun, VENDOR_ITEM_REGULAR), list("M56D Drum Magazine",0, /obj/item/ammo_magazine/m56d, VENDOR_ITEM_REGULAR), list("SU-6 Smartpistol Magazine (.45)", round(scale * 2), /obj/item/ammo_magazine/pistol/smart, VENDOR_ITEM_REGULAR), @@ -382,3 +382,78 @@ updateUsrDialog() return TRUE//We found our item, no reason to go on. + +/// Modified Restockable APC-based vendor for use by Req in the deployable tent +/obj/structure/machinery/cm_vending/sorted/vehicle_supply/tent + desc = "An automated restockable storage vendor for use in organizing FOB supplies." + req_access = list(ACCESS_MARINE_CARGO) + density = TRUE + indestructible = TRUE // Deleted with the tent instead + needs_power = FALSE + +/obj/structure/machinery/cm_vending/sorted/vehicle_supply/tent/Initialize() + . = ..() + var/obj/structure/tent/located_tent = locate(/obj/structure/tent) in loc + if(!located_tent) + return INITIALIZE_HINT_QDEL + RegisterSignal(located_tent, COMSIG_PARENT_QDELETING, PROC_REF(begin_unloading)) + +//combined from req guns and ammo vendors +/obj/structure/machinery/cm_vending/sorted/vehicle_supply/tent/populate_product_list(scale) + listed_products = list( + list("BUILDING MATERIALS", -1, null, null), + list("Cardboard x10", 1, /obj/item/stack/sheet/cardboard/small_stack, VENDOR_ITEM_REGULAR), + list("Barbed Wire x10", 0, /obj/item/stack/barbed_wire/small_stack, VENDOR_ITEM_REGULAR), + list("Metal x10", 0, /obj/item/stack/sheet/metal/small_stack, VENDOR_ITEM_REGULAR), + list("Plasteel x10", 0, /obj/item/stack/sheet/plasteel/small_stack, VENDOR_ITEM_REGULAR), + list("Sandbags (empty) x10", 0, /obj/item/stack/sandbags_empty/small_stack, VENDOR_ITEM_REGULAR), + list("Sandbags (full) x5", 0, /obj/item/stack/sandbags/small_stack, VENDOR_ITEM_REGULAR), + + list("AMMUNITION", -1, null, null), + list("Box Of Buckshot Shells", 0, /obj/item/ammo_magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR), + list("Box Of Flechette Shells", 0, /obj/item/ammo_magazine/shotgun/flechette, VENDOR_ITEM_REGULAR), + list("Box Of Shotgun Slugs", 0, /obj/item/ammo_magazine/shotgun/slugs, VENDOR_ITEM_REGULAR), + list("M4RA Magazine (10x24mm)", 0, /obj/item/ammo_magazine/rifle/m4ra, VENDOR_ITEM_REGULAR), + list("M41A MK2 Magazine (10x24mm)", 0, /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR), + list("M39 HV Magazine (10x20mm)", 0, /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR), + list("M44 Speed Loader (.44)", 0, /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR), + list("M4A3 Magazine (9mm)", 0, /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR), + list("M56D Drum Magazine", 0, /obj/item/ammo_magazine/m56d, VENDOR_ITEM_REGULAR), + list("M2C Box Magazine", 0, /obj/item/ammo_magazine/m2c, VENDOR_ITEM_REGULAR), + + list("ARMOR", -1, null, null), + list("M10 Pattern Marine Helmet", 0, /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR), + list("M3 Pattern Carrier Marine Armor", 0, /obj/item/clothing/suit/storage/marine/carrier, VENDOR_ITEM_REGULAR), + list("M3 Pattern Padded Marine Armor", 0, /obj/item/clothing/suit/storage/marine/padded, VENDOR_ITEM_REGULAR), + list("M3 Pattern Padless Marine Armor", 0, /obj/item/clothing/suit/storage/marine/padless, VENDOR_ITEM_REGULAR), + list("M3 Pattern Ridged Marine Armor", 0, /obj/item/clothing/suit/storage/marine/padless_lines, VENDOR_ITEM_REGULAR), + list("M3 Pattern Skull Marine Armor", 0, /obj/item/clothing/suit/storage/marine/skull, VENDOR_ITEM_REGULAR), + list("M3-EOD Pattern Heavy Armor", 0, /obj/item/clothing/suit/storage/marine/heavy, VENDOR_ITEM_REGULAR), + list("M3-L Pattern Light Armor", 0, /obj/item/clothing/suit/storage/marine/light, VENDOR_ITEM_REGULAR), + + list("MISCELLANEOUS", -1, null, null), + list("Box Of MREs", 0, /obj/item/ammo_box/magazine/misc/mre, VENDOR_ITEM_REGULAR), + list("Box Of M94 Marking Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares, VENDOR_ITEM_REGULAR), + list("M89-S Signal Flare Pack", 0, /obj/item/storage/box/m94/signal, VENDOR_ITEM_REGULAR), + list("M94 Marking Flare Pack", 0, /obj/item/storage/box/m94, VENDOR_ITEM_REGULAR), + list("Flashlights", 1, /obj/item/device/flashlight, VENDOR_ITEM_REGULAR), + list("MB-6 Folding Barricades (x3)", 0, /obj/item/stack/folding_barricade/three, VENDOR_ITEM_REGULAR), + list("Entrenching Tool", 0, /obj/item/tool/shovel/etool, VENDOR_ITEM_REGULAR), + list("Roller Bed", 0, /obj/item/roller, VENDOR_ITEM_REGULAR), + list("Table", 3, /obj/item/frame/table, VENDOR_ITEM_REGULAR), + list("Rack", 3, /obj/item/frame/rack, VENDOR_ITEM_REGULAR), + list("Cliboard", 4, /obj/item/clipboard, VENDOR_ITEM_REGULAR), + list("Pen", 4, /obj/item/tool/pen, VENDOR_ITEM_REGULAR), + list("Chair", 2, /obj/item/weapon/twohanded/folded_metal_chair, VENDOR_ITEM_REGULAR), + + list("AMMUNITION BOXES", -1, null, null), + list("Shotgun Shell Box (Buckshot x 100)", 0, /obj/item/ammo_box/magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR), + list("Shotgun Shell Box (Flechette x 100)", 0, /obj/item/ammo_box/magazine/shotgun/flechette, VENDOR_ITEM_REGULAR), + list("Shotgun Shell Box (Slugs x 100)", 0, /obj/item/ammo_box/magazine/shotgun, VENDOR_ITEM_REGULAR), + list("Rifle Ammunition Box (10x24mm)", 0, /obj/item/ammo_box/rounds, VENDOR_ITEM_REGULAR), + list("SMG Ammunition Box (10x20mm HV)", 0, /obj/item/ammo_box/rounds/smg, VENDOR_ITEM_REGULAR), + ) + +/obj/structure/machinery/cm_vending/sorted/vehicle_supply/tent/proc/begin_unloading() + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(catastrophic_failure), TRUE, TRUE) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 38c95d93881d..0681b7df05ac 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -126,6 +126,27 @@ /obj/vehicle/attack_remote(mob/user as mob) return +/obj/vehicle/attack_alien(mob/living/carbon/xenomorph/attacking_xeno) + if(attacking_xeno.a_intent == INTENT_HELP) + return XENO_NO_DELAY_ACTION + + if(attacking_xeno.mob_size < MOB_SIZE_XENO) + to_chat(attacking_xeno, SPAN_XENOWARNING("You're too small to do any significant damage to this vehicle!")) + return XENO_NO_DELAY_ACTION + + attacking_xeno.animation_attack_on(src) + + attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno] slashes [src]!"), SPAN_DANGER("You slash [src]!")) + playsound(attacking_xeno, pick('sound/effects/metalhit.ogg', 'sound/weapons/alien_claw_metal1.ogg', 'sound/weapons/alien_claw_metal2.ogg', 'sound/weapons/alien_claw_metal3.ogg'), 25, 1) + + var/damage = (attacking_xeno.melee_vehicle_damage + rand(-5,5)) * brute_dam_coeff + + health -= damage + + healthcheck() + + return XENO_NONCOMBAT_ACTION + //------------------------------------------- // Vehicle procs //------------------------------------------- diff --git a/colonialmarines.dme b/colonialmarines.dme index 410b4bc3e538..0d7994632853 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -41,6 +41,7 @@ #include "code\__DEFINES\chat.dm" #include "code\__DEFINES\chemistry.dm" #include "code\__DEFINES\clans.dm" +#include "code\__DEFINES\client_prefs.dm" #include "code\__DEFINES\colours.dm" #include "code\__DEFINES\combat.dm" #include "code\__DEFINES\configuration.dm" @@ -1381,6 +1382,7 @@ #include "code\modules\asset_cache\assets\tgui.dm" #include "code\modules\asset_cache\assets\vending.dm" #include "code\modules\asset_cache\transports\asset_transport.dm" +#include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\buildmode\bm-mode.dm" #include "code\modules\buildmode\buildmode.dm" #include "code\modules\buildmode\buttons.dm" @@ -1554,6 +1556,7 @@ #include "code\modules\cm_tech\techs\marine\tier1\points.dm" #include "code\modules\cm_tech\techs\marine\tier2\orbital_ammo.dm" #include "code\modules\cm_tech\techs\marine\tier3\cryorine.dm" +#include "code\modules\cm_tech\techs\marine\tier4\nuke.dm" #include "code\modules\cm_tech\trees\marine.dm" #include "code\modules\customitems\item_spawning.dm" #include "code\modules\decorators\admin_runtime_decorator.dm" @@ -2168,6 +2171,11 @@ #include "code\modules\teleporters\teleporter_admin_verbs.dm" #include "code\modules\teleporters\teleporter_console.dm" #include "code\modules\teleporters\teleporter_landmarks.dm" +#include "code\modules\tents\blockers.dm" +#include "code\modules\tents\deployed_tents.dm" +#include "code\modules\tents\equipment.dm" +#include "code\modules\tents\folded_tents.dm" +#include "code\modules\tents\templates.dm" #include "code\modules\tgchat\cm_shims.dm" #include "code\modules\tgchat\message.dm" #include "code\modules\tgchat\to_chat.dm" diff --git a/config/example/resources.txt b/config/example/resources.txt new file mode 100644 index 000000000000..0f9aaf021aa5 --- /dev/null +++ b/config/example/resources.txt @@ -0,0 +1,40 @@ +# External resources +# Set this to the location of a .zip with the server's .rsc inside of it. +# If you set this mutiple times, the server will rotate between the links. +# To use this, the compile option PRELOAD_RSC must be set to 0 to keep byond from preloading resources +# Resource urls can not be encrypted (https://), as they are downloaded by byond, not IE, and byond can't into encryption + +EXTERNAL_RSC_URLS http://rsc.cm-ss13.com/ + + +######################## +# Browser Asset Config # +######################## +# Browser assets are any file included in interfaces. css, images, javascript, etc. +# This handles configuring how we get these to the player so interfaces can access them. + +# Asset Transport +# The normal way of getting assets to clients is to use the internal byond system. This can be slow and delay the opening of interface windows. It also doesn't allow the internal IE windows byond uses to cache anything. +# You can instead have the server save them to a website via a folder within the game server that the web server can read. This could be a simple webserver or something backed by a CDN. +# Valid values: simple, webroot. Simple is the default. +#ASSET_TRANSPORT webroot + + +# Simple asset transport configurable values. + +# Uncomment this to have the server passively send all browser assets to each client in the background. (instead of waiting for them to be needed) +# This should be uncommented in production and commented in development +#ASSET_SIMPLE_PRELOAD + + +# Webroot asset transport configurable values. + +# Local folder to save assets to. +# Assets will be saved in the format of asset.MD5HASH.EXT or in namespaces/hash/ as ASSET_FILE_NAME or asset.MD5HASH.EXT +#ASSET_CDN_WEBROOT data/asset-store/ + +# URL the folder from above can be accessed from. +# for best results the webserver powering this should return a long cache validity time, as all assets sent via this transport use hash based urls +# Encryption (https) is supported here, but linux clients will have issues if you require higher then tls 1.0. Windows clients down to windows 7 can handle tls 1.2 no issue. +# if you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` python3 script to host assets stored in `data/asset-store/` via http://localhost:58715/ +#ASSET_CDN_URL http://localhost:58715/ diff --git a/html/changelogs/AutoChangeLog-pr-3396.yml b/html/changelogs/AutoChangeLog-pr-3396.yml deleted file mode 100644 index 76065e8f7b49..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3396.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Huffie56" -delete-after: True -changes: - - refactor: "create many sub-type for item to clean the code." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3469.yml b/html/changelogs/AutoChangeLog-pr-3469.yml deleted file mode 100644 index 52af0f43bafe..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3469.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "fira" -delete-after: True -changes: - - rscadd: "Added optional adaptive client zooming to match in-game zoom. This allows display to be pixel perfect on most monitors if enabled, it removes blurring of game introduced by Stretch to Fit mode, at the cost of slightly reduced vertical size. It is best used with Auto Fit viewport feature enabled." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3558.yml b/html/changelogs/AutoChangeLog-pr-3558.yml deleted file mode 100644 index 95bca728b62e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3558.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscadd: "Reintroduced auto red alert when xenos are aboard a dropship" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3559.yml b/html/changelogs/AutoChangeLog-pr-3559.yml deleted file mode 100644 index 235e953a0244..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3559.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - balance: "Burrowers are now unable to burrow while inside a non-burrow area" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3560.yml b/html/changelogs/AutoChangeLog-pr-3560.yml deleted file mode 100644 index a0c1e5779c3f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3560.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscadd: "Brought back the USCM blurb on first drop" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3561.yml b/html/changelogs/AutoChangeLog-pr-3561.yml deleted file mode 100644 index a9a4bbd7253b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3561.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscadd: "You can now find internal bleeding via Health Scanner" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3562.yml b/html/changelogs/AutoChangeLog-pr-3562.yml deleted file mode 100644 index 4555c7949eec..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3562.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscadd: "Drop pouch is now buyable by riflemen" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3566.yml b/html/changelogs/AutoChangeLog-pr-3566.yml deleted file mode 100644 index 3aa9a3ac3e45..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3566.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscdel: "Removes fourth awkward LZ2 Soro communication relay" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3666.yml b/html/changelogs/AutoChangeLog-pr-3666.yml new file mode 100644 index 000000000000..d7d8860c237e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3666.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - balance: "Xenos no longer can pull dead xenos" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3717.yml b/html/changelogs/AutoChangeLog-pr-3717.yml new file mode 100644 index 000000000000..6d6327ea63a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3717.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fixed the crashsite offset for a hijack shuttle that gets deterred by the MGAD System" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3718.yml b/html/changelogs/AutoChangeLog-pr-3718.yml new file mode 100644 index 000000000000..41f5322a2493 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3718.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - balance: "Queen boosted building no longer has 2 second cooldown when far from hive" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3723.yml b/html/changelogs/AutoChangeLog-pr-3723.yml new file mode 100644 index 000000000000..987b7eeec708 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3723.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - bugfix: "Communications intel objective now actually works" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3730.yml b/html/changelogs/AutoChangeLog-pr-3730.yml new file mode 100644 index 000000000000..9ae18e6bc788 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3730.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - bugfix: "Fixed a MC crash related to NPC huggers rebounding logic." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3731.yml b/html/changelogs/AutoChangeLog-pr-3731.yml new file mode 100644 index 000000000000..21fd76664d2b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3731.yml @@ -0,0 +1,4 @@ +author: "blackdragonTOW" +delete-after: True +changes: + - maptweak: "Added a small light to unlit rooms." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3736.yml b/html/changelogs/AutoChangeLog-pr-3736.yml new file mode 100644 index 000000000000..c1eba0beabfd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3736.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - rscdel: "Removed toxin mags on shivas" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3742.yml b/html/changelogs/AutoChangeLog-pr-3742.yml new file mode 100644 index 000000000000..7319ac52f8d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3742.yml @@ -0,0 +1,6 @@ +author: "SpartanBobby" +delete-after: True +changes: + - maptweak: "Minor decal changes to LV522" + - maptweak: "Buffed sec armory on LV522" + - maptweak: "LV522 Breaching charge moved to the PROP APC made UNACIDABLE" \ No newline at end of file diff --git a/html/changelogs/archive/2023-06.yml b/html/changelogs/archive/2023-06.yml index ba6d8fbe230a..71aeb035f4b8 100644 --- a/html/changelogs/archive/2023-06.yml +++ b/html/changelogs/archive/2023-06.yml @@ -111,3 +111,275 @@ fira: - qol: Reduced USCM SG max scattering on Full Auto fire so you don't have to periodically let go of the fire button to keep it from firing way wide. +2023-06-10: + Firartix , Thwomper and Sammy: + - rscadd: Added four types of tents to liven up FOB. They provide cold protection + and benefits depending on their type. The tents spawn in Requisitions roundstart + near the mortar. They're vulnerable to explosives and xenomorphs, and NON REPLACEABLE. + Mind where you put them! + - rscadd: The Command tent comes equipped with an overwatch console and a phone. + - rscadd: The Medical tent provides a small boost to surgery speed/pain carried + out inside it. + - rscadd: The Requisitions tent provides a restockable vendor, desk, and furniture + for organization. + - rscadd: The Big tent is just a big tent, and provides you a slate to organize + the way you want. + Huffie56: + - refactor: create many sub-type for item to clean the code. + Morrow: + - rscadd: Brought back the USCM blurb on first drop + - rscadd: Drop pouch is now buyable by riflemen + - rscadd: Reintroduced auto red alert when xenos are aboard a dropship + - rscdel: Removes fourth awkward LZ2 Soro communication relay + - balance: Burrowers are now unable to burrow while inside a non-burrow area + - rscadd: You can now find internal bleeding via Health Scanner + fira: + - rscadd: Added optional adaptive client zooming to match in-game zoom. This allows + display to be pixel perfect on most monitors if enabled, it removes blurring + of game introduced by Stretch to Fit mode, at the cost of slightly reduced vertical + size. It is best used with Auto Fit viewport feature enabled. +2023-06-11: + Al-1ce: + - spellcheck: Polykevlon no-longer uses an underscore in its name. + BeagleGaming1: + - bugfix: Acid pillars can now target crit burning friendly xenos + Morrow: + - rscadd: Forsaken ERT is now weighted by type + - bugfix: Fixed medical holocards + - rscadd: Escape pods now have a 50% chance to crash land to the surface + - bugfix: Escape pods will no longer relaunch when evacuation is complete + - rscadd: Cryopods now give a slight glow when occupied + - rscdel: Removed ability to high toss over ultra reinforced windows + - balance: Clamping bleeding in surgery is now less effective in bad conditions + - bugfix: Removed some broken forsaken ERT code + NewyearnewmeUwu: + - bugfix: fixed a bug with armor prefs +2023-06-12: + Segrain: + - rscadd: Jobs can now be assigned specific character slots, which will be automatically + loaded when joining as that role. + TheGamerdk: + - bugfix: Your fluff security record from preferences is now visible to MPs. + - bugfix: You can now plant hardy weeds on colony turfs on Chances Claim + - bugfix: Data detector no longer triggers on empty vial boxes + - bugfix: Sentries now work correctly on dropships. + - bugfix: Xenos are no longer notified each time a sister destroys a large crate. + fira: + - bugfix: Handling C4 and Breaching Charges should not zealously trigger antigrief + protection anymore + - rscadd: Added a map override for Admins allowing them to load in maps directly + as ground or ship during the next round. + ihatethisengine: + - bugfix: MMB cannot be used to attack again +2023-06-13: + Al-1ce: + - rscadd: Backstories have been added to various interesting drinks. + Hopek: + - balance: Huggers no longer lose health over time on weeds. + Huffie56: + - bugfix: restore some object back to original to keep them compatible with older + map. + Morrow: + - bugfix: Added missing Fiorina Sciannex groundside xeno landmarks + - bugfix: Made nukes get those pesky closet/tunnel hiders + - balance: Crippling Strike is now forced harm intent + Morrow, Triiodine: + - rscadd: Added a smartgun specific battery that you use with the smartgun itself. + - rscdel: Removed the smartgun powerpack. You no longer need it for the smartgun. + TheGamerdk: + - bugfix: You'll now be allowed to reenter your nested body when freed, even if + you used the ghost verb. + realforest2001: + - code_imp: Updated all the Get_Access() procs, and removed some procs where they + completely overlapped with others in presets. +2023-06-15: + Drathek: + - bugfix: Fixed a runtime in shuttles when a mob is non-existent or has no turf + location. + Huffie56: + - rscadd: Added a Empty canister verb to the Pyrotechnician fuel tanks + - bugfix: prevent fuel backpacks to be filled via reagent tank with improper chemical(welding + fuel). + Jackie_Estegado: + - bugfix: The Burrower's burrow ability will no longer be not cancelled just because + you clicked on a tile that you wouldn't have been able to burrow to. + - bugfix: Burrowing will no longer complete even though you cancelled it. + Morrow: + - balance: Grass (and other flora) will no longer eat your bullets. + - bugfix: Fixed a runtime when observing before roundstart + SpartanBobby: + - bugfix: fixes invisible walls on LV522 + - bugfix: fixes unweedable tiles on LV522 + - bugfix: 'fixes invisible windows on LV522 (if you spot any invisible windows send + a picture of them to the SS13: CM discord #mapperchannel @spartanbobby' + - bugfix: fixes LV522 OOB area in the W-Y vault + - maptweak: moves sandbags and a breaching charge on LV522 + - maptweak: fixes bigred tileset inconsistencies in the expanded filt nightmare + - maptweak: Replaces LV522 ceramic plates with MRE crate + fira: + - bugfix: Fixed an internal error when scanning turfs with Black Market scanner. + realforest2001: + - spellcheck: Weapon Stats examine UI now shows 'accurate range' rather than 'accuracy' +2023-06-16: + Morrow: + - balance: Shipside roles now weight even less for xeno counts. + Nanu, Spartanbobby, Julian56: + - mapadd: Added W-Y Station, UPP Station, CLF Station and... + - admin: Admins can now use the custom ERT stations for events or even base of operations. + Steelpoint: + - rscadd: Adds a M41A Mk2 kit to the Squad Leaders vendor. +2023-06-17: + Drathek: + - bugfix: Fix grab delay after a tackle for xenos + - spellcheck: Added Commander Code of Conduct link to XO entry description and fixed + CO capitalization. + - code_imp: Replaced sting usage for USS Almayer to MAIN_SHIP_DEFAULT_NAME for Souto + ERT, CMB ERT, Provost ERT reporters, XO, and CO. + Steelpoint: + - bugfix: Larva who spawn in containment in Trijent will now have weeds to grow + on. + TheGamerdk, ihatethisengine: + - bugfix: player can no longer come back in their bodies after ghosting +2023-06-18: + BeagleGaming1: + - bugfix: fixes a runtime with paygrades and round start prosthetics + realforest2001: + - rscadd: Added WY, PMC and UPP faction specific listings for crew monitors. + - rscadd: Changed the assignment/job define for Standard PMCs, Detainers and Crewmen + to use their manual assignments. + - bugfix: Fixes name error for Division Manager. + - bugfix: FIxes incorrect faction assignment for CLF corpses. + thwompa: + - imageadd: new diamond sprite +2023-06-19: + Morrow: + - balance: Double barrel shotgun acquisition removal + QuickLoad,Frans_Feiffer,nauticall: + - rscadd: Adds The Hazmat Joe with two minor variations. This is a Working Joe equipped + to handle hazardous situations, dangerous repairs and firefighting! They are + complete with their own gear, tasks, job and purpose. Forget the trashbag, get + that wall fixed before we get spaced! + - imageadd: Adds a new Working Joe model made by Frans Feiffer! + - imageadd: Adds two variations of the Working Joe, aka the Hazmat Joe. Complete + with accessories! Beautiful sprites by Frans Feiffer! + - rscadd: Android Maintenance Stations / Synthetic Repair Stations will remove shrapnel + & fix organ damage. Working Joes no longer have knives, and should report to + the stations for repair. Gigantic thanks to nauticall for her work on this!! + - imagedel: Removes(replaces) the old Working Joe model. + - rscadd: Working Joes receive some basic equipment, and are slightly resilient + to disarms. + - rscadd: Working Joes will start at 3, with a maximum of 6 depending on population. + - rscadd: Joes can access a Synthetic vendor to replace their uniform if it is damaged. + - bugfix: Minor changes to PO Uniform. + SpypigDev: + - bugfix: Completed the teleporting pipeline delivery system between OT workshop + and Requisitions + TheGamerdk: + - rscdel: Chem goons only give 1 announcement instead of 3 + Ultimate-Fluff: + - bugfix: Corrected outdated information about one of Dancer's abilities in its + strain description. + - bugfix: Fixed the erroneously-named copper coin from gold coin. + - bugfix: Paper flags with writing on them will not say they are blank in the examine + text. + ihatethisengine: + - bugfix: folding barricade now takes 15% less acid damage instead of 15% extra + acid damage, as the description hints. + - bugfix: folding barricade now blocks pounces from behind. + - qol: collapsing folding barricade by hand is no longer interrupted by taking an + item. +2023-06-20: + Morrow: + - balance: Xenos can slash trolleys now + - balance: Generators can no longer be blown up + - balance: Bonus evolution slowly deteriorates over time when all castes are unlocked + - balance: Portable Generators can now be turned off/unanchored by xeno slashes +2023-06-21: + BeagleGaming1: + - rscadd: Melting flares makes the flares burn out faster, instead of melting like + normal + - balance: Flares last ~10 mins, and flares in the air last ~5 mins + Morrow: + - rscadd: Re-added the nuke that you can buy via intel at tier 4. Only purchasable + past 120 minutes. Requires holding both groundside comms towers for authorization + decryption before being able to be armed. + TheGamerdk: + - bugfix: Forsaken no longer announce themselves as a distress signal +2023-06-22: + Al-1ce: + - rscadd: Adds various magazines and a crayon to loadout selection. + Drathek Firartix: + - bugfix: Fixed a crash with hijack code possibly picking a non-existent brig area, + and weighting smaller areas heavier. + Morrow: + - bugfix: Flashlight gun attachments turn off when they should + sg2002: + - bugfix: XM88 now correctly notifies the user on the hit streak end. +2023-06-23: + harryob: + - server: server's can now support using a cdn for web assets +2023-06-24: + Drathek: + - rscadd: The selection to become a xeno larva is now based on timeofdeath rather + than random and also sends a message to all candidates when the queue moves. + Playing as a facehugger or on admin z-levels (thunderdome) will not affect your + relative place in queue. The join xeno action will also display the last queue + message for you when you allow xeno candidacy. + - bugfix: Fixed gibbed humans not properly setting their timeofdeath when on an + admin z-level. + - bugfix: Fixed a bad del on shuttle doors when a shuttle deletes (such as intoTheSunset). + - bugfix: Fixed erroneous is empty messages when inserting tanks into a flamer pack. + - soundadd: Added the refill sfx when using the empty canister verb on flamer tanks. + Morrow: + - bugfix: Prevented some light bugs with devouring marines + - bugfix: Fixed two gun light attachment issues + Steelpoint: + - rscadd: Synthetics may now vend Ponchos. + realforest2001: + - admin: Improves logging for admin deadchat. + - admin: Adds logging for xeno evolution. + theselfish: + - qol: Added the Corpsman Helmet to Req's surplus vendor. +2023-06-25: + Sargeantmuffinman: + - rscadd: Added two new emails to the Almayer's personal computers and rewrote 3 + other emails. + Segrain: + - bugfix: Hive core now always correctly absorbs hive's dead larvas. + - bugfix: Preview dummy in character setup once again can be rotated. +2023-06-26: + Drathek: + - bugfix: Fixed the yank object verb not testing who is actually performing the + action has a free hand + - rscadd: Player facehugging gets 2nd dibs on the burst (the original marine gets + first dibs still) + - bugfix: Fix a possibility of banished larva refunding double the larva + blackdragonTOW: + - spellcheck: multiple typos and grammar changes in the round start tooltips. +2023-06-27: + TeDGamer Drathek: + - bugfix: Boilers from other hives generate proper colored IFFed gas + - bugfix: Fixes some death causes with boiler acid gas (for bombard, shroud, and + gibbing), neurotoxin gas/stabs, acid shotgun, and xeno spits + - balance: Neurotoxin stops processing only in dead mobs + TheGamerdk: + - bugfix: The game will no longer falsely claim there is no CO + realforest2001: + - rscadd: Changed min and max Predator ages from 20 - 10000 to 175 - 3000 +2023-06-28: + Drathek: + - admin: Mentors can now eavesdrop on mentor messages, and the responder to a mhelp + doesn't get double logging from eavesdropping. + Morrow, Thwomper: + - rscadd: Added three new uniforms and a snow jacket for the CL. + TheGamerdk: + - balance: Cluster OBs will now no longer hit turfs that have gotten OB protection + after the initial OB was fired. + ihatethisengine: + - balance: larva surge is limited by marines/xenos ratio + - bugfix: xenos no longer get free larva from abandoned facehuggers during hijack + - balance: explosive barricade upgrade provides better protection against explosions + (25% to 50%) + - balance: explosive barricade upgrade provides strong protection against brute-based + projectiles (50%) + - balance: explosive barricade upgrade provides strong protection against fire (50%) diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index c2fd9c2d6263..692fc5e49405 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/techtree/tech.dmi b/icons/effects/techtree/tech.dmi index a255a0d0e544..d88106f82d11 100644 Binary files a/icons/effects/techtree/tech.dmi and b/icons/effects/techtree/tech.dmi differ diff --git a/icons/mob/humans/onmob/hands.dmi b/icons/mob/humans/onmob/hands.dmi index 971fdb887148..c8da787cee04 100644 Binary files a/icons/mob/humans/onmob/hands.dmi and b/icons/mob/humans/onmob/hands.dmi differ diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi index 60451b7006af..0fb5700225e3 100644 Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi index 4d63b7abd7f1..5cccc4c2e0e0 100644 Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 26993223a9d4..cac9869c9034 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/mob/humans/species/r_synthetic.dmi b/icons/mob/humans/species/r_synthetic.dmi index 9252fa3e9146..b619cbda6412 100644 Binary files a/icons/mob/humans/species/r_synthetic.dmi and b/icons/mob/humans/species/r_synthetic.dmi differ diff --git a/icons/obj/items/clothing/gloves.dmi b/icons/obj/items/clothing/gloves.dmi index 7ce4b146d176..44798f4f727e 100644 Binary files a/icons/obj/items/clothing/gloves.dmi and b/icons/obj/items/clothing/gloves.dmi differ diff --git a/icons/obj/items/clothing/suits.dmi b/icons/obj/items/clothing/suits.dmi index 47d06bc2cc10..cff4b5d48c17 100644 Binary files a/icons/obj/items/clothing/suits.dmi and b/icons/obj/items/clothing/suits.dmi differ diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi index 6d203ca69fea..254c9e8b67c9 100644 Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ diff --git a/icons/obj/items/items.dmi b/icons/obj/items/items.dmi index ec1209a3bf68..1f74fc09b9ea 100644 Binary files a/icons/obj/items/items.dmi and b/icons/obj/items/items.dmi differ diff --git a/icons/obj/structures/machinery/computer.dmi b/icons/obj/structures/machinery/computer.dmi index e214d7bf29d9..54c99e3186d9 100644 Binary files a/icons/obj/structures/machinery/computer.dmi and b/icons/obj/structures/machinery/computer.dmi differ diff --git a/icons/obj/structures/machinery/power.dmi b/icons/obj/structures/machinery/power.dmi index 88ebf9012524..76ca47047b63 100644 Binary files a/icons/obj/structures/machinery/power.dmi and b/icons/obj/structures/machinery/power.dmi differ diff --git a/icons/obj/structures/tents_deployed_classic.dmi b/icons/obj/structures/tents_deployed_classic.dmi new file mode 100644 index 000000000000..4a7575aff833 Binary files /dev/null and b/icons/obj/structures/tents_deployed_classic.dmi differ diff --git a/icons/obj/structures/tents_deployed_desert.dmi b/icons/obj/structures/tents_deployed_desert.dmi new file mode 100644 index 000000000000..60269580d208 Binary files /dev/null and b/icons/obj/structures/tents_deployed_desert.dmi differ diff --git a/icons/obj/structures/tents_deployed_jungle.dmi b/icons/obj/structures/tents_deployed_jungle.dmi new file mode 100644 index 000000000000..429377c4d9ed Binary files /dev/null and b/icons/obj/structures/tents_deployed_jungle.dmi differ diff --git a/icons/obj/structures/tents_deployed_snow.dmi b/icons/obj/structures/tents_deployed_snow.dmi new file mode 100644 index 000000000000..106ca3f1e997 Binary files /dev/null and b/icons/obj/structures/tents_deployed_snow.dmi differ diff --git a/icons/obj/structures/tents_deployed_urban.dmi b/icons/obj/structures/tents_deployed_urban.dmi new file mode 100644 index 000000000000..a73d79eb3cbe Binary files /dev/null and b/icons/obj/structures/tents_deployed_urban.dmi differ diff --git a/icons/obj/structures/tents_equipment.dmi b/icons/obj/structures/tents_equipment.dmi new file mode 100644 index 000000000000..d1dfb64309df Binary files /dev/null and b/icons/obj/structures/tents_equipment.dmi differ diff --git a/icons/obj/structures/tents_folded.dmi b/icons/obj/structures/tents_folded.dmi new file mode 100644 index 000000000000..e9f4555ae6a1 Binary files /dev/null and b/icons/obj/structures/tents_folded.dmi differ diff --git a/maps/bigredv2.json b/maps/bigredv2.json index 26bb4ef3d6f1..ecb2e1472c57 100644 --- a/maps/bigredv2.json +++ b/maps/bigredv2.json @@ -35,6 +35,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 100 }, + "camouflage": "desert", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/corsat.json b/maps/corsat.json index 7b6068b2b801..e8192644054a 100644 --- a/maps/corsat.json +++ b/maps/corsat.json @@ -42,6 +42,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 0 }, + "camouflage": "snow", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/desert_dam.json b/maps/desert_dam.json index 792ba07d5b1d..b4e535e893d6 100644 --- a/maps/desert_dam.json +++ b/maps/desert_dam.json @@ -36,6 +36,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 100 }, + "camouflage": "desert", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/fiorina_sciannex.json b/maps/fiorina_sciannex.json index 4941a1c124fd..dfc73655414d 100644 --- a/maps/fiorina_sciannex.json +++ b/maps/fiorina_sciannex.json @@ -33,6 +33,7 @@ "xeno_hive_bravo": 0, "xeno_hive_charlie": 0 }, + "camouflage": "classic", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/ice_colony_v2.json b/maps/ice_colony_v2.json index 51c3d607b308..d8baaab7dcd4 100644 --- a/maps/ice_colony_v2.json +++ b/maps/ice_colony_v2.json @@ -35,6 +35,7 @@ "xeno_hive_delta": 0 }, "nightmare_path": "maps/Nightmare/maps/Ice_Colony_v2/", + "camouflage": "snow", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/kutjevo.json b/maps/kutjevo.json index f8184e048c5e..83a0ff90c575 100644 --- a/maps/kutjevo.json +++ b/maps/kutjevo.json @@ -29,6 +29,7 @@ ], "traits": [{ "Ground": true }], "nightmare_path": "maps/Nightmare/maps/Kutjevo/", + "camouflage": "desert", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/lv522_chances_claim.json b/maps/lv522_chances_claim.json index 581a2555800d..077596d14eca 100644 --- a/maps/lv522_chances_claim.json +++ b/maps/lv522_chances_claim.json @@ -37,6 +37,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 0 }, + "camouflage": "classic", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/lv624.json b/maps/lv624.json index 9259ab8bb3df..bec99892a347 100644 --- a/maps/lv624.json +++ b/maps/lv624.json @@ -32,6 +32,7 @@ "xeno_hive_bravo": 0, "xeno_hive_charlie": 70 }, + "camouflage": "jungle", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 9153eb912a24..29e43dc9e128 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -13093,7 +13093,7 @@ /area/bigredv2/outside/c) "aKv" = ( /obj/structure/bed/chair/wood/normal, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor{ icon_state = "wood" }, @@ -33890,7 +33890,7 @@ }, /area/bigredv2/caves_sw) "pYE" = ( -/obj/item/weapon/gun/shotgun/double/sawn, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/shuttle/escapepod{ icon_state = "floor5" }, @@ -37919,7 +37919,7 @@ pixel_y = 7 }, /obj/item/ammo_magazine/shotgun/buckshot, -/obj/item/weapon/gun/shotgun/double/sawn, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/item/reagent_container/food/snacks/packaged_burger, /turf/open/floor/plating{ dir = 8; diff --git a/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm b/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm index bc1eae13052e..47984a920749 100644 --- a/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm +++ b/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm @@ -94,14 +94,13 @@ "av" = ( /obj/item/tool/warning_cone, /turf/open/floor{ - dir = 9; + dir = 1; icon_state = "asteroidwarning" }, /area/bigredv2/outside/se) "aw" = ( -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/turf/open/mars{ + icon_state = "mars_dirt_6" }, /area/bigredv2/outside/se) "ax" = ( @@ -124,14 +123,18 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Atmospherics Condenser Storage" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "aB" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "aC" = ( /obj/effect/decal/cleanable/dirt, @@ -146,7 +149,9 @@ name = "\improper Atmospherics Condenser" }, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "aE" = ( /obj/effect/decal/cleanable/dirt, @@ -158,8 +163,9 @@ /turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "aG" = ( -/turf/open/mars{ - icon_state = "mars_dirt_13" +/turf/open/floor{ + dir = 4; + icon_state = "asteroidwarning" }, /area/bigredv2/outside/se) "aH" = ( @@ -169,12 +175,6 @@ }, /turf/open/floor, /area/bigredv2/outside/filtration_plant) -"aI" = ( -/turf/open/floor{ - dir = 4; - icon_state = "asteroidwarning" - }, -/area/bigredv2/outside/se) "aJ" = ( /turf/open/floor{ icon_state = "asteroidwarning" @@ -182,7 +182,7 @@ /area/bigredv2/outside/se) "aK" = ( /turf/open/mars{ - icon_state = "mars_dirt_10" + icon_state = "mars_dirt_3" }, /area/bigredv2/outside/se) "aL" = ( @@ -319,7 +319,9 @@ dir = 1; name = "\improper Filtration Facility" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "bm" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ @@ -327,7 +329,9 @@ name = "\improper Filtration Facility" }, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "bn" = ( /obj/structure/closet/firecloset/full, @@ -361,7 +365,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/filtration_plant) "bt" = ( /obj/effect/decal/cleanable/dirt, @@ -500,12 +506,6 @@ }, /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/filtration_plant) -"bY" = ( -/turf/open/floor{ - dir = 4; - icon_state = "asteroidwarning" - }, -/area/bigredv2/outside/filtration_plant) "bZ" = ( /turf/open/floor{ dir = 1; @@ -521,9 +521,6 @@ /obj/structure/machinery/light, /turf/open/floor, /area/bigredv2/outside/filtration_plant) -"cc" = ( -/turf/closed/wall/solaris/rock, -/area/bigredv2/outside/filtration_plant) "ce" = ( /obj/structure/machinery/light, /turf/open/floor{ @@ -574,18 +571,14 @@ /area/bigredv2/outside/filtration_cave_cas) "cl" = ( /turf/open/floor{ - dir = 1; - icon_state = "asteroidfloor" + dir = 8; + icon_state = "asteroidwarning" }, -/area/bigredv2/outside/s) -"cm" = ( -/turf/closed/wall/solaris, -/area/bigredv2/outside/s) +/area/bigredv2/outside/filtration_plant) "cn" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor{ - dir = 4; - icon_state = "asteroidwarning" + icon_state = "delivery" }, /area/bigredv2/outside/filtration_plant) "jh" = ( @@ -653,8 +646,7 @@ /area/bigredv2/outside/filtration_cave_cas) "US" = ( /turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" + icon_state = "delivery" }, /area/bigredv2/outside/filtration_plant) "VW" = ( @@ -700,8 +692,6 @@ ah bI bw bw -bw -bw bZ cl cl @@ -710,7 +700,9 @@ cl cl cl cl -cm +cl +cl +aa "} (2,1,1) = {" ak @@ -726,8 +718,8 @@ az az bJ bw -cc -cc +bw +bw bw bZ bZ @@ -756,14 +748,14 @@ bw bw bw bw -bY -bY -bY -bY +US +US +US +US cn -bY -bY -bY +US +US +US aY "} (4,1,1) = {" @@ -1118,11 +1110,11 @@ bO bO "} (17,1,1) = {" -bK -bK -bK -bK -bK +am +am +am +am +am aY bf bj @@ -1146,18 +1138,18 @@ bO "} (18,1,1) = {" av -aw -aw -aw -aw -az +am +am +am +am +US az az az az bu ad -ad +cn WD bO bO @@ -1177,14 +1169,14 @@ am am am am -az +US az az aP aO by az -az +US WD bO bO @@ -1202,16 +1194,16 @@ bO ax am am -aI -aI -az +am +am +US az az ad bo az bT -az +US WD bO bO @@ -1228,9 +1220,9 @@ bO (21,1,1) = {" ax am -aJ +am +aG aG -bK aY bf ka @@ -1256,8 +1248,8 @@ bO am am aJ -bK -bK +aw +aK aY aY aY diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index db6ec755f363..1c4017a163a3 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -9738,7 +9738,7 @@ /area/desert_dam/interior/dam_interior/east_tunnel_entrance) "aDq" = ( /obj/structure/surface/table/woodentable, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/interior/wood/alt, /area/desert_dam/interior/dam_interior/east_tunnel_entrance) "aDr" = ( @@ -39995,7 +39995,7 @@ /turf/open/floor/interior/tatami, /area/desert_dam/building/bar/bar) "cxg" = ( -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/interior/tatami, /area/desert_dam/building/bar/bar) "cxh" = ( @@ -62422,6 +62422,13 @@ "lNu" = ( /turf/open/desert/dirt, /area/desert_dam/exterior/valley/bar_valley_dam) +"lNN" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/jungle{ + bushes_spawn = 0; + icon_state = "grass_impenetrable" + }, +/area/desert_dam/interior/lab_northeast/east_lab_containment) "lOM" = ( /obj/effect/decal/sand_overlay/sand2/corner2, /turf/open/asphalt/cement, @@ -104947,7 +104954,7 @@ agL amn afI akW -akW +lNN agL afG aqG diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 867e3f7f48a0..4e1f9e3437ce 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -8693,6 +8693,7 @@ icon_state = "hive_spawn"; name = "xeno_hive_spawn" }, +/obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/floor/plating/prison, /area/fiorina/tumor/servers) "fqZ" = ( @@ -19625,6 +19626,7 @@ icon_state = "hive_spawn"; name = "xeno_hive_spawn" }, +/obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -27419,6 +27421,7 @@ icon_state = "hive_spawn"; name = "xeno_hive_spawn" }, +/obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/floor/prison{ dir = 1; icon_state = "darkbrown2" @@ -32876,6 +32879,7 @@ icon_state = "hive_spawn"; name = "xeno_hive_spawn" }, +/obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/floor/prison{ dir = 1; icon_state = "whitegreencorner" @@ -38573,6 +38577,7 @@ icon_state = "hive_spawn"; name = "xeno_hive_spawn" }, +/obj/effect/landmark/ert_spawns/groundside_xeno, /turf/open/floor/plating/prison, /area/fiorina/tumor/fiberbush) "ybg" = ( diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index df2c3e618917..7ce999271a29 100644 --- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -13859,7 +13859,7 @@ /turf/open/floor/wood, /area/ice_colony/surface/bar/bar) "aOC" = ( -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/effect/decal/cleanable/blood{ icon_state = "gib6" }, diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index ffe690c84baa..a431aa368702 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -8762,8 +8762,6 @@ "cSn" = ( /obj/structure/closet/secure_closet/guncabinet, /obj/item/weapon/gun/rifle/m41aMK1, -/obj/item/ammo_magazine/rifle/m41aMK1/toxin, -/obj/item/ammo_magazine/rifle/m41aMK1/toxin, /obj/item/ammo_magazine/rifle/m41aMK1, /obj/item/ammo_magazine/rifle/m41aMK1, /obj/item/ammo_magazine/rifle/m41aMK1, @@ -19747,7 +19745,6 @@ pixel_x = -10; pixel_y = 13 }, -/obj/item/ammo_magazine/rifle/toxin, /turf/open/asphalt/cement, /area/shiva/interior/warehouse) "oYw" = ( @@ -21979,7 +21976,6 @@ /area/shiva/interior/colony/research_hab) "ril" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/ammo_magazine/rifle/m41aMK1/toxin, /turf/open/floor/shiva{ icon_state = "multi_tiles" }, @@ -22493,7 +22489,7 @@ }, /area/shiva/interior/bar) "rUD" = ( -/obj/item/weapon/gun/shotgun/double/sawn{ +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb{ desc = "Shhhh, he's sleeping."; pixel_x = 3; pixel_y = -10 @@ -23741,7 +23737,7 @@ /area/shiva/interior/bar) "tnz" = ( /obj/effect/decal/cleanable/blood, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/prison{ icon_state = "kitchen" }, @@ -24859,7 +24855,6 @@ }, /area/shiva/interior/colony/medseceng) "ukJ" = ( -/obj/item/ammo_magazine/rifle/m41aMK1/toxin, /turf/open/floor/shiva, /area/shiva/interior/colony/research_hab) "ukU" = ( diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index d7d69fd34bc8..3d626437679a 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -2917,7 +2917,7 @@ /area/kutjevo/interior/power/comms) "dST" = ( /obj/effect/decal/cleanable/blood, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/complex/Northwest_Flight_Control) "dTn" = ( diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index 5f412c49c5dc..34eecc574c9c 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -998,8 +998,8 @@ /obj/structure/closet/crate/weapon, /obj/item/weapon/gun/rifle/l42a, /obj/item/weapon/gun/rifle/l42a, -/obj/item/ammo_magazine/rifle/l42a, -/obj/item/ammo_magazine/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a, /turf/open/floor/prison, /area/lv522/indoors/a_block/security) "aIp" = ( @@ -2055,10 +2055,20 @@ }, /area/lv522/indoors/c_block/garage) "bnz" = ( -/obj/item/stack/sandbags_empty/half, -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor/plating/plating_catwalk/prison, -/area/lv522/indoors/b_block/bridge) +/obj/structure/surface/table/almayer, +/obj/structure/flora/pottedplant{ + desc = "It is made of Fiberbush(tm). It contains asbestos. Studies say that greenery calms the mind due to some sort evolved mechanism in the brain. This plant is not calming."; + icon_state = "pottedplant_21"; + layer = 3.1; + name = "synthethic potted plant"; + pixel_y = 14 + }, +/obj/effect/decal/cleanable/cobweb2, +/obj/effect/spider/spiderling/nogrow, +/turf/open/floor/prison{ + icon_state = "darkredfull2" + }, +/area/lv522/indoors/a_block/security) "bnH" = ( /obj/structure/machinery/light{ dir = 1 @@ -4651,12 +4661,11 @@ /turf/open/floor/corsat, /area/lv522/atmos/east_reactor/west) "cKF" = ( -/obj/item/explosive/plastic/breaching_charge, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - icon_state = "darkredfull2" +/obj/item/explosive/plastic/breaching_charge{ + unacidable = 1 }, -/area/lv522/indoors/a_block/security) +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/n_rockies) "cKG" = ( /turf/closed/wall/strata_ice/dirty, /area/lv522/outdoors/nw_rockies) @@ -5549,6 +5558,7 @@ /obj/structure/surface/rack, /obj/item/device/analyzer, /obj/effect/landmark/objective_landmark/close, +/obj/item/stack/sandbags_empty/small_stack, /turf/open/floor/prison{ icon_state = "darkbrownfull2" }, @@ -6688,12 +6698,6 @@ }, /turf/open/floor/prison, /area/lv522/indoors/a_block/kitchen) -"dEu" = ( -/obj/structure/window/framed/strata/reinforced, -/turf/open/floor/corsat{ - icon_state = "marked" - }, -/area/lv522/indoors/a_block/dorm_north) "dEy" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/microwave{ @@ -7747,19 +7751,6 @@ icon_state = "cement4" }, /area/lv522/outdoors/colony_streets/south_east_street) -"ebM" = ( -/obj/structure/blocker/invisible_wall, -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/turf/open/floor/prison{ - icon_state = "floor_plate" - }, -/area/lv522/atmos/cargo_intake) "ebP" = ( /obj/effect/decal/hefa_cult_decals/d32{ icon_state = "2" @@ -7864,12 +7855,6 @@ icon_state = "greenfull" }, /area/lv522/indoors/b_block/bridge) -"eeX" = ( -/obj/structure/blocker/invisible_wall, -/turf/open/asphalt/cement{ - icon_state = "cement1" - }, -/area/lv522/outdoors/n_rockies) "eeY" = ( /obj/structure/pipes/standard/manifold/hidden/green, /turf/open/auto_turf/shale/layer0, @@ -9662,7 +9647,6 @@ }, /area/lv522/atmos/west_reactor) "eUf" = ( -/obj/structure/blocker/invisible_wall, /obj/item/ammo_magazine/m2c{ current_rounds = 0; layer = 4.2; @@ -9676,10 +9660,8 @@ icon_state = "E"; pixel_x = 1 }, -/turf/open/floor/prison{ - icon_state = "floor_plate" - }, -/area/lv522/atmos/cargo_intake) +/turf/closed/wall/strata_ice/dirty, +/area/lv522/oob) "eUh" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/security) @@ -9762,6 +9744,21 @@ icon_state = "plate" }, /area/lv522/atmos/east_reactor/east) +"eWF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/firstaid/adv{ + layer = 3.1; + pixel_x = 3; + pixel_y = -2 + }, +/obj/structure/surface/rack, +/obj/item/storage/firstaid/adv{ + pixel_y = 14 + }, +/turf/open/floor/prison{ + icon_state = "darkredfull2" + }, +/area/lv522/indoors/a_block/security) "eWK" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 4 @@ -10127,14 +10124,13 @@ /turf/open/floor/prison, /area/lv522/landing_zone_2) "fgf" = ( -/obj/structure/blocker/invisible_wall, /obj/item/ammo_magazine/m2c{ current_rounds = 0; layer = 4.2; pixel_x = 17 }, -/turf/open/auto_turf/shale/layer0, -/area/lv522/outdoors/n_rockies) +/turf/closed/wall/strata_ice/dirty, +/area/lv522/oob) "fgk" = ( /obj/structure/platform_decoration{ dir = 1 @@ -10701,6 +10697,12 @@ /obj/item/prop/colony/used_flare, /turf/open/floor/prison, /area/lv522/indoors/a_block/dorms) +"fuw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "fuQ" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 1 @@ -11449,7 +11451,6 @@ unacidable = 1; unslashable = 1 }, -/obj/structure/blocker/invisible_wall, /obj/effect/decal/warning_stripes{ icon_state = "W" }, @@ -11457,10 +11458,8 @@ icon_state = "E"; pixel_x = 1 }, -/turf/open/floor/prison{ - icon_state = "floor_plate" - }, -/area/lv522/atmos/cargo_intake) +/turf/closed/wall/strata_ice/dirty, +/area/lv522/oob) "fLF" = ( /obj/structure/machinery/door/poddoor/almayer/closed{ dir = 4; @@ -11603,10 +11602,6 @@ icon_state = "darkbrownfull2" }, /area/lv522/indoors/c_block/casino) -"fOl" = ( -/obj/structure/blocker/invisible_wall, -/turf/open/auto_turf/shale/layer0, -/area/lv522/outdoors/n_rockies) "fOy" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/cobweb, @@ -13035,7 +13030,7 @@ }, /area/lv522/atmos/command_centre) "gxe" = ( -/obj/item/stack/sandbags_empty/half, +/obj/item/stack/sandbags_empty/small_stack, /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/b_block/bridge) "gxl" = ( @@ -13666,6 +13661,7 @@ "gLV" = ( /obj/structure/prop/server_equipment/yutani_server/broken{ density = 0; + layer = 3.5; pixel_y = 16 }, /obj/effect/decal/cleanable/dirt, @@ -13771,10 +13767,9 @@ /area/lv522/atmos/east_reactor) "gOC" = ( /obj/structure/pipes/vents/pump, -/obj/structure/surface/rack, -/obj/item/weapon/shield/riot, -/obj/item/weapon/classic_baton, /obj/effect/decal/cleanable/dirt, +/obj/structure/surface/table/almayer, +/obj/item/ammo_box/magazine/shotgun/beanbag/empty, /turf/open/floor/prison{ icon_state = "darkredfull2" }, @@ -15208,6 +15203,11 @@ /obj/structure/bed/chair/wheelchair, /turf/open/auto_turf/shale/layer1, /area/lv522/outdoors/colony_streets/north_east_street) +"hra" = ( +/obj/structure/largecrate/random, +/obj/item/stack/sandbags_empty/small_stack, +/turf/open/floor/plating, +/area/lv522/indoors/c_block/mining) "hre" = ( /obj/structure/flora/jungle/planttop1, /turf/open/organic/grass, @@ -17018,9 +17018,10 @@ dir = 6 }, /obj/structure/prop/vehicles/crawler{ + density = 0; dir = 8; - layer = 2.9; - pixel_y = -14 + layer = 2.0; + pixel_y = -13 }, /turf/open/auto_turf/shale/layer0, /area/lv522/outdoors/nw_rockies) @@ -17165,15 +17166,6 @@ icon_state = "floor_plate" }, /area/lv522/outdoors/colony_streets/north_west_street) -"iiz" = ( -/obj/structure/window/framed/strata/reinforced, -/obj/structure/machinery/door/poddoor/shutters/almayer{ - id = "Sec-Corpo-Bridge-Lockdown" - }, -/turf/open/floor/corsat{ - icon_state = "marked" - }, -/area/lv522/indoors/a_block/security) "iiC" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin/wy{ @@ -18002,7 +17994,7 @@ }, /area/lv522/indoors/c_block/mining) "iAZ" = ( -/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/obj/structure/pipes/standard/manifold/hidden/green, /turf/open/floor/prison, /area/lv522/indoors/a_block/dorm_north) "iBd" = ( @@ -19126,7 +19118,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "jab" = ( /obj/structure/window/framed/strata/reinforced, /turf/open/floor/corsat{ @@ -19231,7 +19223,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "jbs" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor/corsat{ @@ -19801,10 +19793,10 @@ }, /area/lv522/indoors/c_block/cargo) "jmd" = ( -/obj/item/weapon/shield/riot, -/obj/item/weapon/classic_baton, -/obj/structure/surface/rack, /obj/effect/decal/cleanable/dirt, +/obj/structure/surface/rack, +/obj/item/weapon/gun/revolver/cmb, +/obj/item/ammo_magazine/revolver/cmb, /turf/open/floor/prison{ icon_state = "darkredfull2" }, @@ -20475,7 +20467,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "jBs" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -20642,7 +20634,7 @@ dir = 4; icon_state = "whiteyellowfull" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "jEk" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, @@ -20756,13 +20748,13 @@ /turf/open/auto_turf/shale/layer1, /area/lv522/outdoors/colony_streets/north_west_street) "jGj" = ( -/obj/structure/surface/rack, -/obj/item/weapon/gun/revolver/cmb, -/obj/item/ammo_magazine/revolver/cmb, -/turf/open/floor/prison{ - icon_state = "darkredfull2" +/obj/effect/decal/cleanable/dirt, +/obj/item/maintenance_jack, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" }, -/area/lv522/indoors/a_block/security) +/area/lv522/indoors/a_block/corpo) "jGm" = ( /obj/structure/barricade/handrail{ dir = 4 @@ -21392,6 +21384,10 @@ }, /turf/closed/wall/mineral/bone_resin, /area/lv522/oob) +"jUg" = ( +/obj/item/ammo_box/magazine/l42a/ap/empty, +/turf/open/floor/prison, +/area/lv522/indoors/a_block/security) "jUk" = ( /turf/open/floor/prison{ dir = 10; @@ -22401,6 +22397,13 @@ /obj/structure/platform_decoration{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -22971,7 +22974,7 @@ dir = 4; icon_state = "whiteyellowfull" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "kze" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/prison{ @@ -23402,7 +23405,7 @@ dir = 4; icon_state = "whiteyellowfull" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "kHy" = ( /obj/structure/surface/table/almayer, /obj/item/storage/box/flashbangs{ @@ -23501,7 +23504,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "kIZ" = ( /obj/structure/machinery/door/poddoor/shutters/almayer/open{ dir = 4; @@ -23608,7 +23611,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "kLs" = ( /obj/item/clothing/mask/facehugger{ desc = "It has some sort of a tube at the end of its tail. What the hell is this thing?"; @@ -24317,7 +24320,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "kYm" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 @@ -24473,7 +24476,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "lbA" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 @@ -24859,7 +24862,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "llM" = ( /obj/item/tool/kitchen/knife/butcher, /obj/effect/decal/cleanable/dirt, @@ -25154,6 +25157,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, /area/lv522/indoors/a_block/dorms) +"lsG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "lsR" = ( /obj/structure/fence{ layer = 2.9 @@ -25385,7 +25395,7 @@ dir = 4; icon_state = "white_cyan1" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "lze" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/warning_stripes{ @@ -25865,7 +25875,7 @@ /turf/open/floor/corsat{ icon_state = "marked" }, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "lIR" = ( /obj/structure/prop/invuln/ice_prefab/trim{ dir = 8 @@ -26263,6 +26273,13 @@ icon_state = "floor_marked" }, /area/lv522/indoors/lone_buildings/outdoor_bot) +"lUh" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/north_west_street) "lUi" = ( /obj/structure/bed/chair/comfy{ dir = 1 @@ -27125,6 +27142,12 @@ /obj/structure/platform_decoration{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -27136,6 +27159,13 @@ icon_state = "darkpurplefull2" }, /area/lv522/indoors/a_block/dorms) +"mnU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_magazine/rifle/l42a/extended{ + current_rounds = 0 + }, +/turf/open/floor/prison, +/area/lv522/indoors/a_block/security/glass) "mnX" = ( /obj/item/weapon/gun/rifle/m41a{ current_mag = null @@ -27466,7 +27496,7 @@ "mwv" = ( /obj/effect/landmark/lv624/fog_blocker/short, /turf/closed/wall/strata_outpost/reinforced, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "mwT" = ( /obj/structure/prop/dam/truck, /obj/structure/prop/holidays/wreath{ @@ -28391,7 +28421,7 @@ /obj/effect/landmark/lv624/fog_blocker/short, /obj/effect/landmark/lv624/fog_blocker/short, /turf/closed/wall/strata_outpost/reinforced, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "mSe" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/bridges/garden_bridge) @@ -28516,6 +28546,13 @@ /area/lv522/outdoors/colony_streets/south_east_street) "mUG" = ( /obj/structure/platform_decoration, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -28535,6 +28572,10 @@ /area/lv522/indoors/a_block/kitchen) "mVi" = ( /obj/structure/platform, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -29073,6 +29114,9 @@ /obj/structure/platform{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -30301,21 +30345,14 @@ /turf/open/asphalt/cement, /area/lv522/outdoors/colony_streets/north_street) "nKo" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/door_control/brbutton/alt{ - id = "Secure_Master_Armoury"; - name = "remote door-control" - }, -/obj/item/limb/hand/l_hand{ - dir = 1; - pixel_x = 9; - pixel_y = 3 +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - icon_state = "darkredfull2" +/obj/item/weapon/gun/rifle/l42a{ + current_mag = null }, -/area/lv522/indoors/a_block/security) +/turf/open/floor/plating/plating_catwalk/prison, +/area/lv522/indoors/a_block/security/glass) "nKK" = ( /obj/structure/platform{ dir = 8 @@ -30404,6 +30441,7 @@ "nMt" = ( /obj/structure/surface/table/almayer, /obj/effect/decal/cleanable/dirt, +/obj/item/ammo_box/magazine/l42a, /turf/open/floor/prison{ icon_state = "darkredfull2" }, @@ -33541,15 +33579,6 @@ /obj/effect/landmark/lv624/fog_blocker/short, /turf/open/auto_turf/shale/layer0, /area/lv522/landing_zone_1) -"pbb" = ( -/obj/structure/platform{ - dir = 1 - }, -/obj/structure/girder/displaced, -/turf/open/asphalt/cement{ - icon_state = "cement12" - }, -/area/lv522/outdoors/colony_streets/south_street) "pbp" = ( /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/dorms/glass) @@ -34167,21 +34196,6 @@ icon_state = "marked" }, /area/lv522/indoors/a_block/security) -"poN" = ( -/obj/structure/surface/table/almayer, -/obj/structure/flora/pottedplant{ - desc = "It is made of Fiberbush(tm). It contains asbestos. Studies say that greenery calms the mind due to some sort evolved mechanism in the brain. This plant is not calming."; - icon_state = "pottedplant_21"; - layer = 3.1; - name = "synthethic potted plant"; - pixel_y = 14 - }, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/spider/spiderling/nogrow, -/turf/open/floor/prison{ - icon_state = "darkredfull2" - }, -/area/lv522/indoors/a_block/security) "poQ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison, @@ -35039,6 +35053,14 @@ /obj/structure/platform_decoration{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -36490,6 +36512,13 @@ }, /turf/open/floor/plating, /area/lv522/outdoors/colony_streets/central_streets) +"qma" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/auto_turf/shale/layer1, +/area/lv522/outdoors/colony_streets/north_west_street) "qml" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -36738,9 +36767,17 @@ /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/bridges/op_centre) "qqD" = ( -/obj/item/ammo_box/magazine/shotgun/buckshot/empty, /obj/structure/surface/table/almayer, /obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/door_control/brbutton/alt{ + id = "Sec-Armoury-Lockdown"; + name = "remote door-control" + }, +/obj/item/limb/hand/l_hand{ + dir = 1; + pixel_x = 9; + pixel_y = 3 + }, /turf/open/floor/prison{ icon_state = "darkredfull2" }, @@ -36868,6 +36905,10 @@ /obj/structure/platform{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -37405,6 +37446,14 @@ icon_state = "blue_plate" }, /area/lv522/indoors/a_block/hallway) +"qDl" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "qDr" = ( /obj/item/ammo_magazine/rifle/heap{ current_rounds = 0 @@ -38059,9 +38108,7 @@ /turf/open/floor/plating, /area/lv522/landing_zone_1/tunnel) "qPS" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 1 - }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic, /turf/open/floor/corsat{ icon_state = "marked" }, @@ -39351,6 +39398,12 @@ icon_state = "floor_plate" }, /area/lv522/indoors/a_block/hallway) +"rmX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "rng" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/camera/autoname{ @@ -39678,12 +39731,8 @@ /turf/open/floor/prison, /area/lv522/indoors/a_block/dorms) "ruj" = ( -/obj/structure/machinery/door_control{ - id = "UD6"; - name = "Cargo Shutter Control" - }, /turf/closed/shuttle/dropship2/tornado/typhoon{ - icon_state = "53" + icon_state = "59" }, /area/lv522/landing_zone_forecon/UD6_Typhoon) "rus" = ( @@ -39962,7 +40011,6 @@ }, /area/lv522/indoors/c_block/mining) "ryv" = ( -/obj/structure/window/framed/strata/reinforced, /turf/open/floor/corsat{ icon_state = "marked" }, @@ -40159,18 +40207,12 @@ }, /area/lv522/landing_zone_forecon/UD6_Typhoon) "rDu" = ( -/obj/structure/closet/crate/ammo, -/obj/item/ammo_magazine/m56d, -/obj/item/ammo_magazine/m56d, -/obj/item/device/m56d_gun, -/obj/structure/barricade/handrail{ - dir = 4 - }, -/obj/structure/barricade/handrail{ - dir = 8 +/obj/structure/machinery/door_control{ + id = "UD6"; + name = "Cargo Shutter Control" }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" +/turf/closed/shuttle/dropship2/tornado/typhoon{ + icon_state = "53" }, /area/lv522/landing_zone_forecon/UD6_Typhoon) "rDz" = ( @@ -41418,6 +41460,9 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/auto_turf/shale/layer0, /area/lv522/outdoors/colony_streets/north_west_street) "seA" = ( @@ -44854,6 +44899,9 @@ /obj/structure/platform{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/prison{ icon_state = "floor_plate" }, @@ -45654,17 +45702,6 @@ icon_state = "floor_plate" }, /area/lv522/indoors/lone_buildings/outdoor_bot) -"tQC" = ( -/obj/structure/window_frame/strata, -/obj/item/stack/rods, -/obj/structure/machinery/door/poddoor/shutters/almayer/open{ - id = "LV522CIC_1"; - name = "\improper Storm Shutters" - }, -/turf/open/floor/corsat{ - icon_state = "marked" - }, -/area/lv522/indoors/a_block/admin) "tQE" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ dir = 1; @@ -47395,6 +47432,13 @@ "uAa" = ( /turf/open/floor/prison, /area/lv522/outdoors/colony_streets/north_street) +"uAb" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "uAd" = ( /turf/open/floor/corsat{ dir = 1; @@ -47460,7 +47504,7 @@ /turf/open/floor/prison, /area/lv522/indoors/a_block/security) "uDs" = ( -/obj/item/clothing/head/beret/sec/hos, +/obj/item/clothing/head/CMB, /obj/effect/decal/cleanable/blood, /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/security) @@ -47668,6 +47712,12 @@ icon_state = "blue_plate" }, /area/lv522/indoors/a_block/hallway) +"uGd" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/turf/open/auto_turf/shale/layer0, +/area/lv522/outdoors/colony_streets/north_west_street) "uGl" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison{ @@ -47887,7 +47937,7 @@ /area/lv522/indoors/a_block/bridges/op_centre) "uKD" = ( /turf/closed/wall/strata_outpost/reinforced, -/area/lv522/oob) +/area/lv522/oob/w_y_vault) "uKE" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 @@ -49170,6 +49220,9 @@ icon_state = "rasputin15" }, /area/lv522/landing_zone_forecon/UD6_Tornado) +"vju" = ( +/turf/closed/wall/strata_outpost, +/area/lv522/oob/w_y_vault) "vjv" = ( /turf/closed/shuttle/dropship2/tornado{ icon_state = "69" @@ -54526,7 +54579,7 @@ }, /area/lv522/indoors/b_block/hydro) "xwO" = ( -/obj/structure/cargo_container/watatsumi/leftmid, +/obj/structure/cargo_container/seegson/left, /turf/open/floor/prison, /area/lv522/outdoors/colony_streets/north_west_street) "xwZ" = ( @@ -54577,7 +54630,7 @@ /turf/open/floor/plating, /area/lv522/indoors/c_block/mining) "xxJ" = ( -/obj/structure/cargo_container/watatsumi/rightmid, +/obj/structure/cargo_container/seegson/mid, /obj/effect/decal/warning_stripes{ icon_state = "E"; pixel_x = 1 @@ -54593,7 +54646,7 @@ /turf/open/floor/prison, /area/lv522/indoors/a_block/admin) "xxV" = ( -/obj/structure/cargo_container/watatsumi/right, +/obj/structure/cargo_container/seegson/right, /turf/open/asphalt/cement{ icon_state = "cement1" }, @@ -55070,18 +55123,16 @@ /turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "xKc" = ( -/obj/structure/closet/coffin/woodencrate, -/obj/item/clothing/accessory/health/ceramic_plate, -/obj/item/clothing/accessory/health/ceramic_plate, -/obj/item/clothing/accessory/health/ceramic_plate, -/obj/item/clothing/accessory/health/ceramic_plate, -/obj/item/clothing/accessory/health/ceramic_plate, /obj/structure/barricade/handrail{ - dir = 4 + dir = 8 }, /obj/structure/barricade/handrail{ - dir = 8 + dir = 4 }, +/obj/structure/closet/crate/ammo, +/obj/item/ammo_magazine/m56d, +/obj/item/ammo_magazine/m56d, +/obj/item/device/m56d_gun, /turf/open/shuttle/dropship{ icon_state = "rasputin15" }, @@ -55101,10 +55152,6 @@ icon_state = "darkpurplefull2" }, /area/lv522/indoors/a_block/dorms) -"xKO" = ( -/obj/structure/window/framed/strata/reinforced, -/turf/open/floor/plating, -/area/lv522/indoors/a_block/fitness) "xLg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed/chair/comfy{ @@ -56066,9 +56113,8 @@ }, /area/lv522/outdoors/colony_streets/north_west_street) "ydD" = ( -/obj/item/weapon/shield/riot, -/obj/item/weapon/classic_baton, -/obj/structure/surface/rack, +/obj/structure/surface/table/almayer, +/obj/item/ammo_box/magazine/shotgun/buckshot/empty, /turf/open/floor/prison{ icon_state = "darkredfull2" }, @@ -65006,11 +65052,11 @@ slO hJZ hJZ hJZ -hJZ -hJZ -hJZ -hJZ -hJZ +uAb +lsG +lsG +lsG +qDl clY vjG kCJ @@ -65233,11 +65279,11 @@ slO hJZ clY hJZ -hJZ +rmX xkO xkO xkO -clY +lUh clY clY oTd @@ -65460,11 +65506,11 @@ slO hJZ clY clY -hJZ +rmX xkO sKj xkO -clY +lUh clY clY srQ @@ -65687,11 +65733,11 @@ eUt hJZ hJZ clY -hJZ +rmX xkO xWx xkO -clY +lUh clY clY oNQ @@ -65914,11 +65960,11 @@ eUt clY hJZ hJZ -hJZ +uGd sek -hJZ +fuw sek -clY +qma clY hJZ oNQ @@ -67284,7 +67330,7 @@ xqd pVx pVx pVx -xyL +xtb xWf imJ xWf @@ -67292,7 +67338,7 @@ xWf xWf qAy xWf -pMd +nLm kcS gou ulL @@ -67309,14 +67355,14 @@ pDh kcS wfb qjt -pMd +nLm klp oot pJW tUM gWh aTS -pMd +nLm lAj ulL ulL @@ -67332,7 +67378,7 @@ ulL lAj wRd wLN -pMd +nLm qQM vXc wth @@ -67965,7 +68011,7 @@ uEC uEC uEC pVx -xyL +xtb odZ imJ xWf @@ -67973,7 +68019,7 @@ xWf xWf xWf odZ -pMd +nLm kcS vId oTg @@ -67990,14 +68036,14 @@ fps npp cHC vJT -pMd +nLm oeL rAg dNm tUM gWh aAW -pMd +nLm kxW kxW lek @@ -68013,7 +68059,7 @@ oTg pJW iUo vdV -pMd +nLm qQM vXc puY @@ -68155,7 +68201,7 @@ bIJ bIJ yim abV -ebM +abV eUf fLz abV @@ -68382,9 +68428,9 @@ yim yim yim cpy -eeX -eeX -eeX +inU +cpy +cpy gGx inU inU @@ -68611,8 +68657,8 @@ cpy cpy cpy fgf -fOl -yim +cpy +cKF hzA ihy yim @@ -68838,7 +68884,7 @@ yim cpy cpy cpy -fOl +cpy cpy hIp ijv @@ -69321,7 +69367,7 @@ roT xTs sKL tkM -xtb +xyL uad xTs uIo @@ -69548,7 +69594,7 @@ vsG xTs xTs tkM -xtb +xyL ubd xTs jLF @@ -70002,7 +70048,7 @@ rLq siT uEC xqd -xyL +xtb xqd uEC pAW @@ -70683,7 +70729,7 @@ rLy siT uEC xqd -xyL +xtb ubv xXX xtb @@ -72583,7 +72629,7 @@ tSL pJZ drz bFU -yfH +tSL tne kGm lML @@ -72618,7 +72664,7 @@ hyf wIr hWs pXq -bnz +pOs uNu pKl oLa @@ -72845,7 +72891,7 @@ dgY gwg cHb oqp -gxe +oLa pKl pKl tkf @@ -73264,7 +73310,7 @@ tne yfR tne yfR -yfH +tSL hES tne tne @@ -74090,10 +74136,10 @@ xtb xtb xtb xtb -xKO +xtb rMb skQ -xKO +xtb xtb tvO ugV @@ -75452,10 +75498,10 @@ emH emH yjp beB -dhQ +beB uPk vnB -dhQ +beB wrC wrC xXR @@ -75778,7 +75824,7 @@ xgH tkf pfD rQg -pbb +vdp nax nax uXp @@ -75933,8 +75979,8 @@ kRb kBk iJu uDs -uDb -nKo +jUg +uVj sjy ogK oud @@ -76114,12 +76160,12 @@ saC xED uKD uKD -abo -abo -abo -abo -abo -abo +vju +vju +vju +vju +vju +vju uKD mwv tvO @@ -76157,10 +76203,10 @@ wdi sjy sjy jmd -jmd +eWF oLW mbF -jGj +jft xbj sjy mNR @@ -76340,14 +76386,14 @@ saC saC xED uKD -abo -abo +vju +vju jbn jbn jbn kIY -abo -abo +vju +vju mwv tvO ugV @@ -76567,14 +76613,14 @@ saC saC xED uKD -abo +vju iZS jBr jEa jEa kLk lbo -abo +vju mwv tvO ugV @@ -76794,7 +76840,7 @@ saC saC xED uKD -abo +vju iZS jEa kHd @@ -77021,8 +77067,8 @@ saC saC xED uKD -abo -abo +vju +vju kzd jEa jEa @@ -77248,7 +77294,7 @@ saC saC xED uKD -abo +vju iZS jEa jEa @@ -77286,7 +77332,7 @@ sjy sjy sjy lhK -azl +nKo mqH ybt sjy @@ -77475,14 +77521,14 @@ saC saC xED uKD -abo +vju iZS jBr jEa jEa kXY lzb -abo +vju mwv tvO ugV @@ -77514,7 +77560,7 @@ sjy sjy lhK azl -mqH +mnU xhu sjy vHU @@ -77702,14 +77748,14 @@ saC saC xED uKD -abo -abo +vju +vju jbn jbn jbn kIY -abo -abo +vju +vju mwv tvO ugV @@ -77930,12 +77976,12 @@ saC xED uKD uKD -abo -abo -abo -abo -abo -abo +vju +vju +vju +vju +vju +vju uKD mSc tvO @@ -78180,7 +78226,7 @@ iPZ uSv jyx uQF -jyx +jGj wwy jPw qgr @@ -79522,7 +79568,7 @@ saC saC saC saC -cpy +saC saC ien ien @@ -79551,7 +79597,7 @@ nTx nTx nTx mvR -ryv +sjy uVj kOS uDb @@ -79747,9 +79793,9 @@ saC saC saC saC -cpy -cpy -cpy +saC +saC +saC saC saC ien @@ -79779,7 +79825,7 @@ nTx nTx mvR qPS -uVj +oGp xxs eUh eUh @@ -79973,11 +80019,11 @@ saC saC saC saC -cpy -cpy -cpy -cpy -cpy +saC +saC +saC +saC +saC saC ien rxI @@ -80006,7 +80052,7 @@ mcC nTx jNv ryv -jft +lhT xxs uDb uDb @@ -80199,11 +80245,11 @@ saC saC saC saC -cpy -cpy -cpy -cpy -cpy +saC +saC +saC +saC +saC saC ien ien @@ -80233,8 +80279,8 @@ nTx eHn uWh sjy -poN -uVj +jft +xxs uDb kBB nrP @@ -80427,10 +80473,10 @@ saC saC saC saC -cpy -cpy saC -cpy +saC +saC +saC saC saC ien @@ -80460,7 +80506,7 @@ nTx eHn pgl sjy -sjy +bnz xQi uDb uDb @@ -80657,7 +80703,7 @@ saC saC saC saC -cpy +saC saC ien ien @@ -81129,10 +81175,10 @@ umR onj wKg wKg -lVD +wKg vQT fmg -lVD +wKg wKg wKg lVD @@ -81368,8 +81414,8 @@ xlI mev mev tdD -iiz -cKF +sjy +uVj qDr xxs nrP @@ -82049,7 +82095,7 @@ xlI xlI yjy xlI -iiz +sjy uVj eqM cvi @@ -84201,7 +84247,7 @@ jas jas jas jas -tms +hra nQu aEF jas @@ -85425,7 +85471,7 @@ saC saC saC saC -cpy +saC saC saC saC @@ -85651,9 +85697,9 @@ saC saC saC saC -cpy -cpy -cpy +saC +saC +saC saC saC saC @@ -85878,11 +85924,11 @@ saC saC saC saC -cpy -cpy -cpy -cpy -cpy +saC +saC +saC +saC +saC saC saC bUN @@ -86106,11 +86152,11 @@ saC saC saC saC -cpy -cpy -cpy -cpy -cpy +saC +saC +saC +saC +saC ien cGd rtI @@ -86334,10 +86380,10 @@ saC saC saC saC -cpy -cpy -cpy -cpy +saC +saC +saC +saC ien rhh rtX @@ -86561,9 +86607,9 @@ saC saC saC saC -cpy -cpy -cpy +saC +saC +saC ien ien ien @@ -86789,9 +86835,9 @@ saC saC saC saC -cpy -cpy -cpy +saC +saC +saC ien qSH qSH @@ -86878,7 +86924,7 @@ lGW xgA acE kEQ -xvB +xvl otS fWG fWG @@ -87017,8 +87063,8 @@ saC saC saC saC -cpy -cpy +saC +saC ien qSH qSH @@ -87053,7 +87099,7 @@ qBb iXZ nxj rMg -hDZ +tDS uNJ orS muV @@ -87332,7 +87378,7 @@ ntS xgA bsG kEQ -xvB +xvl otS fWG cpy @@ -87734,7 +87780,7 @@ lRF ojt muV vrg -tQC +tDS iNb wWV tvi @@ -87966,14 +88012,14 @@ nxO ilR nGq way -raj +gdO puJ iuy uuH pfN pqU lSl -jab +tTK jmi cMt kiG @@ -89296,10 +89342,10 @@ dRL dRL dRL dRL -dEu +dRL qhA qiG -dEu +dRL dRL xFp nQa @@ -90211,7 +90257,7 @@ xCT rsq xCT yfP -dEu +dRL fKf qSH qSH @@ -90434,9 +90480,9 @@ oBx nTg nTg iAZ -qUq -qUq -qUq +xCT +xCT +xCT yfP rJf fKf @@ -90665,7 +90711,7 @@ reo xCT xCT yfP -dEu +dRL fKf qSH qSH @@ -91566,10 +91612,10 @@ dRL dRL dRL dRL -dEu +dRL qhA qiG -dEu +dRL dRL pGY jKB @@ -94296,7 +94342,7 @@ qSH qSH qSH qSH -qSH +oQC qnb krH krH diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index 937599e70947..cec27c56b079 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -866,7 +866,7 @@ /area/lv624/ground/caves/south_east_caves) "aec" = ( /obj/structure/surface/table/woodentable/poor, -/obj/item/weapon/gun/shotgun/double, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/wood, /area/lv624/ground/caves/north_central_caves) "aed" = ( @@ -7940,7 +7940,7 @@ "aIH" = ( /obj/structure/surface/table/woodentable/poor, /obj/item/clothing/mask/cigarette/cigar, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, /turf/open/floor/wood, /area/lv624/ground/jungle/west_jungle/ceiling) @@ -16137,7 +16137,7 @@ "kRr" = ( /obj/structure/surface/rack, /obj/item/storage/belt/shotgun/full, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb{ pixel_y = -6 }, diff --git a/maps/map_files/LV624/cargospecial/cargospecial2_weapons.dmm b/maps/map_files/LV624/cargospecial/cargospecial2_weapons.dmm index d2e5c33cc12a..d9da1c3daa4c 100644 --- a/maps/map_files/LV624/cargospecial/cargospecial2_weapons.dmm +++ b/maps/map_files/LV624/cargospecial/cargospecial2_weapons.dmm @@ -47,7 +47,7 @@ /obj/structure/surface/table/reinforced/prison, /obj/item/ammo_magazine/smg/mp27, /obj/item/ammo_magazine/smg/mp27, -/obj/item/weapon/gun/shotgun/double/with_stock{ +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb{ pixel_y = -4 }, /obj/item/weapon/gun/smg/mp27{ diff --git a/maps/map_files/LV624/standalone/laststand.dmm b/maps/map_files/LV624/standalone/laststand.dmm index dd516a9cd479..43201f92cb17 100644 --- a/maps/map_files/LV624/standalone/laststand.dmm +++ b/maps/map_files/LV624/standalone/laststand.dmm @@ -99,8 +99,8 @@ /area/lv624/ground/caves/north_central_caves) "au" = ( /obj/structure/surface/table/woodentable/poor, -/obj/item/weapon/gun/shotgun/double/with_stock, -/obj/item/weapon/gun/shotgun/double/with_stock{ +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb{ pixel_y = 7 }, /turf/open/floor/wood, diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index b8733f060c4c..7969b1a120a0 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -18944,7 +18944,7 @@ }, /area/varadero/interior/maintenance/research) "qDk" = ( -/obj/item/weapon/gun/shotgun/double/sawn, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/shiva{ icon_state = "floor3" }, diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index f5aa892fc6f0..2da1f3f4295d 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -10624,7 +10624,7 @@ /area/strata/ag/interior/dorms) "aFR" = ( /obj/effect/decal/cleanable/blood, -/obj/item/weapon/gun/shotgun/double/with_stock, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /obj/structure/pipes/standard/simple/hidden/cyan{ dir = 4 }, diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b30503215b59..7043cc4cccee 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -993,6 +993,9 @@ /obj/structure/closet, /obj/item/clothing/suit/armor/riot/marine/vintage_riot, /obj/item/clothing/head/helmet/riot/vintage_riot, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -4859,20 +4862,6 @@ icon_state = "orange" }, /area/almayer/engineering/engineering_workshop/hangar) -"apQ" = ( -/obj/structure/disposalpipe/up/almayer{ - dir = 8; - id = "almayerlink_ot_med" - }, -/obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/machinery/door/window/southleft{ - desc = "A window, that is also a door. A windoor if you will. This one is stronger."; - health = 500; - name = "Reinforced Glass door"; - req_one_access_txt = "2;35" - }, -/turf/open/floor/almayer, -/area/almayer/engineering/engineering_workshop/hangar) "apR" = ( /obj/structure/surface/rack, /obj/item/storage/box/beakers{ @@ -6511,6 +6500,9 @@ pixel_x = 8; pixel_y = -32 }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -19285,6 +19277,39 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"bBi" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/liaison_suit/formal, +/obj/item/clothing/under/liaison_suit, +/obj/item/clothing/under/liaison_suit/outing, +/obj/item/clothing/under/liaison_suit/suspenders, +/obj/item/clothing/under/blackskirt{ + desc = "A stylish skirt, in a business-black and red colour scheme."; + name = "liaison's skirt" + }, +/obj/item/clothing/under/suit_jacket/charcoal{ + desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike."; + name = "liaison's black suit" + }, +/obj/item/clothing/under/suit_jacket/navy{ + desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants."; + name = "liaison's navy suit" + }, +/obj/item/clothing/under/suit_jacket/trainee, +/obj/item/clothing/under/liaison_suit/charcoal, +/obj/item/clothing/under/liaison_suit/outing/red, +/obj/item/clothing/under/liaison_suit/blazer, +/obj/item/clothing/suit/storage/snow_suit/liaison, +/obj/item/clothing/gloves/black, +/obj/item/clothing/gloves/marine/dress, +/obj/item/clothing/glasses/sunglasses/big, +/obj/item/clothing/accessory/blue, +/obj/item/clothing/accessory/red, +/obj/structure/machinery/status_display{ + pixel_x = -32 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "bBl" = ( /obj/structure/machinery/light{ dir = 4 @@ -19910,18 +19935,6 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) -"bEk" = ( -/obj/structure/machinery/door/airlock/almayer/marine/requisitions{ - dir = 1; - name = "\improper Requisitions Storage" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/squads/req) "bEl" = ( /obj/structure/machinery/computer/supply_drop_console/limited, /turf/closed/wall/almayer, @@ -28322,6 +28335,9 @@ "cBd" = ( /obj/structure/surface/rack, /obj/item/reagent_container/food/snacks/wrapped/chunk, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "cargo" }, @@ -33609,6 +33625,9 @@ dir = 8 }, /obj/effect/decal/cleanable/blood, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -36628,13 +36647,6 @@ icon_state = "redfull" }, /area/almayer/hull/lower_hull/l_f_s) -"gkg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/closed/wall/almayer, -/area/almayer/squads/req) "gks" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/plating, @@ -37401,6 +37413,18 @@ icon_state = "plate" }, /area/almayer/hallways/vehiclehangar) +"gCu" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/folded_tent/cmd, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/almayer/squads/req) "gCw" = ( /obj/item/reagent_container/food/drinks/cans/beer{ pixel_x = 10 @@ -38046,6 +38070,13 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north2) +"gVA" = ( +/obj/structure/disposalpipe/down/almayer{ + dir = 8; + id = "almayerlink_OT1_req" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "gVF" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -38075,6 +38106,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"gXh" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "gXl" = ( /obj/structure/closet/secure_closet/personal/cabinet{ req_access_txt = "5" @@ -38339,6 +38376,12 @@ icon_state = "plate" }, /area/almayer/living/cryo_cells) +"hcC" = ( +/obj/structure/disposalpipe/up/almayer{ + id = "almayerlink_OT_req" + }, +/turf/closed/wall/almayer, +/area/almayer/engineering/engineering_workshop/hangar) "hcI" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -39380,6 +39423,18 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"hBP" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/folded_tent/med, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/almayer/squads/req) "hBU" = ( /obj/structure/largecrate/random/secure, /obj/effect/decal/warning_stripes{ @@ -44151,6 +44206,16 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) +"jUn" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/door/window/southleft{ + desc = "A window, that is also a door. A windoor if you will. This one is stronger."; + health = 500; + name = "Reinforced Glass door"; + req_one_access_txt = "2;35" + }, +/turf/open/floor/almayer, +/area/almayer/engineering/engineering_workshop/hangar) "jUs" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -46746,6 +46811,12 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/shipboard/navigation) +"ley" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "leY" = ( /obj/structure/bed/sofa/south/white/left, /turf/open/floor/almayer{ @@ -47927,6 +47998,10 @@ }, /turf/open/floor/almayer, /area/almayer/squads/alpha_bravo_shared) +"lEW" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/almayer, +/area/almayer/engineering/engineering_workshop/hangar) "lFb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -50667,6 +50742,14 @@ }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) +"mYv" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + negdir = 4; + posdir = 1 + }, +/turf/closed/wall/almayer, +/area/almayer/squads/req) "mYw" = ( /obj/structure/sign/safety/escapepod{ pixel_x = -17; @@ -52793,6 +52876,22 @@ "nXP" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/lower_hull/l_f_s) +"nXU" = ( +/obj/structure/machinery/door/airlock/almayer/marine/requisitions{ + dir = 1; + name = "\improper Requisitions Storage" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/obj/structure/disposalpipe/up/almayer{ + dir = 4; + id = "almayerlink_OT1_req" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/squads/req) "nYc" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -55683,6 +55782,18 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) +"pvF" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/folded_tent/reqs, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/almayer/squads/req) "pvJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -59055,6 +59166,13 @@ icon_state = "green" }, /area/almayer/hallways/port_hallway) +"qYC" = ( +/obj/structure/disposalpipe/down/almayer{ + dir = 4; + id = "almayerlink_OT_req" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south1) "qYG" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -62460,36 +62578,6 @@ icon_state = "silvercorner" }, /area/almayer/hallways/aft_hallway) -"sDL" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/liaison_suit/formal, -/obj/item/clothing/under/liaison_suit, -/obj/item/clothing/under/liaison_suit/outing, -/obj/item/clothing/under/liaison_suit/suspenders, -/obj/item/clothing/under/blackskirt{ - desc = "A stylish skirt, in a business-black and red colour scheme."; - name = "liaison's skirt" - }, -/obj/item/clothing/under/suit_jacket/charcoal{ - desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike."; - name = "liaison's black suit" - }, -/obj/item/clothing/under/suit_jacket/navy{ - desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants."; - name = "liaison's navy suit" - }, -/obj/item/clothing/under/suit_jacket/trainee, -/obj/item/clothing/gloves/black, -/obj/item/clothing/gloves/marine/dress, -/obj/item/clothing/glasses/sunglasses/big, -/obj/item/clothing/accessory/blue, -/obj/item/clothing/accessory/red, -/obj/item/clothing/shoes/dress, -/obj/structure/machinery/status_display{ - pixel_x = -32 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "sDM" = ( /turf/open/floor/almayer{ dir = 9; @@ -66341,13 +66429,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/hydroponics) -"urx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/closed/wall/almayer, -/area/almayer/engineering/engineering_workshop/hangar) "urM" = ( /obj/structure/machinery/light{ dir = 8 @@ -68780,6 +68861,14 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"vqO" = ( +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_a_p) "vqW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -69934,6 +70023,18 @@ icon_state = "plate" }, /area/almayer/living/grunt_rnr) +"vSr" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/folded_tent/big, +/turf/open/floor/almayer{ + icon_state = "plating_striped" + }, +/area/almayer/squads/req) "vSE" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/almayer{ @@ -71897,6 +71998,9 @@ desc = "A small coin, bearing the falling falcons insignia."; name = "falling falcons challenge coin" }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -101419,8 +101523,8 @@ gfW bUe cbR ccr -cmp -urx +hcC +lEW aqd bWM bWM @@ -101623,7 +101727,7 @@ iRx iEb bHa apm -apQ +jUn avT bWM bWM @@ -104987,7 +105091,7 @@ yfv bit baw baw -baw +qYC kwo trb aag @@ -105190,7 +105294,7 @@ abg ajC baw vbB -baw +ley kwo trb aag @@ -105393,7 +105497,7 @@ avn aim baw dBp -baw +gVA tQV tQV aah @@ -109044,7 +109148,7 @@ awE vGk xCX vGk -csz +hoX qVM csz qVM @@ -109242,7 +109346,7 @@ fAo awE bhM wQv -sDL +bBi awE ieH qVM @@ -109856,7 +109960,7 @@ awE csz iid csz -csz +hoX qVM noV csz @@ -115282,7 +115386,7 @@ aag lYA aao aap -aap +gXh aao aap aap @@ -116228,7 +116332,7 @@ bNQ bNQ bNQ bNQ -bEk +nXU bKA jac bCA @@ -116431,7 +116535,7 @@ bNP bmD bNP bmD -gkg +mYv doP jac isS @@ -117438,7 +117542,7 @@ bEi bZr bmD ngw -pjG +gCu boz bpR bpR @@ -117641,7 +117745,7 @@ brp bZr bmD xId -pjG +hBP boz bpR bpR @@ -118047,7 +118151,7 @@ buz bZr bmD dmE -pjG +pvF boz bpR bpR @@ -118250,7 +118354,7 @@ bEm bZr bmD hAc -pjG +vSr boz bpR bpR @@ -122848,7 +122952,7 @@ vuv vuv cxo cxo -cxo +vqO sXK tbD qMu diff --git a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm index 2d280dd46967..a39d7d7fffba 100644 --- a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm +++ b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm @@ -1048,7 +1048,7 @@ /obj/item/device/healthanalyzer, /obj/item/device/healthanalyzer, /obj/item/device/healthanalyzer, -/obj/item/weapon/gun/shotgun/double/sawn, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor{ dir = 1; icon_state = "whitegreen" @@ -8232,7 +8232,7 @@ /area/whiskey_outpost/outside/north/platform) "Dw" = ( /obj/structure/surface/table/woodentable/poor, -/obj/item/weapon/gun/shotgun/double/sawn, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, /turf/open/floor/wood, /area/whiskey_outpost/inside/caves/caverns) "Dy" = ( diff --git a/maps/new_varadero.json b/maps/new_varadero.json index 8d163a335d1f..d9d6a0d231cc 100644 --- a/maps/new_varadero.json +++ b/maps/new_varadero.json @@ -34,6 +34,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 0 }, + "camouflage": "jungle", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/override_ground.json b/maps/override_ground.json new file mode 100644 index 000000000000..94d3c70757e1 --- /dev/null +++ b/maps/override_ground.json @@ -0,0 +1,21 @@ +{ + "override_map": true, + "map_name": "Unknown", + "survivor_types": [ + "/datum/equipment_preset/survivor/civilian", + "/datum/equipment_preset/survivor/goon" + ], + "map_item_type": "/obj/item/map/big_red_map", + "announce_text": "We've lost contact with a Weyland-Yutani's research facility. The ###SHIPNAME### has been dispatched to assist.", + "monkey_types": [ + "neaera" + ], + "traits": [{ "Ground": true }], + "gamemodes": [ + "Distress Signal", + "Hunter Games", + "Hive Wars", + "Faction Clash", + "Infection" + ] +} diff --git a/maps/override_ship.json b/maps/override_ship.json new file mode 100644 index 000000000000..09bb02434998 --- /dev/null +++ b/maps/override_ship.json @@ -0,0 +1,5 @@ +{ + "override_map": true, + "map_name": "Ship", + "traits": [{"Marine Main Ship": true}] +} diff --git a/maps/prison_station_fop.json b/maps/prison_station_fop.json index 7993346cbfad..b29f7255c21b 100644 --- a/maps/prison_station_fop.json +++ b/maps/prison_station_fop.json @@ -32,6 +32,7 @@ "xeno_hive_bravo": 0, "xeno_hive_charlie": 0 }, + "camouflage": "classic", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/runtime.json b/maps/runtime.json index a153f877e9f9..44aaea094dcb 100644 --- a/maps/runtime.json +++ b/maps/runtime.json @@ -6,5 +6,6 @@ "/datum/equipment_preset/survivor/scientist/lv" ], "traits": [{"Marine Main Ship": true}], + "camouflage": "classic", "disable_ship_map": true } diff --git a/maps/shivas_snowball.json b/maps/shivas_snowball.json index 902aa73e0894..412f0e35ff41 100644 --- a/maps/shivas_snowball.json +++ b/maps/shivas_snowball.json @@ -37,6 +37,7 @@ "xeno_hive_charlie": 0, "xeno_hive_delta": 0 }, + "camouflage": "snow", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/sorokyne_strata.json b/maps/sorokyne_strata.json index ab0078e17b93..61c3a7fd3f69 100644 --- a/maps/sorokyne_strata.json +++ b/maps/sorokyne_strata.json @@ -33,6 +33,7 @@ "xeno_hive_bravo": 0, "xeno_hive_charlie": 70 }, + "camouflage": "snow", "gamemodes": [ "Distress Signal", "Hunter Games", diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm new file mode 100644 index 000000000000..ec2a81bf6218 --- /dev/null +++ b/maps/templates/clf_ert_station.dmm @@ -0,0 +1,3985 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/structure/target/syndicate, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"at" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/clf_station) +"av" = ( +/obj/structure/closet/crate, +/obj/item/explosive/grenade/phosphorus/clf, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/adminlevel/ert_station/clf_station) +"ax" = ( +/turf/closed/wall/rock/brown, +/area/adminlevel/ert_station/clf_station) +"az" = ( +/obj/structure/prop/brazier/frame_woodened, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"aA" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/obj/item/roller, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"aE" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"aL" = ( +/obj/structure/machinery/shower{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station/clf_station) +"aN" = ( +/obj/structure/toilet{ + pixel_y = 16 + }, +/obj/structure/machinery/light/small/built{ + dir = 8 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/adminlevel/ert_station/clf_station) +"aO" = ( +/obj/structure/stairs/perspective{ + color = "#6b675e"; + dir = 6; + icon_state = "p_stair_full" + }, +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"aR" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"bb" = ( +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 5; + icon_state = "p_stair_full" + }, +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"by" = ( +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"bI" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"bL" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 5 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"bX" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"cc" = ( +/obj/structure/closet/secure_closet/freezer/fridge/full, +/obj/item/reagent_container/food/condiment/enzyme, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"ce" = ( +/obj/item/trash/chips, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"cx" = ( +/obj/structure/sink{ + pixel_y = 24 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/adminlevel/ert_station/clf_station) +"cB" = ( +/obj/vehicle/powerloader/ft, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"cH" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"dd" = ( +/turf/open/gm/coast{ + dir = 1 + }, +/area/adminlevel/ert_station/clf_station) +"dg" = ( +/obj/item/prop/helmetgarb/spent_buckshot, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"dI" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"dM" = ( +/obj/structure/flora/grass/tallgrass/jungle, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"dU" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"dY" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"eh" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"eo" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ey" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"eE" = ( +/obj/structure/largecrate/black_market/clf_supplies, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"eH" = ( +/obj/structure/window/framed/wood/reinforced, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"eO" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"eP" = ( +/obj/structure/window/framed/wood, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"fd" = ( +/obj/structure/closet/secure_closet/freezer/fridge/groceries, +/obj/structure/machinery/light/small/built, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"fk" = ( +/obj/structure/pipes/vents/pump, +/turf/closed/wall/wood, +/area/adminlevel/ert_station/clf_station) +"fo" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"fx" = ( +/obj/structure/largecrate/supply/medicine/blood, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"fA" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"fX" = ( +/obj/structure/prop/wooden_cross, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"gc" = ( +/obj/structure/closet/crate, +/obj/item/device/encryptionkey/clf, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"gi" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/bottle/whiskey, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"gj" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"gN" = ( +/obj/effect/decal/cleanable/egg_smudge, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"hd" = ( +/obj/structure/reagent_dispensers/beerkeg{ + density = 0 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"hr" = ( +/obj/structure/machinery/light/small/built{ + dir = 4 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"hE" = ( +/obj/structure/bed/chair, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"hL" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/item/weapon/gun/pistol/clfpistol, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/clf_station) +"hO" = ( +/obj/item/reagent_container/food/drinks/bottle/whiskey, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"ie" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"iB" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 10 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"iG" = ( +/obj/structure/flora/grass/tallgrass/jungle, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"iK" = ( +/obj/structure/barricade/sandbags, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"iO" = ( +/obj/structure/showcase{ + color = "#95948B"; + desc = "A grey statue dawned in ancient armor, it stares into your soul."; + icon = 'icons/mob/humans/species/r_synthetic.dmi'; + icon_state = "Synthetic_Template"; + name = "Eternal guardian" + }, +/obj/item/weapon/harpoon/yautja{ + anchored = 1; + name = "Alien Harpoon"; + pixel_x = 6 + }, +/obj/item/clothing/shoes/yautja_flavor{ + anchored = 1 + }, +/obj/item/clothing/mask/yautja_flavor{ + anchored = 1; + unacidable = 0 + }, +/turf/open/floor/sandstone/runed, +/area/adminlevel/ert_station/clf_station) +"jc" = ( +/obj/structure/platform_decoration/kutjevo, +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 5; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"jj" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 10 + }, +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"jp" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/bottle/whiskey, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"jG" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"jZ" = ( +/obj/structure/flora/jungle/plantbot1, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ki" = ( +/obj/structure/largecrate/black_market/confiscated_equipment, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"kk" = ( +/obj/item/ammo_box/magazine/l42a, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"ko" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/flora/jungle/vines, +/obj/structure/flora/jungle/vines{ + icon_state = "heavy_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"kr" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 6 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ks" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/bush/ausbushes/ppflowers, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"kF" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/surface/table/woodentable/poor, +/obj/item/storage/pill_bottle{ + pixel_y = 12; + pixel_x = 5 + }, +/obj/item/storage/pill_bottle/ultrazine/antag{ + pixel_y = 14; + pixel_x = -3 + }, +/obj/item/storage/pill_bottle{ + pixel_y = 10 + }, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"kS" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/shaker, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"la" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"lp" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/explosive/grenade/incendiary/molotov, +/obj/item/explosive/grenade/incendiary/molotov, +/obj/item/explosive/grenade/incendiary/molotov, +/obj/item/explosive/grenade/incendiary/molotov, +/obj/item/weapon/gun/pistol/heavy{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"lI" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"lN" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/dirtgrassborder{ + dir = 4; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"lT" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"lX" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 7 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"ma" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/storage/fancy/cigarettes/lucky_strikes_4, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"me" = ( +/obj/structure/platform_decoration/kutjevo, +/turf/open/gm/dirtgrassborder{ + dir = 4; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"mk" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ms" = ( +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/obj/item/spacecash/c50, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"mt" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"mw" = ( +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"mR" = ( +/obj/structure/machinery/gibber{ + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"ne" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"nn" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 4 + }, +/obj/structure/flora/grass/tallgrass/jungle, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"nr" = ( +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 9; + icon_state = "p_stair_full" + }, +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"nC" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"nJ" = ( +/obj/item/clothing/shoes/jackboots, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"nM" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/secure, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"nQ" = ( +/obj/item/clothing/mask/cigarette/cigar/classic, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"oc" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/ammo_magazine/shotgun/slugs, +/obj/item/ammo_magazine/shotgun/slugs, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"om" = ( +/turf/open/gm/dirtgrassborder{ + dir = 4; + icon_state = "grassdirt_corner2" + }, +/area/adminlevel/ert_station/clf_station) +"ow" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/item/stock_parts/subspace/crystal, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/clf_station) +"oy" = ( +/obj/item/trash/candy, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"oI" = ( +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"oN" = ( +/obj/structure/flora/jungle/vines, +/turf/closed/wall/strata_ice/jungle, +/area/adminlevel/ert_station/clf_station) +"oO" = ( +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 10; + icon_state = "p_stair_full" + }, +/obj/structure/platform_decoration/kutjevo, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"pk" = ( +/obj/structure/flora/grass/tallgrass/jungle, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"pp" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"pE" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 9 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"pF" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/adminlevel/ert_station/clf_station) +"pY" = ( +/obj/structure/flora/jungle/plantbot1, +/turf/open/gm/dirtgrassborder{ + dir = 8 + }, +/area/adminlevel/ert_station/clf_station) +"qa" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/adminlevel/ert_station/clf_station) +"qb" = ( +/obj/structure/largecrate/random/barrel/red, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"ql" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"qy" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/gm/river, +/area/adminlevel/ert_station/clf_station) +"rm" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/device/healthanalyzer{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"rz" = ( +/obj/structure/curtain/red, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"rD" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 9 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"rO" = ( +/obj/structure/platform/kutjevo, +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"rZ" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"sv" = ( +/obj/structure/target/syndicate, +/obj/item/weapon/throwing_knife, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"sx" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/clothing/glasses/sunglasses/blindfold, +/obj/item/handcuffs, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"sC" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/gm/dirtgrassborder{ + dir = 1; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"sK" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/weapon/gun/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/obj/item/ammo_magazine/smg/uzi, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"sN" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"ta" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ts" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 5 + }, +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"tt" = ( +/obj/structure/largecrate/random/barrel/red, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"tz" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/effect/landmark/wo_supplies/storage/belts/lifesaver, +/obj/effect/landmark/wo_supplies/storage/belts/lifesaver{ + pixel_y = 5 + }, +/obj/item/storage/belt/medical/full{ + pixel_y = -1 + }, +/obj/item/storage/belt/medical/full/with_suture_and_graft{ + pixel_y = 10 + }, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"tG" = ( +/obj/structure/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/turf/open/floor/plating/plating_catwalk, +/area/adminlevel/ert_station/clf_station) +"tJ" = ( +/obj/structure/showcase{ + color = "#95948B"; + desc = "A grey statue dawned in ancient armor, it stares into your soul."; + icon = 'icons/mob/humans/species/r_synthetic.dmi'; + icon_state = "Synthetic_Template"; + name = "Eternal guardian" + }, +/obj/item/clothing/suit/armor/yautja_flavor{ + anchored = 1 + }, +/turf/open/floor/sandstone/runed, +/area/adminlevel/ert_station/clf_station) +"ug" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"un" = ( +/obj/structure/flora/jungle/vines{ + icon_state = "heavy_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"up" = ( +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/adminlevel/ert_station/clf_station) +"uF" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/obj/structure/closet/coffin/woodencrate, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"uO" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/obj/item/bedsheet/yellow, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"uX" = ( +/turf/open/floor/plating, +/area/adminlevel/ert_station/clf_station) +"uZ" = ( +/obj/structure/prop/wooden_cross{ + pixel_y = 14 + }, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"vm" = ( +/obj/structure/bed/chair/bolted{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"vx" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/trash/candle, +/obj/item/reagent_container/syringe/drugs{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"vA" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"vE" = ( +/obj/structure/largecrate/supply/weapons/shotgun, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"vI" = ( +/turf/open/floor/sandstone/runed, +/area/adminlevel/ert_station/clf_station) +"vQ" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"wI" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 6 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"wW" = ( +/turf/open/gm/coast{ + dir = 9 + }, +/area/adminlevel/ert_station/clf_station) +"xi" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/barrel/white, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"xE" = ( +/turf/open/gm/coast{ + dir = 8; + icon_state = "beachcorner2" + }, +/area/adminlevel/ert_station/clf_station) +"xJ" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/obj/item/prop/helmetgarb/spent_buckshot, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"xL" = ( +/obj/structure/flora/grass/tallgrass/jungle, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"xM" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -10 + }, +/obj/item/tool/soap, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/adminlevel/ert_station/clf_station) +"xO" = ( +/obj/item/holder/cat/kitten{ + name = "Isabelle" + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"xS" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ye" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 5 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"yy" = ( +/obj/structure/platform_decoration/kutjevo, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"yE" = ( +/obj/structure/closet/crate, +/obj/item/explosive/grenade/incendiary/molotov, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"yH" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"yM" = ( +/obj/structure/closet/crate, +/obj/item/ammo_magazine/pistol/clfpistol, +/obj/item/ammo_magazine/pistol/clfpistol, +/obj/item/ammo_magazine/pistol/clfpistol, +/obj/item/ammo_magazine/pistol/clfpistol, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/adminlevel/ert_station/clf_station) +"yO" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"yU" = ( +/turf/open/gm/river, +/area/adminlevel/ert_station/clf_station) +"yW" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/obj/structure/largecrate/random/case/small, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"yY" = ( +/obj/structure/prop/brazier/frame_woodened, +/turf/open/floor/plating{ + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"zy" = ( +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"zH" = ( +/obj/structure/closet/secure_closet/medical_doctor, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"zO" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"zZ" = ( +/obj/structure/sign/poster/clf, +/turf/closed/wall/wood, +/area/adminlevel/ert_station/clf_station) +"Ad" = ( +/obj/structure/flora/jungle/vines{ + icon_state = "heavy_4" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ag" = ( +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"Ah" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/dirtgrassborder{ + dir = 1; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"Aj" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"AE" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/dirtgrassborder{ + dir = 8 + }, +/area/adminlevel/ert_station/clf_station) +"AK" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 6 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"AO" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/ammo_magazine/shotgun/flechette, +/obj/item/ammo_magazine/shotgun/flechette, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"AV" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/ammo_magazine/smg/mac15/extended, +/obj/item/ammo_magazine/smg/mac15/extended, +/obj/item/ammo_magazine/smg/mac15/extended, +/obj/item/weapon/gun/smg/mac15/extended, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Ba" = ( +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 8; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"Bl" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/ammo_magazine/smg/mp5, +/obj/item/ammo_magazine/smg/mp5, +/obj/item/ammo_magazine/smg/mp5, +/obj/item/weapon/gun/smg/mp5, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Bn" = ( +/obj/item/trash/burger, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Bt" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Bx" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"BB" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/obj/structure/flora/grass/tallgrass/jungle, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"BC" = ( +/obj/structure/machinery/door/airlock/sandstone/runed/destroyable{ + name = "\improper Strange Temple" + }, +/turf/open/space/basic, +/area/adminlevel/ert_station/clf_station) +"BP" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/microwave{ + pixel_y = 10 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"BQ" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/platform/kutjevo, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"BS" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"BU" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"Ch" = ( +/obj/structure/platform/kutjevo, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ck" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/device/radio/headset/distress/CLF, +/obj/item/device/radio/headset/distress/CLF/command, +/obj/structure/machinery/recharger, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"CE" = ( +/obj/structure/flora/jungle/planttop1, +/obj/structure/largecrate/random/secure, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"CQ" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Dn" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"Dy" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"DF" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/adminlevel/ert_station/clf_station) +"DN" = ( +/obj/structure/flora/jungle/vines/heavy, +/turf/closed/wall/strata_ice/jungle, +/area/adminlevel/ert_station/clf_station) +"DW" = ( +/obj/structure/closet/secure_closet/brig, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Eb" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 9; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"Ee" = ( +/turf/open/gm/dirtgrassborder{ + dir = 8 + }, +/area/adminlevel/ert_station/clf_station) +"Ez" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"EJ" = ( +/obj/structure/machinery/floodlight, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ER" = ( +/obj/structure/toilet{ + pixel_y = 16 + }, +/obj/structure/machinery/light/small/built{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"Fj" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Fn" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"FD" = ( +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"FV" = ( +/obj/item/reagent_container/food/drinks/bottle/vodka, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Gj" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Gl" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/spacecash/c10, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"GB" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/weapon/gun/rifle/mar40, +/obj/item/ammo_magazine/rifle/mar40, +/obj/item/ammo_magazine/rifle/mar40, +/obj/item/ammo_magazine/rifle/mar40, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"GG" = ( +/obj/structure/flora/grass/tallgrass/jungle, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"GR" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 1 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"GV" = ( +/turf/open/floor/plating{ + dir = 8; + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"Hs" = ( +/obj/docking_port/stationary/emergency_response/idle_port1, +/turf/open/floor/plating, +/area/adminlevel/ert_station/clf_station) +"HI" = ( +/obj/structure/flora/jungle/vines/heavy, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"Ie" = ( +/turf/open/gm/dirtgrassborder{ + dir = 1; + icon_state = "grassdirt_corner2" + }, +/area/adminlevel/ert_station/clf_station) +"Ig" = ( +/obj/structure/largecrate/black_market/clf_supplies, +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Io" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 5 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Iz" = ( +/obj/structure/platform_decoration/kutjevo, +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"IH" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/adminlevel/ert_station/clf_station) +"IT" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"IW" = ( +/obj/structure/closet/crate, +/obj/item/clothing/mask/gas/swat, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/adminlevel/ert_station/clf_station) +"Jg" = ( +/obj/structure/platform/kutjevo, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Jh" = ( +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ke" = ( +/obj/structure/flora/jungle/vines{ + icon_state = "heavy_4" + }, +/turf/closed/wall/strata_ice/jungle, +/area/adminlevel/ert_station/clf_station) +"KT" = ( +/turf/closed/wall/strata_ice/jungle, +/area/adminlevel/ert_station/clf_station) +"Lu" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/weapon/gun/rifle/mar40/carbine, +/obj/item/ammo_magazine/rifle/mar40, +/obj/item/ammo_magazine/rifle/mar40, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"LH" = ( +/obj/structure/closet/secure_closet/brig, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"LN" = ( +/obj/structure/machinery/floodlight, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"LO" = ( +/turf/closed/wall/mineral/sandstone/runed, +/area/adminlevel/ert_station/clf_station) +"LQ" = ( +/obj/structure/machinery/light/small/built{ + dir = 8 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Me" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/gm/dirtgrassborder{ + dir = 4; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"MD" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"ME" = ( +/obj/structure/machinery/door/window/brigdoor{ + dir = 8; + req_access = null + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"MI" = ( +/obj/structure/flora/jungle/vines/heavy, +/turf/closed/wall/rock/brown, +/area/adminlevel/ert_station/clf_station) +"MP" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/clf_station) +"MQ" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/adminlevel/ert_station/clf_station) +"MT" = ( +/obj/item/tank/anesthetic, +/obj/structure/surface/table/reinforced/prison, +/obj/item/clothing/mask/breath/medical, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"MU" = ( +/obj/structure/window/reinforced, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Ne" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ng" = ( +/obj/structure/flora/jungle/plantbot1, +/turf/open/gm/dirtgrassborder{ + dir = 1; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"Ni" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/condiment/peppermill, +/obj/item/reagent_container/food/condiment/saltshaker, +/obj/item/storage/box/drinkingglasses, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Nk" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Ns" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"NB" = ( +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/adminlevel/ert_station/clf_station) +"NV" = ( +/obj/structure/flora/jungle/vines/heavy, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"NY" = ( +/obj/effect/decal/cleanable/tomato_smudge, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"Of" = ( +/obj/structure/surface/table/reinforced, +/obj/item/tool/kitchen/tray, +/obj/item/tool/kitchen/knife{ + pixel_x = 3 + }, +/obj/item/tool/kitchen/knife/butcher{ + pixel_x = -8 + }, +/obj/item/tool/kitchen/rollingpin, +/obj/item/book/manual/chef_recipes, +/obj/structure/machinery/light/small/built{ + dir = 1 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"Oi" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"Op" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/barrel/red, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ou" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.0 + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/structure/machinery/light/small/built, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/clf_station) +"Oy" = ( +/obj/item/spacecash/c1, +/obj/item/storage/box/matches, +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/transmitter/rotary{ + name = "CLF Outpost"; + phone_category = "CLF"; + phone_id = "CLF Outpost"; + callable = 0; + pixel_y = 10 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"OG" = ( +/obj/item/storage/belt/shotgun/full/quackers, +/turf/open/gm/river, +/area/adminlevel/ert_station/clf_station) +"OK" = ( +/obj/structure/stairs/perspective{ + color = "#6b675e"; + dir = 4; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) +"ON" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/obj/structure/flora/grass/tallgrass/jungle, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"OX" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/case/double, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"OY" = ( +/turf/open/gm/dirtgrassborder{ + dir = 4; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"OZ" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/supply/weapons/flamers, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ph" = ( +/turf/open/gm/coast{ + dir = 4; + icon_state = "beachcorner" + }, +/area/adminlevel/ert_station/clf_station) +"Pj" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Pr" = ( +/mob/living/simple_animal/cat{ + name = "Edwin" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"PC" = ( +/obj/item/trash/candle, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"PI" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/window/reinforced{ + dir = 8; + health = 80 + }, +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/surgical_tray{ + pixel_y = 8 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical{ + desc = "A sterile mask designed to help prevent the spread of diseases. This one has already been used."; + name = "used sterile mask" + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"PW" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 5 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Qw" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/device/radio/headset/distress/CLF, +/obj/item/device/radio/headset/distress/CLF/medic, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Qx" = ( +/turf/open/gm/coast{ + dir = 8 + }, +/area/adminlevel/ert_station/clf_station) +"QA" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/supply/explosives/mines, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"QB" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/supply/explosives/grenades, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"QE" = ( +/obj/structure/closet/crate, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"QG" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/ammo_box/magazine/shotgun/buckshot, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"QV" = ( +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Re" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/obj/item/bedsheet/green, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Rg" = ( +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"Ro" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/clothing/glasses/sunglasses/blindfold, +/obj/item/handcuffs, +/obj/item/handcuffs, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Rr" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidfloor" + }, +/area/adminlevel/ert_station/clf_station) +"Rv" = ( +/obj/structure/curtain/red, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"RB" = ( +/obj/structure/flora/jungle/plantbot1{ + icon_state = "alienplant1"; + luminosity = 2 + }, +/turf/open/gm/river, +/area/adminlevel/ert_station/clf_station) +"RR" = ( +/obj/structure/machinery/chem_dispenser/beer{ + density = 0; + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"Sc" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/obj/structure/machinery/floodlight, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Sd" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/structure/machinery/light/small/built{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/adminlevel/ert_station/clf_station) +"Sj" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/adminlevel/ert_station/clf_station) +"Sy" = ( +/obj/structure/platform/kutjevo, +/obj/structure/platform/kutjevo{ + dir = 4 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"SD" = ( +/obj/structure/largecrate/random/case/small, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Tk" = ( +/obj/structure/bed/chair, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/adminlevel/ert_station/clf_station) +"Tr" = ( +/turf/open/gm/dirtgrassborder{ + dir = 1; + icon_state = "grassdirt_corner" + }, +/area/adminlevel/ert_station/clf_station) +"Tt" = ( +/obj/structure/platform/kutjevo, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Tu" = ( +/turf/open/floor/plating{ + dir = 4; + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"TM" = ( +/obj/structure/machinery/recharger, +/obj/structure/surface/table/woodentable/poor, +/obj/item/device/defibrillator, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"TN" = ( +/obj/structure/largecrate/random/case, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"TZ" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Ub" = ( +/turf/closed/wall/mineral/sandstone/runed/decor, +/area/adminlevel/ert_station/clf_station) +"Uj" = ( +/obj/structure/closet/crate, +/obj/item/clothing/head/welding, +/obj/item/tool/weldingtool/experimental, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"Um" = ( +/obj/structure/largecrate/random/secure, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Uo" = ( +/obj/structure/flora/bush/ausbushes/var3, +/turf/open/gm/river, +/area/adminlevel/ert_station/clf_station) +"Uu" = ( +/turf/open/floor/plating{ + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"UB" = ( +/turf/open/floor/plating{ + dir = 1; + icon_state = "asteroidwarning" + }, +/area/adminlevel/ert_station/clf_station) +"Vf" = ( +/obj/structure/largecrate/black_market/confiscated_weaponry, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Vi" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/gm/coast{ + dir = 8 + }, +/area/adminlevel/ert_station/clf_station) +"Vk" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/prop/helmetgarb/gunoil, +/obj/item/weapon/baton/cattleprod, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Vm" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/processor{ + pixel_y = 10 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"VE" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/largecrate/random/barrel/green, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"VO" = ( +/obj/structure/flora/jungle/vines, +/obj/structure/flora/jungle/vines{ + icon_state = "heavy_1" + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"VR" = ( +/obj/structure/platform/kutjevo{ + dir = 1 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Wb" = ( +/obj/structure/curtain/red, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Wc" = ( +/obj/structure/prop/wooden_cross{ + pixel_y = 14 + }, +/obj/structure/flora/bush/ausbushes/grassybush{ + icon_state = "fullgrass_1" + }, +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer0_mud_alt, +/area/adminlevel/ert_station/clf_station) +"Wo" = ( +/obj/item/weapon/throwing_knife, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"Wq" = ( +/obj/structure/machinery/light/small/built{ + dir = 4 + }, +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"Wz" = ( +/obj/structure/closet/crate, +/obj/item/weapon/baton/cattleprod, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"WA" = ( +/obj/structure/closet/crate, +/obj/item/explosive/grenade/incendiary/molotov, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"WM" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"WO" = ( +/obj/structure/prop/wooden_cross, +/obj/item/clothing/head/helmet/marine/fluff/limo, +/turf/open/gm/dirt, +/area/adminlevel/ert_station/clf_station) +"WU" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/reagent_container/food/drinks/bottle/sake, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Xc" = ( +/obj/item/clothing/under/colonist/clf, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"Xp" = ( +/turf/open/floor/prison{ + icon_state = "kitchen" + }, +/area/adminlevel/ert_station/clf_station) +"Xv" = ( +/obj/structure/flora/jungle/plantbot1, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Xz" = ( +/obj/structure/machinery/iv_drip, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"XE" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer0_mud, +/area/adminlevel/ert_station/clf_station) +"Yq" = ( +/obj/structure/flora/grass/tallgrass/jungle/corner{ + dir = 10 + }, +/turf/open/gm/grass, +/area/adminlevel/ert_station/clf_station) +"Yv" = ( +/obj/structure/platform/kutjevo{ + dir = 8 + }, +/obj/structure/flora/jungle/vines, +/turf/open/auto_turf/strata_grass/layer1, +/area/adminlevel/ert_station/clf_station) +"YA" = ( +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"YB" = ( +/turf/open/gm/grass{ + icon_state = "grass2" + }, +/area/adminlevel/ert_station/clf_station) +"Ze" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/item/reagent_container/food/drinks/flask/barflask, +/obj/structure/machinery/light/small/built, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/adminlevel/ert_station/clf_station) +"Zj" = ( +/obj/structure/closet/crate, +/obj/item/reagent_container/food/snacks/appletart, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/adminlevel/ert_station/clf_station) +"ZE" = ( +/obj/structure/surface/table/woodentable/poor, +/obj/item/storage/box/beakers{ + pixel_y = 12; + pixel_x = -4 + }, +/obj/item/reagent_container/glass/beaker{ + pixel_y = 4; + pixel_x = 12 + }, +/obj/item/reagent_container/glass/beaker/silver, +/obj/item/reagent_container/glass/beaker/vial/random/good{ + pixel_x = 18; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/adminlevel/ert_station/clf_station) +"ZI" = ( +/turf/closed/wall/wood, +/area/adminlevel/ert_station/clf_station) +"ZO" = ( +/obj/structure/prop/brazier/torch, +/turf/closed/wall/mineral/sandstone/runed, +/area/adminlevel/ert_station/clf_station) +"ZS" = ( +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 1; + icon_state = "p_stair_full" + }, +/turf/open/auto_turf/strata_grass/layer0, +/area/adminlevel/ert_station/clf_station) + +(1,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(2,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +yU +yU +yU +yU +yU +RB +yU +yU +dd +WO +Rg +Rg +Rg +Rg +vI +ZO +LO +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(3,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +qy +yU +yU +yU +yU +yU +yU +yU +yU +xE +Ph +Rg +Rg +ax +Rg +Rg +Rg +tJ +Ub +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(4,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +yU +yU +yU +OG +yU +yU +Uo +yU +yU +yU +dd +Rg +Rg +ax +ax +ax +Rg +vI +vI +BC +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(5,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +ax +ax +yU +RB +yU +yU +yU +yU +wW +Qx +Qx +Qx +Qx +Qx +Ph +ax +ax +ax +ax +ax +Rg +Rg +iO +Ub +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(6,1,1) = {" +ax +ax +ax +ax +ax +ax +ax +yU +yU +yU +yU +yU +wW +Qx +Qx +Ph +ug +Dn +Rg +Rg +ax +ax +ax +ax +ax +ax +ax +Rg +Rg +ZO +LO +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(7,1,1) = {" +ax +ax +ax +ax +ax +ax +Vi +Qx +Qx +Qx +Qx +Qx +Ph +Rg +Rg +Dn +dI +Rg +Rg +Rg +dI +Rg +Rg +ax +MI +MI +Rg +Rg +Rg +ax +ax +ax +KT +KT +KT +KT +KT +KT +KT +KT +"} +(8,1,1) = {" +KT +KT +KT +KT +Rg +fX +ug +Rg +Rg +Rg +Rg +Rg +Ie +om +Rg +Ie +Me +Ng +om +Rg +Rg +Dn +Rg +Ie +Ee +om +HI +HI +ax +ax +ax +KT +KT +KT +KT +KT +KT +KT +KT +KT +"} +(9,1,1) = {" +KT +KT +KT +Rg +Dn +Rg +Rg +Ie +om +fX +ug +Ie +OY +Tr +Ee +OY +QV +YB +Tr +Ee +Ee +Ee +Ee +OY +QV +Tr +Ee +MI +ax +ax +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +"} +(10,1,1) = {" +KT +KT +Rg +Rg +Ie +Ee +Ee +me +Ah +AE +AE +lN +la +pp +la +la +pp +pp +la +la +la +la +la +yO +la +Pj +QV +QV +Nk +ax +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +"} +(11,1,1) = {" +KT +DN +Rg +Ie +OY +YB +ql +Jg +yY +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +Tu +az +VR +YB +QV +Nk +iG +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +"} +(12,1,1) = {" +KT +sC +pY +OY +QV +QV +YB +Jg +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +VR +Aj +Xv +Nk +BB +iG +iG +iG +KT +KT +KT +KT +KT +KT +KT +"} +(13,1,1) = {" +KT +YB +QV +QV +QV +QV +QV +Jg +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +Hs +uX +UB +Bt +la +la +jj +pk +pk +BB +pk +pk +KT +KT +KT +KT +KT +KT +"} +(14,1,1) = {" +DN +YB +YB +CQ +QV +QV +QV +Jg +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +oI +oI +oI +eh +gj +ON +pk +ON +pk +pk +KT +KT +KT +KT +KT +"} +(15,1,1) = {" +DN +ts +sN +QV +CQ +wI +ye +Jg +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +oI +cB +oI +eh +iB +Ez +TZ +eo +pk +pk +ax +ax +ax +KT +KT +"} +(16,1,1) = {" +KT +dM +ye +sN +LN +Nk +GG +Io +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +oI +oI +Oi +eh +zO +zO +zO +zO +iB +xL +pk +ax +ax +KT +KT +"} +(17,1,1) = {" +ax +dM +ZI +ZI +ZI +Yq +GG +GR +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +IT +Rr +qb +eh +zO +yH +zO +bI +jZ +iB +Ez +ax +ax +KT +KT +"} +(18,1,1) = {" +ax +GG +ZI +aN +Wb +FD +iB +pE +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +MD +lT +lT +Ne +zO +zO +zO +zO +zO +zO +zO +zO +DN +KT +KT +"} +(19,1,1) = {" +ax +pk +ZI +ZI +ZI +FD +zO +Ch +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +eh +bI +jZ +yy +Fn +Fn +Fn +Fn +Fn +Fn +Fn +Jh +WM +KT +KT +"} +(20,1,1) = {" +ax +rD +ZI +ER +Wb +FD +zO +Ch +Uu +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +uX +UB +eh +zO +yy +Sy +ZI +eP +eP +eP +ZI +eP +eP +ZI +dU +WM +KT +"} +(21,1,1) = {" +ax +zO +ZI +ZI +ZI +FD +zO +Ch +yY +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +GV +az +eh +zO +Ch +ZI +ZI +MQ +mw +mw +LQ +Xp +Xp +ZI +ZI +eh +KT +"} +(22,1,1) = {" +ax +bI +jZ +zO +zO +FD +zO +fo +nM +VE +vE +ey +OZ +Op +Op +QA +bb +OK +OK +OK +aO +QB +xi +Ig +OX +yW +jG +Ch +eP +vx +WU +mw +hE +mt +Xp +Xp +gi +eP +eh +KT +"} +(23,1,1) = {" +ax +zO +zO +zO +EJ +FD +zO +zO +zO +Um +CE +jZ +TN +vA +SD +lI +zO +FD +FD +Dy +EJ +eE +Vf +tt +ki +zO +zO +Ch +eP +jp +Gl +mw +Tk +Ni +Xp +Xp +nC +eP +xS +KT +"} +(24,1,1) = {" +ax +zO +zO +iK +GB +Lu +zO +zO +FD +FD +FD +FD +FD +XE +FD +FD +FD +FD +FD +FD +FD +zO +zO +FD +FD +FD +zO +Ch +eP +Ns +qa +mw +hE +kS +Xp +Xp +gN +eP +xS +KT +"} +(25,1,1) = {" +ax +sv +zO +iK +FD +FD +FD +FD +FD +FD +zO +FD +FD +FD +zO +zO +FD +FD +FD +FD +FD +FD +FD +FD +FD +FD +FD +Eb +ZI +ce +mw +mw +hE +Fj +Wq +Xp +Xp +eP +eh +KT +"} +(26,1,1) = {" +ax +ac +Wo +iK +xJ +zO +FD +FD +zO +zO +yH +zO +EJ +FD +FD +zO +zO +Dy +FD +zO +zO +FD +FD +zO +zO +FD +FD +ZS +Wb +mw +mw +mw +oy +ZI +ZI +rz +rz +ZI +xS +KT +"} +(27,1,1) = {" +ax +zO +yy +Fn +nr +Ba +Ba +oO +Fn +WM +yy +Fn +nr +Ba +Ba +oO +Fn +WM +Iz +Fn +nr +Ba +Ba +oO +Fn +Sc +FD +ZS +Wb +mw +mw +cH +aE +ZI +Of +Xp +Xp +eP +xS +KT +"} +(28,1,1) = {" +DN +zO +Ch +ZI +ZI +Wb +Wb +ZI +ZI +eh +Ch +ZI +ZI +Wb +Wb +ZI +ZI +eh +Ch +ZI +ZI +Wb +Wb +ZI +ZI +eh +yH +jc +zZ +ma +mw +mw +FV +ZI +Vm +NY +hd +eP +xS +KT +"} +(29,1,1) = {" +KT +NV +Ch +ZI +up +mw +mw +YA +ZI +eh +Ch +ZI +at +mw +DF +Ou +ZI +eh +Ch +ZI +zy +pF +mw +tz +ZI +uF +FD +Ch +eP +Ns +Bn +mw +Ns +zZ +mR +Xp +cc +ZI +eh +KT +"} +(30,1,1) = {" +KT +DN +rZ +eP +mw +Vk +lp +pF +eP +eh +Ch +eP +yE +mw +mw +IW +eP +eh +Ch +ZI +ZE +kF +DF +TM +eP +uF +FD +Ch +eP +MQ +mw +aE +Ze +ZI +BP +Xp +Bx +ZI +eh +KT +"} +(31,1,1) = {" +KT +KT +rZ +eP +mw +Sj +mw +mw +eP +eh +Ch +zZ +MP +mw +mw +ow +ZI +eh +Ch +ZI +rm +mw +mw +aA +eP +eh +FD +Ch +eP +WU +hE +Oy +nQ +ZI +ms +Xp +fd +ZI +eh +KT +"} +(32,1,1) = {" +KT +NV +rZ +zZ +mw +mw +mw +mw +ZI +eh +Ch +eP +QE +Xc +DF +WA +eP +eh +Ch +ZI +zH +cH +mw +fx +eP +eh +FD +Ch +ZI +ZI +hE +hO +PC +ZI +RR +Xp +ZI +ZI +eh +KT +"} +(33,1,1) = {" +KT +jG +Ch +ZI +eP +Wb +Rv +eP +ZI +eh +Ch +ZI +at +mw +mw +Ou +ZI +eh +Tt +ZI +PI +MU +mw +ie +ZI +eh +FD +eO +rO +ZI +eP +eP +eP +ZI +ZI +ZI +ZI +MD +Ne +KT +"} +(34,1,1) = {" +KT +zO +Ch +ZI +oc +mw +mw +AV +ZI +eh +Gj +eP +Uj +Pr +mw +Wz +eP +eh +Ch +ZI +MT +MU +IH +Xz +ZI +eh +FD +FD +vQ +lT +lT +lT +lT +lT +Yv +fA +ko +mk +zO +KT +"} +(35,1,1) = {" +KT +zO +Ch +ZI +sK +DF +mw +Bl +ZI +eh +Ch +zZ +MP +xO +nJ +MP +ZI +eh +Ch +ZI +ZI +ZI +Wb +ZI +ZI +eh +EJ +FD +FD +Ag +FD +FD +zO +zO +zO +oN +Ke +VO +NV +KT +"} +(36,1,1) = {" +KT +KT +Ch +ZI +sK +mw +IH +Ck +ZI +eh +Ch +eP +yM +mw +mw +av +eP +eh +Ch +ZI +tG +Sd +NB +aL +ZI +eh +yH +zO +zO +FD +Ag +Ag +FD +zO +yH +NV +oN +NV +oN +KT +"} +(37,1,1) = {" +KT +KT +Ch +ZI +AO +dg +kk +Qw +ZI +eh +Ch +ZI +hL +mw +mw +Ou +ZI +eh +Gj +ZI +tG +NB +NB +aL +ZI +eh +zO +Iz +Fn +nr +Ba +Ba +oO +Fn +WM +Ad +un +VO +KT +KT +"} +(38,1,1) = {" +KT +NV +Ch +ZI +ZI +QG +lX +ZI +ZI +eh +Ch +ZI +ZI +Zj +gc +ZI +ZI +eh +Ch +ZI +fk +cx +xM +ZI +ZI +eh +zO +Ch +ZI +ZI +Wb +Wb +ZI +ZI +eh +zO +NV +KT +KT +KT +"} +(39,1,1) = {" +KT +NV +dY +BQ +ZI +ZI +ZI +ZI +MD +Ne +vQ +BQ +ZI +eP +eP +ZI +MD +Ne +vQ +BQ +ZI +ZI +ZI +ZI +MD +Ne +zO +Ch +ZI +DW +pF +mw +sx +ZI +eh +zO +KT +KT +KT +KT +"} +(40,1,1) = {" +KT +jG +zO +dY +lT +lT +lT +lT +AK +ta +ta +PW +lT +lT +lT +lT +Ne +zO +zO +vQ +BS +bX +BU +lT +Ne +yH +zO +Ch +ZI +LH +mw +DF +Ro +ZI +eh +KT +KT +KT +KT +KT +"} +(41,1,1) = {" +KT +zO +KT +KT +KT +ta +ta +ta +ax +ax +ax +pk +ta +bL +yH +zO +kr +ta +pk +bL +by +by +kr +ta +bL +zO +zO +Ch +ZI +eH +ME +eH +eH +ZI +eh +KT +KT +KT +KT +KT +"} +(42,1,1) = {" +KT +KT +KT +KT +KT +KT +pk +ax +ax +ax +ax +KT +KT +nn +ta +ta +pk +pk +pk +pk +ta +ta +pk +pk +pk +bL +uZ +ks +eH +uO +cH +mw +vm +eH +eh +KT +KT +KT +KT +KT +"} +(43,1,1) = {" +KT +KT +KT +KT +KT +KT +ax +ax +ax +ax +KT +KT +KT +KT +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Wc +aR +eH +Re +mw +hr +ne +ZI +ax +KT +KT +KT +KT +KT +"} +(44,1,1) = {" +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +KT +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +KT +KT +KT +"} diff --git a/maps/templates/freelancer_ert_station.dmm b/maps/templates/freelancer_ert_station.dmm new file mode 100644 index 000000000000..44d47c7952ef --- /dev/null +++ b/maps/templates/freelancer_ert_station.dmm @@ -0,0 +1,1722 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/space/basic, +/area/space) +"r" = ( +/obj/docking_port/stationary/emergency_response/idle_port1, +/turf/open/floor/plating, +/area/space) +"t" = ( +/turf/closed/wall/r_wall/unmeltable, +/area/space) +"u" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/plating/almayer, +/area/space) +"x" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/turf/open/floor/plating/almayer, +/area/space) +"E" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/turf/open/floor/plating/almayer, +/area/space) +"U" = ( +/turf/open/floor/plating/almayer, +/area/space) +"V" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/plating/almayer, +/area/space) +"X" = ( +/turf/open/floor/plating, +/area/space) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(5,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(6,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(8,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(10,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(12,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(13,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(14,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(15,1,1) = {" +a +a +a +a +a +a +a +a +a +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(16,1,1) = {" +a +a +a +a +a +a +a +a +a +t +U +x +x +x +x +x +x +x +x +x +x +x +x +x +x +x +U +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(17,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(18,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +r +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(19,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(20,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(21,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(22,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(23,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(24,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(25,1,1) = {" +a +a +a +a +a +a +a +a +a +t +V +X +X +X +X +X +X +X +X +X +X +X +X +X +X +X +E +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(26,1,1) = {" +a +a +a +a +a +a +a +a +a +t +U +u +u +u +u +u +u +u +u +u +u +u +u +u +u +u +U +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(27,1,1) = {" +a +a +a +a +a +a +a +a +a +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +t +a +a +a +a +a +a +a +a +a +a +a +a +"} +(28,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(29,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(30,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(31,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(32,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(33,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(34,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(35,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(36,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(37,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(38,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(39,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(40,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/maps/templates/upp_ert_station.dmm b/maps/templates/upp_ert_station.dmm new file mode 100644 index 000000000000..4aff44053f78 --- /dev/null +++ b/maps/templates/upp_ert_station.dmm @@ -0,0 +1,5240 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = 16; + pixel_y = 13 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"ag" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"am" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"au" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/turf/open/space, +/area/space) +"ax" = ( +/obj/structure/surface/rack, +/obj/item/tool/weldpack{ + pixel_x = 5 + }, +/obj/item/tool/weldpack{ + pixel_x = -2 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"ay" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"aA" = ( +/obj/structure/bed/chair/comfy/lime{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"aF" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/reagent_container/food/drinks/drinkingglass{ + pixel_y = 5; + pixel_x = 8 + }, +/obj/item/storage/box/drinkingglasses, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"aH" = ( +/turf/open/floor/strata{ + icon_state = "red1" + }, +/area/adminlevel/ert_station/upp_station) +"aO" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/obj/structure/machinery/cm_vending/sorted/cargo_guns/antag_guns{ + hacked = 1; + name = "\improper Response Team Automated Guns Rack"; + use_power = 0; + use_snowflake_points = 1; + density = 0; + pixel_x = 32 + }, +/turf/open/floor/strata{ + icon_state = "blue3"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"aP" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"aS" = ( +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"aV" = ( +/obj/item/stack/catwalk, +/obj/item/stack/catwalk, +/obj/item/tool/wrench, +/obj/structure/disposalpipe/segment, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = 16; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -16; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"aW" = ( +/obj/structure/bed/chair/comfy/lime{ + dir = 8 + }, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"bd" = ( +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"bh" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"bi" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"bk" = ( +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"bp" = ( +/obj/structure/machinery/shower{ + pixel_y = 21 + }, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"bM" = ( +/obj/structure/machinery/power/apc/antag{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green4" + }, +/area/adminlevel/ert_station/upp_station) +"bY" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/recharger, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"ce" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"cj" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"cl" = ( +/obj/structure/largecrate/random/barrel/red, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"cs" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"cC" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/closet/fireaxecabinet{ + pixel_y = 29 + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"cJ" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/obj/structure/largecrate/random/secure, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"cO" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"da" = ( +/turf/closed/shuttle/elevator{ + dir = 5 + }, +/area/adminlevel/ert_station/upp_station) +"dh" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/reagent_container/food/snacks/upp{ + pixel_y = 1; + pixel_x = -3 + }, +/obj/item/reagent_container/food/snacks/upp{ + pixel_y = 10; + pixel_x = 2 + }, +/obj/item/reagent_container/food/snacks/upp{ + pixel_y = 4; + pixel_x = 3 + }, +/obj/item/reagent_container/food/drinks/bottle/vodka{ + pixel_y = 9; + pixel_x = -7 + }, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "blue1" + }, +/area/adminlevel/ert_station/upp_station) +"di" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/obj/structure/platform_decoration/kutjevo, +/turf/open/space, +/area/space) +"dz" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"dB" = ( +/turf/open/floor/strata{ + icon_state = "green4" + }, +/area/adminlevel/ert_station/upp_station) +"dH" = ( +/obj/structure/largecrate/random/secure, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"dK" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Station Hallway" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"dL" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/toy/dice{ + pixel_x = 10; + pixel_y = 9 + }, +/obj/item/toy/deck{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"dW" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"eo" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"ev" = ( +/obj/item/tool/wet_sign, +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 2; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"eT" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/reagent_container/food/drinks/bottle/vodka{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/reagent_container/food/drinks/flask/canteen{ + pixel_y = 7; + pixel_x = -5 + }, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"eU" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/turf/open/floor/prison{ + icon_state = "darkyellowfull2" + }, +/area/adminlevel/ert_station/upp_station) +"eV" = ( +/obj/structure/platform_decoration/kutjevo, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"eX" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"eY" = ( +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/turf/open/space, +/area/space) +"fc" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) +"fd" = ( +/obj/structure/largecrate/random/barrel/green, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = 16; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"fi" = ( +/obj/structure/machinery/door/airlock/almayer/medical/colony{ + name = "\improper Morgue" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"fk" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "purp3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"fA" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"fE" = ( +/obj/structure/target{ + name = "punching bag" + }, +/turf/open/asphalt/cement{ + icon_state = "cement4" + }, +/area/adminlevel/ert_station/upp_station) +"fK" = ( +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"fM" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"fR" = ( +/obj/item/reagent_container/glass/bucket/janibucket{ + pixel_x = -1; + pixel_y = 13 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"fW" = ( +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"ge" = ( +/obj/structure/closet/boxinggloves, +/turf/open/asphalt/cement{ + icon_state = "cement9" + }, +/area/adminlevel/ert_station/upp_station) +"gf" = ( +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"gt" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 5 + }, +/turf/open/floor/strata{ + dir = 2; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"gx" = ( +/obj/structure/platform_decoration/strata/metal{ + dir = 1 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"he" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"hg" = ( +/obj/structure/machinery/body_scanconsole, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"hj" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Shuttle Bay" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"hA" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/obj/structure/platform/kutjevo/smooth, +/turf/open/space/basic, +/area/space) +"hF" = ( +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"hM" = ( +/turf/open/floor/strata{ + icon_state = "damaged3" + }, +/area/adminlevel/ert_station/upp_station) +"hO" = ( +/obj/structure/prop/invuln/overhead_pipe{ + pixel_x = 12; + pixel_y = 12 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"hV" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + layer = 2.5 + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"ia" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"ie" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8; + pixel_y = 13; + pixel_x = -10 + }, +/obj/structure/machinery/portable_atmospherics/canister/phoron, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"iB" = ( +/turf/open/floor/strata{ + dir = 10; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"iJ" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Spare Prison Uniforms"; + req_one_access = null + }, +/turf/open/floor/strata{ + icon_state = "red1" + }, +/area/adminlevel/ert_station/upp_station) +"iM" = ( +/obj/structure/machinery/door/airlock/almayer/security/colony{ + dir = 8; + name = "\improper Brig Cell" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"iV" = ( +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 9 + }, +/area/adminlevel/ert_station/upp_station) +"jc" = ( +/turf/open/floor/strata{ + dir = 8; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"jg" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/computer/communications{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"jh" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/box/bodybags, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"jt" = ( +/obj/structure/lattice, +/obj/structure/platform_decoration/kutjevo, +/turf/open/space/basic, +/area/space) +"jH" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"kc" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"kf" = ( +/turf/open/floor/strata{ + dir = 9; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"ks" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"kF" = ( +/obj/structure/reagent_dispensers/water_cooler/walk_past{ + pixel_y = 18 + }, +/obj/structure/barricade/handrail/wire{ + dir = 8 + }, +/turf/open/asphalt/cement{ + icon_state = "cement2" + }, +/area/adminlevel/ert_station/upp_station) +"kN" = ( +/obj/item/tool/weldingtool/largetank, +/obj/item/clothing/glasses/welding, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"kS" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "purp3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"kT" = ( +/obj/structure/surface/rack, +/obj/item/clothing/gloves/yellow, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"lb" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"le" = ( +/obj/structure/machinery/door_control{ + pixel_y = 6; + name = "Command Shutters Button"; + id = "upp_command" + }, +/turf/closed/wall/strata_outpost/reinforced, +/area/adminlevel/ert_station/upp_station) +"lm" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/largecrate/black_market/confiscated_weaponry, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"lo" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -16; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = 16; + pixel_y = 13 + }, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"lp" = ( +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"lw" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/facepaint/black, +/turf/open/floor/strata{ + icon_state = "blue1" + }, +/area/adminlevel/ert_station/upp_station) +"mb" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4; + pixel_x = 10; + pixel_y = -1 + }, +/obj/structure/closet/crate/ammo/alt, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"me" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/clothing/suit/straight_jacket, +/obj/item/handcuffs{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/handcuffs, +/turf/open/floor/strata{ + icon_state = "red1" + }, +/area/adminlevel/ert_station/upp_station) +"mf" = ( +/obj/structure/machinery/cm_vending/sorted/medical/blood{ + req_access = null + }, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"mq" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"mr" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/vents/pump{ + dir = 1; + id_tag = "mining_outpost_pump" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"mz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"mG" = ( +/obj/structure/surface/table/reinforced/black, +/obj/structure/transmitter/rotary{ + name = "UPP Station"; + phone_category = "UPP"; + phone_id = "UPP Station"; + callable = 0 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"mJ" = ( +/obj/structure/lattice, +/obj/structure/platform/kutjevo/smooth, +/turf/open/space/basic, +/area/space) +"mP" = ( +/obj/structure/machinery/computer/cameras/almayer_network/vehicle{ + dir = 1 + }, +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"ne" = ( +/obj/structure/largecrate/random/case/double, +/turf/open/floor/strata{ + icon_state = "orange_icorner"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"nh" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/ashtray/glass, +/obj/item/trash/cigbutt/cigarbutt{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/trash/cigbutt{ + pixel_x = -10; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"nC" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"nO" = ( +/obj/structure/bed/chair, +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"om" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/asphalt/cement{ + icon_state = "cement12" + }, +/area/adminlevel/ert_station/upp_station) +"ow" = ( +/obj/item/stack/catwalk, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"oz" = ( +/turf/open/floor/strata{ + dir = 4; + icon_state = "cyan1" + }, +/area/adminlevel/ert_station/upp_station) +"oJ" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13; + icon_state = "abed" + }, +/obj/structure/bed{ + can_buckle = 0; + icon_state = "abed" + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.2 + }, +/turf/open/floor/strata{ + icon_state = "blue1" + }, +/area/adminlevel/ert_station/upp_station) +"oK" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor/colony, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"oP" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"oS" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"pb" = ( +/turf/open/floor/strata{ + dir = 2; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"pc" = ( +/obj/structure/bed/chair/comfy/lime{ + dir = 4 + }, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"pe" = ( +/obj/structure/girder/displaced, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"po" = ( +/turf/closed/wall/strata_outpost/reinforced, +/area/adminlevel/ert_station/upp_station) +"pu" = ( +/obj/effect/decal/cleanable/blood{ + layer = 3 + }, +/turf/open/asphalt/cement, +/area/adminlevel/ert_station/upp_station) +"pv" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"pK" = ( +/obj/structure/monorail{ + name = "launch track" + }, +/turf/open/floor/plating/prison, +/area/space) +"pN" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"qd" = ( +/obj/structure/machinery/bioprinter{ + stored_metal = 1000 + }, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"qi" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"qA" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/platform_decoration/strata/metal, +/obj/structure/curtain/open/black, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"qF" = ( +/obj/structure/machinery/cm_vending/sorted/medical/no_access{ + req_access = null + }, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"qH" = ( +/turf/open/floor/strata{ + icon_state = "floorscorched2" + }, +/area/adminlevel/ert_station/upp_station) +"qM" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"qU" = ( +/turf/closed/shuttle/elevator, +/area/adminlevel/ert_station/upp_station) +"qY" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 1; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"rb" = ( +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"rf" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/bedsheetbin{ + pixel_y = 6 + }, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "blue1" + }, +/area/adminlevel/ert_station/upp_station) +"rk" = ( +/obj/structure/machinery/cryopod/right{ + pixel_y = 6 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"rr" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"rs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"ry" = ( +/obj/structure/machinery/medical_pod/bodyscanner, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"rC" = ( +/obj/structure/closet/crate/ammo, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"rL" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/obj/structure/machinery/floodlight, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"rT" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/cm_vending/clothing/antag{ + name = "\improper Response Team Automated Equipment Rack"; + pixel_y = -32; + density = 0 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"rX" = ( +/obj/structure/machinery/cm_vending/gear/antag{ + hacked = 1; + name = "\improper Response Team Automated Gear Rack"; + use_snowflake_points = 1; + pixel_y = -32; + density = 0 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "blue3" + }, +/area/adminlevel/ert_station/upp_station) +"sb" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/floor/prison{ + icon_state = "darkyellowfull2" + }, +/area/adminlevel/ert_station/upp_station) +"sk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/tool/pickaxe/diamonddrill, +/turf/open/floor/plating{ + icon_state = "platebot" + }, +/area/adminlevel/ert_station/upp_station) +"sr" = ( +/obj/structure/lattice, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/turf/open/space/basic, +/area/space) +"sy" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/strata{ + icon_state = "damaged3" + }, +/area/adminlevel/ert_station/upp_station) +"sz" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "floorscorched2" + }, +/area/adminlevel/ert_station/upp_station) +"sA" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"sC" = ( +/obj/structure/pipes/vents/pump, +/turf/open/asphalt/cement, +/area/adminlevel/ert_station/upp_station) +"sG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"sI" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8; + pixel_x = -10; + pixel_y = -1 + }, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"sK" = ( +/obj/structure/machinery/optable, +/obj/item/tank/anesthetic, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/strata{ + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"sU" = ( +/obj/structure/window/framed/strata, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"sY" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"tr" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"tv" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"tx" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 5 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"tF" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"tG" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"ue" = ( +/obj/structure/lattice, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/turf/open/space/basic, +/area/space) +"uf" = ( +/obj/structure/machinery/blackbox_recorder, +/turf/open/floor/strata{ + icon_state = "green1" + }, +/area/adminlevel/ert_station/upp_station) +"uj" = ( +/turf/open/floor/strata{ + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"uE" = ( +/obj/structure/platform_decoration/strata/metal, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"uI" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"uL" = ( +/obj/structure/platform/kutjevo/smooth, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"uP" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"uW" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"va" = ( +/obj/structure/closet/crate/ammo/alt/flame, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"ve" = ( +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"vn" = ( +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"vo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/turf/open/floor/prison{ + icon_state = "darkyellowfull2" + }, +/area/adminlevel/ert_station/upp_station) +"vw" = ( +/turf/open/floor/strata{ + dir = 1; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"vH" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/trash/plate, +/obj/item/reagent_container/food/snacks/upp, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"vK" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"vS" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"vY" = ( +/obj/structure/machinery/washing_machine, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"vZ" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/platform/kutjevo/smooth, +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/turf/open/space/basic, +/area/space) +"we" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"wr" = ( +/obj/structure/platform/strata/metal{ + dir = 4 + }, +/obj/effect/decal/strata_decals/catwalk/prison{ + layer = 2.2 + }, +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 8; + icon_state = "p_stair_sn_full_cap"; + layer = 2.5 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"ws" = ( +/turf/open/floor{ + desc = "A sophisticated device that captures and converts light from the system's star into energy for the station."; + icon_state = "solarpanel"; + name = "solarpanel" + }, +/area/space) +"wu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"wA" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4; + pixel_x = 10; + pixel_y = 13 + }, +/obj/structure/machinery/door_control/brbutton{ + pixel_y = 26; + id = "funny"; + name = "Elevator Button"; + desc = "A remote control-switch for the elevator. This one seems broken." + }, +/obj/structure/closet/crate/ammo, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"wS" = ( +/obj/structure/prop/invuln/overhead_pipe{ + pixel_x = 12; + pixel_y = 12 + }, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"wY" = ( +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Station Hallway" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"xj" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"xl" = ( +/obj/structure/surface/rack, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"xo" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"xy" = ( +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/adminlevel/ert_station/upp_station) +"xF" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/tool/crowbar, +/obj/item/storage/bible, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"ya" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"ym" = ( +/turf/closed/shuttle/elevator/gears, +/area/adminlevel/ert_station/upp_station) +"yn" = ( +/obj/structure/reagent_dispensers/water_cooler/stacks{ + density = 0; + pixel_x = -9; + pixel_y = 19 + }, +/turf/open/floor/strata{ + icon_state = "green4" + }, +/area/adminlevel/ert_station/upp_station) +"yt" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/turf/open/space, +/area/space) +"yH" = ( +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"zr" = ( +/obj/structure/machinery/photocopier, +/turf/open/floor/strata{ + icon_state = "green1" + }, +/area/adminlevel/ert_station/upp_station) +"zs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"zx" = ( +/obj/structure/machinery/chem_master, +/turf/open/floor/strata{ + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"zK" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"zL" = ( +/obj/structure/largecrate/random/barrel/red, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"zQ" = ( +/obj/structure/prop/almayer/missile_tube{ + icon_state = "missiletubesouth"; + name = "\improper AT-87 ASAT launcher system"; + desc = "Cold launch tubes that can fire a few varieties of missiles out of them, the most common being the AT-87 ASAT 11K223 ?Spigot? missile used against satellites and other spacecraft and the 11K221 ?Konkurs? missile which is used for ground attack." + }, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"zX" = ( +/obj/structure/bed/chair/comfy/lime{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"zY" = ( +/obj/structure/bed/chair, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"Ae" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/attachable/bayonet/upp{ + pixel_y = 9; + pixel_x = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Ak" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/recharger, +/obj/item/device/defibrillator, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Au" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"Ay" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 5 + }, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"AI" = ( +/obj/structure/closet/crate, +/turf/open/floor/strata{ + dir = 4; + icon_state = "orange_edge" + }, +/area/adminlevel/ert_station/upp_station) +"AN" = ( +/turf/open/space/basic, +/area/space) +"AU" = ( +/obj/structure/monorail{ + dir = 9; + name = "launch track" + }, +/turf/open/space/basic, +/area/space) +"Bc" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/floor/prison{ + icon_state = "darkyellowfull2" + }, +/area/adminlevel/ert_station/upp_station) +"Be" = ( +/obj/structure/filingcabinet{ + layer = 2.9 + }, +/turf/open/floor/strata{ + icon_state = "green1" + }, +/area/adminlevel/ert_station/upp_station) +"Bp" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Bq" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan{ + dir = 8 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Bt" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan{ + dir = 1 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Bw" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/turf/open/space/basic, +/area/space) +"BH" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/fourway/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"BX" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = 16; + pixel_y = 13 + }, +/obj/structure/largecrate/random/barrel/yellow, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Ce" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/obj/item/tool/mop{ + pixel_x = -6; + pixel_y = 24 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"Cp" = ( +/turf/closed/wall/rock/brown, +/area/adminlevel/ert_station/upp_station) +"Cu" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass/colony{ + name = "Engineering"; + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Cy" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13; + icon_state = "abed" + }, +/obj/structure/bed{ + can_buckle = 0; + icon_state = "abed" + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"CG" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"CI" = ( +/turf/open/floor/strata{ + dir = 4; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"CM" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/colony{ + name = "\improper Elevator Airlock"; + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"CW" = ( +/obj/structure/machinery/cm_vending/sorted/medical/chemistry/no_access{ + req_access = null + }, +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Df" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"Dv" = ( +/turf/closed/wall/strata_outpost, +/area/adminlevel/ert_station/upp_station) +"DG" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 9; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"DK" = ( +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Eg" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/asphalt/cement{ + icon_state = "cement12" + }, +/area/adminlevel/ert_station/upp_station) +"El" = ( +/turf/closed/wall/strata_outpost/reinforced/hull, +/area/adminlevel/ert_station/upp_station) +"EA" = ( +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"ES" = ( +/obj/structure/window/framed/strata/reinforced, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"EZ" = ( +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/upp_station) +"Fh" = ( +/obj/structure/machinery/cm_vending/sorted/marine_food{ + density = 0; + pixel_y = 16 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Fj" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/folder/black, +/obj/item/tool/pen, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"FA" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"FF" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/platform/strata/metal, +/obj/structure/pipes/standard/manifold/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"FI" = ( +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"FJ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"FL" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/device/megaphone, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"FP" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Ga" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Gb" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"Gl" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + layer = 2.5 + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Gt" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Gu" = ( +/obj/structure/lattice, +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"Gw" = ( +/turf/open/floor/strata{ + dir = 2; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"GE" = ( +/turf/closed/shuttle/elevator{ + dir = 6 + }, +/area/adminlevel/ert_station/upp_station) +"GI" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"GL" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/cm_vending/sorted/tech/electronics_storage/antag, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"GN" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/platform/strata/metal, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Hb" = ( +/obj/structure/largecrate/supply, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Hc" = ( +/obj/structure/platform_decoration/kutjevo{ + dir = 4 + }, +/obj/structure/platform_decoration/kutjevo{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space) +"Hl" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Hp" = ( +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + icon_state = "red4"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"Hx" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/cm_vending/sorted/tech/comp_storage/antag, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"HR" = ( +/obj/structure/platform/strata/metal, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Is" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"IC" = ( +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/platform/kutjevo/smooth, +/turf/open/space, +/area/space) +"IK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"IQ" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/obj/structure/largecrate/black_market/confiscated_equipment, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"IT" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 2; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"IV" = ( +/obj/structure/bedsheetbin{ + icon_state = "linenbin-empty"; + name = "solar lattice"; + pixel_y = 6 + }, +/turf/open/floor/almayer_hull, +/area/space) +"IX" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/processor{ + pixel_y = 10 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Jc" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/clothing/mask/rebreather/scarf, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Jj" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"Jl" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"Jp" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Js" = ( +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "cyan1" + }, +/area/adminlevel/ert_station/upp_station) +"Jz" = ( +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/effect/decal/strata_decals/catwalk/prison, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"JB" = ( +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"JV" = ( +/obj/item/tool/wet_sign, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"JX" = ( +/obj/structure/closet/boxinggloves, +/turf/open/asphalt/cement{ + icon_state = "cement1"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"JZ" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Kb" = ( +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"Kj" = ( +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/obj/structure/platform/kutjevo/smooth, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/turf/open/floor/almayer_hull, +/area/space) +"Kn" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/asphalt/cement, +/area/adminlevel/ert_station/upp_station) +"Kq" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + name = "Toilet Shutters"; + id = "upp_toilet" + }, +/obj/structure/window/framed/strata/hull, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Kr" = ( +/obj/item/stack/catwalk, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Ks" = ( +/obj/structure/barricade/handrail/wire{ + dir = 8 + }, +/turf/open/asphalt/cement{ + icon_state = "cement3" + }, +/area/adminlevel/ert_station/upp_station) +"KF" = ( +/obj/structure/morgue, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"KL" = ( +/turf/open/floor/strata{ + dir = 5; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"KX" = ( +/obj/structure/surface/table/reinforced, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Lg" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 5 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Lk" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass/colony{ + name = "Engineering" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Ln" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/strata{ + icon_state = "orange_icorner"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"Lo" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"LB" = ( +/obj/structure/closet{ + name = "boxing attire" + }, +/obj/item/clothing/under/shorts/green, +/obj/item/clothing/under/shorts/green, +/obj/item/clothing/under/shorts/grey, +/obj/item/clothing/under/shorts/grey, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/asphalt/cement{ + icon_state = "cement1"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"LG" = ( +/obj/structure/lattice, +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) +"LI" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"LK" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"LN" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/device/flashlight, +/obj/item/attachable/bayonet/upp, +/turf/open/asphalt/cement{ + icon_state = "cement15" + }, +/area/adminlevel/ert_station/upp_station) +"LO" = ( +/obj/structure/bed/chair, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"LQ" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Station Hallway" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Mc" = ( +/obj/structure/monorail{ + name = "launch track" + }, +/turf/open/space/basic, +/area/space) +"Mi" = ( +/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/obj/structure/surface/table/reinforced, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Mk" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/belt/medical/lifesaver/upp/full, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Mt" = ( +/obj/structure/platform/kutjevo/smooth, +/turf/open/space/basic, +/area/space) +"MB" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 6 + }, +/obj/structure/barricade/handrail/wire{ + dir = 8 + }, +/turf/open/asphalt/cement{ + icon_state = "cement14" + }, +/area/adminlevel/ert_station/upp_station) +"ME" = ( +/obj/structure/surface/table/reinforced, +/obj/item/reagent_container/food/snacks/upp, +/obj/item/reagent_container/food/snacks/upp, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"MG" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"MM" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"MU" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/paper_bin{ + pixel_y = 10 + }, +/obj/item/tool/stamp{ + pixel_y = 10 + }, +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"Ne" = ( +/obj/structure/machinery/light/double/blue, +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Ni" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Ns" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Nz" = ( +/obj/structure/bed/chair/comfy/black, +/turf/open/floor/strata{ + dir = 2; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"NQ" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/turf/open/space/basic, +/area/space) +"NU" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/curtain/medical, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"OA" = ( +/obj/structure/platform/strata/metal{ + dir = 8 + }, +/obj/structure/stairs/perspective{ + color = "#6e6e6e"; + dir = 8; + icon_state = "p_stair_sn_full_cap"; + layer = 2.5 + }, +/obj/effect/decal/strata_decals/catwalk/prison{ + layer = 2.2 + }, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"OK" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/autolathe/full, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"OS" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/large_holster/machete/full, +/turf/open/floor/strata{ + dir = 1; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"Ph" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Pj" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/turf/open/floor/almayer_hull, +/area/space) +"PI" = ( +/turf/open/floor/almayer_hull, +/area/space) +"PJ" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony{ + name = "\improper Cryo Cells" + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"PQ" = ( +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + icon_state = "red4"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"PS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"PT" = ( +/obj/structure/machinery/sleep_console, +/obj/structure/pipes/vents/pump, +/turf/open/floor/strata{ + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Qu" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/turf/open/floor/strata{ + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"Qz" = ( +/obj/structure/machinery/iv_drip, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/strata{ + dir = 10; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"QG" = ( +/turf/closed/shuttle/elevator{ + dir = 10 + }, +/area/adminlevel/ert_station/upp_station) +"QO" = ( +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"QR" = ( +/obj/structure/machinery/medical_pod/sleeper, +/turf/open/floor/strata{ + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Rd" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/reagent_container/food/snacks/upp, +/turf/open/floor/strata{ + dir = 1; + icon_state = "red3" + }, +/area/adminlevel/ert_station/upp_station) +"Rf" = ( +/turf/open/asphalt/cement, +/area/adminlevel/ert_station/upp_station) +"Ry" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"RB" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 10 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"RC" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"RK" = ( +/obj/structure/machinery/iv_drip, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"RQ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating{ + icon_state = "platebot" + }, +/area/adminlevel/ert_station/upp_station) +"RR" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out" + }, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 5 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"RS" = ( +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"RU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/closed/wall/strata_outpost/reinforced, +/area/adminlevel/ert_station/upp_station) +"Sa" = ( +/obj/structure/closet/secure_closet/freezer/fridge/full, +/obj/item/reagent_container/food/condiment/enzyme, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Sf" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/curtain/open/black, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Sh" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Si" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + pixel_y = 18; + pixel_x = 2; + density = 0 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"Sj" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Sn" = ( +/turf/open/floor/strata{ + icon_state = "purp3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"Sq" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/cm_vending/sorted/tech/tool_storage/antag, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/greengrid, +/area/adminlevel/ert_station/upp_station) +"Sx" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"Sy" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"SB" = ( +/obj/structure/largecrate/random/barrel/white, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"SC" = ( +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/upp_station) +"SI" = ( +/obj/structure/surface/table/reinforced, +/obj/item/trash/plate{ + pixel_y = 2 + }, +/obj/item/trash/plate{ + pixel_y = 4 + }, +/obj/item/trash/plate{ + pixel_y = 6 + }, +/obj/item/trash/plate{ + pixel_y = 8 + }, +/obj/item/trash/plate{ + pixel_y = 10 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"SL" = ( +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"SR" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony{ + dir = 1; + name = "\improper Toilet" + }, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"SS" = ( +/obj/docking_port/stationary/emergency_response/idle_port3, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"SY" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Tb" = ( +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Station Hallway"; + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Tj" = ( +/turf/open/asphalt/cement{ + icon_state = "cement12" + }, +/area/adminlevel/ert_station/upp_station) +"Tm" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Tr" = ( +/obj/effect/landmark/wo_supplies/storage/m56d, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"Tu" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/machinery/door_control{ + pixel_y = -22; + name = "Toilet Shutters Button"; + id = "upp_toilet" + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"Ty" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Shuttle Bay" + }, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"TB" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/storage/surgical_tray, +/turf/open/floor/strata{ + dir = 2; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"TE" = ( +/obj/structure/machinery/cryopod/right, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"TG" = ( +/turf/open/floor/strata{ + icon_state = "green3" + }, +/area/adminlevel/ert_station/upp_station) +"TH" = ( +/obj/structure/surface/table/reinforced, +/obj/item/tool/kitchen/tray, +/obj/item/tool/kitchen/knife{ + pixel_x = 3 + }, +/obj/item/tool/kitchen/knife/butcher{ + pixel_x = -8 + }, +/obj/item/tool/kitchen/rollingpin, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"TI" = ( +/obj/structure/platform/strata/metal, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"TM" = ( +/obj/structure/barricade/handrail{ + dir = 1; + icon_state = "hr_kutjevo"; + name = "solar lattice" + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/obj/structure/platform/kutjevo/smooth{ + dir = 1 + }, +/obj/structure/platform/kutjevo/smooth, +/turf/open/space/basic, +/area/space) +"TQ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"TT" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Ug" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/clipboard, +/obj/item/paper, +/obj/item/tool/lighter{ + pixel_y = 2; + pixel_x = -9 + }, +/obj/item/tool/pen/blue, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 5 + }, +/area/adminlevel/ert_station/upp_station) +"Uh" = ( +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 2; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"Uk" = ( +/obj/structure/pipes/vents/pump{ + dir = 1; + id_tag = "mining_outpost_pump" + }, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Ul" = ( +/obj/structure/closet/bodybag, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 4; + icon_state = "cyan1" + }, +/area/adminlevel/ert_station/upp_station) +"Um" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan{ + dir = 8 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Uo" = ( +/turf/closed/shuttle/elevator{ + dir = 9 + }, +/area/adminlevel/ert_station/upp_station) +"Up" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical{ + desc = "A sterile mask designed to help prevent the spread of diseases. This one has already been used."; + name = "used sterile mask" + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Uu" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0; + icon_state = "abed" + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13; + icon_state = "abed" + }, +/obj/item/bedsheet/brown{ + pixel_y = 13 + }, +/obj/item/bedsheet/brown{ + layer = 3.2 + }, +/turf/open/floor/strata{ + icon_state = "blue1" + }, +/area/adminlevel/ert_station/upp_station) +"UA" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/device/flashlight/lamp/green{ + pixel_y = -3; + pixel_x = 16 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"UB" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + name = "Command Shutters"; + id = "upp_command" + }, +/obj/structure/window/framed/strata/hull, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"UE" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"UM" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/strata{ + dir = 8; + icon_state = "white_cyan2" + }, +/area/adminlevel/ert_station/upp_station) +"UU" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan, +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"UV" = ( +/obj/structure/monorail{ + dir = 4; + name = "launch track" + }, +/turf/open/space/basic, +/area/space) +"Vo" = ( +/turf/open/floor/strata{ + icon_state = "red4"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"Vp" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Vv" = ( +/obj/structure/largecrate/random/barrel/yellow, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"Vx" = ( +/turf/closed/shuttle/elevator{ + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"VA" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/prop/invuln/overhead_pipe{ + pixel_x = 12; + pixel_y = 12 + }, +/obj/structure/prop/invuln/overhead_pipe{ + pixel_x = 12 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"VI" = ( +/turf/closed/wall/rock/brown, +/area/space) +"VZ" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"Wb" = ( +/turf/open/floor/strata{ + icon_state = "blue4" + }, +/area/adminlevel/ert_station/upp_station) +"We" = ( +/obj/structure/machinery/door/poddoor/almayer/open{ + name = "Command Shutters"; + id = "upp_command"; + dir = 4 + }, +/obj/structure/window/framed/strata/hull, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Wi" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"Wj" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "floor3" + }, +/area/adminlevel/ert_station/upp_station) +"Wr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"WK" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Station Hallway" + }, +/turf/open/floor/strata{ + icon_state = "floor2" + }, +/area/adminlevel/ert_station/upp_station) +"WL" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/strata{ + dir = 4; + icon_state = "orange_edge" + }, +/area/adminlevel/ert_station/upp_station) +"WQ" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"WX" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 1 + }, +/area/adminlevel/ert_station/upp_station) +"WZ" = ( +/obj/structure/machinery/chem_dispenser, +/obj/item/reagent_container/glass/beaker/bluespace, +/turf/open/floor/strata{ + icon_state = "white_cyan3" + }, +/area/adminlevel/ert_station/upp_station) +"Xb" = ( +/obj/structure/monorail{ + dir = 5; + name = "launch track" + }, +/turf/open/space/basic, +/area/space) +"Xr" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/item/reagent_container/glass/bucket, +/obj/structure/pipes/standard/simple/hidden/cyan{ + dir = 9 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"Xy" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/cyan, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"XG" = ( +/turf/open/asphalt/cement{ + icon_state = "cement4" + }, +/area/adminlevel/ert_station/upp_station) +"XL" = ( +/obj/structure/prop/invuln/overhead_pipe{ + dir = 4; + pixel_x = -12; + pixel_y = 13 + }, +/turf/open/floor/strata{ + icon_state = "floorscorched1" + }, +/area/adminlevel/ert_station/upp_station) +"XM" = ( +/obj/structure/largecrate/random/barrel/green, +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 4 + }, +/area/adminlevel/ert_station/upp_station) +"Yy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"YH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/cyan{ + dir = 1 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/upp_station) +"YK" = ( +/obj/structure/platform/kutjevo/smooth{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) +"YO" = ( +/obj/structure/machinery/gibber{ + pixel_y = 10 + }, +/obj/structure/surface/table/reinforced, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"YS" = ( +/obj/structure/bed/roller, +/obj/structure/machinery/light/double/blue{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 2; + icon_state = "white_cyan4" + }, +/area/adminlevel/ert_station/upp_station) +"YW" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/computer/communications{ + dir = 4 + }, +/turf/open/floor/strata{ + icon_state = "green1" + }, +/area/adminlevel/ert_station/upp_station) +"YY" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Zm" = ( +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/upp_station) +"Zt" = ( +/obj/structure/largecrate/random/barrel/blue, +/turf/open/floor/prison{ + dir = 8; + icon_state = "floor_marked" + }, +/area/adminlevel/ert_station/upp_station) +"ZH" = ( +/obj/structure/lattice, +/obj/structure/platform_decoration/kutjevo{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"ZM" = ( +/obj/structure/largecrate/random/case/small, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "orange_edge" + }, +/area/adminlevel/ert_station/upp_station) +"ZR" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/trash/plate, +/obj/item/reagent_container/food/snacks/upp, +/turf/open/floor/strata{ + icon_state = "green3"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"ZS" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/strata{ + icon_state = "green4"; + dir = 8 + }, +/area/adminlevel/ert_station/upp_station) +"ZX" = ( +/turf/open/floor/strata{ + dir = 8; + icon_state = "blue3" + }, +/area/adminlevel/ert_station/upp_station) + +(1,1,1) = {" +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +GI +GI +GI +GI +Cp +Cp +Cp +Cp +GI +GI +eV +YK +YK +YK +oS +AN +AN +AN +AN +AN +AN +AN +"} +(2,1,1) = {" +AN +AN +AN +AN +GI +AN +GI +AN +AN +jt +LG +LG +LG +LG +LG +ZH +GI +GI +GI +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +VI +uL +ws +ws +ws +oP +GI +GI +GI +AN +AN +AN +AN +"} +(3,1,1) = {" +AN +AN +AN +GI +GI +GI +GI +GI +GI +mJ +ws +ws +ws +ws +ws +ue +AN +GI +Cp +Cp +Cp +Uo +qU +qU +qU +qU +QG +Cp +Mt +ws +IV +ws +NQ +Cp +Cp +GI +GI +AN +AN +AN +"} +(4,1,1) = {" +AN +AN +GI +GI +El +We +We +El +AN +mJ +ws +ws +ws +ws +ws +Cp +Cp +Cp +Cp +Cp +Cp +Vx +ie +SC +SC +sI +Vx +Cp +Cp +ws +ws +ws +Cp +Cp +Cp +Cp +GI +GI +AN +AN +"} +(5,1,1) = {" +AN +GI +GI +El +El +YW +YW +El +El +El +Gu +Gu +Gu +Gu +Cp +Cp +Cp +Cp +Cp +Cp +Cp +ym +rC +EZ +EZ +va +ym +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +GI +AN +AN +"} +(6,1,1) = {" +GI +GI +El +El +bM +cs +cs +ks +Be +El +El +El +El +El +El +Cp +Cp +Cp +Dv +fM +Dv +Vx +wA +SC +SC +mb +Vx +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +AN +AN +"} +(7,1,1) = {" +GI +El +El +yn +iV +Zm +yH +TG +zr +po +Tr +cJ +IQ +rL +po +Cp +zL +he +kN +Ns +sz +da +qU +SC +CM +qU +GE +Cp +Cp +Cp +po +fM +fM +po +po +Cp +Cp +Cp +Cp +AN +"} +(8,1,1) = {" +AN +UB +pc +aA +aA +nC +Sj +TG +uf +po +ve +cJ +lm +ve +po +zL +ag +hM +ve +XL +Kr +Wr +vn +Zm +yH +SB +po +Cp +Cp +po +po +Hx +GL +Sq +po +Cp +Cp +Cp +Cp +AN +"} +(9,1,1) = {" +AN +UB +UA +nh +MU +Vp +yH +le +po +po +Sn +kS +fk +Sn +po +SL +eU +Xy +ow +aV +sy +Wr +ve +yH +Zm +ce +po +po +fM +po +OK +Au +Gb +Ay +pe +Cp +Cp +Cp +Cp +AN +"} +(10,1,1) = {" +AN +UB +FL +mG +Fj +Vp +Zm +TG +oK +Zm +yH +uW +bh +Zm +WK +vo +Bc +qH +Cp +Cp +ay +sk +RQ +vK +yH +Ne +po +TT +vn +po +fR +Vp +JB +MG +xj +Cp +Cp +Cp +Cp +AN +"} +(11,1,1) = {" +AN +UB +aW +zX +zX +Bt +UE +UE +RS +UE +Bq +UU +Ga +UE +UE +sb +Cp +Cp +Cp +Cp +Cp +Cp +rb +rs +Zm +yH +dK +JV +JB +Lk +nC +Xr +ax +ia +po +Cp +Cp +Cp +GI +AN +"} +(12,1,1) = {" +GI +El +El +eX +bd +tr +bd +jg +po +JB +Vp +BX +fW +po +po +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +RB +UE +UE +UE +lo +UE +RS +Bp +Ce +kT +CG +po +Cp +Cp +Cp +GI +AN +"} +(13,1,1) = {" +GI +Cp +po +po +po +po +WX +qi +po +vn +Tb +po +po +po +po +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +fM +po +po +po +po +po +cC +JB +Hb +dH +po +Cp +Cp +GI +GI +AN +"} +(14,1,1) = {" +GI +Cp +po +Rd +xo +po +Si +TG +po +JB +Vp +po +cl +Zt +xl +TQ +zK +Cp +Cp +po +po +po +WL +WL +Ln +ne +ZM +AI +AI +po +tG +Cu +po +po +po +Cp +Cp +GI +AN +AN +"} +(15,1,1) = {" +Cp +Cp +po +Vo +CI +po +sY +hF +po +hO +VA +po +Hl +ya +ya +ya +ya +ya +ya +ya +sG +ya +ya +ya +ya +ya +ya +ya +RR +po +Bt +ev +jc +PQ +po +El +AN +GI +AN +AN +"} +(16,1,1) = {" +Cp +po +po +ES +iM +po +po +po +po +QO +Vp +po +mz +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +zs +po +Vp +Gw +aH +aH +zQ +El +GI +GI +AN +AN +"} +(17,1,1) = {" +Cp +po +me +vw +nC +UE +Bq +UE +LQ +UE +BH +Ty +fA +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +SS +xy +YH +Ty +Bp +Gw +FI +mP +po +El +Mc +pK +Mc +Xb +"} +(18,1,1) = {" +Cp +po +iJ +qY +Vp +Tm +we +Zm +vn +Zm +Vp +vn +PS +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +YY +vn +Vp +Gw +aH +aH +zQ +El +AN +GI +AN +UV +"} +(19,1,1) = {" +Cp +po +po +po +Sf +po +po +po +po +VZ +Vp +po +Ph +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +FJ +po +uP +Nz +DK +po +po +El +AN +GI +AN +UV +"} +(20,1,1) = {" +Cp +Cp +po +Fh +Vp +oJ +rf +Uu +po +Kb +Vp +po +SY +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +Yy +po +Vp +Gw +aH +aH +zQ +El +AN +GI +AN +UV +"} +(21,1,1) = {" +Cp +El +po +Fh +Lo +UE +mr +rT +po +wS +VA +po +Ph +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +FJ +po +uP +Gw +FI +mP +po +El +AN +GI +AN +UV +"} +(22,1,1) = {" +GI +El +vY +Zm +dW +Cy +lw +Cy +po +TG +Vp +hj +wu +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +IK +hj +Vp +Gw +aH +aH +zQ +El +Mc +pK +Mc +AU +"} +(23,1,1) = {" +GI +El +po +po +Wb +ZX +ZX +rX +po +TG +Bt +RS +fA +xy +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +xy +YH +RS +BH +IT +CI +Hp +po +El +GI +GI +AN +AN +"} +(24,1,1) = {" +GI +Cp +Cp +po +aO +oJ +dh +oJ +po +fK +Vp +po +mz +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +xy +zs +po +qA +po +po +po +po +El +Cp +GI +GI +AN +"} +(25,1,1) = {" +GI +Cp +El +po +po +po +po +po +po +vn +Tb +po +hV +sA +lb +sA +sA +sA +sA +sA +lb +sA +sA +sA +sA +sA +lb +sA +Gl +po +GN +ME +yH +yH +JZ +Dv +Cp +Cp +GI +AN +"} +(26,1,1) = {" +GI +GI +El +bp +UM +SR +Lg +yH +yH +yH +Vp +po +po +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +RU +po +po +GN +bY +dz +tx +TH +Dv +Cp +Cp +Cp +AN +"} +(27,1,1) = {" +AN +GI +Kq +Jl +Tu +Dv +Bt +UE +Jp +UE +Ga +UE +Um +UE +Bq +UE +wY +UE +UE +Ry +bi +UE +Bq +UE +bi +UE +UE +Bq +bi +UE +FF +SI +Zm +uI +KX +Dv +Cp +Cp +Cp +AN +"} +(28,1,1) = {" +AN +GI +El +Cp +Cp +Dv +fi +Dv +Dv +Jj +Df +yH +ac +LK +Vp +yH +vn +dB +EA +tF +EA +eo +am +zY +ZR +ZR +aP +tv +Zm +vn +gx +OA +cO +rr +Mi +Dv +Cp +Cp +Cp +AN +"} +(29,1,1) = {" +AN +GI +Cp +Cp +Cp +Dv +Vp +jh +Dv +Dv +Dv +Dv +Dv +Dv +uI +qM +Dv +Vv +Is +fd +XM +Ug +Ni +nO +aF +Ae +MM +tv +Zm +vn +uE +wr +Zm +FA +Sa +Dv +Cp +Cp +GI +AN +"} +(30,1,1) = {" +AN +GI +GI +Cp +Cp +fM +Vp +KF +KF +KF +Dv +YS +bk +aS +Vp +oz +Dv +Dv +Dv +Dv +Dv +dL +bd +LO +eT +vH +ZS +Bt +gf +Wj +TI +IX +Zm +pv +mq +Cp +Cp +ZH +GI +AN +"} +(31,1,1) = {" +AN +AN +AN +Cp +Cp +Cp +Vp +oz +oz +Js +Dv +qF +uj +WZ +Bt +UE +NU +UE +gt +aS +Dv +Dv +kF +Ks +Ks +MB +Jz +Bp +Tm +yH +HR +YO +kc +yH +Cp +Cp +PI +sr +AN +AN +"} +(32,1,1) = {" +AN +AN +AN +Cp +Cp +Dv +Lo +UE +UE +Uk +Dv +Mk +uj +zx +Vp +Uh +Dv +TB +DG +iB +lp +Dv +fE +Kn +sC +Eg +Dv +PJ +Dv +Dv +Dv +Dv +Cp +Cp +Cp +Mt +PI +Bw +AN +AN +"} +(33,1,1) = {" +AN +AN +AN +Cp +Cp +Dv +Dv +oz +oz +Ul +Dv +Ak +uj +QR +Vp +ry +sU +mf +Sy +sK +pb +Dv +fE +pu +Kn +Tj +Dv +cj +RC +RC +Jc +Dv +Cp +Cp +GI +uL +PI +Bw +AN +AN +"} +(34,1,1) = {" +AN +AN +AN +AN +Cp +Cp +Dv +FP +FP +FP +Dv +CW +uj +PT +Vp +hg +sU +qd +KL +uj +pb +Dv +XG +Rf +Rf +om +Dv +jH +Gt +dW +xF +Dv +Cp +GI +AN +Mt +PI +Bw +AN +AN +"} +(35,1,1) = {" +AN +AN +AN +AN +AN +Cp +Dv +Dv +fM +fM +Dv +Dv +Qu +Qz +Sh +kf +Dv +Dv +OS +Up +RK +Dv +ge +LB +JX +LN +Dv +TE +Sx +rk +Cp +Cp +Cp +GI +AN +Mt +PI +Bw +AN +AN +"} +(36,1,1) = {" +AN +AN +AN +AN +AN +Cp +Cp +Cp +Cp +Cp +Cp +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Dv +Cp +Cp +Cp +di +yt +WQ +yt +hA +PI +Bw +AN +AN +"} +(37,1,1) = {" +AN +AN +AN +AN +AN +AN +GI +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +ws +ws +ws +TM +ws +ws +ws +IC +PI +Bw +AN +AN +"} +(38,1,1) = {" +AN +AN +AN +AN +AN +AN +GI +GI +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +uL +ws +IV +ws +Kj +ws +IV +ws +Pj +PI +Bw +AN +AN +"} +(39,1,1) = {" +AN +AN +AN +AN +AN +AN +AN +GI +GI +GI +GI +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +GI +GI +uL +ws +ws +ws +vZ +ws +ws +ws +eY +LI +fc +AN +AN +"} +(40,1,1) = {" +AN +AN +AN +AN +AN +AN +AN +AN +AN +AN +GI +GI +GI +Cp +Cp +Cp +Cp +Cp +Cp +Cp +Cp +GI +GI +GI +GI +GI +AN +pN +vS +Wi +vS +Hc +vS +Wi +au +fc +AN +AN +AN +AN +"} diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/weyland_ert_station.dmm new file mode 100644 index 000000000000..171bd8d9ac6e --- /dev/null +++ b/maps/templates/weyland_ert_station.dmm @@ -0,0 +1,5844 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"al" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"ap" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"au" = ( +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"aG" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/emails{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"bf" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/tool/stamp/internalaffairs{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/paper_bin/wy, +/obj/item/tool/pen, +/obj/item/device/flashlight/lamp{ + pixel_x = 5; + pixel_y = 13 + }, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"bk" = ( +/obj/structure/machinery/medical_pod/sleeper, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"bp" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"bv" = ( +/obj/structure/machinery/vending/coffee, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"bw" = ( +/obj/structure/bed, +/obj/structure/window/reinforced/toughened{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced/toughened{ + dir = 8 + }, +/obj/item/bedsheet/orange, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"bG" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"bV" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"ck" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"cm" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"cn" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"cq" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"cr" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/shower{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"cw" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"cz" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper, +/obj/item/tool/pen, +/obj/item/tool/pen{ + pixel_y = 3 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"cK" = ( +/obj/structure/surface/table, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"cU" = ( +/turf/open/floor/corsat{ + dir = 9; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"cW" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 8 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"cX" = ( +/obj/structure/machinery/cm_vending/sorted/marine_food{ + density = 0; + pixel_y = 16 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"cY" = ( +/obj/structure/closet/firecloset/full, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "yellowcorner"; + dir = 4 + }, +/area/adminlevel/ert_station/weyland_station) +"cZ" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"dc" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"dx" = ( +/obj/structure/window/framed/corsat/indestructible/research, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_aft_medbay"; + name = "\improper Aft Medbay Shutters" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"dy" = ( +/obj/item/clothing/suit/chef/classic, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/head/chefhat, +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"dz" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"dC" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"dE" = ( +/turf/open/floor/corsat{ + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"dM" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"dO" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"dT" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/morgue, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ee" = ( +/obj/structure/bed/roller, +/turf/open/floor/corsat{ + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"eh" = ( +/obj/structure/machinery/shower{ + pixel_y = 21 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"ei" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ek" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"el" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"er" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/toy/deck, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"eA" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/clothing/gloves/yellow, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"eB" = ( +/obj/structure/machinery/cm_vending/sorted/medical/blood{ + req_access = null + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"eG" = ( +/obj/structure/machinery/photocopier, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"eJ" = ( +/obj/structure/machinery/door/airlock/almayer/security/colony{ + dir = 1; + name = "\improper Brig Cell 2" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"eO" = ( +/turf/open/floor/corsat{ + icon_state = "yellowcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"eQ" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"eX" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"fe" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters"; + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sigma" + }, +/area/adminlevel/ert_station/weyland_station) +"fl" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_10" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"fy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"fC" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"fD" = ( +/obj/structure/closet/emcloset{ + pixel_y = 15; + pixel_x = 8; + density = 0 + }, +/obj/structure/closet/firecloset/full{ + pixel_y = 15; + pixel_x = -8; + density = 0 + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"fF" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"fI" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Laundry Room" + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"fX" = ( +/turf/closed/wall/r_wall/biodome, +/area/adminlevel/ert_station/weyland_station) +"gf" = ( +/obj/structure/machinery/body_scanconsole, +/obj/structure/machinery/autodoc_console{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"gh" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"gj" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/device/taperecorder, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"gm" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"gq" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"gC" = ( +/obj/structure/closet/crate/ammo/alt/flame, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"gH" = ( +/obj/item/reagent_container/glass/bucket/janibucket{ + pixel_x = -1; + pixel_y = 13 + }, +/obj/item/tool/mop, +/obj/item/reagent_container/glass/bucket{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"gK" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"gL" = ( +/obj/structure/surface/table, +/obj/item/storage/box/wy_mre, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"gW" = ( +/obj/structure/machinery/chem_dispenser, +/obj/item/reagent_container/glass/beaker/bluespace, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ha" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/processor{ + pixel_y = 10 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"ho" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "whitetancorner" + }, +/area/adminlevel/ert_station/weyland_station) +"hu" = ( +/obj/structure/machinery/optable, +/obj/item/tank/anesthetic, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"hz" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"hC" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_center_medbay"; + name = "\improper Central Medbay Shutters" + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"hG" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"hK" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "whitetancorner" + }, +/area/adminlevel/ert_station/weyland_station) +"hM" = ( +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"hZ" = ( +/obj/structure/closet/secure_closet/brig{ + pixel_y = 16; + pixel_x = 7; + density = 0 + }, +/obj/structure/closet/secure_closet/brig{ + pixel_y = 16; + pixel_x = -7; + density = 0 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"ib" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "arrow_east" + }, +/area/adminlevel/ert_station/weyland_station) +"id" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"ik" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"in" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"iw" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin{ + pixel_y = 10 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 20; + pixel_x = 16 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"iE" = ( +/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"iJ" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"iP" = ( +/obj/structure/closet/fireaxecabinet{ + pixel_y = 32 + }, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"iT" = ( +/obj/structure/surface/table/reinforced, +/obj/item/tool/kitchen/tray, +/obj/item/tool/kitchen/knife{ + pixel_x = 3 + }, +/obj/item/tool/kitchen/knife/butcher{ + pixel_x = -8 + }, +/obj/item/tool/kitchen/rollingpin, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"iU" = ( +/obj/structure/closet/crate/internals, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"iV" = ( +/obj/structure/machinery/autolathe/full, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"jb" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"je" = ( +/obj/structure/reagent_dispensers/water_cooler/stacks{ + density = 0; + pixel_x = -9; + pixel_y = 19 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"jm" = ( +/obj/structure/machinery/cm_vending/clothing/antag{ + name = "\improper Response Team Automated Equipment Rack" + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"jz" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"jE" = ( +/obj/structure/machinery/shower{ + pixel_y = 21 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "damaged1" + }, +/area/adminlevel/ert_station/weyland_station) +"jK" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"jY" = ( +/obj/structure/machinery/medical_pod/sleeper, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ka" = ( +/obj/structure/closet/crate/medical, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"kn" = ( +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"kq" = ( +/obj/structure/bed/chair/wheelchair, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"kr" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"ky" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/clothing/suit/storage/hazardvest/blue, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"kA" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"kF" = ( +/obj/structure/machinery/power/smes, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"kM" = ( +/obj/structure/largecrate/supply/weapons/flamers, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"kO" = ( +/obj/structure/window/framed/corsat/research, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_center_medbay_or"; + name = "\improper Central Medbay Operation Room Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"kV" = ( +/obj/structure/surface/table, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"kW" = ( +/obj/structure/machinery/sleep_console{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"la" = ( +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"lh" = ( +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"ll" = ( +/obj/item/storage/firstaid/adv, +/obj/item/storage/belt/medical/lifesaver/full, +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"lo" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"lq" = ( +/obj/structure/bed{ + icon_state = "psychbed" + }, +/obj/item/bedsheet/rd, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"lv" = ( +/obj/structure/surface/table, +/obj/item/reagent_container/food/snacks/milosoup{ + pixel_y = 10 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"lw" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"lx" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellowcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"lD" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"lE" = ( +/obj/structure/bed{ + icon_state = "abed" + }, +/obj/structure/machinery/light/small/built{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"lH" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"lI" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"lS" = ( +/obj/structure/largecrate/supply/medicine/blood, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"lT" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"lU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"lY" = ( +/obj/structure/window/framed/corsat/indestructible, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"md" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"mg" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"mh" = ( +/obj/structure/surface/rack, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"mn" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"mv" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/shower{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/strata{ + dir = 8; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"mx" = ( +/obj/structure/barricade/handrail/wire{ + dir = 4 + }, +/obj/structure/largecrate/random/case/small, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"mE" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"mI" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"mV" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer{ + name = "\improper Telecomms" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"nb" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 8; + density = 0 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ng" = ( +/obj/structure/machinery/cm_vending/sorted/tech/comp_storage/antag, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"nq" = ( +/obj/structure/machinery/cm_vending/sorted/medical/chemistry/no_access{ + req_access = null + }, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ns" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "\improper Bathroom" + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "squareswood" + }, +/area/adminlevel/ert_station/weyland_station) +"nw" = ( +/obj/structure/surface/rack, +/obj/item/weapon/gun/rifle/m41a/elite{ + pixel_y = 1 + }, +/obj/item/weapon/gun/rifle/m41a/elite{ + pixel_y = -4 + }, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"nG" = ( +/obj/structure/machinery/autolathe/full, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"nI" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"nJ" = ( +/obj/item/roller, +/obj/item/roller, +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"nQ" = ( +/obj/structure/surface/table/reinforced, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"nS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + layer = 2.5 + }, +/obj/structure/closet/emcloset{ + pixel_y = 15; + pixel_x = 8; + density = 0 + }, +/obj/structure/closet/firecloset/full{ + pixel_y = 15; + pixel_x = -8; + density = 0 + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "whitecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"nT" = ( +/obj/structure/showcase{ + icon_state = "broadcast receiver"; + name = "Subspace Receiver" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"nY" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"ob" = ( +/obj/structure/closet/secure_closet/chemical{ + req_access_txt = "100" + }, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"og" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"ou" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/storage/firstaid/adv, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"oE" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"oL" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"oM" = ( +/obj/structure/window/framed/corsat/research, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_aft_medbay"; + name = "\improper Aft Medbay Shutters" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"oQ" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + dir = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"oT" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"oX" = ( +/obj/structure/surface/rack, +/obj/item/storage/fancy/vials/random, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"pa" = ( +/obj/vehicle/powerloader/ft{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"pc" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"pf" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/ammo_box/magazine/m39/ap{ + pixel_y = 8 + }, +/obj/item/ammo_box/magazine/ap, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"pq" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"pv" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"pB" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_guns/antag_guns{ + hacked = 1; + name = "\improper Response Team Automated Guns Rack"; + use_power = 0; + use_snowflake_points = 1 + }, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"pE" = ( +/turf/open/floor/corsat{ + dir = 6; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"pF" = ( +/turf/open/floor/corsat{ + icon_state = "theta" + }, +/area/adminlevel/ert_station/weyland_station) +"pK" = ( +/obj/structure/machinery/cm_vending/sorted/tech/tool_storage/antag, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"pY" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "arrow_east" + }, +/area/adminlevel/ert_station/weyland_station) +"qu" = ( +/obj/structure/machinery/door/airlock/almayer/security/colony{ + dir = 1; + name = "\improper Brig Cell 3" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"qv" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"qD" = ( +/obj/structure/surface/table/reinforced/black, +/obj/item/folder/black, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"qF" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"qL" = ( +/obj/structure/morgue, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"qV" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"rc" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/light/double/blue, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "damaged1" + }, +/area/adminlevel/ert_station/weyland_station) +"ro" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"rB" = ( +/obj/structure/machinery/cm_vending/sorted/tech/electronics_storage/antag, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"rD" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/machinery/light/double/blue{ + dir = 4; + pixel_x = 10; + pixel_y = -1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"rF" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"rK" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"rN" = ( +/obj/structure/bed/chair/comfy/orange, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"rX" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"rY" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"sg" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"sq" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"sr" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin/wy, +/obj/item/tool/pen/clicky, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"su" = ( +/obj/structure/bed/chair/office/light, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"sy" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"sA" = ( +/obj/structure/machinery/blackbox_recorder, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"sB" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"sH" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"sM" = ( +/obj/structure/machinery/vending/snack, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"sO" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"sX" = ( +/obj/structure/window/framed/corsat/research, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_center_medbay"; + name = "\improper Central Medbay Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"sY" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "whitetancorner" + }, +/area/adminlevel/ert_station/weyland_station) +"tc" = ( +/obj/structure/bed/sofa/south/white/right, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"td" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"th" = ( +/obj/structure/closet/secure_closet/surgical{ + pixel_y = 30 + }, +/obj/item/reagent_container/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/door_control{ + id = "WY_center_medbay_or"; + name = "Center Medbay Operation Room Shutters"; + pixel_x = -7; + pixel_y = 9; + req_access_txt = "1" + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"ts" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellowcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"tz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 8 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"tR" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters" + }, +/obj/structure/window/framed/corsat, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"tW" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer3/laptop/secure_data, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"tX" = ( +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"ul" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"uv" = ( +/obj/structure/machinery/recharge_station, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"uw" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + pixel_y = 21; + pixel_x = 1 + }, +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"uE" = ( +/obj/structure/surface/rack, +/obj/item/weapon/gun/rifle/m41a/elite{ + pixel_y = 1 + }, +/obj/item/weapon/gun/rifle/m41a/elite{ + pixel_y = -4 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"uR" = ( +/obj/structure/closet/secure_closet/freezer/fridge/full, +/obj/item/reagent_container/food/condiment/enzyme, +/obj/structure/machinery/light/small/built{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"uX" = ( +/obj/structure/surface/table, +/obj/item/reagent_container/food/snacks/meatsteak{ + pixel_y = -2 + }, +/obj/item/ashtray/bronze{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"va" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"vb" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Barracks"; + dir = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"vc" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"vh" = ( +/turf/open/floor/corsat{ + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"vv" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"vz" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"vN" = ( +/obj/structure/window/framed/corsat/research, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"vP" = ( +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"vU" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"vW" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"vX" = ( +/obj/structure/machinery/cryopod/right, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"wa" = ( +/obj/item/device/defibrillator/upgraded, +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"wE" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/turf/open/floor/corsat{ + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"wU" = ( +/obj/structure/surface/rack, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/pill_bottle/bicaridine{ + pixel_x = 5 + }, +/obj/item/storage/pill_bottle/kelotane{ + pixel_x = -7 + }, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"xg" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor/corsat{ + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"xh" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"xk" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/storage/fancy/cigarettes/wypacket{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/tool/lighter/zippo/gold, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"xA" = ( +/turf/open/floor/corsat{ + dir = 10; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"xD" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters"; + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sigma" + }, +/area/adminlevel/ert_station/weyland_station) +"xE" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"xN" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"xT" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"xZ" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/device/flashlight/lamp/green, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"ya" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"yb" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"yj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out" + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "whitecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"yo" = ( +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"yp" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + name = "\improper Toxicity & Poison Treatment" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_aft_medbay"; + name = "\improper Aft Medbay Shutters" + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"yD" = ( +/obj/structure/bed{ + icon_state = "psychbed" + }, +/obj/item/bedsheet/orange, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"yH" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"yM" = ( +/turf/open/floor/corsat{ + dir = 6; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"zh" = ( +/turf/open/floor/corsat{ + dir = 10; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"zC" = ( +/obj/structure/machinery/door/airlock/almayer/medical/glass/colony{ + name = "Morgue"; + req_one_access = null + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"zD" = ( +/obj/structure/surface/rack, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"zH" = ( +/obj/item/ashtray/bronze{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/trash/cigbutt/cigarbutt{ + pixel_x = 10; + pixel_y = 15 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/structure/surface/table/reinforced/black, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"zI" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/microwave{ + pixel_y = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"zN" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"zR" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "darkgreencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"zS" = ( +/obj/structure/closet/coffin, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"zT" = ( +/obj/structure/window/reinforced/toughened, +/obj/structure/closet/crate/ammo, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Ai" = ( +/obj/item/device/defibrillator/upgraded, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/door_control{ + id = "WY_center_medbay"; + name = "Center Medbay Shutters"; + pixel_x = -7; + pixel_y = 9; + req_access_txt = "1" + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Ak" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"Ax" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/closet/hydrant{ + pixel_y = -30 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"AA" = ( +/obj/structure/machinery/portable_atmospherics/powered/pump, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"AD" = ( +/obj/structure/surface/table/reinforced/black, +/obj/effect/spawner/random/facepaint, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"AG" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"AH" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"AO" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"AQ" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/closet/l3closet/virology, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"AR" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/pipes/vents/pump, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"AU" = ( +/turf/open/floor/corsat{ + icon_state = "arrow_east" + }, +/area/adminlevel/ert_station/weyland_station) +"AV" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"AY" = ( +/obj/structure/machinery/washing_machine, +/obj/structure/machinery/washing_machine{ + layer = 3.5; + pixel_y = 15 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Bk" = ( +/obj/structure/barricade/handrail/wire{ + dir = 4 + }, +/obj/structure/largecrate/random/case/double, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Bu" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/door/window{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Bx" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Bz" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Barracks" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"BG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out" + }, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "whitecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"BL" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 + }, +/turf/open/floor/corsat{ + icon_state = "theta" + }, +/area/adminlevel/ert_station/weyland_station) +"BM" = ( +/obj/structure/surface/table, +/obj/item/ashtray/glass, +/obj/item/trash/cigbutt/cigarbutt{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/trash/cigbutt{ + pixel_x = -10; + pixel_y = 13 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"BT" = ( +/obj/structure/window/framed/corsat, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"BV" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Cm" = ( +/obj/structure/showcase{ + icon_state = "hub"; + name = "Telecommunication Hub" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Cv" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Cw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/marine/colony{ + name = "Cryogenics" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Cy" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"CI" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"CK" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/toy/deck{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"CU" = ( +/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"De" = ( +/obj/structure/pipes/standard/simple/visible{ + dir = 9 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Dk" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/storage/firstaid/rad{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Dn" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Dr" = ( +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Ds" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"DF" = ( +/obj/structure/bookcase{ + icon_state = "book-5" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"DH" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/ashtray/glass, +/obj/item/trash/cigbutt/cigarbutt{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/trash/cigbutt{ + pixel_x = -10; + pixel_y = 13 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 21; + pixel_x = 16 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"DL" = ( +/obj/structure/showcase{ + icon_state = "processor"; + name = "Processor Unit" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"DO" = ( +/obj/structure/showcase{ + icon_state = "relay"; + name = "Telecommunication Relay" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"DT" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/black, +/obj/item/tool/pen/blue, +/obj/structure/machinery/light/double, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"DZ" = ( +/turf/open/floor/corsat{ + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Eg" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + name = "\improper Medical & Surgery" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_center_medbay"; + name = "\improper Central Medbay Shutters" + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"El" = ( +/obj/structure/surface/table/reinforced, +/obj/item/reagent_container/food/drinks/shaker, +/obj/structure/machinery/light/double, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Er" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"EB" = ( +/obj/structure/barricade/handrail/wire, +/turf/open/floor/corsat{ + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"EC" = ( +/turf/open/floor/corsat{ + icon_state = "yellowcorner"; + dir = 4 + }, +/area/adminlevel/ert_station/weyland_station) +"ED" = ( +/obj/structure/morgue, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"EG" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"ES" = ( +/obj/docking_port/stationary/emergency_response/idle_port2, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"EW" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/beer{ + density = 0; + pixel_y = 23 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Fr" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin{ + pixel_y = 10 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Fs" = ( +/obj/structure/window/reinforced/toughened{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"FA" = ( +/obj/structure/bed, +/obj/structure/window/reinforced/toughened{ + dir = 1; + layer = 2.9 + }, +/obj/item/bedsheet/orange, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"FD" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/tool/weldingtool/largetank, +/obj/item/clothing/glasses/welding, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"FE" = ( +/obj/structure/machinery/sleep_console, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"FO" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Gb" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Gd" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"Gg" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Gs" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Gx" = ( +/obj/item/tool/weldpack{ + pixel_x = 5 + }, +/obj/structure/surface/rack, +/obj/item/tool/weldpack{ + pixel_x = -2 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Gz" = ( +/obj/structure/pipes/standard/cap/hidden, +/obj/structure/machinery/cryo_cell{ + layer = 3.20 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"GM" = ( +/obj/structure/machinery/blackbox_recorder, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"Hc" = ( +/obj/structure/closet/medical_wall{ + pixel_x = -30 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"He" = ( +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Hh" = ( +/obj/structure/closet/crate, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"Hk" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"Hr" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"HE" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"HN" = ( +/obj/structure/bed{ + icon_state = "psychbed" + }, +/obj/item/bedsheet/captain, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Id" = ( +/obj/structure/machinery/door/airlock/almayer/medical/colony, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"If" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Ik" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + pixel_y = 23; + pixel_x = 1 + }, +/turf/open/floor/corsat{ + icon_state = "damaged1" + }, +/area/adminlevel/ert_station/weyland_station) +"Im" = ( +/obj/structure/closet/coffin, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Iv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/corsat{ + icon_state = "theta" + }, +/area/adminlevel/ert_station/weyland_station) +"IB" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"II" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"IQ" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"IV" = ( +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Jc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Jd" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Je" = ( +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"Jk" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -11 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"Jr" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Js" = ( +/obj/structure/surface/table/reinforced/black, +/obj/structure/transmitter/rotary{ + name = "Weyland-Yutani Station CiC"; + phone_category = "W-Y"; + phone_id = "W-Y Station CiC"; + callable = 0 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Jt" = ( +/obj/structure/machinery/iv_drip, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "darkgreencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Ju" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/door_control{ + id = "WY_meeting"; + name = "Meeting Room Shutters"; + pixel_x = -7; + pixel_y = 9; + req_access_txt = "1" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Jw" = ( +/obj/structure/closet/cabinet, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Jy" = ( +/obj/structure/reagent_dispensers/beerkeg{ + density = 0 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"JA" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"JK" = ( +/turf/open/floor/corsat{ + icon_state = "whitetancorner" + }, +/area/adminlevel/ert_station/weyland_station) +"JQ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Kd" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Kg" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/door_control{ + id = "WY_aft_medbay"; + name = "Aft Medbay Shutters"; + pixel_x = -7; + pixel_y = 9; + req_access_txt = "1" + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Kk" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Ku" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 22 + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"KC" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + dir = 1; + name = "\improper Meeting Room" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters"; + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sigma" + }, +/area/adminlevel/ert_station/weyland_station) +"KD" = ( +/obj/structure/barricade/handrail/wire{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"KF" = ( +/turf/open/floor/corsat{ + dir = 6; + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"KK" = ( +/obj/structure/surface/table/reinforced/black, +/obj/structure/machinery/computer/communications{ + dir = 8 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"KM" = ( +/obj/item/weapon/gun/shotgun/combat{ + pixel_y = 9 + }, +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/weapon/gun/shotgun/combat{ + pixel_y = -6 + }, +/obj/item/weapon/gun/shotgun/combat{ + pixel_y = 2 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"KP" = ( +/obj/structure/machinery/cm_vending/sorted/medical/no_access{ + req_access = null + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"KW" = ( +/obj/structure/window/framed/corsat/indestructible/security, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"KZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/item/tool/wet_sign, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Le" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/recharger, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Ls" = ( +/obj/structure/machinery/light/double/blue{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/adminlevel/ert_station/weyland_station) +"Lz" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 8 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"LF" = ( +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"LP" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Ma" = ( +/turf/open/floor/corsat{ + dir = 5; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"Mn" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_aft_medbay"; + name = "\improper Aft Medbay Shutters" + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"MA" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"MP" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"MQ" = ( +/obj/structure/pipes/unary/freezer{ + icon_state = "freezer_1" + }, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"MV" = ( +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/mask/surgical, +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"MW" = ( +/obj/structure/surface/table, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = -7; + pixel_y = 16 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"Nd" = ( +/obj/structure/window/framed/corsat/research, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_center_medbay_or"; + name = "\improper Central Medbay Operation Room Shutters" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"Nf" = ( +/obj/structure/machinery/medical_pod/bodyscanner, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Np" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/obj/effect/spawner/random/facepaint, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Nr" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/obj/effect/spawner/random/goggles/lowchance, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Ns" = ( +/obj/structure/machinery/bioprinter{ + stored_metal = 1000 + }, +/obj/structure/machinery/light/double/blue, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "darkgreen" + }, +/area/adminlevel/ert_station/weyland_station) +"NC" = ( +/obj/structure/pipes/standard/manifold/visible, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"NK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"NN" = ( +/turf/open/floor/corsat{ + icon_state = "omega" + }, +/area/adminlevel/ert_station/weyland_station) +"NO" = ( +/obj/structure/showcase{ + icon_state = "bus" + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"NR" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"NS" = ( +/obj/structure/closet/emcloset, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Oc" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "arrow_west" + }, +/area/adminlevel/ert_station/weyland_station) +"Og" = ( +/turf/open/floor/corsat{ + icon_state = "arrow_west" + }, +/area/adminlevel/ert_station/weyland_station) +"Oj" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"On" = ( +/obj/structure/machinery/vending/snack, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"Oo" = ( +/obj/structure/surface/rack, +/obj/item/storage/pill_bottle/inaprovaline{ + pixel_x = 7 + }, +/obj/item/storage/pill_bottle/dexalin, +/obj/item/storage/pill_bottle/antitox{ + pixel_x = -5 + }, +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Oq" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/gibber{ + pixel_y = 10 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Ot" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Ov" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"OD" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = 25 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"OE" = ( +/obj/structure/closet/wardrobe/chemistry_white, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"OG" = ( +/obj/structure/window/reinforced/toughened{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"OY" = ( +/obj/structure/machinery/vending/cola, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"Pc" = ( +/turf/open/floor/corsat{ + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"Pk" = ( +/obj/structure/machinery/light/double, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"PL" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "\improper Dormitories" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "squareswood" + }, +/area/adminlevel/ert_station/weyland_station) +"Qa" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "bluecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Qb" = ( +/obj/structure/machinery/shower{ + pixel_y = 21 + }, +/obj/effect/decal/strata_decals/catwalk/prison, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/strata{ + dir = 6; + icon_state = "multi_tiles" + }, +/area/adminlevel/ert_station/weyland_station) +"Qc" = ( +/obj/structure/machinery/light/double/blue{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/adminlevel/ert_station/weyland_station) +"Qk" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/closet/l3closet/virology, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Qr" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/weapon/gun/smg/m39/elite, +/obj/item/weapon/gun/smg/m39/elite{ + pixel_y = -8 + }, +/obj/item/weapon/gun/smg/m39/elite{ + pixel_y = 9 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"QI" = ( +/obj/structure/bed/sofa/south/white/left, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"QQ" = ( +/obj/structure/pipes/standard/cap/hidden, +/obj/structure/machinery/cryo_cell{ + layer = 3.20 + }, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"QR" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"QT" = ( +/turf/closed/wall/r_wall/biodome/biodome_unmeltable, +/area/adminlevel/ert_station/weyland_station) +"QV" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"QZ" = ( +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"Rb" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"Rd" = ( +/obj/structure/machinery/chem_master, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Re" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Rj" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Rr" = ( +/obj/structure/window/framed/corsat/cell/security, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Rv" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/storage/box/gloves{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/masks, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"RB" = ( +/obj/structure/machinery/shower{ + dir = 8 + }, +/obj/structure/machinery/light/small, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"RE" = ( +/obj/structure/machinery/cm_vending/gear/antag{ + hacked = 1; + name = "\improper Response Team Automated Gear Rack"; + use_snowflake_points = 1 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"RF" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"RG" = ( +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"RL" = ( +/obj/structure/window/framed/corsat, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/weyland_station) +"RQ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "theta" + }, +/area/adminlevel/ert_station/weyland_station) +"RT" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/item/tool/wet_sign, +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"RZ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"Si" = ( +/obj/structure/bed/roller, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Sr" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "brown"; + dir = 1 + }, +/area/adminlevel/ert_station/weyland_station) +"Ss" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"St" = ( +/obj/structure/closet/fireaxecabinet{ + pixel_y = 29 + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Sw" = ( +/obj/structure/pipes/standard/simple/visible{ + dir = 5 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "greencorner" + }, +/area/adminlevel/ert_station/weyland_station) +"SE" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/transmitter/rotary{ + name = "Weyland-Yutani Station Meeting Room"; + phone_category = "W-Y"; + phone_id = "W-Y Station Meeting Room"; + callable = 0 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"SH" = ( +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"SI" = ( +/turf/open/floor/almayer{ + icon_state = "tcomms" + }, +/area/adminlevel/ert_station/weyland_station) +"SJ" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/storage/firstaid/fire, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"SM" = ( +/obj/structure/machinery/vending/cigarette/colony, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"SO" = ( +/obj/structure/machinery/cryopod/right{ + pixel_y = 6 + }, +/turf/open/floor/corsat{ + icon_state = "cargo" + }, +/area/adminlevel/ert_station/weyland_station) +"SY" = ( +/obj/structure/surface/table/reinforced, +/obj/item/trash/plate{ + pixel_y = 2 + }, +/obj/item/trash/plate{ + pixel_y = 4 + }, +/obj/item/trash/plate{ + pixel_y = 6 + }, +/obj/item/trash/plate{ + pixel_y = 8 + }, +/obj/item/trash/plate{ + pixel_y = 10 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Ta" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"Tf" = ( +/obj/structure/surface/rack, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/item/stack/sheet/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Tk" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/hydrant{ + pixel_y = 30 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Tx" = ( +/obj/structure/bed/roller, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"TL" = ( +/obj/structure/machinery/medical_pod/autodoc/unskilled{ + dir = 1 + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 5; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"TN" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor/corsat{ + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"TT" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"TW" = ( +/obj/structure/largecrate/random/barrel/green, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/open/floor/corsat{ + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"Ub" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"Ud" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "browncorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Uk" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony{ + dir = 1; + name = "\improper Toilet" + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"Us" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Uu" = ( +/turf/open/floor/corsat{ + dir = 8; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"Ux" = ( +/turf/open/space/basic, +/area/space) +"UJ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"UV" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Vm" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Vp" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"VA" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"VJ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"VZ" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Wj" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"Wo" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass/colony{ + name = "Engineering" + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"Wu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/obj/structure/closet/emcloset{ + pixel_y = 15; + pixel_x = 8; + density = 0 + }, +/obj/structure/closet/firecloset/full{ + pixel_y = 15; + pixel_x = -8; + density = 0 + }, +/obj/structure/machinery/light/double{ + dir = 8; + pixel_x = -10; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/corsat{ + icon_state = "whitecorner" + }, +/area/adminlevel/ert_station/weyland_station) +"WD" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_10"; + pixel_y = 19 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"WE" = ( +/turf/open/floor/corsat{ + dir = 4; + icon_state = "whitetan" + }, +/area/adminlevel/ert_station/weyland_station) +"WU" = ( +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"WW" = ( +/obj/structure/bed/chair, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Xh" = ( +/obj/structure/window/reinforced/toughened{ + dir = 4 + }, +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"Xi" = ( +/obj/structure/pipes/standard/tank/oxygen, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Xj" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper, +/obj/item/tool/pen, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Xn" = ( +/obj/structure/surface/rack, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Xo" = ( +/obj/structure/machinery/vending/dinnerware, +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) +"Xs" = ( +/obj/structure/target, +/turf/open/floor/corsat{ + icon_state = "theta" + }, +/area/adminlevel/ert_station/weyland_station) +"Xt" = ( +/turf/open/floor/corsat{ + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Xw" = ( +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 10; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Xx" = ( +/obj/structure/coatrack{ + pixel_y = 21 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"XD" = ( +/obj/structure/machinery/vending/coffee, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "red" + }, +/area/adminlevel/ert_station/weyland_station) +"XQ" = ( +/turf/open/floor/corsat{ + icon_state = "brown"; + dir = 1 + }, +/area/adminlevel/ert_station/weyland_station) +"XR" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_x = 10; + pixel_y = 1 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "brown" + }, +/area/adminlevel/ert_station/weyland_station) +"Ya" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/closet/medical_wall{ + pixel_x = 30 + }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "white" + }, +/area/adminlevel/ert_station/weyland_station) +"Yb" = ( +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"Yj" = ( +/obj/structure/machinery/light/double, +/turf/open/floor/corsat{ + dir = 6; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"Yt" = ( +/obj/structure/bed/chair/comfy/orange, +/turf/open/floor/corsat{ + dir = 1; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"Yv" = ( +/obj/structure/surface/table/reinforced/black, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "blue" + }, +/area/adminlevel/ert_station/weyland_station) +"YB" = ( +/obj/structure/machinery/photocopier{ + pixel_y = 16; + density = 0 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/weyland_station) +"YC" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"YN" = ( +/obj/structure/bedsheetbin, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/corsat{ + icon_state = "squares" + }, +/area/adminlevel/ert_station/weyland_station) +"YZ" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + pixel_y = 21; + pixel_x = 1 + }, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"Za" = ( +/obj/structure/morgue, +/turf/open/floor/corsat{ + dir = 9; + icon_state = "green" + }, +/area/adminlevel/ert_station/weyland_station) +"Zl" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony{ + name = "\improper Fridge" + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/adminlevel/ert_station/weyland_station) +"Zn" = ( +/turf/open/floor/corsat{ + dir = 1; + icon_state = "tan" + }, +/area/adminlevel/ert_station/weyland_station) +"Zt" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + dir = 8; + icon_state = "redcorner" + }, +/area/adminlevel/ert_station/weyland_station) +"Zu" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/almayer/glass{ + dir = 1; + name = "\improper Meeting Room" + }, +/obj/structure/machinery/door/poddoor/shutters/almayer/open{ + id = "WY_meeting"; + name = "\improper Meeting Room Shutters"; + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "sigma" + }, +/area/adminlevel/ert_station/weyland_station) +"ZH" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/corsat{ + dir = 4; + icon_state = "yellow" + }, +/area/adminlevel/ert_station/weyland_station) +"ZU" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/corsat{ + icon_state = "plate" + }, +/area/adminlevel/ert_station/weyland_station) +"ZV" = ( +/obj/structure/machinery/shower{ + dir = 4 + }, +/obj/structure/machinery/light/small, +/turf/open/floor/corsat{ + icon_state = "retrosquareslight" + }, +/area/adminlevel/ert_station/weyland_station) +"ZX" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor/corsat{ + icon_state = "sterileplate" + }, +/area/adminlevel/ert_station/weyland_station) + +(1,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(2,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(3,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +QT +QT +lY +lY +lY +QT +QT +QT +lY +lY +lY +QT +QT +QT +lY +lY +lY +QT +QT +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(4,1,1) = {" +Ux +Ux +Ux +Ux +Ux +QT +QT +lY +lY +QT +QT +Wu +tz +va +va +va +lU +va +va +va +va +va +lU +va +va +va +tz +BG +QT +QT +lY +lY +QT +QT +Ux +Ux +Ux +Ux +Ux +Ux +"} +(5,1,1) = {" +Ux +Ux +Ux +Ux +Ux +QT +rN +zH +Yv +ap +fX +Vm +vz +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +vz +fy +fX +Tf +iV +ky +nG +QT +Ux +Ux +Ux +Ux +Ux +Ux +"} +(6,1,1) = {" +Ux +Ux +Ux +Ux +QT +QT +Yt +Js +gj +Ss +fX +Vm +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +ES +QZ +KZ +Wo +Dr +WU +Dr +vh +QT +QT +Ux +Ux +Ux +Ux +Ux +"} +(7,1,1) = {" +Ux +QT +lY +lY +QT +cU +BV +Dr +xh +au +fX +Vm +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +Kk +jb +dc +IQ +JQ +ts +zh +QT +lY +lY +QT +Ux +Ux +"} +(8,1,1) = {" +Ux +QT +GM +TT +vc +BV +rK +dc +eQ +au +fX +Vm +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +AV +fX +cY +Dr +ZU +Dr +ts +oL +oL +Xw +QT +Ux +Ux +"} +(9,1,1) = {" +Ux +QT +bf +KK +qD +JA +Ds +AD +al +oE +fX +Tk +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +Ax +fX +uv +eO +Bk +mx +EC +Gx +rB +vh +lY +Ux +Ux +"} +(10,1,1) = {" +Ux +QT +fX +fX +fX +dC +yo +fX +md +AG +fX +Vm +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +AV +fX +NS +EB +cn +pa +KD +pK +ng +vh +lY +Ux +Ux +"} +(11,1,1) = {" +Ux +KW +CK +xA +Rr +Ak +AO +fX +Qa +Dr +WU +Vm +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +fy +Wo +Dr +EB +ul +AU +KD +eA +yb +VZ +lY +Ux +Ux +"} +(12,1,1) = {" +Ux +KW +lE +CI +eJ +Hk +cw +fX +vv +dc +IQ +xg +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +RT +jb +dc +lx +gH +oL +II +AA +FD +vh +lY +Ux +Ux +"} +(13,1,1) = {" +Ux +QT +fX +fX +fX +hZ +AO +fX +dM +IV +fX +Vm +Gd +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +QZ +Gd +fy +fX +St +EC +Dr +eO +Re +sg +hz +Yj +QT +Ux +Ux +"} +(14,1,1) = {" +Ux +KW +lD +RF +qu +Hk +jz +fX +rX +oE +fX +nS +NK +Jc +UJ +Ya +Jc +Jc +Jc +UJ +Jc +Jc +Jc +Ya +UJ +Jc +NK +yj +fX +fX +mn +ZH +mh +fX +fX +fX +fX +QT +Ux +Ux +"} +(15,1,1) = {" +Ux +KW +lE +yM +Rr +Ma +eG +fX +md +AG +fX +fX +Oc +Og +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +AU +ib +fX +fX +fX +fX +fX +fX +fX +Za +Us +qL +QT +Ux +Ux +"} +(16,1,1) = {" +QT +QT +fX +fX +fX +fX +fX +fX +xT +Zn +fX +fX +md +AG +fX +th +Jk +Ns +fX +fX +KP +Hc +nq +fX +fX +lh +oQ +fX +fX +fX +Xn +Us +jY +vN +Dn +Dr +kn +QT +QT +Ux +"} +(17,1,1) = {" +lY +ZV +fX +Jw +aG +Yb +fX +sY +xT +JK +fX +MP +fF +TN +fX +hu +Dr +ee +Nd +eB +el +Dr +qF +nJ +fX +MP +fF +TN +oM +QQ +Sw +Dr +FE +vN +ED +xh +qF +dT +dx +Ux +"} +(18,1,1) = {" +QT +Ik +ns +He +AR +mg +PL +ik +CU +ya +fX +rY +Dr +hM +fX +MV +pq +zR +Nd +gW +Dr +YC +Dr +ll +fX +kA +Dr +xN +oM +Xi +NC +YC +kW +vN +Dn +al +Dr +Xt +dx +Ux +"} +(19,1,1) = {" +lY +ck +fX +yD +xZ +zD +fX +hK +rF +id +fX +kA +Bx +lI +fX +wa +Jt +al +Nd +Rd +Dr +al +WU +ob +fX +kA +Bx +lI +oM +Gz +NC +in +bk +vN +zS +al +dE +Im +dx +Ux +"} +(20,1,1) = {" +QT +fX +fX +fX +fX +fX +fX +cX +kV +cK +fX +kA +Dr +xN +fX +kO +kO +Id +fX +Ai +Dr +al +WU +OE +fX +dO +Dr +vP +fX +MQ +De +RQ +Xt +fX +vN +zC +vN +fX +QT +Ux +"} +(21,1,1) = {" +lY +Rb +fX +Jw +sr +xk +fX +ho +kV +lv +fX +On +Dr +xN +fX +Nf +Us +ei +SH +el +Dr +al +pF +Dr +Eg +Dr +NN +al +yp +Dr +WU +al +qF +SH +el +al +Xt +fX +QT +Ux +"} +(22,1,1) = {" +QT +Ik +ns +He +AR +mg +PL +ik +Ub +qV +fX +cz +Dr +xN +fX +gf +Dr +BL +dc +IQ +IQ +cZ +dc +dc +hC +dc +dc +iE +Mn +dc +IQ +iE +Jd +mI +mI +LP +qF +Qk +dx +Ux +"} +(23,1,1) = {" +lY +RB +fX +HN +xZ +Yb +fX +hK +rF +id +fX +er +Dr +hM +fX +TL +Gb +Dr +Dr +Dr +Dr +Dr +dE +kq +fX +AH +Dr +la +fX +iP +pF +al +ek +ou +Kg +WW +WU +oX +dx +Ux +"} +(24,1,1) = {" +QT +fX +fX +fX +fX +fX +fX +cX +kV +uX +fX +QI +Bx +lI +fX +fX +oT +Gg +MA +Si +Gg +eX +Tx +fX +fX +kA +Bx +lI +oM +iU +Dr +in +ek +SJ +Rv +WW +WU +wU +dx +Ux +"} +(25,1,1) = {" +lY +ZV +fX +Jw +aG +Yb +fX +ho +kV +MW +fX +tc +NN +Zt +td +fX +sX +sX +sX +fX +sX +sX +sX +fX +fD +UV +WU +Hh +oM +ka +Dr +ZU +ek +Dk +Le +WW +WU +Oo +dx +Ux +"} +(26,1,1) = {" +QT +Ik +ns +He +AR +mg +PL +ik +bp +Wj +fX +OY +Dr +al +fC +cq +hG +hG +hG +jK +hG +hG +hG +cq +UV +Dr +rK +TW +oM +lS +Gb +Dr +qF +Us +Us +el +dE +AQ +dx +Ux +"} +(27,1,1) = {" +lY +ck +fX +lq +xZ +DF +fX +hK +rF +id +fX +XD +Dr +Ot +iJ +QR +pv +dc +iJ +sq +If +dc +pv +Jr +If +dc +eQ +dz +fX +fX +nY +nb +nb +nb +Gg +eX +ab +fX +QT +Ux +"} +(28,1,1) = {" +QT +fX +fX +fX +fX +fX +fX +cX +BM +cK +fX +rY +bG +Rj +mE +fX +fe +KC +RL +RL +RL +xD +Zu +fX +fX +WU +vb +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +QT +Ux +"} +(29,1,1) = {" +lY +Rb +fX +Jw +tW +Xj +fX +ho +kV +gL +fX +kA +RZ +Je +fX +fX +NR +He +fl +Yb +fl +He +Pk +fX +fX +Dr +bV +og +Vp +Vp +yH +Ud +vU +gC +zT +jm +RE +pB +QT +Ux +"} +(30,1,1) = {" +QT +Ik +ns +He +AR +mg +PL +Lz +Ta +qV +fX +fX +fI +fX +fX +Xx +VJ +He +He +He +He +He +VJ +SM +fX +WU +pc +kM +KM +uE +Sr +pv +pY +Er +OG +OG +OG +OG +lY +Ux +"} +(31,1,1) = {" +lY +RB +fX +lq +xZ +DF +fX +sB +WE +KF +fX +YN +al +Dr +tR +QV +He +ro +ro +ro +ro +ro +VJ +sM +fX +Dr +Oj +pf +Qr +nw +XQ +in +Xs +Pc +FA +gK +Nr +gK +lY +Ux +"} +(32,1,1) = {" +QT +QT +fX +fX +fX +fX +fX +Bu +SY +El +fX +AY +sy +Dr +BT +YB +He +Yb +DH +Yb +Fr +iw +VJ +bv +fX +uw +zN +XR +Uu +Uu +lH +al +DZ +Fs +OG +OG +Xh +QT +QT +Ux +"} +(33,1,1) = {" +Ux +QT +EW +tX +tX +tX +tX +gm +tX +nQ +fX +fX +fX +fX +BT +WD +He +Yb +SE +aG +Ju +Yb +VJ +sA +fX +fX +fX +fX +fX +fX +fX +OD +Pc +FA +Np +gK +wE +lY +Ux +Ux +"} +(34,1,1) = {" +Ux +QT +Ku +ZX +lw +lw +lw +cm +VA +zI +fX +nT +Ls +DO +BT +je +He +sO +sO +sO +sO +sO +su +sH +fX +eh +mv +mv +cW +Bz +Gs +EG +pE +Vp +Vp +Vp +yH +lY +Ux +Ux +"} +(35,1,1) = {" +Ux +QT +QT +dy +iT +Oq +ha +Xo +gm +Jy +fX +kF +SI +NO +fX +Cv +He +He +He +HE +He +He +He +DT +fX +Qb +RG +RG +kr +WU +Dr +Pc +bw +gK +gK +gq +QT +QT +Ux +Ux +"} +(36,1,1) = {" +Ux +Ux +QT +lY +lY +lY +lY +QT +Zl +fX +fX +Cm +SI +DL +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +fX +jE +RG +RG +rc +fX +fX +fX +QT +lY +lY +lY +QT +Ux +Ux +Ux +"} +(37,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +QT +vW +tX +fX +Cm +SI +YC +mV +xE +gh +Iv +FO +gh +FO +Iv +gh +FO +Cw +kr +RG +RG +nI +Uk +IB +Cy +QT +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(38,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +QT +uR +Hr +fX +DL +Qc +qv +IQ +Kd +LF +LF +LF +LF +LF +LF +LF +LF +Ov +lo +cr +cr +rD +fX +YZ +ck +QT +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(39,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +QT +QT +QT +QT +QT +QT +QT +QT +QT +vX +lT +SO +vX +lT +vX +lT +SO +QT +QT +QT +QT +QT +QT +QT +QT +QT +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} +(40,1,1) = {" +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +QT +QT +QT +QT +QT +QT +QT +QT +QT +QT +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +"} diff --git a/maps/tents/tent_big.dmm b/maps/tents/tent_big.dmm new file mode 100644 index 000000000000..f341e67ce2aa --- /dev/null +++ b/maps/tents/tent_big.dmm @@ -0,0 +1,78 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/tent/big, +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"n" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/blocker/tent{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"s" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"x" = ( +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"G" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"J" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/blocker/tent{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"O" = ( +/turf/template_noop, +/area/template_noop) +"S" = ( +/obj/structure/blocker/tent{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +O +J +v +a +"} +(2,1,1) = {" +O +S +O +x +"} +(3,1,1) = {" +O +n +s +G +"} diff --git a/maps/tents/tent_cmd.dmm b/maps/tents/tent_cmd.dmm new file mode 100644 index 000000000000..e7260ca9bccf --- /dev/null +++ b/maps/tents/tent_cmd.dmm @@ -0,0 +1,73 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/bed/chair, +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/bed/chair, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/surface/table, +/obj/structure/transmitter/tent{ + phone_category = "Command"; + phone_id = "Ground Command"; + pixel_x = -2; + pixel_y = 6 + }, +/turf/template_noop, +/area/template_noop) +"p" = ( +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/surface/table, +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/machinery/computer/overwatch/tent, +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/structure/tent/cmd, +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +p +A +a +X +"} +(2,1,1) = {" +p +o +d +v +"} diff --git a/maps/tents/tent_med.dmm b/maps/tents/tent_med.dmm new file mode 100644 index 000000000000..fcb446a68e25 --- /dev/null +++ b/maps/tents/tent_med.dmm @@ -0,0 +1,68 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/bed/roller, +/turf/template_noop, +/area/template_noop) +"p" = ( +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/bed/roller, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med/tent{ + pixel_y = 22 + }, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/tent/med, +/obj/structure/machinery/iv_drip, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +p +A +a +X +"} +(2,1,1) = {" +p +o +v +H +"} diff --git a/maps/tents/tent_reqs.dmm b/maps/tents/tent_reqs.dmm new file mode 100644 index 000000000000..7d9cf926e698 --- /dev/null +++ b/maps/tents/tent_reqs.dmm @@ -0,0 +1,108 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"c" = ( +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/structure/blocker/tent, +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/filingcabinet, +/turf/template_noop, +/area/template_noop) +"k" = ( +/obj/structure/surface/rack, +/turf/template_noop, +/area/template_noop) +"m" = ( +/obj/structure/tent/reqs, +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/tent_curtain, +/turf/template_noop, +/area/template_noop) +"n" = ( +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/blocker/tent{ + dir = 4 + }, +/obj/structure/machinery/cm_vending/sorted/vehicle_supply/tent, +/turf/template_noop, +/area/template_noop) +"w" = ( +/obj/structure/blocker/tent{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"B" = ( +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/bed/chair, +/obj/structure/transmitter/tent{ + pixel_y = 30; + pixel_x = 16; + phone_category = "Command"; + phone_id = "Ground Requisitions" + }, +/turf/template_noop, +/area/template_noop) +"J" = ( +/obj/structure/blocker/tent{ + dir = 1 + }, +/obj/structure/machinery/computer/ordercomp/tent{ + pixel_y = 25 + }, +/turf/template_noop, +/area/template_noop) +"S" = ( +/obj/structure/blocker/tent{ + dir = 8 + }, +/obj/structure/surface/table, +/turf/template_noop, +/area/template_noop) +"U" = ( +/obj/structure/blocker/tent, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +a +B +S +m +"} +(2,1,1) = {" +a +J +a +c +"} +(3,1,1) = {" +a +w +U +k +"} +(4,1,1) = {" +a +n +d +k +"} diff --git a/maps/whiskey_outpost_v2.json b/maps/whiskey_outpost_v2.json index f55f14d73ca6..4c8f2f6551e4 100644 --- a/maps/whiskey_outpost_v2.json +++ b/maps/whiskey_outpost_v2.json @@ -7,6 +7,7 @@ "perf_mode": 31, "disable_ship_map": true, "nightmare_path": "maps/Nightmare/maps/Whiskey_Outpost_v2/", + "camouflage": "desert", "gamemodes": [ "Whiskey Outpost" ] diff --git a/strings/marinetips.txt b/strings/marinetips.txt index 620dc8710400..cf808884f1e5 100644 --- a/strings/marinetips.txt +++ b/strings/marinetips.txt @@ -28,7 +28,7 @@ Examine your gun and click [See combat statistics] to view information such as d Xenomorphs who resist while on fire are stunned for some time and emit light. Use that time to catch up and finish them off! When you have shrapnel embedded, take out your boot knife and use it in your hand to rip them out of your body. If your weapon has a bayonet, you can manually pry open unpowered doors by clicking on them with the gun. Click on the door again to close it. UPP bayonets can pry them open quicker. -Items on the floor can be shot. Shoot a misthrown HEDP away to save your buddies! +Items on the floor can be shot. Shoot a poorly thrown HEDP away to save your buddies! You can hold a bayonet or throwing knife on your mask slot. Always be prepared. Xenomorphs can't apply huggers to marines if they're on fire. Dragging a Nanomed onto yourself instantly gives a Health Analyzer report. Always know what's wrong with you. @@ -46,18 +46,18 @@ By right clicking your medical belt and selecting "toggle belt mode", you can ta You can put screwdrivers, cigarettes, and some other things in your second ear slot! Pilots : there is one of each engine upgrade in the hangar at the start of the round, saving you the point cost of having to print out a pair of each. You can use a hand labeler (as found in squad prep rooms) to name your equipment and make it less likely to be stolen. -You can use a health analyser in hand (Z key) to check the last scan readout from it. +You can use a health analyzer in hand (Z key) to check the last scan readout from it. Holocards are a useful triage tool for doctors and medics. Ensure you assign them (examine the marine with shift-click and select an appropriate holocard) to marines who have taken damage that cannot be healed without surgery. (Hint : major organ damage or larval infection = red card!) Escape pods are designed for only three occupants - more than that, or if a larger xenomorph is in the pod, and it will malfunction and blow up on launch. A misloaded OB can deviate severely from the intended target area - ensure you load them correctly! -The XO and CO are trained in powerloader use and engineering, and can load the OB. +The XO and CO are trained in Power Loader use and engineering, and can load the OB. You can change what your SL tracker beacon is tracking by right clicking on your headset and clicking "Switch Tracker Target". Boilers emit light - not every glow from around the corner is friendly! You can carry a variety of items inside your helmet - from gauze and cigarettes to flares and screwdrivers. CIC staff can track every USCM-aligned person via the suit sensors console and overwatch console - useful for finding escaped prisoners or dead marines. When the M7 RPG is fired, it creates a substantial shockwave behind it that can stun and harm marines standing too close. Watch your backblast! Remember that you need to put a defibrillator's paddles away in order to store it. -W-Y PMCs do not have marine IFF. Don't fire smartguns through them! +W-Y PMCs do not have marine IFF. Don't fire Smartguns through them! To talk on multiple radio channels at once, put a COMMA [,] before your message and add up to four prefixes. E.g, ,abcd talks on all squad channels at once. Put .w or :w before your message to whisper. Another way to whisper is to use the verb "whisper" in the IC tab or command bar. For Vehicle Crewmen : it is often safer to repair the parts of your APC or tank inside the vehicle than outside it. @@ -75,13 +75,13 @@ Intel Officers can be put in a squad by going to CIC and requesting it. Any marine can perform CPR. On dead marines, this will increase the time they have until they become unrevivable. If you've been pounced on and your squad is unloading into the target, you can hit the 'rest' button to stay down so you don't get filled with lead after getting up. You can check the landing zone as a marine in the status panel. -Functioning night vision goggles can be recharged with batteries. Broken night vision goggles can be repaired by an Engineer with a screwdriver. Not the loadout ones though, those are unfixable and unchargeable. -You can put a pistol belt on your suit slot. (Just grab a rifle instead..) +Functioning night vision goggles can be recharged with batteries. Broken night vision goggles can be repaired by an Engineer with a screwdriver. Not the loadout ones though, those cannot be fixed. +You can put a pistol belt on your suit slot. (Just grab a rifle instead.) Alt-clicking the Squad Leader tracker lets you track your fireteam leader instead. -Armor has a randomized reduction in effectiveness, and does not protect the digits. Take the wiki damage values as a best case scenario. +Armor has a randomized reduction in effectiveness, and does not protect the digits. Take the wiki damage values as a best-case scenario. You can click on your Security Access Tuner (multitool) in your hand to locate the area's APC if there is one. Clicking on your sprite with help intent will let you check your body, seeing where your fractures and other wounds are. Armor has insulative properties - taking it off will help you cool off and take less damage faster if you've been set on fire. -Both foldable cades & plasteel cades if loosened and folded down can be transported in crates! In this way, you can use the crate as a portable breach-repair kit, or dragged (or carried via Powerloader) to an unsecure area for quick defensive set up. +Both foldable cades & plasteel cades if loosened and folded down can be transported in crates! In this way, you can use the crate as a portable breach-repair kit, or dragged (or carried via Power Loader) to an unsecure area for quick defensive set up. The fuel tank pouch doesn't just carry fuel for an incinerator- they can also carry full-size extinguishers. Toolbelts & tool pouches also may hold miniature extinguishers. -The M2C heavy machinegunner belt rig can also carry C4, breaching charges, and most tools. +The M2C heavy machine gunner belt rig can also carry C4, breaching charges, and most tools. diff --git a/strings/metatips.txt b/strings/metatips.txt index 4b69af764aeb..f694da02b5bf 100644 --- a/strings/metatips.txt +++ b/strings/metatips.txt @@ -1,13 +1,13 @@ -Remember hotkeys and marcos can be customized to your liking. Hotkeys can be accessed in your preferences, and macros can be edited in the Byond macro editor, available in the top left drop down menu (click the Byond logo in the corner of the game window). -If you're unsure about a gameplay mechanic, use the 'mentorhelp' verb in the Admins tab to ask veteran players on the subject. +Remember hotkeys and macros can be customized to your liking. Hotkeys can be accessed in your preferences, and macros can be edited in the Byond macro editor, available in the top left drop down menu (click the Byond logo in the corner of the game window). +If you're unsure about a gameplay mechanic, use the 'mentorhelp' verb in the Admin tab to ask veteran players on the subject. Try not to get too mad about dying. We’re all here to have fun. After dying, ask yourself what you did wrong and make a mental note to not make the same mistake again. Communication, be it from a marine to a marine, a drone to the queen, or command to everyone, is vital and information on flanks can change how the entire round plays out. As an alien or marine, be careful of the flank, regardless of if the push is going well or stalling out. Half of getting good is knowing to be aggressive. The other half is knowing when not to be aggressive. -Alt-click a storage item to draw the last item in it (last non-weapon if it's a weapon belt). Middle-click a storage item to inmediately open it, and middle-click structures to attempt to vault them. +Alt-click a storage item to draw the last item in it (last non-weapon if it's a weapon belt). Middle-click a storage item to immediately open it, and middle-click structures to attempt to vault them. Use "North, South, West, East" when referring to locations in-game rather than "up, down, left, right". You shouldn't ignore what your allies are up to. Sometimes they can be organizing a flank in hivemind/radio, sometimes they can be walking up behind you with a slug-loaded shotgun. Either way, it pays to be alert to what they're doing, as much to as what the enemies are. -The Wiki (https://cm-ss13.com/wiki) is a very useful repository of information about the game, such as weapons, equipment, xenomorph castes and their strains. It may not be fully up to date the majority of the time, but the basics are usually accurate. +The Wiki (https://cm-ss13.com/wiki) is a very useful repository of information about the game, such as weapons, equipment, xenomorph castes and their strains. It may not be fully up to date much of the time, but the basics are usually accurate. As an observer, you may see how much remaining hijack time is left in the status panel. Embrace the suck. diff --git a/strings/xenotips.txt b/strings/xenotips.txt index 4e98be577a61..2ca2964ae2d5 100644 --- a/strings/xenotips.txt +++ b/strings/xenotips.txt @@ -1,6 +1,6 @@ Acid pillars can be sneakily placed next to a door in order to surprise marines. -Alien structures like clusters, walls, or pillars are absolutely vital to your victory, be it as cover or to delay and funnel marines. -Always thank your drones and hivelords for supporting the hive! +Alien structures like clusters, walls, or pillars are vital to your victory, be it as cover or to delay and funnel marines. +Always thank your drones and Hivelords for supporting the hive! Don't underestimate survivors. They have no armor but that makes them very fast, they're inherently hardier than marines and have various tricks up their sleeves. While the Queen is de-ovied, the hive does not gain evolution points. Try out new castes or strains that you might have passed up initially. You might find them to be surprisingly fun. @@ -16,21 +16,21 @@ If a fellow alien is stunned, be sure to drag them to safety. On help intent, click a xenomorph who is on fire to pat them out. This works on marines too! Frenzy increases your speed and damage, Recovery increases your health regeneration, and Warding increases the time you have until you bleed out in critical health. Remember that, as a Xenomorph, you can fully disable your night-vision. This helps put into perspective how hidden your position is to marines onscreen. -You can devour bursted corpses in order to transport them to the Spawn Pool or Egg Morpher easier. +You can devour burst corpses in order to transport them to the Spawn Pool or Egg Morpher easier. The bigger you are, the more time it'll take to enter a tunnel. -Drag yourself onto a hole in a wall as a medium-sized or smaller xeno to pass through it. +Drag yourself onto a hole in a wall as a medium-sized or smaller Xeno to pass through it. Claymores have directional explosions. Set them off early by slashing them from behind. If you have difficulty clicking marines, try using Directional Slashing, though there's no directional slashing for abilities. You can diagonally pounce through the corners of fire as a Lurker or Runner without getting ignited. -When playing as xeno, consider aiming at the limbs instead of the chest. Marine armour doesn't protect the arms and legs as well as it does the body. -As xeno, you can break Night-Vision goggles that some marines wear on their helmets. Just aim for the head and slash until the goggles shatter. +When playing as Xeno, consider aiming at the limbs instead of the chest. Marine armor doesn't protect the arms and legs as well as it does the body. +As Xeno, you can break Night-Vision goggles that some marines wear on their helmets. Just aim for the head and slash until the goggles shatter. Pounces are ineffective on marines who are laying down. -You may rest inmediately during a pounce to pounce straight through mobs. It's not very practical or useful though. -Pouncing someone who is buckled to a chair will still stun them, but you won't jump into their tile and they will not be knocked to the grund. -Starshell dust from said grenades is just as meltable as normal flares. -You can join the hive as a living facehugger by clicking on the hive's eggmorpher. This works on other hives too.. -Playable facehuggers can leap onto targets with a one-second windup, but this will only infect them if they are adjacent to it. Otherwise, it will simply knock them down for a small duration. -As a facehugger, you cannot talk in hivemind, but you can still open Hive Status and overwatch your sisters. This can be useful if you're locating other facehuggers, flanker castes, or trying to learn from experienced facehugger players. +You may rest immediately during a pounce to pounce straight through mobs. It's not very practical or useful though. +Pouncing someone who is buckled to a chair will still stun them, but you won't jump into their tile and they will not be knocked to the ground. +Star shell dust from said grenades is just as meltable as normal flares. +You can join the hive as a living Facehugger by clicking on the hive's Eggmorpher. This works on other hives too.. +Playable Facehuggers can leap onto targets with a one-second windup, but this will only infect them if they are adjacent to it. Otherwise, it will simply knock them down for a small duration. +As a Facehugger, you cannot talk in hivemind, but you can still open Hive Status and overwatch your sisters. This can be useful if you're locating other Facehuggers, flanker castes, or trying to learn from experienced Facehugger players. Shift-clicking the Queen indicator will tell you what area you are in, on the map. -Resisting on a water tile will inmediately put out fires. Make sure you're alone though - It's usually better to let a friendly Xenomorph pat you out than it is to expose yourself to open water. +Resisting on a water tile will immediately put out fires. Make sure you're alone though - It's usually better to let a friendly Xenomorph pat you out than it is to expose yourself to open water. You can filter out the Xenomorphs displayed in hive status by health, allowing you to look only for wounded sisters. diff --git a/tgui/packages/tgui/interfaces/NuclearBomb.js b/tgui/packages/tgui/interfaces/NuclearBomb.js index 54793d4a5380..b29bc17e0779 100644 --- a/tgui/packages/tgui/interfaces/NuclearBomb.js +++ b/tgui/packages/tgui/interfaces/NuclearBomb.js @@ -5,13 +5,22 @@ import { Window } from '../layouts'; export const NuclearBomb = (_props, context) => { const { act, data } = useBackend(context); - const cantNuke = (!data.anchor, !!data.safety); + const cantNuke = (!data.anchor, !!data.safety, !data.decryption_complete); + const cantDecrypt = (!data.anchor, data.decryption_complete); return ( - +
+ + + {data.decryption_complete + ? 'Decryption complete.' + : `Decryption time left : + ${data.decryption_time} seconds`} + + {data.timing @@ -71,6 +80,25 @@ export const NuclearBomb = (_props, context) => { /> )} + + {(!data.decrypting && ( + act('toggleEncryption')} + /> + )) || ( + act('toggleEncryption')} + /> + )} + {(!data.timing && ( { return ( - Wielded accuracy: {accuracy} / {accuracy_max} + Wielded accurate range: {accuracy} / {accuracy_max} {!two_handed_only ? ( @@ -250,7 +250,7 @@ const Accuracy = (props, context) => { - Unwielded accuracy: {unwielded_accuracy} / {accuracy_max} + Unwielded accurate range: {unwielded_accuracy} / {accuracy_max} ) : null} @@ -258,7 +258,7 @@ const Accuracy = (props, context) => { - Minimum accuracy: {min_accuracy} + Minimum accurate range: {min_accuracy} ) : null} diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 154629ff3c8d..4a223fe3d3c5 100644 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -166,9 +166,10 @@ part "map json sanity" for json in maps/*.json do map_path=$(jq -r '.map_path' $json) + override_map=$(jq -r '.override_map' $json) while read map_file; do filename="maps/$map_path/$map_file" - if [ ! -f $filename ] + if [ ! -f $filename ] && [ -z "$override_map" ] then echo echo -e "${RED}ERROR: found invalid file reference to $filename in _maps/$json.${NC}" diff --git a/tools/localhost-asset-webroot-server.py b/tools/localhost-asset-webroot-server.py new file mode 100644 index 000000000000..31a85a4eb4b5 --- /dev/null +++ b/tools/localhost-asset-webroot-server.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +from http.server import HTTPServer, SimpleHTTPRequestHandler +import os + +class CORSRequestHandler(SimpleHTTPRequestHandler): + def end_headers(self): + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Access-Control-Allow-Methods', 'GET') + self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate') + return super(CORSRequestHandler, self).end_headers() + +os.makedirs('../data/asset-store/', exist_ok=True) +os.chdir('../data/asset-store/') +httpd = HTTPServer(('localhost', 58715), CORSRequestHandler) +httpd.serve_forever()