diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index c66b16031c63..cfe94738eebf 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -159,6 +159,10 @@ There is no strict process when it comes to merging pull requests. Pull requests
* After leaving reviews on an open pull request, maintainers should convert it to a draft. Once you have addressed all their comments to the best of your ability, feel free to mark the pull as `Ready for Review` again.
+* We ask that you refrain from pinging staff about getting your pull request reviewed until after it is automatically marked stale pending review. If it ends up stale exempt, give it a week, but usually this situation will be explained such as when a relevant maintainer is currently unavailable.
+
+* Whenever sprites are added, please include screenshots or video(s) of them in game in the pull request description.
+
### A note on balance impacting PRs
Certain PRs, such as those which directly change number values (i.e. health, recoil, damage) or add large pieces of content to the game (i.e. a new gun, a new dropship weapon, or a new xeno structure) can have the potential to highly impact game balance or gameflow.
@@ -174,7 +178,7 @@ If you are porting features/tools from other codebases, you must give them credi
Regarding sprites & sounds, you must credit the artist and possibly the codebase.
## Things you can work on
-The following list is non-exhaustive, but should give you a good idea of what the dev team would like to see in Pull Requests.
+The following list is non-exhaustive, but should give you a good idea of what we would like to see in Pull Requests.
### Spriting
@@ -199,7 +203,7 @@ The following list is non-exhaustive, but should give you a good idea of what th
- Bug fixes and inconsistency fixes
**A note on new maps.**
-Entirely new maps are generally considered to be stepping stones into the Development team’s mapping dept. proper. However, making a new map is a months long process that requires dedication and constant communication and oversight from mappers on the Maintainer team. Mapping, like spriting and coding is an acquired skill, and it is highly likely your first map is going to suck. Maps are fluid entities that are never absolutely complete, don’t wed yourself to your initial layout, always be prepared to remap half the project when going in.
+Entirely new maps are generally considered to be stepping stones into the maintainers’ mapping dept. proper. However, making a new map is a months long process that requires dedication and constant communication and oversight from mappers on the Maintainer team. Mapping, like spriting and coding is an acquired skill, and it is highly likely your first map is going to suck. Maps are fluid entities that are never absolutely complete, don’t wed yourself to your initial layout, always be prepared to remap half the project when going in.
### Coding
@@ -216,7 +220,7 @@ Entirely new maps are generally considered to be stepping stones into the Develo
- New TGUI
## What we don't want
-The following list is non-exhaustive, but should give you a good idea of what the dev team don't want to see in Pull Requests.
+The following list is non-exhaustive, but should give you a good idea of what we don't want to see in Pull Requests.
### Spriting
- Resprites of recently updated content, such as uniforms, guns, marine armor
@@ -236,7 +240,10 @@ The following list is non-exhaustive, but should give you a good idea of what th
- Player-facing HTML UIs
- Prior denied content/PRs (without approval)
-Remember that the following lists are not exhaustive. And you can freely contribute an PR with content that can be shuffled into the “What we don’t want” category, and still get it merged. It is just unlikely without prior talk/approval from a maintainer.
+### Frozen
+- See pinned [issues](https://github.com/cmss13-devs/cmss13/issues) for anything that requires explicit permission.
+
+Remember that the list is not exhaustive. And you can freely contribute an PR with content that can be shuffled into the “What we don’t want” category, and still get it merged. It is just unlikely without prior talk/approval from a maintainer.
## Banned content
Do not add any of the following in a Pull Request or risk getting the PR closed:
diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm
index 6617c5aafcee..e667ccf6db3f 100644
--- a/code/__DEFINES/__game.dm
+++ b/code/__DEFINES/__game.dm
@@ -105,6 +105,7 @@
#define SOUND_ADMIN_ATMOSPHERIC (1<<7)
#define SOUND_ARES_MESSAGE (1<<8)
#define SOUND_OBSERVER_ANNOUNCEMENTS (1<<9)
+#define SOUND_FAX_MACHINE (1<<10)
//toggles_chat
#define CHAT_OOC (1<<0)
@@ -159,7 +160,7 @@
#define TOGGLES_LANGCHAT_DEFAULT (LANGCHAT_SEE_EMOTES)
-#define TOGGLES_SOUND_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|SOUND_INTERNET|SOUND_ADMIN_MEME|SOUND_ADMIN_ATMOSPHERIC|SOUND_OBSERVER_ANNOUNCEMENTS)
+#define TOGGLES_SOUND_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|SOUND_INTERNET|SOUND_ADMIN_MEME|SOUND_ADMIN_ATMOSPHERIC|SOUND_OBSERVER_ANNOUNCEMENTS|SOUND_FAX_MACHINE)
#define TOGGLES_FLASHING_DEFAULT (FLASH_ROUNDSTART|FLASH_ROUNDEND|FLASH_CORPSEREVIVE|FLASH_ADMINPM|FLASH_UNNEST)
diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index 3137088d1c90..29895088200c 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -48,6 +48,7 @@ GLOBAL_LIST_INIT(note_categories, list("Admin", "Merit", "Whitelist"))
#define OBSERVER_JMP(observer, atom) atom ? "(JMP)" : ""
#define ARES_MARK(user) "(MARK)"
#define ARES_REPLY(user, ref) "(RPLY)"
+#define ADMIN_VIEW_BUG_REPORT(datum) "VIEW REPORT"
/atom/proc/Admin_Coordinates_Readable(area_name, admin_jump_ref)
var/turf/T = get_turf(src)
diff --git a/code/__DEFINES/defenses.dm b/code/__DEFINES/defenses.dm
index db615c2a0c78..a45802bc3f9e 100644
--- a/code/__DEFINES/defenses.dm
+++ b/code/__DEFINES/defenses.dm
@@ -22,6 +22,12 @@
#define DEFENSE_BELL_TOWER 4
#define DEFENSE_TESLA_COIL 5
+// Defines for /obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone
+#define TURRET_BATTERY_STATE_OK 0
+#define TURRET_BATTERY_STATE_LOW 1
+#define TURRET_BATTERY_STATE_CRITICAL 2
+#define TURRET_BATTERY_STATE_DEAD 3
+
// What range the generator has to be in or defenses has to be in.
#define GEN_SEARCH_RANGE 5
#define GEN_PLASTEEL_COST 10
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index 5b295e68069f..bedc8234d9c9 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -77,13 +77,13 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_AUXILIARY_OFFICER "Auxiliary Support Officer"
#define JOB_CAS_PILOT "Gunship Pilot"
#define JOB_DROPSHIP_PILOT "Dropship Pilot"
+#define JOB_TANK_CREW "Tank Crew"
#define JOB_DROPSHIP_CREW_CHIEF "Dropship Crew Chief"
-#define JOB_CREWMAN "Vehicle Crewman"
#define JOB_INTEL "Intelligence Officer"
#define JOB_DROPSHIP_ROLES /datum/timelock/dropship
#define JOB_DROPSHIP_ROLES_LIST list(JOB_DROPSHIP_CREW_CHIEF, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT)
#define JOB_AUXILIARY_ROLES /datum/timelock/auxiliary
-#define JOB_AUXILIARY_ROLES_LIST list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL)
+#define JOB_AUXILIARY_ROLES_LIST list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_INTEL, JOB_TANK_CREW)
#define JOB_POLICE "Military Police"
#define JOB_WARDEN "Military Warden"
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 3da1aa8d24c0..bea1d7975688 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -25,6 +25,7 @@
#define SMOKE_RANK_MED 3
#define SMOKE_RANK_HIGH 4
#define SMOKE_RANK_BOILER 5
+#define SMOKE_RANK_MAX 6
// What kind of function to use for Explosions falling off.
@@ -162,6 +163,7 @@
#define MATRIX_NVG 1
#define MATRIX_WIDE 2
+#define RESEARCH_UPGRADE_NULL null
#define RESEARCH_UPGRADE_EXCLUDE_BUY -2
#define RESEARCH_UPGRADE_CATEGORY -1 //lord forgive me
#define RESEARCH_UPGRADE_TIER_1 1
diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm
index 97fbc64a9da4..7536b7576d8d 100644
--- a/code/__DEFINES/mob_hud.dm
+++ b/code/__DEFINES/mob_hud.dm
@@ -13,6 +13,7 @@
#define XENO_HOSTILE_SLOW "13" // xeno-inflicted slow. used by a bunch of MOBA xenos stuff
#define XENO_HOSTILE_TAG "14" // dancer prae 'tag'
#define XENO_HOSTILE_FREEZE "15" // Any xeno-inflifcted root
+#define XENO_EXECUTE "28" // Execute thershold, vampire
#define HEALTH_HUD_XENO "16" // health HUD for xenos
#define PLASMA_HUD "17" // indicates the plasma level of xenos.
@@ -45,6 +46,7 @@
#define MOB_HUD_FACTION_PMC 15
#define MOB_HUD_HUNTER 16
#define MOB_HUD_HUNTER_CLAN 17
+#define MOB_HUD_EXECUTE 18
//for SL/FTL/LZ targeting on locator huds
#define TRACKER_SL "track_sl"
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index ca35fadd396b..4c3a658ff421 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -120,12 +120,12 @@
//=================================================
//Role defines, specifically lists of roles for job bans, crew manifests and the like.
-GLOBAL_LIST_INIT(ROLES_COMMAND, list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN))
+GLOBAL_LIST_INIT(ROLES_COMMAND, list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_TANK_CREW, JOB_DROPSHIP_CREW_CHIEF, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN))
//Marine roles
-#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)
+#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_TANK_CREW, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)
GLOBAL_LIST_INIT(ROLES_CIC, list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO))
-GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT))
+GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_TANK_CREW, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT))
GLOBAL_LIST_INIT(ROLES_MISC, list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH))
GLOBAL_LIST_INIT(ROLES_POLICE, list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE))
GLOBAL_LIST_INIT(ROLES_ENGINEERING, list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH))
@@ -153,7 +153,7 @@ GLOBAL_LIST_INIT(ROLES_UNASSIGNED, list(JOB_SQUAD_MARINE))
JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE
#define BLURB_USCM_FLIGHT JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF
#define BLURB_USCM_MP JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE
-#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_PILOT
+#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_TANK_CREW, JOB_WO_PILOT
#define BLURB_USCM_MEDICAL JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR
#define BLURB_USCM_REQ JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION
#define BLURB_USCM_WY JOB_CORPORATE_LIAISON
diff --git a/code/__DEFINES/vendors.dm b/code/__DEFINES/vendors.dm
index dc78f7caa4d3..70e30edddf24 100644
--- a/code/__DEFINES/vendors.dm
+++ b/code/__DEFINES/vendors.dm
@@ -72,6 +72,8 @@
/// Vendors with this flag will fill retroactively based on latejoining players,
/// and expect a scale multiplier instead of amount of items
#define VEND_STOCK_DYNAMIC (1<<10)
+/// Vends props looking like the items instead of the actual items. Basically for tutorials.
+#define VEND_PROPS (1<<11)
// Redemption Tokens
#define VEND_TOKEN_ENGINEER "Engineer"
diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm
index ec36a485333c..51cc496feeae 100644
--- a/code/__HELPERS/job.dm
+++ b/code/__HELPERS/job.dm
@@ -34,6 +34,7 @@
JOB_CAS_PILOT,
JOB_DROPSHIP_PILOT,
JOB_DROPSHIP_CREW_CHIEF,
+ JOB_TANK_CREW,
JOB_CORPORATE_LIAISON,
JOB_COMBAT_REPORTER,
JOB_CHIEF_ENGINEER,
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index cea6353699ad..5b9154eac655 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1501,6 +1501,22 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
#define UNTIL(X) while(!(X)) stoplag()
+/// Macro for cases where an UNTIL() may go on forever (such as for an http request)
+#define UNTIL_OR_TIMEOUT(X, __time) \
+ do { \
+ if(__time <= 0) {; \
+ CRASH("UNTIL_OR_TIMEOUT given invalid time"); \
+ } \
+ var/__start_time = world.time; \
+ do { \
+ if(__start_time + __time <= world.time) {; \
+ CRASH("UNTIL_OR_TIMEOUT hit timeout limit of [__time]"); \
+ } else { \
+ stoplag(); \
+ } \
+ } while(!(X)) \
+ } while(FALSE)
+
//Repopulates sortedAreas list
/proc/repopulate_sorted_areas()
GLOB.sorted_areas = list()
diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm
index 2bd24af5a0ff..e663bc287946 100644
--- a/code/_globalvars/global_lists.dm
+++ b/code/_globalvars/global_lists.dm
@@ -9,6 +9,9 @@ GLOBAL_LIST_EMPTY(CLFFaxes)
GLOBAL_LIST_EMPTY(GeneralFaxes) //Inter-machine faxes
GLOBAL_LIST_EMPTY(fax_contents) //List of fax contents to maintain it even if source paper is deleted
+// for all of our various bugs and runtimes
+GLOBAL_LIST_EMPTY(bug_reports)
+
//datum containing a reference to the flattend map png url, the actual png is stored in the user's cache.
GLOBAL_LIST_EMPTY(uscm_flat_tacmap_data)
GLOBAL_LIST_EMPTY(xeno_flat_tacmap_data)
@@ -311,6 +314,9 @@ GLOBAL_LIST_INIT(hj_emotes, setup_hazard_joe_emotes())
rkey++
var/datum/species/S = new T
S.race_key = rkey //Used in mob icon caching.
+ var/datum/species/existing = all_species[S.name]
+ if(existing)
+ stack_trace("[S.name] from [T] overlaps with [existing.type]! It must have a unique name for lookup!")
all_species[S.name] = S
return all_species
@@ -353,6 +359,9 @@ GLOBAL_LIST_INIT(hj_emotes, setup_hazard_joe_emotes())
if (!initial(EP.flags))
continue
EP = new T
+ var/datum/equipment_preset/existing = gear_path_presets_list[EP.name]
+ if(existing)
+ stack_trace("[EP.name] from [T] overlaps with [existing.type]! It must have a unique name for lookup!")
gear_path_presets_list[EP.name] = EP
return sortAssoc(gear_path_presets_list)
@@ -464,7 +473,11 @@ GLOBAL_LIST_INIT(hj_emotes, setup_hazard_joe_emotes())
/proc/setup_yautja_capes()
var/list/cape_list = list()
for(var/obj/item/clothing/yautja_cape/cape_type as anything in typesof(/obj/item/clothing/yautja_cape))
- cape_list[initial(cape_type.name)] = cape_type
+ var/cape_name = initial(cape_type.name)
+ var/obj/item/clothing/yautja_cape/existing = cape_list[cape_name]
+ if(existing)
+ stack_trace("[cape_name] from [cape_type] overlaps with [existing.type]! It must have a unique name for lookup!")
+ cape_list[cape_name] = cape_type
return cape_list
diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm
index 453539ff1c3f..3bb69fe05419 100644
--- a/code/_onclick/xeno.dm
+++ b/code/_onclick/xeno.dm
@@ -13,6 +13,7 @@
if(isturf(target) && tile_attack) //Attacks on turfs must be done indirectly through directional attacks or clicking own sprite.
var/turf/T = target
+ var/mob/living/non_xeno_target
for(var/mob/living/L in T)
if (!iscarbon(L))
if (!alt)
@@ -21,13 +22,19 @@
if (!L.is_xeno_grabbable() || L == src) //Xenos never attack themselves.
continue
+ var/isxeno = isxeno(L)
+ if(!isxeno)
+ non_xeno_target = L
if (L.body_position == LYING_DOWN)
alt = L
continue
+ else if (!isxeno)
+ break
target = L
- break
if (target == T && alt)
target = alt
+ if(non_xeno_target)
+ target = non_xeno_target
if (T && ignores_resin) // Will not target resin walls and doors if this is set to true. This is normally only set to true through a directional attack.
if(istype(T, /obj/structure/mineral_door/resin))
var/obj/structure/mineral_door/resin/attacked_door = T
@@ -54,6 +61,9 @@
var/turf/target_turf = target
for(var/obj/flamer_fire/fire in target_turf)
firepatted = TRUE
+ if(!(caste.fire_immunity & FIRE_IMMUNITY_NO_DAMAGE) || fire.tied_reagent?.fire_penetrating)
+ var/firedamage = max(fire.burnlevel - check_fire_intensity_resistance(), 0) * 0.5
+ apply_damage(firedamage, BURN, fire)
if((fire.firelevel > fire_level_to_extinguish) && (!fire.fire_variant)) //If fire_variant = 0, default fire extinguish behavior.
fire.firelevel -= fire_level_to_extinguish
fire.update_flame()
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 1cf93e998a4e..627859369231 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -664,3 +664,11 @@ This maintains a list of ip addresses that are able to bypass topic filtering.
/datum/config_entry/string/client_error_message
default = "Your version of BYOND is too old, may have issues, and is blocked from accessing this server."
+
+// GitHub API, used for anonymous bug report handling.
+/datum/config_entry/string/github_app_api
+ protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
+
+/datum/config_entry/string/repo_name
+
+/datum/config_entry/string/org
diff --git a/code/datums/ammo/bullet/arc.dm b/code/datums/ammo/bullet/arc.dm
index 5e74508e04b2..277cda59bedf 100644
--- a/code/datums/ammo/bullet/arc.dm
+++ b/code/datums/ammo/bullet/arc.dm
@@ -8,7 +8,7 @@
scatter = 0
damage = 30
damage_var_high = PROJECTILE_VARIANCE_TIER_8
- penetration = ARMOR_PENETRATION_TIER_2
+ penetration = ARMOR_PENETRATION_TIER_3
accurate_range = 10
max_range = 12
shell_speed = AMMO_SPEED_TIER_6
diff --git a/code/datums/ammo/misc.dm b/code/datums/ammo/misc.dm
index a482d2686055..d3ce356372be 100644
--- a/code/datums/ammo/misc.dm
+++ b/code/datums/ammo/misc.dm
@@ -97,6 +97,15 @@
R.durationfire = BURN_TIME_INSTANT
new /obj/flamer_fire(T, cause_data, R, 0)
+/datum/ammo/flamethrower/sentry_flamer/wy
+ name = "sticky fire"
+ flamer_reagent_id = "stickynapalm"
+ shell_speed = AMMO_SPEED_TIER_4
+
+/datum/ammo/flamethrower/sentry_flamer/upp
+ name = "gel fire"
+ flamer_reagent_id = "napalmgel"
+
/datum/ammo/flare
name = "flare"
ping = null //no bounce off.
diff --git a/code/datums/bug_report.dm b/code/datums/bug_report.dm
new file mode 100644
index 000000000000..fd82d4950b91
--- /dev/null
+++ b/code/datums/bug_report.dm
@@ -0,0 +1,202 @@
+// Datum for handling bug reports
+#define STATUS_SUCCESS 201
+
+/datum/tgui_bug_report_form
+ /// contains all the body text for the bug report.
+ var/list/bug_report_data = null
+
+ /// client of the bug report author, needed to create the ticket
+ var/client/initial_user = null
+ // ckey of the author
+ var/initial_key = null // just incase they leave after creating the bug report
+
+ /// client of the admin who is accessing the report, we don't want multiple admins unknowingly making changes at the same time.
+ var/client/admin_user = null
+
+ /// value to determine if the bug report is submitted and awaiting admin approval, used for state purposes in tgui.
+ var/awaiting_admin_approval = FALSE
+
+ // for garbage collection purposes.
+ var/selected_confirm = FALSE
+
+/datum/tgui_bug_report_form/New(mob/user)
+ initial_user = user.client
+ initial_key = user.client.key
+
+/datum/tgui_bug_report_form/proc/external_link_prompt(client/user)
+ tgui_alert(user, "Unable to create a bug report at this time, please create the issue directly through our GitHub repository instead")
+ var/url = CONFIG_GET(string/githuburl)
+ if(!url)
+ to_chat(user, SPAN_WARNING("The configuration is not properly set, unable to open external link"))
+ return
+
+ if(tgui_alert(user, "This will open the GitHub in your browser. Are you sure?", "Confirm", list("Yes", "No")) == "Yes")
+ user << link(url)
+
+/datum/tgui_bug_report_form/ui_state()
+ return GLOB.always_state
+
+/datum/tgui_bug_report_form/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "BugReportForm")
+ ui.open()
+
+/datum/tgui_bug_report_form/ui_close(mob/user)
+ . = ..()
+ if(!admin_user && user.client == initial_user && !selected_confirm) // user closes the ui without selecting confirm or approve.
+ qdel(src)
+ return
+ admin_user = null
+ selected_confirm = FALSE
+
+/datum/tgui_bug_report_form/Destroy()
+ GLOB.bug_reports -= src
+ return ..()
+
+/datum/tgui_bug_report_form/proc/sanitize_payload(list/params)
+ for(var/param in params)
+ params[param] = sanitize(params[param], list("\t"=" ","�"=" "))
+
+ return params
+
+// whether or not an admin can access the record at a given time.
+/datum/tgui_bug_report_form/proc/assign_admin(mob/user)
+ if(!initial_key)
+ to_chat(user, SPAN_WARNING("Unable to identify the author of the bug report."))
+ return FALSE
+ if(admin_user)
+ if(user.client == admin_user)
+ to_chat(user, SPAN_WARNING("This bug report review is already opened and accessed by you."))
+ else
+ to_chat(user, SPAN_WARNING("Another administrator is currently accessing this report, please wait for them to finish before making any changes."))
+ return FALSE
+ if(!CLIENT_IS_STAFF(user.client))
+ message_admins("[user.ckey] has attempted to review [initial_key]'s bug report titled [bug_report_data["title"]] without proper authorization at [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")].")
+ return FALSE
+
+ admin_user = user.client
+ return TRUE
+
+// returns the body payload
+/datum/tgui_bug_report_form/proc/create_form()
+ var/datum/getrev/revdata = GLOB.revdata
+ var/test_merges
+ if(length(revdata.testmerge))
+ test_merges = revdata.GetTestMergeInfo(header = FALSE)
+
+ var/desc = {"
+## Testmerges
+[test_merges ? test_merges : "N/A"]
+
+## Round ID
+[GLOB.round_id ? GLOB.round_id : "N/A"]
+
+## Description of the bug
+[bug_report_data["description"]]
+
+## What's the difference with what should have happened?
+[bug_report_data["expected_behavior"]]
+
+## How do we reproduce this bug?
+[bug_report_data["steps"]]
+
+## Attached logs
+```
+[bug_report_data["log"] ? bug_report_data["log"] : "N/A"]
+```
+
+## Additional details
+- Author: [initial_key]
+- Admin: [admin_user]
+- Note: [bug_report_data["admin_note"] ? bug_report_data["admin_note"] : "None"]
+ "}
+
+ return desc
+
+// the real deal, we are sending the request through the api.
+/datum/tgui_bug_report_form/proc/send_request(payload_body, client/user)
+ // for any future changes see https://docs.github.com/en/rest/issues/issues
+ var/repo_name = CONFIG_GET(string/repo_name)
+ var/org = CONFIG_GET(string/org)
+ var/token = CONFIG_GET(string/github_app_api)
+
+ if(!token || !org || !repo_name)
+ tgui_alert(user, "The configuration is not set for the external API.", "Issue not reported!")
+ external_link_prompt(user)
+ qdel(src)
+ return
+
+ var/url = "https://api.github.com/repos/[org]/[repo_name]/issues"
+ var/list/headers = list()
+ headers["Authorization"] = "Bearer [token]"
+ headers["Content-Type"] = "text/markdown; charset=utf-8"
+ headers["Accept"] = "application/vnd.github+json"
+
+ var/datum/http_request/request = new()
+ var/list/payload = list(
+ "title" = bug_report_data["title"],
+ "body" = payload_body,
+ "labels" = list("Bug")
+ )
+
+ request.prepare(RUSTG_HTTP_METHOD_POST, url, json_encode(payload), headers)
+ request.begin_async()
+ UNTIL_OR_TIMEOUT(request.is_complete(), 5 SECONDS)
+
+ var/datum/http_response/response = request.into_response()
+ if(response.errored || response.status_code != STATUS_SUCCESS)
+ message_admins(SPAN_ADMINNOTICE("The GitHub API has failed to create the bug report titled [bug_report_data["title"]] approved by [admin_user], status code:[response.status_code]. Please paste this error code into the development channel on discord."))
+ external_link_prompt(user)
+ else
+ message_admins("[user.ckey] has approved a bug report from [initial_key] titled [bug_report_data["title"]] at [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")].")
+ to_chat(initial_user, SPAN_WARNING("An admin has successfully submitted your report and it should now be visible on GitHub. Thanks again!"))
+ qdel(src)// approved and submitted, we no longer need the datum.
+
+// proc that creates a ticket for an admin to approve or deny a bug report request
+/datum/tgui_bug_report_form/proc/bug_report_request()
+ to_chat(initial_user, SPAN_WARNING("Your bug report has been submitted, thank you!"))
+ GLOB.bug_reports += src
+
+ var/general_message = "[initial_key] has created a bug report, you may find this report directly in the ticket panel. Feel free modify the issue to your liking before submitting it to GitHub."
+ GLOB.admin_help_ui_handler.perform_adminhelp(initial_user, general_message, urgent = FALSE)
+
+ var/href_message = ADMIN_VIEW_BUG_REPORT(src)
+ initial_user.current_ticket.AddInteraction(href_message)
+
+/datum/tgui_bug_report_form/ui_act(action, list/params, datum/tgui/ui)
+ . = ..()
+ if (.)
+ return
+ var/mob/user = ui.user
+ switch(action)
+ if("confirm")
+ if(selected_confirm) // prevent someone from spamming the approve button
+ to_chat(user, SPAN_WARNING("you have already confirmed the submission, please wait a moment for the API to process your submission."))
+ return
+ bug_report_data = sanitize_payload(params)
+ selected_confirm = TRUE
+ // bug report request is now waiting for admin approval
+ if(!awaiting_admin_approval)
+ bug_report_request()
+ awaiting_admin_approval = TRUE
+ else // otherwise it's been approved
+ var/payload_body = create_form()
+ send_request(payload_body, user.client)
+ if("cancel")
+ if(awaiting_admin_approval) // admin has chosen to reject the bug report
+ reject(user.client)
+ qdel(src)
+ ui.close()
+ . = TRUE
+
+/datum/tgui_bug_report_form/ui_data(mob/user)
+ . = list()
+ .["report_details"] = bug_report_data // only filled out once the user as submitted the form
+ .["awaiting_admin_approval"] = awaiting_admin_approval
+
+/datum/tgui_bug_report_form/proc/reject(client/user)
+ message_admins("[user.ckey] has rejected a bug report from [initial_key] titled [bug_report_data["title"]] at [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")].")
+ to_chat(initial_user, SPAN_WARNING("An admin has rejected your bug report, this can happen for several reasons. They will most likely get back to you shortly regarding your issue."))
+
+#undef STATUS_SUCCESS
diff --git a/code/datums/entities/player_sticky_ban.dm b/code/datums/entities/player_sticky_ban.dm
index 752334e8e001..70715d1ce2f0 100644
--- a/code/datums/entities/player_sticky_ban.dm
+++ b/code/datums/entities/player_sticky_ban.dm
@@ -13,8 +13,8 @@ BSQL_PROTECT_DATUM(/datum/entity/stickyban)
table_name = "stickyban"
field_types = list(
"identifier" = DB_FIELDTYPE_STRING_LARGE,
- "reason" = DB_FIELDTYPE_STRING_LARGE,
- "message" = DB_FIELDTYPE_STRING_LARGE,
+ "reason" = DB_FIELDTYPE_STRING_MAX,
+ "message" = DB_FIELDTYPE_STRING_MAX,
"date" = DB_FIELDTYPE_STRING_LARGE,
"active" = DB_FIELDTYPE_INT,
"adminid" = DB_FIELDTYPE_BIGINT,
diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm
index 927b6f937b8a..f7c49321f305 100644
--- a/code/datums/factions/uscm.dm
+++ b/code/datums/factions/uscm.dm
@@ -24,9 +24,9 @@
if(JOB_GENERAL) marine_rk = "general"
if(JOB_CAS_PILOT) marine_rk = "gp"
if(JOB_DROPSHIP_PILOT) marine_rk = "dp"
+ if(JOB_TANK_CREW) marine_rk = "tc"
if(JOB_INTEL) marine_rk = "io"
if(JOB_DROPSHIP_CREW_CHIEF) marine_rk = "dcc"
- if(JOB_CREWMAN) marine_rk = "tc"
if(JOB_MARINE_RAIDER) marine_rk = "soc"
if(JOB_MARINE_RAIDER_SL) marine_rk = "soctl"
if(JOB_MARINE_RAIDER_CMD) marine_rk = "soccmd"
@@ -100,6 +100,8 @@
border_rk = "command"
if(JOB_POLICE)
marine_rk = "mp"
+ if(JOB_TANK_CREW)
+ marine_rk = "tc"
if(JOB_WARDEN)
marine_rk = "warden"
border_rk = "command"
diff --git a/code/datums/medal_awards.dm b/code/datums/medal_awards.dm
index 37b21bd2bb49..f2dfc6a5c1d5 100644
--- a/code/datums/medal_awards.dm
+++ b/code/datums/medal_awards.dm
@@ -131,16 +131,17 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME
// Create an actual medal item
if(medal_location)
+ var/turf/turf_location = get_turf(medal_location)
var/obj/item/clothing/accessory/medal/medal
switch(medal_type)
if(MARINE_CONDUCT_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/bronze/conduct(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/bronze/conduct(turf_location)
if(MARINE_BRONZE_HEART_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/bronze/heart(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/bronze/heart(turf_location)
if(MARINE_VALOR_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/silver/valor(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/silver/valor(turf_location)
if(MARINE_HEROISM_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/gold/heroism(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/gold/heroism(turf_location)
else
return FALSE
medal.recipient_name = chosen_recipient
@@ -223,16 +224,17 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME
// Create an actual medal item
if(medal_location)
+ var/turf/turf_location = get_turf(medal_location)
var/obj/item/clothing/accessory/medal/medal
switch(medal_type)
if(MARINE_CONDUCT_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/bronze/conduct(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/bronze/conduct(turf_location)
if(MARINE_BRONZE_HEART_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/bronze/heart(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/bronze/heart(turf_location)
if(MARINE_VALOR_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/silver/valor(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/silver/valor(turf_location)
if(MARINE_HEROISM_MEDAL)
- medal = new /obj/item/clothing/accessory/medal/gold/heroism(medal_location)
+ medal = new /obj/item/clothing/accessory/medal/gold/heroism(turf_location)
else
return FALSE
medal.recipient_name = chosen_recipient
@@ -254,7 +256,7 @@ GLOBAL_LIST_INIT(human_medals, list(MARINE_CONDUCT_MEDAL, MARINE_BRONZE_HEART_ME
return TRUE
/proc/open_medal_panel(mob/living/carbon/human/user, obj/printer)
- var/obj/item/card/id/card = user.wear_id
+ var/obj/item/card/id/card = user?.get_idcard()
if(!card)
to_chat(user, SPAN_WARNING("You must have an authenticated ID Card to award medals."))
return
@@ -289,23 +291,21 @@ GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL,
var/list/recipient_castes = list()
var/list/recipient_mobs = list()
for(var/mob/living/carbon/xenomorph/xeno in hive.totalXenos)
- if (xeno.persistent_ckey == usr.persistent_ckey) // Don't award self
- continue
- if (xeno.tier == 0) // Don't award larva or facehuggers
- continue
- if (!as_admin && istype(xeno.caste, /datum/caste_datum/queen)) // Don't award queens unless admin
+ if(xeno.persistent_ckey == usr.persistent_ckey) // Don't award self
continue
+ if(xeno.tier == 0) // Don't award larva or facehuggers
+ if(!as_admin || !isqueen(xeno)) // Don't award queens unless admin (She is tier 0 for whatever reason)
+ continue
var/recipient_name = xeno.real_name
recipient_castes[recipient_name] = xeno.caste_type
recipient_mobs[recipient_name] = xeno
possible_recipients += recipient_name
for(var/mob/living/carbon/xenomorph/xeno in hive.total_dead_xenos)
- if (xeno.persistent_ckey == usr.persistent_ckey) // Don't award previous selves
- continue
- if (xeno.tier == 0) // Don't award larva or facehuggers
- continue
- if (!as_admin && istype(xeno.caste, /datum/caste_datum/queen)) // Don't award previous queens unless admin
+ if(xeno.persistent_ckey == usr.persistent_ckey) // Don't award previous selves
continue
+ if(xeno.tier == 0) // Don't award larva or facehuggers
+ if(!as_admin || !isqueen(xeno)) // Don't award queens unless admin (She is tier 0 for whatever reason)
+ continue
var/recipient_name = xeno.real_name
recipient_castes[recipient_name] = xeno.caste_type
recipient_mobs[recipient_name] = xeno
@@ -580,8 +580,8 @@ GLOBAL_DATUM_INIT(ic_medals_panel, /datum/ic_medal_panel, new)
. = ..()
if(.)
return
- var/mob/living/carbon/human/user = usr
- var/obj/item/card/id/card = user.wear_id
+ var/mob/living/carbon/human/user = ui.user
+ var/obj/item/card/id/card = user?.get_idcard()
if(!card)
to_chat(user, SPAN_WARNING("You must have an authenticated ID Card to award medals."))
return
@@ -608,7 +608,7 @@ GLOBAL_DATUM_INIT(ic_medals_panel, /datum/ic_medal_panel, new)
switch(action)
if("grant_new_medal")
- if(give_medal_award(get_turf(actual_loc)))
+ if(give_medal_award(actual_loc))
actual_loc.visible_message(SPAN_NOTICE("[actual_loc] prints a medal."))
. = TRUE
@@ -633,7 +633,7 @@ GLOBAL_DATUM_INIT(ic_medals_panel, /datum/ic_medal_panel, new)
if(confirm_choice != "Yes")
return
- if(give_medal_award_prefilled(get_turf(actual_loc), user, recommendation.recipient_name, recommendation.recipient_rank, recommendation.recipient_ckey, medal_citation, medal_type, recommendation.recommended_by_ckey, recommendation.recommended_by_name))
+ if(give_medal_award_prefilled(actual_loc, user, recommendation.recipient_name, recommendation.recipient_rank, recommendation.recipient_ckey, medal_citation, medal_type, recommendation.recommended_by_ckey, recommendation.recommended_by_name))
GLOB.medal_recommendations -= recommendation
qdel(recommendation)
user.visible_message(SPAN_NOTICE("[actual_loc] prints a medal."))
diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm
index 975bd5d15cb9..603f9a05d702 100644
--- a/code/datums/mob_hud.dm
+++ b/code/datums/mob_hud.dm
@@ -18,7 +18,8 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
MOB_HUD_FACTION_CLF = new /datum/mob_hud/faction/clf(),
MOB_HUD_FACTION_PMC = new /datum/mob_hud/faction/pmc(),
MOB_HUD_HUNTER = new /datum/mob_hud/hunter_hud(),
- MOB_HUD_HUNTER_CLAN = new /datum/mob_hud/hunter_clan()
+ MOB_HUD_HUNTER_CLAN = new /datum/mob_hud/hunter_clan(),
+ MOB_HUD_EXECUTE = new /datum/mob_hud/execute_hud(),
))
/datum/mob_hud
@@ -167,6 +168,9 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
/datum/mob_hud/xeno_hostile
hud_icons = list(XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE)
+/datum/mob_hud/execute_hud
+ hud_icons = list(XENO_EXECUTE)
+
/datum/mob_hud/hunter_clan
hud_icons = list(HUNTER_CLAN)
@@ -259,6 +263,11 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
var/datum/mob_hud/hostile_hud = GLOB.huds[MOB_HUD_XENO_HOSTILE]
hostile_hud.remove_hud_from(src, src)
+ if (execute_hud)
+ execute_hud = FALSE
+ var/datum/mob_hud/execute = GLOB.huds[MOB_HUD_EXECUTE]
+ execute.remove_hud_from(src, src)
+
/mob/proc/refresh_huds(mob/source_mob)
@@ -772,6 +781,16 @@ GLOBAL_DATUM(hud_icon_hudfocus, /image)
var/image/holder = hud_list[HOLOCARD_HUD]
holder.icon_state = holo_card_color ? "holo_card_[holo_card_color]" : "hudblank"
+// Vampire Execute HUD
+/mob/living/carbon/human/proc/update_execute_hud()
+ var/image/execute_holder = hud_list[XENO_EXECUTE]
+
+ execute_holder.icon_state = "hudblank"
+ execute_holder.overlays.Cut()
+
+ if(stat == UNCONSCIOUS || (stat != DEAD && HAS_TRAIT(src, TRAIT_KNOCKEDOUT)))
+ execute_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag")
+
// Xeno "hostile" HUD
/mob/living/carbon/human/proc/update_xeno_hostile_hud()
var/image/acid_holder = hud_list[XENO_HOSTILE_ACID]
diff --git a/code/datums/research_upgrade_datum.dm b/code/datums/research_upgrade_datum.dm
index 1620543f6604..8b19bafad1cd 100644
--- a/code/datums/research_upgrade_datum.dm
+++ b/code/datums/research_upgrade_datum.dm
@@ -100,6 +100,7 @@
behavior = RESEARCH_UPGRADE_TIER_1
upgrade_type = ITEM_ACCESSORY_UPGRADE
clearance_req = 4
+
/datum/research_upgrades/item/nanosplints
name = "Reinforced Fiber Splints"
desc = "A set of splints made from durable carbon fiber sheets reinforced with flexible titanium lattice, comes in a stack of five."
@@ -111,6 +112,28 @@
behavior = RESEARCH_UPGRADE_TIER_5 //adjust this to change amount of nanosplints in a stack, cant be higher than five, go change max_amount in the nanosplint itself, then change it.
upgrade_type = ITEM_ACCESSORY_UPGRADE
+/datum/research_upgrades/item/flamer_tank
+ name = "Upgraded Incinerator Tank"
+ desc = "An upgraded incinerator tank, with larger capacity and able to handle stronger fuels."
+ value_upgrade = 300
+ clearance_req = 1
+ change_purchase = 100
+ minimum_price = 100
+ maximum_price = 1000
+ item_reference = /obj/item/ammo_magazine/flamer_tank/custom/upgraded
+ behavior = RESEARCH_UPGRADE_NULL
+ upgrade_type = ITEM_ACCESSORY_UPGRADE
+
+/datum/research_upgrades/item/flamer_tank/smoke
+ name = "Upgraded Incinerator Smoke Tank"
+ desc = "An upgraded incinerator smoke tank with a larger capacity."
+ value_upgrade = 100 //not useful enough to be expensive
+ clearance_req = 1
+ item_reference = /obj/item/ammo_magazine/flamer_tank/smoke/upgraded
+ change_purchase = 50
+ minimum_price = 100
+ maximum_price = 500
+
/datum/research_upgrades/armor
name = "Armor"
behavior = RESEARCH_UPGRADE_CATEGORY
diff --git a/code/datums/supply_packs/operations.dm b/code/datums/supply_packs/operations.dm
index e5525504716a..fd715cddce95 100644
--- a/code/datums/supply_packs/operations.dm
+++ b/code/datums/supply_packs/operations.dm
@@ -10,18 +10,12 @@
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/warhead/incendiary,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/warhead/incendiary,
)
name = "OB Incendiary Crate"
cost = 0
containertype = /obj/structure/closet/crate/secure/ob
- containername = "OB Ammo Crate (Incendiary x2)"
+ containername = "OB Ammo Crate (Incendiary)"
buyable = 0
group = "Operations"
@@ -33,18 +27,12 @@
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/warhead/explosive,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/warhead/explosive,
)
name = "OB HE Crate"
cost = 0
containertype = /obj/structure/closet/crate/secure/ob
- containername = "OB Ammo Crate (HE x2)"
+ containername = "OB Ammo Crate (HE)"
buyable = 0
group = "Operations"
@@ -56,18 +44,12 @@
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/ob_fuel,
/obj/structure/ob_ammo/warhead/cluster,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/ob_fuel,
- /obj/structure/ob_ammo/warhead/cluster,
)
name = "OB Cluster Crate"
cost = 0
containertype = /obj/structure/closet/crate/secure/ob
- containername = "OB Ammo Crate (Cluster x2)"
+ containername = "OB Ammo Crate (Cluster)"
buyable = 0
group = "Operations"
diff --git a/code/datums/tutorial/marine/reqs_line.dm b/code/datums/tutorial/marine/reqs_line.dm
new file mode 100644
index 000000000000..ba2d7ddade9d
--- /dev/null
+++ b/code/datums/tutorial/marine/reqs_line.dm
@@ -0,0 +1,482 @@
+/* List of Reqs Line tutorial stages */
+#define TUTORIAL_REQS_LINE_STAGE_STARTING 0 //! Reqs Tutorial Stage 0: Get in position
+#define TUTORIAL_REQS_LINE_STAGE_ATTACHIES 1 //! Reqs Tutorial Stage 1: Give me some attachies
+#define TUTORIAL_REQS_LINE_STAGE_GEARBOX 2 //! Reqs Tutorial Stage 2: I would like an HPR
+#define TUTORIAL_REQS_LINE_STAGE_MIXED 3 //! Reqs Tutorial Stage 3: Multiple items. Also toss something over..
+#define TUTORIAL_REQS_LINE_STAGE_SURVIVAL 4 //! Reqs Tutorial Stage 4: SURVIVAL MODE, random requests in a loop
+
+/// How fast to increase difficulty in survival mode (amount of items/agents)
+#define TUTORIAL_REQS_LINE_SURVIVAL_DIFFICULTY (1/3)
+
+/// Simulates the Requisitions Line experience for newcomers
+/datum/tutorial/marine/reqs_line
+ name = "Marine - Requistions Line"
+ desc = "Learn how to tend to the requisitions line as a Cargo Technician."
+ icon_state = "cargotech"
+ tutorial_id = "requisitions_line"
+ tutorial_template = /datum/map_template/tutorial/reqs_line
+
+ /// Current step of the tutorial we're at
+ var/stage = TUTORIAL_REQS_LINE_STAGE_STARTING
+ /// Current "remind" timer after which the agent will remind player of its request
+ var/remind_timer
+ /// Current "hint" timer after which we display visual cues like highlights
+ var/hint_timer
+
+ /// List of line 'agents', aka the dummies requesting items, sorted by line order
+ /// During normal stages there is one per stage (except for Forgot stage),
+ /// During Survival mode there would usually be two: one at the counter, and one moving.
+ /// The agents are mapped to a list of item types requested.
+ var/list/mob/living/carbon/human/agents = list()
+
+ /// Active agent currently at the line
+ var/mob/living/carbon/human/active_agent
+ /// Specifically for [TUTORIAL_REQS_LINE_STAGE_MIXED], the agent that forgot an item
+ var/mob/living/carbon/human/loser_agent
+
+ /// Cooldown of confusion if an incorrect item is presented
+ COOLDOWN_DECLARE(confused_cooldown)
+ /// Crutch for confusion feedback to work with vending new()ing directly to table - only act surprised once per item type
+ var/list/confused_types = list()
+
+ /// Max amount of agents per survival wave
+ var/max_survival_agents = 5
+ /// Current survival wave
+ var/survival_wave = 0
+ /// Difficulty factor per survival wave, increasing both the amount of agents and requested items
+ var/survival_difficulty = 1
+ /// Max factor of additional items requested per agent in survival mode. 0.5 = 50% added maximum
+ var/survival_request_random_factor = 0.5
+
+ /*
+ * REQUESTS LISTS
+ * Maps item types to their names, used for building the requests
+ */
+ var/static/shopping_catalogue = list(
+ /* ATTACHIES */
+ /obj/item/attachable/extended_barrel = list("EB", "EB", "Extended", "Extended Barrel", "Extendo", "Ext Barrel"),
+ /obj/item/attachable/magnetic_harness = list("MH", "MH", "Magharn", "Mag Harn", "Mag Harness", "Harness", "Magnetic Harness"),
+ /obj/item/attachable/reddot = list("RDS", "Red Dot", "S5", "Red Dot Sight", "reddot"),
+ /obj/item/attachable/reflex = list("Reflex", "S6", "Reflex Sight", "S6"),
+ /obj/item/attachable/scope = list("S8", "S8", "4x", "4x sight", "4x scope", "S8 scope"),
+ /obj/item/attachable/angledgrip = list("AG", "agrip", "Agrip", "Angled", "angled grip"),
+ /obj/item/attachable/gyro = list("Gyro"),
+ /obj/item/attachable/lasersight = list("Laser", "Laser sight", "LS"),
+ /obj/item/attachable/attached_gun/shotgun = list("U7", "Underbarrel", "Underbarrel Shotgun", "Mini Shotgun"),
+ /obj/item/attachable/verticalgrip = list("VG", "Vert Grip", "Vertical Grip"),
+ /obj/item/attachable/stock/rifle = list("Solid Stock", "M41 stock", "M41 Solid Stock"),
+ /obj/item/attachable/stock/shotgun = list("M37 Stock", "Wooden stock"),
+ /* GEAR */
+ /obj/item/weapon/gun/rifle/m41a = list("M41", "M41", "M41A", "Mk2", "M4 rifle"),
+ /obj/item/weapon/gun/shotgun/pump = list("M37", "shotgun"),
+ /obj/item/storage/box/guncase/mou53 = list("MOU", "MOU53", "MOU-53", "Mouse"),
+ /obj/item/storage/box/guncase/lmg = list("HPR", "HPR kit", "heavy pulse rifle"),
+ /obj/item/storage/box/guncase/m41aMK1 = list("MK1", "M41 Mk1", "MK1 Kit", "M41A MK1 Kit"),
+ /obj/item/storage/box/guncase/m56d = list("M56D", "HMG", "M56"),
+ /obj/item/storage/box/guncase/m2c = list("M2C"),
+ /obj/item/storage/box/guncase/flamer = list("Flamer", "Flamer kit", "Incinerator"),
+ /obj/item/storage/box/guncase/m79 = list("GL", "Grenade launcher", "M79", "M79 Grenade launcher"),
+ /obj/item/clothing/accessory/storage/black_vest = list("Black webbing", "Black webbing vest"),
+ /obj/item/clothing/accessory/storage/black_vest/brown_vest = list("Brown webbing", "Brown webbing vest"),
+ /obj/item/clothing/accessory/storage/webbing = list("Webbing", "normal webbing", "web"),
+ /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit = list("pyro pack", "pyro backpack", "g4-1 pack", "flamer backpack"),
+ /obj/item/storage/backpack/marine/satchel/rto = list("phone pack", "phone backpack", "radio pack"),
+ /obj/item/storage/backpack/general_belt = list("G8", "G8 belt"),
+ /obj/item/storage/pouch/magazine/large = list("Large mag pouch", "Large magazine pouch"),
+ /obj/item/storage/pouch/shotgun/large = list("Shotgun pouch", "Shotgun shells pouch", "Shells pouch", "Large shells pouch"),
+ /obj/item/storage/box/m94/signal = list("Signal flares", "box of signals", "CAS flares"),
+ /obj/item/device/motiondetector = list("MD", "Motion Detector"),
+ /obj/item/device/binoculars = list("Binos", "Binoculars"),
+ /obj/item/device/binoculars/range/designator = list("LD", "Designator", "Laser Designator", "Tac Binos"),
+ /obj/item/pamphlet/skill/jtac = list("JTAC Pamphlet"),
+ /* Explosives */
+ /obj/item/explosive/grenade/high_explosive = list("M40 HEDP", "HEDP"),
+ /obj/item/explosive/grenade/incendiary = list("M40 HIDP", "Incendiary nade", "Incendiary grenade", "HIDP", "Fire grenade"),
+ /obj/item/explosive/plastic = list("C4", "C4", "plastic", "plastic explosives"),
+ /obj/item/explosive/plastic/breaching_charge = list("Breaching", "breach charge", "breaching charge"),
+ /* AMMO */
+ /obj/item/ammo_magazine/rifle/extended = list("Extended", "MK2 Extended", "Extended MK2 Mags"),
+ /obj/item/ammo_magazine/smg/m39/ap = list("M39 AP", "M39 AP", "SMG AP"),
+ /obj/item/ammo_magazine/smartgun = list("Smartgun drum", "SG drum"),
+ )
+
+/datum/tutorial/marine/reqs_line/Destroy(force)
+ STOP_PROCESSING(SSfastobj, src)
+ kill_timers()
+ active_agent = null
+ loser_agent = null
+ QDEL_LIST(agents)
+ return ..()
+
+/datum/tutorial/marine/reqs_line/init_map()
+ var/obj/structure/machinery/cm_vending/sorted/attachments/blend/tutorial/attachies_vendor = new(loc_from_corner(2, 7))
+ add_to_tracking_atoms(attachies_vendor)
+ var/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend/tutorial/guns_vendor = new(loc_from_corner(3, 7))
+ add_to_tracking_atoms(guns_vendor)
+ var/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend/tutorial/ammo_vendor = new(loc_from_corner(4, 7))
+ add_to_tracking_atoms(ammo_vendor)
+ restock_vendors()
+
+ var/turf/asker_turf = loc_from_corner(1, 6)
+ RegisterSignal(asker_turf, COMSIG_TURF_ENTERED, PROC_REF(a_new_challenger_appears))
+ var/turf/trade_turf = loc_from_corner(2, 6)
+ RegisterSignal(trade_turf, COMSIG_TURF_ENTERED, PROC_REF(item_offered))
+ var/turf/loser_turf = loc_from_corner(0, 6)
+ RegisterSignal(loser_turf, COMSIG_TURF_ENTERED, PROC_REF(loser_got_the_item))
+
+ // Crutch to be able to detect items that are spawned directly on the table
+ RegisterSignal(attachies_vendor, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(scan_table_for_items))
+ RegisterSignal(guns_vendor, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(scan_table_for_items))
+ RegisterSignal(ammo_vendor, COMSIG_VENDOR_SUCCESSFUL_VEND, PROC_REF(scan_table_for_items))
+
+/datum/tutorial/marine/reqs_line/init_mob()
+ . = ..()
+ arm_equipment(tutorial_mob, /datum/equipment_preset/uscm_ship/cargo)
+ // Remove their radio from CT preset
+ var/mob/living/carbon/human/user = tutorial_mob
+ var/obj/item/device/radio/headset/headset = user.wear_l_ear
+ user.drop_inv_item_on_ground(headset)
+ QDEL_NULL(headset)
+
+/// Refills all the vendors on stage updates so the player shouldn't run out of stock
+/datum/tutorial/marine/reqs_line/proc/restock_vendors()
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/attachments/blend/tutorial, attachies_vendor)
+ restock_one_vendor(attachies_vendor)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend/tutorial, cargo_vendor)
+ restock_one_vendor(cargo_vendor)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend/tutorial, ammo_vendor)
+ restock_one_vendor(ammo_vendor)
+
+/// Refills a specific vendor to 99 items across the board
+/datum/tutorial/marine/reqs_line/proc/restock_one_vendor(obj/structure/machinery/cm_vending/vendor)
+ for(var/list/vendspec in vendor.listed_products)
+ if(vendspec[2] >= 0)
+ vendspec[2] = 99
+
+/datum/tutorial/marine/reqs_line/process(delta_time)
+ if(stage == TUTORIAL_REQS_LINE_STAGE_SURVIVAL && !length(agents))
+ spawn_survival_wave()
+
+ for(var/mob/living/carbon/human/agent as anything in agents)
+ if(agent == loser_agent)
+ continue
+ if(agent == active_agent)
+ agent.face_dir(EAST)
+ else if(!agent_step(agent, NORTH))
+ agent_step(agent, EAST)
+
+/// Makes agents move on processing tick if they can. They check surroundings to ensure proper movement flow.
+/datum/tutorial/marine/reqs_line/proc/agent_step(mob/living/carbon/human/agent, dir)
+ var/turf/target_turf = get_step(agent, dir)
+ if(target_turf.density)
+ return FALSE
+ if(locate(/mob/living) in target_turf)
+ return FALSE
+ // Don't try to step back through the turnstile
+ if(dir == EAST && locate(/obj/structure/machinery/line_nexter) in target_turf)
+ return FALSE
+ . = TRUE
+ agent.Move(target_turf, dir)
+
+/// Creates a new agent with the given request list to queue in the line
+/datum/tutorial/marine/reqs_line/proc/spawn_agent(list/request = list(), name_prefix)
+ var/turf/target_turf = loc_from_corner(1, 2)
+ var/mob/living/carbon/human/dummy/agent = new(target_turf)
+ var/mob_name = "[name_prefix][random_name(agent.gender)]"
+ agent.change_real_name(agent, mob_name)
+ arm_equipment(agent, /datum/equipment_preset/uscm/tutorial_rifleman)
+ agents[agent] = request
+ RegisterSignal(agent, COMSIG_PARENT_QDELETING, PROC_REF(clean_agent))
+
+/// Called to generate a new survival wave of agents
+/datum/tutorial/marine/reqs_line/proc/spawn_survival_wave()
+ survival_wave++
+ message_to_player("Wave [survival_wave]")
+ var/agents_to_spawn = min(max_survival_agents, 1 + survival_wave * TUTORIAL_REQS_LINE_SURVIVAL_DIFFICULTY * survival_difficulty)
+ for(var/agent_i in 1 to agents_to_spawn)
+ var/items_requested = 1 + survival_wave * survival_difficulty * 0.5
+ items_requested *= (1 + survival_request_random_factor * rand())
+ spawn_survival_agent(round(items_requested))
+
+/// Called to generate a single agent and request
+/datum/tutorial/marine/reqs_line/proc/spawn_survival_agent(items_to_request)
+ var/list/request = list()
+ var/list/catalogue = list()
+ // We make a custom catalogue copy to increase weighting of already requested items;
+ // this avoids getting huge lists too quickly
+ for(var/typepath in shopping_catalogue)
+ catalogue += typepath
+ for(var/i in 1 to items_to_request)
+ request += pick(catalogue)
+ if(i < 6) // Only telescope catalogues the first 5 times as the chances compound
+ catalogue += request
+ spawn_agent(request, "Lv [survival_wave]. ")
+
+/// Called when an agent presents at the line window and needs to make a request
+/datum/tutorial/marine/reqs_line/proc/a_new_challenger_appears(turf/source, mob/living/carbon/human/challenger)
+ SIGNAL_HANDLER
+ if(!(challenger in agents)) // Bob Vancelave NOT allowed
+ return
+ active_agent = challenger
+ confused_types.Cut()
+ var/list/request = agents[challenger]
+ if(!length(request))
+ make_agent_leave()
+ return
+ restock_vendors()
+ var/speech = verbalize_request(request)
+ var/greeting = pick("Hello! ", "hi, ", "hey, ", "Good day. ", "I need ", "Please give me ", "", "") // Yes, no greeting is a greeting option for real world accuracy
+ var/trailing = pick("", "", ", please.", " - please and thank you", ", thanks.", ", hurry")
+ challenger.say("[greeting][speech][trailing]") // Pleasantries for the first exchange only
+ remind_timer = addtimer(CALLBACK(src, PROC_REF(remind_request)), 15 SECONDS, TIMER_STOPPABLE)
+ hint_timer = addtimer(CALLBACK(src, PROC_REF(send_hints)), 3 SECONDS, TIMER_STOPPABLE)
+
+/// Called when we need to remind the user of what we want served
+/datum/tutorial/marine/reqs_line/proc/remind_request()
+ var/list/request = agents[active_agent]
+ var/speech = verbalize_request(request)
+ active_agent.say(speech)
+ remind_timer = addtimer(CALLBACK(src, PROC_REF(remind_request)), 15 SECONDS, TIMER_STOPPABLE)
+
+/// Transforms the list of required items by the agent into a string request for the user
+/datum/tutorial/marine/reqs_line/proc/verbalize_request(list/original_request)
+ var/list/request = shuffle(original_request)
+ var/output_string = ""
+ var/counts = list() // Assoc list of how many are needed of each item
+ for(var/item in request)
+ if(item in counts)
+ counts[item]++
+ else
+ counts[item] = 1
+ var/first = TRUE
+ for(var/item in counts)
+ var/list/info = shopping_catalogue[item]
+ var/word = pick(info) // Pick one of the coded in designations for the item
+ if(!first) // Join list with commas
+ output_string += ", "
+ first = FALSE
+ if(counts[item] > 1)
+ output_string += "[counts[item]] "
+ output_string += word
+ return output_string
+
+/// Triggered when an object is put on the table. The agent evaluates if that's something they want and reacts appropriately.
+/datum/tutorial/marine/reqs_line/proc/item_offered(turf/source, obj/item/item)
+ SIGNAL_HANDLER
+ if(!active_agent)
+ return
+ var/list/request = agents[active_agent]
+
+ var/item_type = item.type
+ if(istype(item, /obj/item/prop/replacer))
+ var/obj/item/prop/replacer/prop = item
+ item_type = prop.original_type
+
+ if(!(item_type in request)) // Wrong item
+ if(item_type in confused_types)
+ return
+ confused_types |= item_type
+ if(COOLDOWN_FINISHED(src, confused_cooldown))
+ COOLDOWN_START(src, confused_cooldown, 5 SECONDS)
+ active_agent.say("Huh?")
+ QDEL_IN(item, 30 SECONDS)
+ return
+
+ request -= item_type
+ agent_pick_up(active_agent, item)
+
+ // If there's nothing left to pick up, we leave
+ if(loser_agent)
+ return // Still blocking the way. Wait here.
+ if(!length(request))
+ make_agent_leave(success = TRUE)
+
+/// Re-scan the table/trade turf for any present items. We have to do this because items vended to the table do not move onto it.
+/datum/tutorial/marine/reqs_line/proc/scan_table_for_items(datum/source)
+ SIGNAL_HANDLER
+ var/turf/trade_turf = loc_from_corner(2, 6)
+ for(var/obj/item/item in trade_turf)
+ item_offered(source, item)
+
+/datum/tutorial/marine/reqs_line/proc/agent_pick_up(mob/agent, obj/item/item)
+ // Actually pick the item up for the animation
+ agent.put_in_hands(item, drop_on_fail = FALSE)
+ playsound(agent, "rustle", 30)
+ // Now delete it
+ agent.temp_drop_inv_item(item)
+ qdel(item)
+
+/datum/tutorial/marine/reqs_line/proc/make_agent_leave(success = FALSE)
+ switch(stage)
+ if(TUTORIAL_REQS_LINE_STAGE_ATTACHIES)
+ INVOKE_ASYNC(src, PROC_REF(continue_stage_gearbox))
+ if(TUTORIAL_REQS_LINE_STAGE_GEARBOX)
+ INVOKE_ASYNC(src, PROC_REF(continue_stage_mixed))
+ if(TUTORIAL_REQS_LINE_STAGE_MIXED)
+ INVOKE_ASYNC(src, PROC_REF(continue_stage_survival))
+ // Wave handling for Survival is in process
+ clean_items()
+ kill_timers()
+
+ if(!active_agent)
+ return // Nani?
+
+ if(success && prob(80))
+ var/speech = pick("Thanks!", "Thanks", "Thanks bro", "Thank you.", "Bye", "Nice.")
+ active_agent.say(speech)
+
+ // Immediately step the agent through the turnstile and towards exit
+ var/turf/target_turf = get_step(active_agent, WEST)
+ active_agent.Move(target_turf, WEST)
+ active_agent = null
+
+/// Cleanup when an agent reaches the exit
+/datum/tutorial/marine/reqs_line/proc/clean_agent(datum/source)
+ SIGNAL_HANDLER
+ agents -= source
+ if(active_agent == source)
+ active_agent = null
+
+/// Cleanup the table and ground contents when an agent leaves the line
+/datum/tutorial/marine/reqs_line/proc/clean_items()
+ var/turf/trade_turf = loc_from_corner(2, 6)
+ for(var/obj/item/item in trade_turf)
+ qdel(item)
+ var/turf/forgot_turf = loc_from_corner(0, 6)
+ for(var/obj/item/item in forgot_turf)
+ qdel(item)
+
+/// Kills active timers to reset state
+/datum/tutorial/marine/reqs_line/proc/kill_timers()
+ if(remind_timer)
+ deltimer(remind_timer)
+ remind_timer = null
+ if(hint_timer) // User was just that fast
+ deltimer(hint_timer)
+ hint_timer = null
+
+/// Displays appropriate hints for the user based on tutorial stage
+/datum/tutorial/marine/reqs_line/proc/send_hints()
+ switch(stage)
+ if(TUTORIAL_REQS_LINE_STAGE_ATTACHIES)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/attachments/blend/tutorial, attachies_vendor)
+ add_highlight(attachies_vendor)
+ message_to_player("This marine wants 'attachies' for their weapon. You can find them in the leftmost vendor.")
+ update_objective("Serve the marine's request using the vendors.")
+ if(TUTORIAL_REQS_LINE_STAGE_GEARBOX)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend/tutorial, gear_vendor)
+ add_highlight(gear_vendor)
+ message_to_player("This marine wants items from the gear vendor in the middle. You can use the search function at top right to find things more easily.")
+ update_objective("Serve the marine's request using the middle vendor. This one has a lot of things, you might want to use the search bar.")
+ if(TUTORIAL_REQS_LINE_STAGE_MIXED)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend/tutorial, ammo_vendor)
+ add_highlight(ammo_vendor)
+ add_highlight(loser_agent)
+ loser_agent.say("Wait! I really NEED a Mk2 Extended Mag. Throw me one!")
+ message_to_player("Seems the marine wanted ammo too. Grab some and high-toss it over to him, with [retrieve_bind("toggle_high_throw_mode")].")
+ update_objective("Get the M41 Extended magazine and perform a high toss to give it to the forgetful marine.")
+
+/datum/tutorial/marine/reqs_line/start_tutorial(mob/starting_mob)
+ . = ..()
+ if(!.)
+ return
+
+ init_mob()
+ START_PROCESSING(SSfastobj, src)
+
+ message_to_player("Welcome to Requisitions Line tutorial. Come in and have a seat.")
+ update_objective("Reach the line window to begin!")
+ var/turf/target_turf = loc_from_corner(3, 6)
+ RegisterSignal(target_turf, COMSIG_TURF_ENTERED, PROC_REF(user_in_position))
+
+
+/// Called when the player is in position to start handling the line
+/datum/tutorial/marine/reqs_line/proc/user_in_position(turf/source, atom/movable/mover)
+ SIGNAL_HANDLER
+ if(mover != tutorial_mob)
+ return
+ UnregisterSignal(source, COMSIG_TURF_ENTERED)
+ stage = TUTORIAL_REQS_LINE_STAGE_ATTACHIES
+ var/list/request = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel)
+ spawn_agent(request)
+
+/datum/tutorial/marine/reqs_line/proc/continue_stage_gearbox()
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/attachments/blend/tutorial, attachies_vendor)
+ remove_highlight(attachies_vendor)
+ message_to_player("Success!")
+ stage = TUTORIAL_REQS_LINE_STAGE_GEARBOX
+ var/list/request = list(/obj/item/storage/box/guncase/lmg, /obj/item/explosive/grenade/high_explosive)
+ spawn_agent(request)
+
+/datum/tutorial/marine/reqs_line/proc/continue_stage_mixed()
+ loser_agent = active_agent
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend/tutorial, gear_vendor)
+ remove_highlight(gear_vendor)
+ message_to_player("Success!")
+ stage = TUTORIAL_REQS_LINE_STAGE_MIXED
+ var/list/request = list(/obj/item/attachable/gyro, /obj/item/storage/box/guncase/m41aMK1, /obj/item/explosive/grenade/high_explosive)
+ spawn_agent(request)
+
+/datum/tutorial/marine/reqs_line/proc/loser_got_the_item(turf/source, atom/movable/passer)
+ SIGNAL_HANDLER
+ var/obj/item/prop/replacer/prop = passer
+ if(!istype(prop))
+ return
+ if(prop.original_type != /obj/item/ammo_magazine/rifle/extended)
+ return
+ qdel(prop)
+ loser_agent.say("Nice.")
+ remove_highlight(loser_agent)
+ TUTORIAL_ATOM_FROM_TRACKING(/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend/tutorial, ammo_vendor)
+ remove_highlight(ammo_vendor)
+
+ loser_agent = null // Resumes moving
+ // Unstucks the guy at line to move on too if he's already been served
+ if(active_agent)
+ var/list/request = agents[active_agent]
+ if(!length(request))
+ make_agent_leave(TRUE)
+
+/datum/tutorial/marine/reqs_line/proc/continue_stage_survival()
+ mark_completed()
+ message_to_player("Success! You have completed the tutorial!")
+ update_objective("You have finished the tutorial! But there's more if you want to practice.")
+ addtimer(CALLBACK(src, PROC_REF(message_to_player), "You may stay to practice with random orders, or quit with the button at top left."), 3 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(engage_survival_mode)), 12 SECONDS)
+
+/datum/tutorial/marine/reqs_line/proc/engage_survival_mode()
+ update_objective("Keep practicing with increasingly complex orders, or leave at any time with the button at top left.")
+ stage = TUTORIAL_REQS_LINE_STAGE_SURVIVAL
+
+/datum/map_template/tutorial/reqs_line
+ name = "Reqs Line Tutorial (8x11)"
+ mappath = "maps/tutorial/tutorial_reqs_line.dmm"
+ width = 8
+ height = 11
+
+/* === ITEMS USED IN THE TUTORIAL === */
+
+/// Deletes dummies coming onto it, purely and simply
+/obj/effect/landmark/tutorial/reqs_line_cleaner/Crossed(atom/movable/passer)
+ if(istype(passer, /mob/living/carbon/human))
+ qdel(passer)
+
+/* === VENDORS USED IN THE TUTORIAL === */
+
+/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend/tutorial
+ vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_LOAD_AMMO_BOXES | VEND_PROPS
+
+/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend/tutorial
+ vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_LOAD_AMMO_BOXES | VEND_PROPS
+
+/obj/structure/machinery/cm_vending/sorted/attachments/blend/tutorial
+ vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_LOAD_AMMO_BOXES | VEND_PROPS
+
+
+#undef TUTORIAL_REQS_LINE_STAGE_STARTING
+#undef TUTORIAL_REQS_LINE_STAGE_ATTACHIES
+#undef TUTORIAL_REQS_LINE_STAGE_GEARBOX
+#undef TUTORIAL_REQS_LINE_STAGE_MIXED
+#undef TUTORIAL_REQS_LINE_STAGE_SURVIVAL
+
+#undef TUTORIAL_REQS_LINE_SURVIVAL_DIFFICULTY
diff --git a/code/datums/tutorial/xenomorph/xenomorph_basic.dm b/code/datums/tutorial/xenomorph/xenomorph_basic.dm
index 276d2ac824f0..ad51756ecb25 100644
--- a/code/datums/tutorial/xenomorph/xenomorph_basic.dm
+++ b/code/datums/tutorial/xenomorph/xenomorph_basic.dm
@@ -108,6 +108,7 @@
UnregisterSignal(human_dummy, COMSIG_MOB_DEATH)
message_to_player("Well done. Killing humans is one of many ways to help the hive.")
message_to_player("Another way is to capture them. This will grow a new xenomorph inside them which will eventually burst into a new playable xenomorph!")
+ update_objective("")
addtimer(CALLBACK(human_dummy, TYPE_PROC_REF(/mob/living, rejuvenate)), 8 SECONDS)
addtimer(CALLBACK(src, PROC_REF(proceed_to_tackle_phase)), 10 SECONDS)
@@ -139,6 +140,7 @@
xeno.melee_damage_lower = 0
xeno.melee_damage_upper = 0
message_to_player("Well done. Under normal circumstances, you would have to keep tackling the human to keep them down, but for the purposes of this tutorial they will stay down forever.")
+ update_objective("")
addtimer(CALLBACK(src, PROC_REF(cap_phase)), 10 SECONDS)
/datum/tutorial/xenomorph/basic/proc/cap_phase()
@@ -147,6 +149,7 @@
add_to_tracking_atoms(morpher)
add_highlight(morpher, COLOR_YELLOW)
message_to_player("In the south west is an egg morpher. Click the egg morpher to take a facehugger.")
+ update_objective("Take a facehugger from the eggmorpher.")
RegisterSignal(xeno, COMSIG_XENO_TAKE_HUGGER_FROM_MORPHER, PROC_REF(take_facehugger_phase))
/datum/tutorial/xenomorph/basic/proc/take_facehugger_phase(source, hugger)
@@ -160,6 +163,7 @@
add_highlight(hugger, COLOR_YELLOW)
message_to_player("This is a facehugger, highlighted in yellow. Pick up the facehugger by clicking it.")
message_to_player("Stand next to the downed human and click them to apply the facehugger. Or drop the facehugger near them to see it leap onto their face automatically.")
+ update_objective("Apply the facehugger to the human.")
RegisterSignal(hugger, COMSIG_PARENT_QDELETING, PROC_REF(on_hugger_deletion))
RegisterSignal(human_dummy, COMSIG_HUMAN_IMPREGNATE, PROC_REF(nest_cap_phase), override = TRUE)
@@ -169,6 +173,7 @@
morpher.stored_huggers = 1
add_highlight(morpher, COLOR_YELLOW)
message_to_player("Click the egg morpher to take a facehugger.")
+ update_objective("Take a facehugger from the eggmorpher.")
RegisterSignal(xeno, COMSIG_XENO_TAKE_HUGGER_FROM_MORPHER, PROC_REF(take_facehugger_phase))
/datum/tutorial/xenomorph/basic/proc/nest_cap_phase()
@@ -182,6 +187,7 @@
message_to_player("We should nest the infected human to make sure they don't get away.")
message_to_player("Humans cannot escape nests without help, and the nest will keep them alive long enough for our new sister to burst forth.")
+ update_objective("")
addtimer(CALLBACK(src, PROC_REF(nest_cap_phase_two)), 10 SECONDS)
/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_two()
@@ -195,6 +201,7 @@
/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_three()
TUTORIAL_ATOM_FROM_TRACKING(/mob/living/carbon/human, human_dummy)
message_to_player("Grab the human using your grab intent. Or use control + click.")
+ update_objective("Grab the human using grab intent or ctrl-click.")
RegisterSignal(human_dummy, COMSIG_MOVABLE_XENO_START_PULLING, PROC_REF(nest_cap_phase_four))
/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_four()
@@ -202,6 +209,7 @@
TUTORIAL_ATOM_FROM_TRACKING(/mob/living/carbon/human, human_dummy)
UnregisterSignal(human_dummy, COMSIG_MOVABLE_XENO_START_PULLING)
message_to_player("Well done. Now devour the human by clicking on your character with the grab selected in your hand. You must not move during this process.")
+ update_objective("Devour the grabbed human by clicking on them with the grab in-hand.")
RegisterSignal(human_dummy, COMSIG_MOB_DEVOURED, PROC_REF(nest_cap_phase_five))
/datum/tutorial/xenomorph/basic/proc/nest_cap_phase_five()
diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm
index bad07104db22..250c81dfc3dc 100644
--- a/code/defines/procs/announcement.dm
+++ b/code/defines/procs/announcement.dm
@@ -44,7 +44,8 @@
continue
// If they have iff AND a marine headset they will recieve announcements
- if ((FACTION_MARINE in H.wear_id?.faction_group) && (istype(H.wear_l_ear, /obj/item/device/radio/headset/almayer) || istype(H.wear_r_ear, /obj/item/device/radio/headset/almayer)))
+ var/obj/item/card/id/card = H.get_idcard()
+ if ((FACTION_MARINE in card?.faction_group) && (istype(H.wear_l_ear, /obj/item/device/radio/headset/almayer) || istype(H.wear_r_ear, /obj/item/device/radio/headset/almayer)))
continue
if((H.faction != faction_to_display && !add_PMCs) || (H.faction != faction_to_display && add_PMCs && !(H.faction in FACTION_LIST_WY)) && !(faction_to_display in H.faction_group)) //faction checks
diff --git a/code/game/area/BigRed.dm b/code/game/area/BigRed.dm
index 8675655fe949..c5e96c78175a 100644
--- a/code/game/area/BigRed.dm
+++ b/code/game/area/BigRed.dm
@@ -515,27 +515,35 @@
is_resin_allowed = FALSE
ceiling_muffle = FALSE
base_muffle = MUFFLE_LOW
+ is_landing_zone = TRUE
/area/bigredv2/outside/telecomm/lz2_cave
name = "\improper Central Grounds Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/n_cave
name = "\improper North Cave Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/warehouse
name = "\improper Warehouse Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/security
name = "\improper Security Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/store
name = "\improper General Store Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/admin
name = "\improper Administrative Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/telecomm/engi
name = "\improper Engineering Communications Relay"
+ is_landing_zone = FALSE
/area/bigredv2/outside/engineering
diff --git a/code/game/area/Corsat.dm b/code/game/area/Corsat.dm
index f93745c3055c..7d2a55fac97f 100644
--- a/code/game/area/Corsat.dm
+++ b/code/game/area/Corsat.dm
@@ -523,7 +523,6 @@
/area/corsat/omega/hangar
name = "\improper Landing Bay Omega"
icon_state = "omega_hangar"
- is_landing_zone = TRUE
/area/corsat/omega/hangar/office
name = "\improper Omega Hangar Office"
diff --git a/code/game/area/DesertDam.dm b/code/game/area/DesertDam.dm
index 96e5eb1f62e5..9f53494b1bbf 100644
--- a/code/game/area/DesertDam.dm
+++ b/code/game/area/DesertDam.dm
@@ -216,6 +216,7 @@
/area/desert_dam/building/substation/northwest
name = "Command Substation"
icon_state = "northewestern_ss"
+ is_landing_zone = TRUE
/area/desert_dam/building/substation/northeast
name = "Command Substation"
icon_state = "northeastern_ss"
diff --git a/code/game/area/LV522_Chances_Claim.dm b/code/game/area/LV522_Chances_Claim.dm
index ffd6a5897e4e..c3e5c96ad4d7 100644
--- a/code/game/area/LV522_Chances_Claim.dm
+++ b/code/game/area/LV522_Chances_Claim.dm
@@ -48,6 +48,11 @@
name = "Chance's Claim - Landing Zone One Tunnels"
ceiling = CEILING_METAL
+/area/lv522/landing_zone_1/tunnel/far
+ name = "Chance's Claim - Landing Zone One Tunnels"
+ ceiling = CEILING_METAL
+ is_landing_zone = FALSE
+
/area/shuttle/drop1/lv522
name = "Chance's Claim - Dropship Alamo Landing Zone"
icon_state = "shuttle"
diff --git a/code/game/area/Prison_Station_FOP.dm b/code/game/area/Prison_Station_FOP.dm
index 0edc23556bf5..b1bfbc093c16 100644
--- a/code/game/area/Prison_Station_FOP.dm
+++ b/code/game/area/Prison_Station_FOP.dm
@@ -90,6 +90,7 @@
/area/prison/security/checkpoint/hangar
name = "\improper Main Hangar Traffic Control"
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/prison/storage
icon_state = "engine_storage"
@@ -211,6 +212,7 @@
name = "\improper Hangar-Barracks Maintenance"
icon_state = "maint_e_shuttle"
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/prison/canteen
name = "\improper Canteen"
@@ -457,6 +459,7 @@
/area/prison/monorail/east
name = "\improper East Monorail Station"
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/prison/monorail/west
name = "\improper West Monorail Station"
@@ -467,10 +470,12 @@
/area/prison/hanger/main
name = "\improper Main Hanger"
icon_state = "hangar_alpha"
+ is_landing_zone = TRUE
/area/prison/hanger/research
name = "\improper Research Hanger"
icon_state = "hangar_beta"
+ is_landing_zone = TRUE
/area/prison/hangar_storage/main
name = "\improper Main Hangar Storage"
@@ -480,9 +485,11 @@
name = "\improper Research Hangar Storage"
icon_state = "toxstorage"
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/prison/hangar_storage/research/shuttle
name = "Corporate Shuttle"
+ is_landing_zone = FALSE
/area/prison/telecomms
name = "\improper Telecommunications"
diff --git a/code/game/area/Sulaco.dm b/code/game/area/Sulaco.dm
index ae197537143a..a3d02b78636c 100644
--- a/code/game/area/Sulaco.dm
+++ b/code/game/area/Sulaco.dm
@@ -14,6 +14,7 @@
flags_area = AREA_NOTUNNEL
is_landing_zone = TRUE
ceiling = CEILING_REINFORCED_METAL
+ base_lighting_alpha = 0
/area/shuttle/drop1/Enter(atom/movable/O, atom/oldloc)
if(istype(O, /obj/structure/barricade))
@@ -24,6 +25,7 @@
name = "\improper Dropship Alamo"
icon_state = "shuttlered"
base_muffle = MUFFLE_HIGH
+ base_lighting_alpha = 255
/area/shuttle/drop1/LV624
name = "\improper Dropship Alamo"
@@ -71,11 +73,13 @@
flags_area = AREA_NOTUNNEL
is_landing_zone = TRUE
ceiling = CEILING_REINFORCED_METAL
+ base_lighting_alpha = 0
/area/shuttle/drop2/sulaco
name = "\improper Dropship Normandy"
icon_state = "shuttle"
base_muffle = MUFFLE_HIGH
+ base_lighting_alpha = 255
/area/shuttle/drop2/LV624
name = "\improper Dropship Normandy"
diff --git a/code/game/area/kutjevo.dm b/code/game/area/kutjevo.dm
index a5a12cd5b999..d0a4a30118b0 100644
--- a/code/game/area/kutjevo.dm
+++ b/code/game/area/kutjevo.dm
@@ -203,12 +203,14 @@
icon_state = "Colony_int"
ceiling = CEILING_METAL
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/kutjevo/interior/complex/Northwest_Flight_Control
name = "Kutjevo Complex - Northwest Flight Control Room"
icon_state = "Colony_int"
ceiling = CEILING_METAL
is_resin_allowed = FALSE
+ is_landing_zone = TRUE
/area/kutjevo/interior/complex/Northwest_Security_Checkpoint
name = "Kutjevo Complex - Northwest Security Checkpoint"
@@ -216,6 +218,7 @@
ceiling = CEILING_METAL
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_SEC
+ is_landing_zone = TRUE
//Out buildings + foremans
/area/kutjevo/interior/power
diff --git a/code/game/area/prison.dm b/code/game/area/prison.dm
index e22581658ee5..3ee209a6940b 100644
--- a/code/game/area/prison.dm
+++ b/code/game/area/prison.dm
@@ -57,6 +57,7 @@
name = "\improper control room"
icon_state = "bridge"
minimap_color = MINIMAP_AREA_COMMAND
+ is_landing_zone = TRUE
/area/prison/hallway/central_ring
name = "\improper central ring"
diff --git a/code/game/area/prison_v3_fiorina.dm b/code/game/area/prison_v3_fiorina.dm
index 9c60f8173ab8..c02ed0310816 100644
--- a/code/game/area/prison_v3_fiorina.dm
+++ b/code/game/area/prison_v3_fiorina.dm
@@ -183,6 +183,7 @@
/area/fiorina/station/telecomm/lz1_tram
name = "Fiorina - LZ1 Aux Port Communications Relay"
+ is_landing_zone = TRUE
/area/fiorina/station/telecomm/lz1_engineering
name = "Fiorina - Engineering Primary Communications Relay"
diff --git a/code/game/area/shiva.dm b/code/game/area/shiva.dm
index 89d8074030ac..fc7424f8146b 100644
--- a/code/game/area/shiva.dm
+++ b/code/game/area/shiva.dm
@@ -239,6 +239,10 @@
name = "Shiva's Snowball - Blue Warehouse"
icon_state = "hangars1"
+/area/shiva/interior/warehouse/caves
+ name = "Shiva's Snowball - Blue Warehouse Ice Cave"
+ icon_state = "caves1"
+
/area/shiva/interior/valley_huts
name = "Shiva's Snowball - Valley Bunker 1"
icon_state = "hangars1"
@@ -251,10 +255,6 @@
name = "Shiva's Snowball - Valley Disposals"
icon_state = "hangars3"
-/area/shiva/interior/warehouse/caves
- name = "Shiva's Snowball - Blue Warehouse Ice Cave"
- icon_state = "caves1"
-
/area/shiva/interior/garage
name = "Shiva's Snowball - Cargo Tug Repair Station"
icon_state = "hangars2"
@@ -262,6 +262,7 @@
/area/shiva/interior/lz2_habs
name = "Shiva's Snowball - Argentinian Research Headquarters"
icon_state = "bar1"
+ is_landing_zone = TRUE
/area/shiva/interior/aux_power
name = "Shiva's Snowball - Auxiliary Generator Station"
diff --git a/code/game/area/varadero.dm b/code/game/area/varadero.dm
index 682f3ded1c66..aac37bdf942a 100644
--- a/code/game/area/varadero.dm
+++ b/code/game/area/varadero.dm
@@ -84,6 +84,7 @@
requires_power = FALSE
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_LZ
+ is_landing_zone = TRUE
/area/varadero/exterior/lz1_console/two
name = "New Varadero - Palm Airfield"
@@ -98,12 +99,14 @@
icon_state = "lz1"
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_LZ
+ is_landing_zone = TRUE
/area/varadero/exterior/lz2_near
name = "New Varadero - Palm Airfield"
icon_state = "lz2"
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_LZ
+ is_landing_zone = TRUE
/area/varadero/exterior/pontoon_beach
name = "New Varadero - Rockabilly Beach"
@@ -111,6 +114,9 @@
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_JUNGLE
+/area/varadero/exterior/pontoon_beach/lz
+ is_landing_zone = TRUE
+
/area/varadero/exterior/eastbeach
name = "New Varadero - East Beach"
is_resin_allowed = FALSE
@@ -157,6 +163,7 @@
is_resin_allowed = FALSE
minimap_color = MINIMAP_AREA_JUNGLE
sound_environment = SOUND_ENVIRONMENT_ROOM
+ is_landing_zone = TRUE
/area/varadero/interior/cargo
name = "New Varadero - Cargo"
diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm
index ddb6e10ba319..526e4b4bc2b9 100644
--- a/code/game/gamemodes/colonialmarines/colonialmarines.dm
+++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm
@@ -1,5 +1,6 @@
#define HIJACK_EXPLOSION_COUNT 5
-#define MARINE_MAJOR_ROUND_END_DELAY 3 MINUTES
+#define MARINE_MAJOR_ROUND_END_DELAY (3 MINUTES)
+#define LZ_HAZARD_START (3 MINUTES)
/datum/game_mode/colonialmarines
name = "Distress Signal"
@@ -16,6 +17,7 @@
var/next_research_allocation = 0
var/next_stat_check = 0
var/list/running_round_stats = list()
+ var/list/lz_smoke = list()
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
@@ -120,9 +122,118 @@
addtimer(CALLBACK(src, PROC_REF(ares_online)), 5 SECONDS)
addtimer(CALLBACK(src, PROC_REF(map_announcement)), 20 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(start_lz_hazards)), LZ_HAZARD_START)
return ..()
+/datum/game_mode/colonialmarines/ds_first_landed(obj/docking_port/stationary/marine_dropship)
+ . = ..()
+ clear_lz_hazards() // This shouldn't normally do anything, but is here just in case
+
+ // Assumption: Shuttle origin is its center
+ // Assumption: dwidth is atleast 2 and dheight is atleast 4 otherwise there will be overlap
+ var/list/options = list()
+ var/list/structures_to_break = list(/obj/structure/barricade, /obj/structure/surface/table, /obj/structure/bed)
+ var/bottom = marine_dropship.y - marine_dropship.dheight - 2
+ var/top = marine_dropship.y + marine_dropship.dheight + 2
+ var/left = marine_dropship.x - marine_dropship.dwidth - 2
+ var/right = marine_dropship.x + marine_dropship.dwidth + 2
+ var/z = marine_dropship.z
+
+ // Bottom left
+ options += get_valid_sentry_turfs(left, bottom, z, width=5, height=2, structures_to_ignore=structures_to_break)
+ options += get_valid_sentry_turfs(left, bottom + 2, z, width=2, height=6, structures_to_ignore=structures_to_break)
+ spawn_lz_sentry(pick(options), structures_to_break)
+
+ // Bottom right
+ options.Cut()
+ options += get_valid_sentry_turfs(right-4, bottom, z, width=5, height=2, structures_to_ignore=structures_to_break)
+ options += get_valid_sentry_turfs(right-1, bottom + 2, z, width=2, height=6, structures_to_ignore=structures_to_break)
+ spawn_lz_sentry(pick(options), structures_to_break)
+
+ // Top left
+ options.Cut()
+ options += get_valid_sentry_turfs(left, top-1, z, width=5, height=2, structures_to_ignore=structures_to_break)
+ options += get_valid_sentry_turfs(left, top-7, z, width=2, height=6, structures_to_ignore=structures_to_break)
+ spawn_lz_sentry(pick(options), structures_to_break)
+
+ // Top right
+ options.Cut()
+ options += get_valid_sentry_turfs(right-4, top-1, z, width=5, height=2, structures_to_ignore=structures_to_break)
+ options += get_valid_sentry_turfs(right-1, top-7, z, width=2, height=6, structures_to_ignore=structures_to_break)
+ spawn_lz_sentry(pick(options), structures_to_break)
+
+///Returns a list of non-dense turfs using the given block arguments ignoring the provided structure types
+/datum/game_mode/colonialmarines/proc/get_valid_sentry_turfs(left, bottom, z, width, height, list/structures_to_ignore)
+ var/valid_turfs = list()
+ for(var/turf/turf as anything in block(left, bottom, z, left+width-1, bottom+height-1))
+ if(turf.density)
+ continue
+ var/structure_blocking = FALSE
+ for(var/obj/structure/existing_structure in turf)
+ if(!existing_structure.density)
+ continue
+ if(!is_type_in_list(existing_structure, structures_to_ignore))
+ structure_blocking = TRUE
+ break
+ if(structure_blocking)
+ continue
+ valid_turfs += turf
+ return valid_turfs
+
+///Spawns a droppod with a temporary defense sentry at the given turf
+/datum/game_mode/colonialmarines/proc/spawn_lz_sentry(turf/target, list/structures_to_break)
+ var/obj/structure/droppod/equipment/sentry_holder/droppod = new(target, /obj/structure/machinery/sentry_holder/landing_zone)
+ droppod.special_structures_to_damage = structures_to_break
+ droppod.special_structure_damage = 500
+ droppod.drop_time = 0
+ droppod.launch(target)
+
+///Creates an OB warning at each LZ to warn of the miasma and then spawns the miasma
+/datum/game_mode/colonialmarines/proc/start_lz_hazards()
+ if(SSobjectives.first_drop_complete)
+ return // Just for sanity
+ INVOKE_ASYNC(src, PROC_REF(warn_lz_hazard), locate(/obj/structure/machinery/computer/shuttle/dropship/flight/lz1))
+ INVOKE_ASYNC(src, PROC_REF(warn_lz_hazard), locate(/obj/structure/machinery/computer/shuttle/dropship/flight/lz2))
+ addtimer(CALLBACK(src, PROC_REF(spawn_lz_hazards)), OB_TRAVEL_TIMING + 1 SECONDS)
+
+///Creates an OB warning at each LZ to warn of the incoming miasma
+/datum/game_mode/colonialmarines/proc/warn_lz_hazard(lz)
+ if(!lz)
+ return
+ var/turf/target = get_turf(lz)
+ if(!target)
+ return
+ var/obj/structure/ob_ammo/warhead/explosive/warhead = new
+ warhead.name = "\improper CN20-X miasma warhead"
+ warhead.clear_power = 0
+ warhead.clear_falloff = 400
+ warhead.standard_power = 0
+ warhead.standard_falloff = 30
+ warhead.clear_delay = 3
+ warhead.double_explosion_delay = 6
+ warhead.warhead_impact(target) // This is a blocking call
+ playsound(target, 'sound/effects/smoke.ogg', vol=50, vary=1, sound_range=75)
+
+///Spawns miasma smoke in landing zones
+/datum/game_mode/colonialmarines/proc/spawn_lz_hazards()
+ var/datum/cause_data/new_cause_data = create_cause_data("CN20-X miasma")
+ for(var/area/area in GLOB.all_areas)
+ if(!area.is_landing_zone)
+ continue
+ if(!is_ground_level(area.z))
+ continue
+ for(var/turf/turf in area)
+ if(turf.density)
+ continue
+ lz_smoke += new /obj/effect/particle_effect/smoke/miasma(turf, null, new_cause_data)
+
+///Clears miasma smoke in landing zones
+/datum/game_mode/colonialmarines/proc/clear_lz_hazards()
+ for(var/obj/effect/particle_effect/smoke/miasma/smoke as anything in lz_smoke)
+ smoke.time_to_live = rand(1, 5)
+ lz_smoke.Cut()
+
#define MONKEYS_TO_TOTAL_RATIO 1/32
/datum/game_mode/colonialmarines/proc/spawn_smallhosts()
@@ -289,6 +400,7 @@
/datum/game_mode/colonialmarines/ds_first_drop(obj/docking_port/mobile/marine_dropship)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(show_blurb_uscm)), DROPSHIP_DROP_MSG_DELAY)
add_current_round_status_to_end_results("First Drop")
+ clear_lz_hazards()
///////////////////////////
//Checks to see who won///
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
index c5b25d3e1538..e7a43debb5fc 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
@@ -18,7 +18,7 @@
/datum/job/civilian/synthetic/whiskey = JOB_SYNTH,
/datum/job/command/warrant/whiskey = JOB_CHIEF_POLICE,
/datum/job/command/bridge/whiskey = JOB_SO,
- /datum/job/command/tank_crew/whiskey = JOB_CREWMAN,
+ /datum/job/command/tank_crew/whiskey = JOB_TANK_CREW,
/datum/job/command/police/whiskey = JOB_POLICE,
/datum/job/command/pilot/whiskey = JOB_CAS_PILOT,
/datum/job/logistics/requisition/whiskey = JOB_CHIEF_REQUISITION,
diff --git a/code/game/jobs/job/command/auxiliary/tank_crew.dm b/code/game/jobs/job/command/auxiliary/tank_crew.dm
new file mode 100644
index 000000000000..88b289d48ace
--- /dev/null
+++ b/code/game/jobs/job/command/auxiliary/tank_crew.dm
@@ -0,0 +1,28 @@
+/datum/job/command/tank_crew
+ title = JOB_TANK_CREW
+ total_positions = 2
+ spawn_positions = 2
+ allow_additional = TRUE
+ scaled = TRUE
+ supervisors = "the acting commanding officer"
+ flags_startup_parameters = ROLE_ADD_TO_DEFAULT
+ gear_preset = /datum/equipment_preset/uscm/tank
+ entry_message_body = "Your job is to operate and maintain the ship's armored vehicles. You are in charge of representing the armored presence amongst the marines during the operation, as well as maintaining and repairing your own vehicles."
+
+/datum/job/command/tank_crew/set_spawn_positions(count)
+ if (length(GLOB.clients) >= 200)
+ spawn_positions = 2
+ else
+ spawn_positions = 0
+
+/datum/job/command/tank_crew/get_total_positions(latejoin = FALSE)
+ if(SStechtree.trees[TREE_MARINE].get_node(/datum/tech/arc).unlocked)
+ return 0
+ if(length(GLOB.clients) >= 200 || total_positions_so_far > 0)
+ return 2
+
+ return 0
+
+/obj/effect/landmark/start/tank_crew
+ name = JOB_TANK_CREW
+ job = /datum/job/command/tank_crew
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 1a04c3cafeb5..d758e187ce70 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -176,7 +176,7 @@
var/datum/money_account/generated_account
//Give them an account in the database.
if(!(flags_startup_parameters & ROLE_NO_ACCOUNT))
- var/obj/item/card/id/card = account_user.wear_id
+ var/obj/item/card/id/card = account_user.get_idcard()
var/user_has_preexisting_account = account_user.mind?.initial_account
if(card && !user_has_preexisting_account)
var/datum/paygrade/account_paygrade = GLOB.paygrades[card.paygrade]
diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm
index 756369c8eb5b..3285e75e45c3 100644
--- a/code/game/jobs/job/marine/squads.dm
+++ b/code/game/jobs/job/marine/squads.dm
@@ -452,7 +452,7 @@
var/obj/item/card/id/C = ID
if(!C)
- C = M.wear_id
+ C = M.get_idcard()
if(!C)
C = M.get_active_hand()
if(!istype(C))
@@ -554,7 +554,7 @@
return //not assigned to the correct squad
var/obj/item/card/id/C = ID
if(!istype(C))
- C = M.wear_id
+ C = M.get_idcard()
if(!istype(C))
return FALSE //Abort, no ID found
@@ -637,9 +637,9 @@
R.keys -= key
qdel(key)
R.recalculateChannels()
- if(istype(old_lead.wear_id, /obj/item/card/id))
- var/obj/item/card/id/ID = old_lead.wear_id
- ID.access -= ACCESS_MARINE_LEADER
+ var/obj/item/card/id/card = old_lead.get_idcard()
+ if(card)
+ card.access -= ACCESS_MARINE_LEADER
REMOVE_TRAITS_IN(old_lead, TRAIT_SOURCE_SQUAD_LEADER)
old_lead.hud_set_squad()
old_lead.update_inv_head() //updating marine helmet leader overlays
diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm
index 58c9ad5b5092..a9017e2cc8d3 100644
--- a/code/game/jobs/role_authority.dm
+++ b/code/game/jobs/role_authority.dm
@@ -61,7 +61,6 @@ GLOBAL_VAR_INIT(players_preassigned, 0)
/datum/job/special/uaac,
/datum/job/special/uaac/tis,
/datum/job/special/uscm,
- /datum/job/command/tank_crew //Rip VC
)
var/squads_all[] = typesof(/datum/squad) - /datum/squad
var/castes_all[] = subtypesof(/datum/caste_datum)
diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm
index 02695e2e6d4b..0316274774be 100644
--- a/code/game/machinery/ARES/ARES_interface.dm
+++ b/code/game/machinery/ARES/ARES_interface.dm
@@ -251,8 +251,8 @@
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else if(operator.wear_id)
- idcard = operator.wear_id
- if(istype(idcard))
+ idcard = operator.get_idcard()
+ if(idcard)
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else
diff --git a/code/game/machinery/ARES/ARES_interface_apollo.dm b/code/game/machinery/ARES/ARES_interface_apollo.dm
index 243ecdf1355f..93637f39d1a7 100644
--- a/code/game/machinery/ARES/ARES_interface_apollo.dm
+++ b/code/game/machinery/ARES/ARES_interface_apollo.dm
@@ -175,8 +175,8 @@
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else if(user.wear_id)
- idcard = user.wear_id
- if(istype(idcard))
+ idcard = user.get_idcard()
+ if(idcard)
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else
@@ -317,8 +317,8 @@
if(istype(idcard))
has_id = TRUE
else if(user.wear_id)
- idcard = user.wear_id
- if(istype(idcard))
+ idcard = user.get_idcard()
+ if(idcard)
has_id = TRUE
if(!has_id)
to_chat(user, SPAN_WARNING("You require an ID card to request an access ticket!"))
diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm
index 2c6d605bcc9b..77a53200ddd3 100644
--- a/code/game/machinery/ARES/ARES_step_triggers.dm
+++ b/code/game/machinery/ARES/ARES_step_triggers.dm
@@ -33,9 +33,10 @@
return FALSE
if(ishuman(passer))
var/mob/living/carbon/human/trespasser = passer
- if(pass_accesses && (trespasser.wear_id))
+ var/obj/item/card/id/card = trespasser.get_idcard()
+ if(pass_accesses && card)
for(var/tag in pass_accesses)
- if(tag in trespasser.wear_id.access)
+ if(tag in card.access)
return FALSE
Trigger(passer)
return TRUE
@@ -123,11 +124,9 @@
var/check_contents = TRUE
if(ishuman(passer))
var/mob/living/carbon/human/human_passer = passer
- idcard = human_passer.wear_id
- if(istype(idcard))
+ idcard = human_passer.get_idcard()
+ if(idcard)
check_contents = FALSE
- else
- idcard = null
if(istype(passer, /obj/item/card/id))
idcard = passer
diff --git a/code/game/machinery/ARES/apollo_pda.dm b/code/game/machinery/ARES/apollo_pda.dm
index 787b194ffb44..7b92b869daeb 100644
--- a/code/game/machinery/ARES/apollo_pda.dm
+++ b/code/game/machinery/ARES/apollo_pda.dm
@@ -198,8 +198,8 @@
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else if(user.wear_id)
- idcard = user.wear_id
- if(istype(idcard))
+ idcard = user.get_idcard()
+ if(idcard)
authentication = get_ares_access(idcard)
last_login = idcard.registered_name
else
@@ -343,8 +343,8 @@
if(istype(idcard))
has_id = TRUE
else if(user.wear_id)
- idcard = user.wear_id
- if(istype(idcard))
+ idcard = user.get_idcard()
+ if(idcard)
has_id = TRUE
if(!has_id)
to_chat(user, SPAN_WARNING("You require an ID card to request an access ticket!"))
diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm
index 0090a6673961..8cd043e23998 100644
--- a/code/game/machinery/computer/almayer_control.dm
+++ b/code/game/machinery/computer/almayer_control.dm
@@ -139,7 +139,7 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
+ idcard = human_user.get_idcard()
if(!istype(idcard))
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
@@ -198,8 +198,8 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
- if(!istype(idcard))
+ idcard = human_user.get_idcard()
+ if(!idcard)
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
bio_fail = TRUE
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 6ed2a8c7be64..dec523ccc5b2 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -81,8 +81,8 @@
if(ACCESS_MARINE_SENIOR in I.access)
authenticated = 2
else
- I = C.wear_id
- if(istype(I))
+ I = C.get_idcard()
+ if(I)
if(check_access(I)) authenticated = 1
if(ACCESS_MARINE_SENIOR in I.access)
authenticated = 2
@@ -117,8 +117,8 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
- if(!istype(idcard))
+ idcard = human_user.get_idcard()
+ if(idcard)
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
bio_fail = TRUE
@@ -171,8 +171,8 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
- if(!istype(idcard))
+ idcard = human_user.get_idcard()
+ if(!idcard)
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
bio_fail = TRUE
diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm
index 5d61ed536618..abd3ab50b75c 100644
--- a/code/game/machinery/computer/dropship_weapons.dm
+++ b/code/game/machinery/computer/dropship_weapons.dm
@@ -621,7 +621,8 @@
. = list()
var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction]
for(var/datum/cas_signal/LT as anything in cas_group.cas_signals)
- if(!istype(LT) || !LT.valid_signal())
+ var/obj/object = LT.signal_loc
+ if(!istype(LT) || !LT.valid_signal() || !is_ground_level(object.z))
continue
var/area/laser_area = get_area(LT.signal_loc)
. += list(
diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm
index 52ff558cde89..591c63a76bee 100644
--- a/code/game/machinery/computer/groundside_operations.dm
+++ b/code/game/machinery/computer/groundside_operations.dm
@@ -153,12 +153,11 @@
if(A)
area_name = sanitize_area(A.name)
+ var/obj/item/card/id/card = H.get_idcard()
if(H.job)
role = H.job
- else if(istype(H.wear_id, /obj/item/card/id)) //decapitated marine is mindless,
- var/obj/item/card/id/ID = H.wear_id //we use their ID to get their role.
- if(ID.rank)
- role = ID.rank
+ else if(card?.rank) //decapitated marine is mindless,
+ role = card.rank
switch(H.stat)
if(CONSCIOUS)
@@ -216,8 +215,8 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
- if(!istype(idcard))
+ idcard = human_user.get_idcard()
+ if(!idcard)
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
bio_fail = TRUE
@@ -244,8 +243,8 @@
var/signed = null
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/id = H.wear_id
- if(istype(id))
+ var/obj/item/card/id/id = H.get_idcard()
+ if(id)
var/paygrade = get_paygrades(id.paygrade, FALSE, H.gender)
signed = "[paygrade] [id.registered_name]"
@@ -322,8 +321,8 @@
var/obj/item/card/id/idcard = human_user.get_active_hand()
var/bio_fail = FALSE
if(!istype(idcard))
- idcard = human_user.wear_id
- if(!istype(idcard))
+ idcard = human_user.get_idcard()
+ if(!idcard)
bio_fail = TRUE
else if(!idcard.check_biometrics(human_user))
bio_fail = TRUE
@@ -362,7 +361,7 @@
//returns the helmet camera the human is wearing
/obj/structure/machinery/computer/groundside_operations/proc/get_camera_from_target(mob/living/carbon/human/H)
- if(current_squad)
+ if(current_squad || show_command_squad)
if(H && istype(H) && istype(H.head, /obj/item/clothing/head/helmet/marine))
var/obj/item/clothing/head/helmet/marine/helm = H.head
return helm.camera
@@ -390,4 +389,8 @@
has_squad_overwatch = FALSE
minimap_type = MINIMAP_FLAG_PMC
+/obj/structure/machinery/computer/groundside_operations/arc
+ icon = 'icons/obj/vehicles/interiors/arc.dmi'
+ icon_state = "groundsideop_computer"
+
#undef COMMAND_SQUAD
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index c2aac2cf9e75..61972f2f6c46 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -193,6 +193,11 @@
var/is_on = on && operable()
icon_state = "[icon_state]-[is_on ? "on" : "off"]-[occupant ? "occupied" : "empty"]"
+/obj/structure/machinery/cryo_cell/Destroy()
+ if(occupant)
+ go_out()
+ . = ..()
+
/obj/structure/machinery/cryo_cell/proc/process_occupant()
if(!occupant)
return
diff --git a/code/game/machinery/fax_machine.dm b/code/game/machinery/fax_machine.dm
index b3c981a0cf71..b15117bb2554 100644
--- a/code/game/machinery/fax_machine.dm
+++ b/code/game/machinery/fax_machine.dm
@@ -387,7 +387,8 @@ GLOBAL_LIST_EMPTY(alldepartments)
to_chat(C, msg_admin)
else
to_chat(C, msg_ghost)
- C << 'sound/effects/incoming-fax.ogg'
+ if(C.prefs?.toggles_sound & SOUND_FAX_MACHINE)
+ C << 'sound/effects/incoming-fax.ogg'
if(msg_ghost)
for(var/i in GLOB.observer_list)
var/mob/dead/observer/g = i
@@ -398,7 +399,8 @@ GLOBAL_LIST_EMPTY(alldepartments)
if((R_ADMIN|R_MOD) & C.admin_holder.rights) //staff don't need to see the fax twice
continue
to_chat(C, msg_ghost)
- C << 'sound/effects/incoming-fax.ogg'
+ if(C.prefs?.toggles_sound & SOUND_FAX_MACHINE)
+ C << 'sound/effects/incoming-fax.ogg'
/obj/structure/machinery/faxmachine/proc/send_fax(datum/fax/faxcontents)
diff --git a/code/game/machinery/fuelcell_recycler.dm b/code/game/machinery/fuelcell_recycler.dm
index 89024adb41fb..12ae7c40f80f 100644
--- a/code/game/machinery/fuelcell_recycler.dm
+++ b/code/game/machinery/fuelcell_recycler.dm
@@ -3,7 +3,6 @@
desc = "A large machine with whirring fans and two cylindrical holes in the top. Used to regenerate fuel cells."
icon = 'icons/obj/structures/machinery/fusion_eng.dmi'
icon_state = "recycler"
- density = TRUE
active_power_usage = 15000
unslashable = TRUE
unacidable = TRUE
@@ -21,6 +20,11 @@
QDEL_NULL(cell_left)
QDEL_NULL(cell_right)
+/obj/structure/machinery/fuelcell_recycler/ex_act(severity)
+ if(indestructible)
+ return
+ . = ..()
+
/obj/structure/machinery/fuelcell_recycler/get_examine_text(mob/user)
. = ..()
. += SPAN_INFO("It is [machine_processing ? "online" : "offline"].")
@@ -151,11 +155,6 @@
return
icon_state = "recycler_on"
-/obj/structure/machinery/fuelcell_recycler/ex_act(severity)
- if(indestructible)
- return
- . = ..()
-
/obj/structure/machinery/fuelcell_recycler/proc/turn_off()
visible_message(SPAN_NOTICE("[src] stops whirring as it turns off."))
stop_processing()
diff --git a/code/game/machinery/sentry_holder.dm b/code/game/machinery/sentry_holder.dm
index 255e718f40b8..27cfe0cfcec8 100644
--- a/code/game/machinery/sentry_holder.dm
+++ b/code/game/machinery/sentry_holder.dm
@@ -116,6 +116,11 @@
desc = "A box that deploys a sentry turret for protection of the residents in the area."
turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/colony
+/obj/structure/machinery/sentry_holder/wy
+ health = 200
+ desc = "A box that deploys a sentry turret for protecting Weyland-Yutani personnel"
+ turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/wy
+
/obj/structure/machinery/sentry_holder/almayer
icon_state = "floor_sentry_installed"
turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/almayer
@@ -143,3 +148,41 @@
/obj/structure/machinery/sentry_holder/almayer/mini/aicore/attack_hand(mob/user)
to_chat(user, SPAN_WARNING("[src] can only be deployed remotely."))
return
+
+/obj/structure/machinery/sentry_holder/landing_zone
+ icon_state = "floor_sentry_installed" // TODO: More appropriate sprites
+ turret_path = /obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone
+ base_icon_state = "floor_sentry" // TODO: More appropriate sprites
+ layer = HATCH_LAYER // Needs to not hide barricades
+
+/obj/structure/machinery/sentry_holder/landing_zone/attack_hand(mob/user)
+ var/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone/turret = deployed_turret
+ if(!istype(turret))
+ to_chat(user, SPAN_WARNING("[src] is unresponsive."))
+ return
+
+ if(deployment_cooldown > world.time)
+ to_chat(user, SPAN_WARNING("[src] is busy."))
+ return
+
+ if(deployed_turret.loc == src) //not deployed
+ if(turret.battery_state == TURRET_BATTERY_STATE_DEAD)
+ to_chat(user, SPAN_WARNING("[src] is non-functional."))
+ return
+
+ if(require_red_alert && (seclevel2num(get_security_level()) < SEC_LEVEL_RED))
+ to_chat(user, SPAN_WARNING("[src] can only be activated in emergencies."))
+ return
+
+ to_chat(user, SPAN_NOTICE("You deploy [src]."))
+ deploy_sentry()
+ msg_admin_niche("[key_name(user)] deployed [turret] at [get_location_in_text(src)] [ADMIN_JMP(loc)]")
+ return
+
+ to_chat(user, SPAN_NOTICE("You retract [src]."))
+ msg_admin_niche("[key_name(user)] retracted [turret] at [get_location_in_text(src)] [ADMIN_JMP(loc)]")
+ undeploy_sentry()
+ return
+
+/obj/structure/machinery/sentry_holder/landing_zone/update_use_power(new_use_power)
+ return
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index 6c55ce8c7946..afce800b0af4 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -574,8 +574,8 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("That set is already taken."))
vend_fail()
return FALSE
- var/obj/item/card/id/ID = human_user.wear_id
- if(!istype(ID) || !ID.check_biometrics(user))
+ var/obj/item/card/id/card = human_user.get_idcard()
+ if(!card?.check_biometrics(user))
to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("dog tags")] to select a specialization!"))
return FALSE
var/specialist_assignment
@@ -604,8 +604,8 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("Something bad occurred with [src], tell a Dev."))
vend_fail()
return FALSE
- ID.set_assignment((human_user.assigned_squad ? (human_user.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([specialist_assignment])")
- GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), ID.assignment)
+ card.set_assignment((human_user.assigned_squad ? (human_user.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([specialist_assignment])")
+ GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment)
GLOB.available_specialist_sets -= p_name
else if(vendor_role.Find(JOB_SYNTH))
if(user.job != JOB_SYNTH)
@@ -807,8 +807,8 @@ GLOBAL_LIST_EMPTY(vending_products)
return FALSE
var/mob/living/carbon/human/human_user = user
- var/obj/item/card/id/idcard = human_user.wear_id
- if(!istype(idcard))
+ var/obj/item/card/id/idcard = human_user.get_idcard()
+ if(!idcard)
if(display)
to_chat(user, SPAN_WARNING("Access denied. No ID card detected"))
vend_fail()
@@ -1384,7 +1384,9 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list(
/obj/structure/machinery/cm_vending/proc/vendor_successful_vend_one(prod_type, mob/living/carbon/human/user, turf/target_turf, insignas_override, stack_amount)
var/obj/item/new_item
- if(ispath(prod_type, /obj/item))
+ if(vend_flags & VEND_PROPS)
+ new_item = new /obj/item/prop/replacer(target_turf, prod_type)
+ else if(ispath(prod_type, /obj/item))
if(ispath(prod_type, /obj/item/weapon/gun))
new_item = new prod_type(target_turf, TRUE)
else
@@ -1404,10 +1406,11 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list(
if(vend_flags & VEND_UNIFORM_RANKS)
if(insignas_override)
var/obj/item/clothing/under/underclothes = new_item
+ var/obj/item/card/id/card = user.get_idcard()
//Gives ranks to the ranked
- if(istype(underclothes) && user.wear_id && user.wear_id.paygrade)
- var/rankpath = get_rank_pins(user.wear_id.paygrade)
+ if(istype(underclothes) && card?.paygrade)
+ var/rankpath = get_rank_pins(card.paygrade)
if(rankpath)
var/obj/item/clothing/accessory/ranks/rank_insignia = new rankpath()
var/obj/item/clothing/accessory/patch/uscmpatch = new()
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index a5e166451457..1ece8d353d4f 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -5,7 +5,7 @@
desc = "An automated gear rack hooked up to a colossal storage of various medical and engineering supplies. Can be accessed only by synthetic units."
icon_state = "gear"
req_access = list(ACCESS_MARINE_SYNTH)
- vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR)
+ vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH)
listed_products = list(
list("ENGINEER SUPPLIES", 0, null, null, null),
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list(
name = "\improper ColMarTech Synthetic Equipment Rack"
desc = "An automated rack hooked up to a colossal storage of various equipment. Can be accessed only by synthetic units."
req_access = list(ACCESS_MARINE_SYNTH)
- vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR)
+ vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH)
/obj/structure/machinery/cm_vending/clothing/synth/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_synth
@@ -273,6 +273,27 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list(
list("Corpsman Helmet", 12, /obj/item/clothing/head/helmet/marine/medic, null, VENDOR_ITEM_REGULAR),
list("Attachable Helmet Shield", 12, /obj/item/prop/helmetgarb/riot_shield, null, VENDOR_ITEM_REGULAR),
+ list("MASK", 0, null, null, null),
+ list("Surgical Mask", 12, /obj/item/clothing/mask/surgical, null, VENDOR_ITEM_REGULAR),
+ list("Rebreather", 12, /obj/item/clothing/mask/rebreather, null, VENDOR_ITEM_REGULAR),
+ list("Skull Balaclava, Blue", 12, /obj/item/clothing/mask/rebreather/skull, null, VENDOR_ITEM_REGULAR),
+ list("Skull balaclava, Black", 12, /obj/item/clothing/mask/rebreather/skull/black, null, VENDOR_ITEM_REGULAR),
+ list("Balaclava", 12, /obj/item/clothing/mask/rebreather/scarf, null, VENDOR_ITEM_REGULAR),
+ list("Balaclava (Green)", 12, /obj/item/clothing/mask/rebreather/scarf/green, null, VENDOR_ITEM_REGULAR),
+ list("Balaclava (Tan)", 12, /obj/item/clothing/mask/rebreather/scarf/tan, null, VENDOR_ITEM_REGULAR),
+ list("Balaclava (Grey)", 12, /obj/item/clothing/mask/rebreather/scarf/gray, null, VENDOR_ITEM_REGULAR),
+ list("Wrap (Grey)", 12, /obj/item/clothing/mask/rebreather/scarf/tacticalmask, null, VENDOR_ITEM_REGULAR),
+ list("Wrap (Red)", 12, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/red, null, VENDOR_ITEM_REGULAR),
+ list("Wrap (Green)", 12, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, null, VENDOR_ITEM_REGULAR),
+ list("Wrap (Tan)", 12, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/tan, null, VENDOR_ITEM_REGULAR),
+ list("Wrap (Black)", 12, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/black, null, VENDOR_ITEM_REGULAR),
+ list("Scarf", 12, /obj/item/clothing/mask/tornscarf, null, VENDOR_ITEM_REGULAR),
+ list("Scarf (Green)", 12, /obj/item/clothing/mask/tornscarf/green, null, VENDOR_ITEM_REGULAR),
+ list("Scarf (Snow)", 12, /obj/item/clothing/mask/tornscarf/snow, null, VENDOR_ITEM_REGULAR),
+ list("Scarf (Desert)", 12, /obj/item/clothing/mask/tornscarf/desert, null, VENDOR_ITEM_REGULAR),
+ list("Scarf (Urban)", 12, /obj/item/clothing/mask/tornscarf/urban, null, VENDOR_ITEM_REGULAR),
+ list("Scarf (Black)", 12, /obj/item/clothing/mask/tornscarf/black, null, VENDOR_ITEM_REGULAR),
+
list("SUIT", 0, null, null, null),
list("Bomber Jacket, Brown", 12, /obj/item/clothing/suit/storage/bomber, null, VENDOR_ITEM_REGULAR),
list("Bomber Jacket, Black", 12, /obj/item/clothing/suit/storage/bomber/alt, null, VENDOR_ITEM_REGULAR),
@@ -337,7 +358,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, JOB_WORKING_JOE)
+ vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_WORKING_JOE, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH)
vend_delay = 1 SECONDS
diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
index 0586f4b72fa5..53853f7d4e8b 100644
--- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
+++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
@@ -7,7 +7,7 @@
icon_state = "vehicle_gear"
req_access = list(ACCESS_MARINE_CREWMAN)
- vendor_role = list(JOB_CREWMAN)
+ vendor_role = list(JOB_TANK_CREW)
bound_width = 64
unslashable = TRUE
@@ -56,30 +56,27 @@
UnregisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED)
if(!selected_vehicle)
- selected_vehicle = "APC" // The whole thing seems to be based upon the assumption you unlock tank as an override, defaulting to APC
- if(selected_vehicle == "APC")
- available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section
+ selected_vehicle = "TANK" // The whole thing seems to be based upon the assumption you unlock tank as an override, defaulting to APC
+ if(selected_vehicle == "TANK")
+ available_categories &= ~(VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section
+ marine_announcement("A tank is being sent up to reinforce this operation.")
/obj/structure/machinery/cm_vending/gear/vehicle_crew/get_listed_products(mob/user)
var/list/display_list = list()
if(!user)
display_list += GLOB.cm_vending_vehicle_crew_tank
- display_list += GLOB.cm_vending_vehicle_crew_tank_spare
display_list += GLOB.cm_vending_vehicle_crew_apc
- display_list += GLOB.cm_vending_vehicle_crew_apc_spare
return display_list
if(selected_vehicle == "TANK")
if(available_categories)
display_list = GLOB.cm_vending_vehicle_crew_tank
- else
- display_list = GLOB.cm_vending_vehicle_crew_tank_spare
else if(selected_vehicle == "ARC")
display_list = GLOB.cm_vending_vehicle_crew_arc
- else if(selected_vehicle == "APC")
+ else if(selected_vehicle == "TANK")
if(available_categories)
display_list = GLOB.cm_vending_vehicle_crew_apc
else //APC stuff costs more to prevent 4000 points spent on shitton of ammunition
@@ -150,64 +147,11 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank, list(
list("Overdrive Enhancer", 0, /obj/item/hardpoint/support/overdrive_enhancer, VEHICLE_SUPPORT_AVAILABLE, VENDOR_ITEM_RECOMMENDED),
list("ARMOR", 0, null, null, null),
- list("Ballistic Armor", 0, /obj/item/hardpoint/armor/ballistic, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_RECOMMENDED),
- list("Caustic Armor", 0, /obj/item/hardpoint/armor/caustic, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR),
- list("Concussive Armor", 0, /obj/item/hardpoint/armor/concussive, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR),
- list("Paladin Armor", 0, /obj/item/hardpoint/armor/paladin, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR),
list("Snowplow", 0, /obj/item/hardpoint/armor/snowplow, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR),
list("TREADS", 0, null, null, null),
list("Reinforced Treads", 0, /obj/item/hardpoint/locomotion/treads/robust, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_REGULAR),
- list("Treads", 0, /obj/item/hardpoint/locomotion/treads, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_RECOMMENDED)))
-
-GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank_spare, list(
- list("SPARE PARTS SELECTION:", 0, null, null, null),
-
- list("INTEGRAL PARTS", 0, null, null, null),
- list("M34A2-A Multipurpose Turret", 500, /obj/item/hardpoint/holder/tank_turret, null, VENDOR_ITEM_REGULAR),
-
- list("SUPPORT AMMUNITION", 0, null, null, null),
- list("Turret Smoke Screen Magazine", 50, /obj/item/ammo_magazine/hardpoint/turret_smoke, null, VENDOR_ITEM_REGULAR),
-
- list("PRIMARY WEAPON", 0, null, null, null),
- list("AC3-E Autocannon", 200, /obj/item/hardpoint/primary/autocannon, null, VENDOR_ITEM_REGULAR),
- list("DRG-N Offensive Flamer Unit", 200, /obj/item/hardpoint/primary/flamer, null, VENDOR_ITEM_REGULAR),
- list("LTAA-AP Minigun", 200, /obj/item/hardpoint/primary/minigun, null, VENDOR_ITEM_REGULAR),
- list("LTB Cannon", 400, /obj/item/hardpoint/primary/cannon, null, VENDOR_ITEM_RECOMMENDED),
-
- list("PRIMARY AMMUNITION", 0, null, null, null),
- list("AC3-E Autocannon Magazine", 100, /obj/item/ammo_magazine/hardpoint/ace_autocannon, null, VENDOR_ITEM_REGULAR),
- list("DRG-N Offensive Flamer Unit Fuel Tank", 100, /obj/item/ammo_magazine/hardpoint/primary_flamer, null, VENDOR_ITEM_REGULAR),
- list("LTAA-AP Minigun Magazine", 100, /obj/item/ammo_magazine/hardpoint/ltaaap_minigun, null, VENDOR_ITEM_REGULAR),
- list("LTB Cannon Magazine", 100, /obj/item/ammo_magazine/hardpoint/ltb_cannon, null, VENDOR_ITEM_REGULAR),
-
- list("SECONDARY WEAPON", 0, null, null, null),
- list("M92T Grenade Launcher", 200, /obj/item/hardpoint/secondary/grenade_launcher, null, VENDOR_ITEM_REGULAR),
- list("M56 Cupola", 200, /obj/item/hardpoint/secondary/m56cupola, null, VENDOR_ITEM_REGULAR),
- list("LZR-N Flamer Unit", 200, /obj/item/hardpoint/secondary/small_flamer, null, VENDOR_ITEM_REGULAR),
- list("TOW Launcher", 300, /obj/item/hardpoint/secondary/towlauncher, null, VENDOR_ITEM_REGULAR),
-
- list("SECONDARY AMMUNITION", 0, null, null, null),
- list("M92T Grenade Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/tank_glauncher, null, VENDOR_ITEM_REGULAR),
- list("M56 Cupola Magazine", 50, /obj/item/ammo_magazine/hardpoint/m56_cupola, null, VENDOR_ITEM_REGULAR),
- list("LZR-N Flamer Unit Fuel Tank", 50, /obj/item/ammo_magazine/hardpoint/secondary_flamer, null, VENDOR_ITEM_REGULAR),
- list("TOW Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/towlauncher, null, VENDOR_ITEM_REGULAR),
-
- list("SUPPORT MODULE", 0, null, null, null),
- list("Artillery Module", 300, /obj/item/hardpoint/support/artillery_module, null, VENDOR_ITEM_REGULAR),
- list("Integrated Weapons Sensor Array", 200, /obj/item/hardpoint/support/weapons_sensor, null, VENDOR_ITEM_REGULAR),
- list("Overdrive Enhancer", 200, /obj/item/hardpoint/support/overdrive_enhancer, null, VENDOR_ITEM_REGULAR),
-
- list("ARMOR", 0, null, null, null),
- list("Ballistic Armor", 300, /obj/item/hardpoint/armor/ballistic, null, VENDOR_ITEM_REGULAR),
- list("Caustic Armor", 300, /obj/item/hardpoint/armor/caustic, null, VENDOR_ITEM_REGULAR),
- list("Concussive Armor", 300, /obj/item/hardpoint/armor/concussive, null, VENDOR_ITEM_REGULAR),
- list("Paladin Armor", 300, /obj/item/hardpoint/armor/paladin, null, VENDOR_ITEM_REGULAR),
- list("Snowplow", 200, /obj/item/hardpoint/armor/snowplow, null, VENDOR_ITEM_REGULAR),
-
- list("TREADS", 0, null, null, null),
- list("Reinforced Treads", 200, /obj/item/hardpoint/locomotion/treads/robust, null, VENDOR_ITEM_REGULAR),
- list("Treads", 200, /obj/item/hardpoint/locomotion/treads, null, VENDOR_ITEM_REGULAR)))
+ list("Treads", 0, /obj/item/hardpoint/locomotion/treads, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_REGULAR)))
GLOBAL_LIST_INIT(cm_vending_vehicle_crew_apc, list(
list("STARTING KIT SELECTION:", 0, null, null, null),
@@ -261,7 +205,7 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_arc, list(
desc = "An automated weapon rack hooked up to a small storage of standard-issue weapons. Can be accessed only by the Vehicle Crewmen."
icon_state = "guns"
req_access = list(ACCESS_MARINE_CREWMAN)
- vendor_role = list(JOB_CREWMAN)
+ vendor_role = list(JOB_TANK_CREW)
vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_TO_HAND
listed_products = list(
@@ -400,7 +344,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
name = "\improper ColMarTech Vehicle Crewman Equipment Rack"
desc = "An automated rack hooked up to a colossal storage of Vehicle Crewmen standard-issue equipment."
req_access = list(ACCESS_MARINE_CREWMAN)
- vendor_role = list(JOB_CREWMAN)
+ vendor_role = list(JOB_TANK_CREW)
/obj/structure/machinery/cm_vending/clothing/vehicle_crew/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_vehicle_crew
diff --git a/code/game/machinery/vending/vendor_types/dress.dm b/code/game/machinery/vending/vendor_types/dress.dm
index d49361d912a0..68809c10003f 100644
--- a/code/game/machinery/vending/vendor_types/dress.dm
+++ b/code/game/machinery/vending/vendor_types/dress.dm
@@ -45,11 +45,11 @@
return
var/mob/living/carbon/human/H = user
- var/obj/item/card/id/id_card = H.wear_id
+ var/obj/item/card/id/id_card = H.get_idcard()
var/list/role_specific_uniforms
var/list/vended_items
var/list/display_list = list()
- if(istype(id_card))
+ if(id_card)
role_specific_uniforms = id_card.uniform_sets
vended_items = id_card.vended_items
for(var/category_type in GLOB.uniform_categories)
@@ -83,9 +83,9 @@
/obj/structure/machinery/cm_vending/clothing/dress/ui_data(mob/user)
var/mob/living/carbon/human/H = user
- var/obj/item/card/id/id_card = H.wear_id
+ var/obj/item/card/id/id_card = H.get_idcard()
var/list/vended_items
- if(istype(id_card))
+ if(id_card)
vended_items = id_card.vended_items
var/list/data = list()
@@ -120,9 +120,9 @@
var/item_path = L[3]
- var/obj/item/card/id/id_card = H.wear_id
+ var/obj/item/card/id/id_card = H.get_idcard()
- if(!istype(id_card)) //not wearing an ID
+ if(!id_card) //not wearing an ID
to_chat(H, SPAN_WARNING("Access denied. No ID card detected"))
return
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
index b1961ae9e75b..8fca3b5a0fdd 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
@@ -128,7 +128,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list(
GLOBAL_LIST_INIT(cm_vending_clothing_medic, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Standard Marine Apparel", 0, list(/obj/item/clothing/under/marine/medic, /obj/item/clothing/shoes/marine/knife, /obj/item/clothing/gloves/marine, /obj/item/device/radio/headset/almayer/marine, /obj/item/clothing/head/helmet/marine/medic), MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Combat Sterile Gloves", 0, /obj/item/clothing/gloves/marine/medical, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR),
+ list("Combat Sterile Gloves", 0, /obj/item/clothing/gloves/marine/medical, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Map", 0, /obj/item/map/current_map, MARINE_CAN_BUY_KIT, VENDOR_ITEM_MANDATORY),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
index b703654cd51a..35b059ac9611 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
@@ -412,3 +412,105 @@
/obj/item/clothing/suit/storage/marine/heavy/skull,
/obj/item/clothing/suit/storage/marine/heavy/smooth,
)
+
+//------------MARINE CIVILIAN CLOTHING---------------
+
+GLOBAL_LIST_INIT(cm_vending_clothing_marine_snowflake, list(
+ list("SHIRTS AND UNIFORMS", 0, null, null, null),
+ 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),
+ list("Red T-Shirt and Black Jeans", 12, /obj/item/clothing/under/tshirt/r_bla, null, VENDOR_ITEM_REGULAR),
+ list("Frontier Jumpsuit", 12, /obj/item/clothing/under/rank/synthetic/frontier, null, VENDOR_ITEM_REGULAR),
+ list("UA Grey Jumpsuit", 12, /obj/item/clothing/under/colonist/ua_civvies, null, VENDOR_ITEM_REGULAR),
+ list("UA Brown Jumpsuit", 12, /obj/item/clothing/under/colonist/wy_davisone, null, VENDOR_ITEM_REGULAR),
+ list("UA Green Utility Uniform", 12, /obj/item/clothing/under/rank/synthetic/utility, null, VENDOR_ITEM_REGULAR),
+ list("Grey Utilities", 12, /obj/item/clothing/under/rank/synthetic/utility/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Grey Utilities and Blue Jeans", 12, /obj/item/clothing/under/rank/synthetic/utility/red, null, VENDOR_ITEM_REGULAR),
+ list("Blue Utilities and Brown Jeans", 12, /obj/item/clothing/under/rank/synthetic/utility/blue, null, VENDOR_ITEM_REGULAR),
+ list("White Service Uniform", 12, /obj/item/clothing/under/colonist/white_service, null, VENDOR_ITEM_REGULAR),
+ list("Steward Clothes", 12, /obj/item/clothing/under/colonist/wy_joliet_shopsteward, null, VENDOR_ITEM_REGULAR),
+ list("Red Dress Skirt", 12, /obj/item/clothing/under/blackskirt, null, VENDOR_ITEM_REGULAR),
+ list("Blue Suit Pants", 12, /obj/item/clothing/under/liaison_suit/blue, null, VENDOR_ITEM_REGULAR),
+ list("Brown Suit Pants", 12, /obj/item/clothing/under/liaison_suit/brown, null, VENDOR_ITEM_REGULAR),
+ list("White Suit Pants", 12, /obj/item/clothing/under/liaison_suit/corporate_formal, 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("Marine RPG Glasses", 12, /obj/item/clothing/glasses/regular, null, VENDOR_ITEM_REGULAR),
+ list("Sunglasses", 12, /obj/item/clothing/glasses/sunglasses, null, VENDOR_ITEM_REGULAR),
+
+ list("SHOES", 0, null, null, null),
+ list("Boots", 12, /obj/item/clothing/shoes/marine, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Black", 12, /obj/item/clothing/shoes/black, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Blue", 12, /obj/item/clothing/shoes/blue, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Brown", 12, /obj/item/clothing/shoes/brown, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Green", 12, /obj/item/clothing/shoes/green, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Purple", 12, /obj/item/clothing/shoes/purple, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Red", 12, /obj/item/clothing/shoes/red, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, White", 12, /obj/item/clothing/shoes/white, null, VENDOR_ITEM_REGULAR),
+ list("Shoes, Yellow", 12, /obj/item/clothing/shoes/yellow, null, VENDOR_ITEM_REGULAR),
+
+ list("HEADWEAR", 0, null, null, null),
+ list("Beanie", 12, /obj/item/clothing/head/beanie, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Engineering", 12, /obj/item/clothing/head/beret/eng, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Purple", 12, /obj/item/clothing/head/beret/jan, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Red", 12, /obj/item/clothing/head/beret/cm/red, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Standard", 12, /obj/item/clothing/head/beret/cm, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Tan", 12, /obj/item/clothing/head/beret/cm/tan, null, VENDOR_ITEM_REGULAR),
+ list("Beret, Green", 12, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Beret, Black", 12, /obj/item/clothing/head/beret/cm/black, null, VENDOR_ITEM_REGULAR),
+ list("Beret, White", 12, /obj/item/clothing/head/beret/cm/white, null, VENDOR_ITEM_REGULAR),
+ list("Ushanka", 12, /obj/item/clothing/head/ushanka, null, VENDOR_ITEM_REGULAR),
+ list("Cap", 12, /obj/item/clothing/head/cmcap, null, VENDOR_ITEM_REGULAR),
+ list("Fedora", 12, /obj/item/clothing/head/fedora, null, VENDOR_ITEM_REGULAR),
+
+ list("SUIT", 0, null, null, null),
+ list("Bomber Jacket, Brown", 12, /obj/item/clothing/suit/storage/bomber, null, VENDOR_ITEM_REGULAR),
+ list("Bomber Jacket, Black", 12, /obj/item/clothing/suit/storage/bomber/alt, null, VENDOR_ITEM_REGULAR),
+ list("External Webbing", 12, /obj/item/clothing/suit/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Utility Vest", 12, /obj/item/clothing/suit/storage/utility_vest, null, VENDOR_ITEM_REGULAR),
+ list("Hazard Vest(Orange)", 12, /obj/item/clothing/suit/storage/hazardvest, null, VENDOR_ITEM_REGULAR),
+ list("Hazard Vest(Blue)", 12, /obj/item/clothing/suit/storage/hazardvest/blue, null, VENDOR_ITEM_REGULAR),
+ list("Hazard Vest(Yellow)", 12, /obj/item/clothing/suit/storage/hazardvest/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Hazard Vest(Black)", 12, /obj/item/clothing/suit/storage/hazardvest/black, null, VENDOR_ITEM_REGULAR),
+ list("USCM Service Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/service, null, VENDOR_ITEM_REGULAR),
+ list("Windbreaker, Brown", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_brown, null, VENDOR_ITEM_REGULAR),
+ list("Windbreaker, Grey", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_gray, null, VENDOR_ITEM_REGULAR),
+ list("Windbreaker, Green", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_green, null, VENDOR_ITEM_REGULAR),
+ list("Windbreaker, First Responder", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_fr, null, VENDOR_ITEM_REGULAR),
+ list("Windbreaker, Exploration", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_covenant, null, VENDOR_ITEM_REGULAR),
+ list("Black Suit Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/corporate/black, null, VENDOR_ITEM_REGULAR),
+ list("Brown Suit Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, null, VENDOR_ITEM_REGULAR),
+ list("Blue Suit Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, null, VENDOR_ITEM_REGULAR),
+ list("Brown Vest", 12, /obj/item/clothing/suit/storage/jacket/marine/vest, null, VENDOR_ITEM_REGULAR),
+ list("Tan Vest", 12, /obj/item/clothing/suit/storage/jacket/marine/vest/tan, null, VENDOR_ITEM_REGULAR),
+ list("Grey Vest", 12, /obj/item/clothing/suit/storage/jacket/marine/vest/grey, null, VENDOR_ITEM_REGULAR),
+
+ list("BACKPACK", 0, null, null, null),
+ list("Backpack, Industrial", 12, /obj/item/storage/backpack/industrial, null, VENDOR_ITEM_REGULAR),
+ list("Satchel, Leather", 12, /obj/item/storage/backpack/satchel, null, VENDOR_ITEM_REGULAR),
+ list("Satchel, Medical", 12, /obj/item/storage/backpack/satchel/med, null, VENDOR_ITEM_REGULAR),
+
+ list("OTHER", 0, null, null, null),
+ list("Red Armband", 6, /obj/item/clothing/accessory/armband, null, VENDOR_ITEM_REGULAR),
+ list("Purple Armband", 6, /obj/item/clothing/accessory/armband/science, null, VENDOR_ITEM_REGULAR),
+ list("Yellow Armband", 6, /obj/item/clothing/accessory/armband/engine, null, VENDOR_ITEM_REGULAR),
+ list("Green Armband", 6, /obj/item/clothing/accessory/armband/medgreen, null, VENDOR_ITEM_REGULAR),
+ list("Dress Gloves", 6, /obj/item/clothing/gloves/marine/dress, null, VENDOR_ITEM_REGULAR),
+
+))
+
+/obj/structure/machinery/cm_vending/clothing/marine/snowflake
+ name = "\improper Personal Civilian Clothing Storage Unit"
+ desc = "The vendor where all of your personal civilian clothing is stored while you are on-duty."
+ icon_state = "snowflake"
+ show_points = TRUE
+ use_snowflake_points = TRUE
+ vendor_theme = VENDOR_THEME_COMPANY
+ req_access = list()
+ vendor_role = list()
+
+ vend_delay = 1 SECONDS
+
+/obj/structure/machinery/cm_vending/clothing/marine/snowflake/get_listed_products(mob/user)
+ return GLOB.cm_vending_clothing_marine_snowflake
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 311c2ebc7253..10d4e8d098fb 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -106,14 +106,16 @@
// Humans?
if(isliving(atm)) //For extinguishing mobs on fire
var/mob/living/M = atm
- M.ExtinguishMob()
+
+ if(M != cause_data.resolve_mob())
+ M.ExtinguishMob()
+
if(M.stat == DEAD) // NO. DAMAGING. DEAD. MOBS.
continue
if (iscarbon(M))
var/mob/living/carbon/C = M
if (C.ally_of_hivenumber(hivenumber))
continue
-
apply_spray(M)
M.apply_armoured_damage(get_xeno_damage_acid(M, damage_amount), ARMOR_BIO, BURN) // Deal extra damage when first placing ourselves down.
@@ -144,6 +146,9 @@
/obj/effect/xenomorph/spray/Crossed(AM as mob|obj)
..()
+ if(AM == cause_data.resolve_mob())
+ return
+
if(isliving(AM))
var/mob/living/living_mob = AM
if(living_mob.ally_of_hivenumber(hivenumber))
diff --git a/code/game/objects/effects/effect_system/chemsmoke.dm b/code/game/objects/effects/effect_system/chemsmoke.dm
index 10c0bc7acd22..eea302f29325 100644
--- a/code/game/objects/effects/effect_system/chemsmoke.dm
+++ b/code/game/objects/effects/effect_system/chemsmoke.dm
@@ -263,7 +263,13 @@
return
-/obj/effect/particle_effect/smoke/chem/affect(mob/living/carbon/M)
- if(reagents.reagent_list.len)
- for(var/datum/reagent/reagent in reagents.reagent_list)
- reagent.reaction_mob(M, volume = reagent.volume * POTENCY_MULTIPLIER_LOW, permeable = FALSE)
+/obj/effect/particle_effect/smoke/chem/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(!length(reagents?.reagent_list))
+ return FALSE
+
+ for(var/datum/reagent/reagent in reagents.reagent_list)
+ reagent.reaction_mob(affected_mob, volume = reagent.volume * POTENCY_MULTIPLIER_LOW, permeable = FALSE)
+ return TRUE
diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm
index 5deeff9617ca..d4152bdee37e 100644
--- a/code/game/objects/effects/effect_system/smoke.dm
+++ b/code/game/objects/effects/effect_system/smoke.dm
@@ -25,10 +25,15 @@
pixel_x = -32
pixel_y = -32
-/obj/effect/particle_effect/smoke/Initialize(mapload, oldamount, new_cause_data)
+/obj/effect/particle_effect/smoke/Initialize(mapload, oldamount, datum/cause_data/new_cause_data)
. = ..()
if(oldamount)
amount = oldamount - 1
+ if(!istype(new_cause_data))
+ if(new_cause_data)
+ new_cause_data = create_cause_data(new_cause_data)
+ else
+ new_cause_data = create_cause_data(name)
cause_data = new_cause_data
time_to_live += rand(-1,1)
START_PROCESSING(SSeffects, src)
@@ -62,61 +67,65 @@
if(prob(severity/EXPLOSION_THRESHOLD_LOW * 100))
qdel(src)
-/obj/effect/particle_effect/smoke/Crossed(atom/movable/M)
+/obj/effect/particle_effect/smoke/Crossed(atom/movable/moveable)
..()
- if(istype(M, /obj/projectile/beam))
- var/obj/projectile/beam/B = M
- B.damage = (B.damage/2)
- if(iscarbon(M))
- affect(M)
+ if(istype(moveable, /obj/projectile/beam))
+ var/obj/projectile/beam/beam = moveable
+ beam.damage /= 2
+ if(iscarbon(moveable))
+ affect(moveable)
-/obj/effect/particle_effect/smoke/proc/apply_smoke_effect(turf/T)
- for(var/mob/living/L in T)
- affect(L)
+/obj/effect/particle_effect/smoke/proc/apply_smoke_effect(turf/cur_turf)
+ for(var/mob/living/affected_mob in cur_turf)
+ affect(affected_mob)
/obj/effect/particle_effect/smoke/proc/spread_smoke(direction)
set waitfor = 0
+
sleep(spread_speed)
- if(QDELETED(src)) return
- var/turf/U = get_turf(src)
- if(!U) return
+ if(QDELETED(src))
+ return
+
+ var/turf/start_turf = get_turf(src)
+ if(!start_turf)
+ return
for(var/i in GLOB.cardinals)
if(direction && i != direction)
continue
- var/turf/T = get_step(U, i)
- if(check_airblock(U,T)) //smoke can't spread that way
+ var/turf/cur_turf = get_step(start_turf, i)
+ if(check_airblock(start_turf, cur_turf)) //smoke can't spread that way
continue
- var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T // Check for existing smoke and act accordingly
+ var/obj/effect/particle_effect/smoke/foundsmoke = locate() in cur_turf // Check for existing smoke and act accordingly
if(foundsmoke)
if(foundsmoke.smokeranking <= src.smokeranking)
qdel(foundsmoke)
else
continue
- var/obj/effect/particle_effect/smoke/S = new type(T, amount, cause_data)
- S.setDir(pick(GLOB.cardinals))
- S.time_to_live = time_to_live
- if(S.amount>0)
- S.spread_smoke()
+ var/obj/effect/particle_effect/smoke/smoke = new type(cur_turf, amount, cause_data)
+ smoke.setDir(pick(GLOB.cardinals))
+ smoke.time_to_live = time_to_live
+ if(smoke.amount > 0)
+ smoke.spread_smoke()
//proc to check if smoke can expand to another turf
-/obj/effect/particle_effect/smoke/proc/check_airblock(turf/U, turf/T)
- if(!T)
+/obj/effect/particle_effect/smoke/proc/check_airblock(turf/start_turf, turf/cur_turf)
+ if(!cur_turf)
return FALSE
- if(T.density)
+ if(cur_turf.density)
return TRUE
if(prob(BOILER_GAS_CADE_BLOCK_CHANCE))
var/move_dir = 0
- for(var/obj/structure/obstacle in T)
- move_dir = get_dir(src, T)
+ for(var/obj/structure/obstacle in cur_turf)
+ move_dir = get_dir(src, cur_turf)
if(obstacle.BlockedPassDirs(src, move_dir))
return TRUE
-/obj/effect/particle_effect/smoke/proc/affect(mob/living/carbon/M)
- if (istype(M))
- return 0
- return 1
+/obj/effect/particle_effect/smoke/proc/affect(mob/living/carbon/affected_mob)
+ if(!istype(affected_mob))
+ return FALSE
+ return TRUE
/////////////////////////////////////////////
// Bad smoke
@@ -128,22 +137,110 @@
/obj/effect/particle_effect/smoke/bad/Move()
. = ..()
- for(var/mob/living/carbon/M in get_turf(src))
- affect(M)
+ for(var/mob/living/carbon/affected_mob in get_turf(src))
+ affect(affected_mob)
-/obj/effect/particle_effect/smoke/bad/affect(mob/living/carbon/M)
+/obj/effect/particle_effect/smoke/bad/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(affected_mob.internal != null && affected_mob.wear_mask && (affected_mob.wear_mask.flags_inventory & ALLOWINTERNALS))
+ return FALSE
+ if(issynth(affected_mob))
+ return FALSE
+
+ if(prob(20))
+ affected_mob.drop_held_item()
+ affected_mob.apply_damage(1, OXY)
+
+ if(affected_mob.coughedtime < world.time && !affected_mob.stat)
+ affected_mob.coughedtime = world.time + 2 SECONDS
+ if(ishuman(affected_mob)) //Humans only to avoid issues
+ affected_mob.emote("cough")
+ return TRUE
+
+/////////////////////////////////////////////
+// Miasma smoke (for LZs)
+/////////////////////////////////////////////
+
+/obj/effect/particle_effect/smoke/miasma
+ name = "CN20-X miasma"
+ amount = 1
+ time_to_live = INFINITY
+ smokeranking = SMOKE_RANK_MAX
+ opacity = FALSE
+ alpha = 75
+ color = "#301934"
+ /// How much damage to deal per affect()
+ var/burn_damage = 4
+ /// Multiplier to burn_damage for xenos and yautja
+ var/xeno_yautja_multiplier = 3
+ /// Time required for damage to actually apply
+ var/active_time
+
+/obj/effect/particle_effect/smoke/miasma/Initialize(mapload, oldamount, datum/cause_data/new_cause_data)
+ . = ..()
+ // Mimic dispersal without actually doing spread logic
+ alpha = 0
+ active_time = world.time + 6 SECONDS
+ addtimer(VARSET_CALLBACK(src, alpha, initial(alpha)), rand(1, 6) SECONDS)
+
+/obj/effect/particle_effect/smoke/miasma/apply_smoke_effect(turf/cur_turf)
..()
- if (M.internal != null && M.wear_mask && (M.wear_mask.flags_inventory & ALLOWINTERNALS))
- return
- else
- if(prob(20))
- M.drop_held_item()
- M.apply_damage(1, OXY)
- if(M.coughedtime != 1)
- M.coughedtime = 1
- if(ishuman(M)) //Humans only to avoid issues
- M.emote("cough")
- addtimer(VARSET_CALLBACK(M, coughedtime, 0), 2 SECONDS)
+ // coffins
+ for(var/obj/structure/closet/container in cur_turf)
+ for(var/mob/living/carbon/mob in container)
+ affect(mob)
+
+ // vehicles
+ var/obj/vehicle/multitile/car = locate() in cur_turf
+ var/datum/interior/car_interior = car?.interior
+ if(car_interior)
+ var/list/bounds = car_interior.get_bound_turfs()
+ for(var/turf/car_turf as anything in block(bounds[1], bounds[2]))
+ var/obj/effect/particle_effect/smoke/miasma/smoke = locate() in car_turf
+ if(!smoke)
+ smoke = new(car_turf)
+ smoke.time_to_live = rand(7, 12)
+
+/obj/effect/particle_effect/smoke/miasma/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(affected_mob.stat == DEAD)
+ return FALSE
+
+ var/active = world.time > active_time
+ var/damage = active ? burn_damage : 0 // A little buffer time to get out of it
+ if(isxeno(affected_mob))
+ damage *= xeno_yautja_multiplier
+ else if(isyautja(affected_mob))
+ if(prob(75))
+ return FALSE
+ damage *= xeno_yautja_multiplier
+
+ affected_mob.apply_damage(damage, BURN)
+ affected_mob.AdjustEyeBlur(0.75)
+ affected_mob.last_damage_data = cause_data
+
+ if(affected_mob.coughedtime < world.time && !affected_mob.stat)
+ affected_mob.coughedtime = world.time + 2 SECONDS
+ if(ishuman(affected_mob)) //Humans only to avoid issues
+ if(issynth(affected_mob))
+ affected_mob.visible_message(SPAN_DANGER("[affected_mob]'s skin is sloughing off!"),\
+ SPAN_DANGER("Your skin is sloughing off!"))
+ else
+ if(prob(50))
+ affected_mob.emote("cough")
+ else
+ affected_mob.emote("gasp")
+ if(prob(20))
+ affected_mob.drop_held_item()
+ to_chat(affected_mob, SPAN_DANGER("Something is not right here..."))
+ return TRUE
+
+/obj/effect/particle_effect/smoke/miasma/ex_act(severity)
+ return
/////////////////////////////////////////////
// Sleep smoke
@@ -154,20 +251,26 @@
/obj/effect/particle_effect/smoke/sleepy/Move()
. = ..()
- for(var/mob/living/carbon/M in get_turf(src))
- affect(M)
+ for(var/mob/living/carbon/affected_mob in get_turf(src))
+ affect(affected_mob)
+
+/obj/effect/particle_effect/smoke/sleepy/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(affected_mob.stat == DEAD)
+ return FALSE
+ if(issynth(affected_mob))
+ return FALSE
-/obj/effect/particle_effect/smoke/sleepy/affect(mob/living/carbon/M as mob )
- if (!..())
- return 0
+ affected_mob.drop_held_item()
+ affected_mob.sleeping++
- M.drop_held_item()
- M:sleeping++
- if(M.coughedtime != 1)
- M.coughedtime = 1
- if(ishuman(M)) //Humans only to avoid issues
- M.emote("cough")
- addtimer(VARSET_CALLBACK(M, coughedtime, 0), 2 SECONDS)
+ if(affected_mob.coughedtime < world.time && !affected_mob.stat)
+ affected_mob.coughedtime = world.time + 2 SECONDS
+ if(ishuman(affected_mob)) //Humans only to avoid issues
+ affected_mob.emote("cough")
+ return TRUE
/////////////////////////////////////////////
// Mustard Gas
@@ -185,17 +288,20 @@
affect(creature)
/obj/effect/particle_effect/smoke/mustard/affect(mob/living/carbon/human/creature)
- if(!istype(creature) || issynth(creature))
+ . = ..()
+ if(!.)
+ return FALSE
+ if(issynth(creature))
return FALSE
- creature.burn_skin(0.75)
- if(creature.coughedtime != 1)
- creature.coughedtime = 1
+ if(creature.burn_skin(0.75))
+ creature.last_damage_data = cause_data
+
+ if(creature.coughedtime < world.time && !creature.stat)
+ creature.coughedtime = world.time + 2 SECONDS
if(ishuman(creature)) //Humans only to avoid issues
creature.emote("gasp")
- addtimer(VARSET_CALLBACK(creature, coughedtime, 0), 2 SECONDS)
- creature.updatehealth()
- return
+ return TRUE
/////////////////////////////////////////////
// Phosphorus Gas
@@ -217,35 +323,41 @@
/obj/effect/particle_effect/smoke/phosphorus/Move()
. = ..()
- for(var/mob/living/carbon/M in get_turf(src))
- affect(M)
+ for(var/mob/living/carbon/affected_mob in get_turf(src))
+ affect(affected_mob)
-/obj/effect/particle_effect/smoke/phosphorus/affect(mob/living/carbon/M)
- ..()
- burn_damage = 40
- if(ishuman(M))
- if (M.internal != null && M.wear_mask && (M.wear_mask.flags_inventory & ALLOWINTERNALS))
- return
- else
- if(prob(20))
- M.drop_held_item()
- M.apply_damage(1, OXY)
- M.updatehealth()
- if(M.coughedtime < world.time)
- M.emote("cough")
- M.coughedtime = world.time + next_cough
+/obj/effect/particle_effect/smoke/phosphorus/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
- M.last_damage_data = cause_data
+ var/damage = burn_damage
+ if(ishuman(affected_mob))
+ if(affected_mob.internal != null && affected_mob.wear_mask && (affected_mob.wear_mask.flags_inventory & ALLOWINTERNALS))
+ return FALSE
+
+ if(prob(20))
+ affected_mob.drop_held_item()
+ affected_mob.apply_damage(1, OXY)
+
+ if(affected_mob.coughedtime < world.time && !affected_mob.stat)
+ affected_mob.coughedtime = world.time + next_cough
+ if(issynth(affected_mob))
+ affected_mob.visible_message(SPAN_DANGER("[affected_mob]'s skin is sloughing off!"),\
+ SPAN_DANGER("Your skin is sloughing off!"))
+ else
+ affected_mob.emote("cough")
- if(isyautja(M) || isxeno(M))
- burn_damage *= xeno_yautja_reduction
+ if(isyautja(affected_mob) || isxeno(affected_mob))
+ damage *= xeno_yautja_reduction
var/reagent = new /datum/reagent/napalm/ut()
- M.burn_skin(burn_damage)
- M.adjust_fire_stacks(applied_fire_stacks, reagent)
- M.IgniteMob()
- M.updatehealth()
-
+ affected_mob.burn_skin(damage)
+ affected_mob.adjust_fire_stacks(applied_fire_stacks, reagent)
+ affected_mob.IgniteMob()
+ affected_mob.updatehealth()
+ affected_mob.last_damage_data = cause_data
+ return TRUE
/////////////////////////////////////////////
// CN20 Nerve Gas
@@ -274,14 +386,21 @@
affect(creature)
/obj/effect/particle_effect/smoke/cn20/affect(mob/living/carbon/creature)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(creature.stat == DEAD)
+ return FALSE
+ if(issynth(creature))
+ return FALSE
+
var/mob/living/carbon/xenomorph/xeno_creature
var/mob/living/carbon/human/human_creature
if(isxeno(creature))
xeno_creature = creature
else if(ishuman(creature))
human_creature = creature
- if(!istype(creature) || issynth(creature) || creature.stat == DEAD)
- return FALSE
+
if(!xeno_affecting && xeno_creature)
return FALSE
if(isyautja(creature) && prob(75))
@@ -299,22 +418,24 @@
xeno_creature.blinded = TRUE
else
creature.apply_damage(12, OXY)
+
creature.SetEarDeafness(max(creature.ear_deaf, floor(effect_amt*1.5))) //Paralysis of hearing system, aka deafness
if(!xeno_creature && !creature.eye_blind) //Eye exposure damage
to_chat(creature, SPAN_DANGER("Your eyes sting. You can't see!"))
creature.SetEyeBlind(floor(effect_amt/3))
- if(!xeno_creature && creature.coughedtime != 1 && !creature.stat) //Coughing/gasping
- creature.coughedtime = 1
+
+ if(human_creature && creature.coughedtime < world.time && !creature.stat) //Coughing/gasping
+ creature.coughedtime = world.time + 1.5 SECONDS
if(prob(50))
creature.emote("cough")
else
creature.emote("gasp")
- addtimer(VARSET_CALLBACK(creature, coughedtime, 0), 1.5 SECONDS)
+
var/stun_chance = 20
if(xeno_affecting)
stun_chance = 35
if(prob(stun_chance))
- creature.apply_effect(2, WEAKEN)
+ creature.KnockDown(2)
//Topical damage (neurotoxin on exposed skin)
if(xeno_creature)
@@ -376,61 +497,64 @@
return ..()
-/obj/effect/particle_effect/smoke/xeno_burn/apply_smoke_effect(turf/T)
+/obj/effect/particle_effect/smoke/xeno_burn/apply_smoke_effect(turf/cur_turf)
..()
- for(var/obj/structure/barricade/B in T)
- B.take_acid_damage(XENO_ACID_GAS_BARRICADE_DAMAGE)
+ for(var/obj/structure/barricade/barricade in cur_turf)
+ barricade.take_acid_damage(XENO_ACID_GAS_BARRICADE_DAMAGE)
if(prob(75)) // anti sound spam
playsound(src, pick("acid_sizzle", "acid_hit"), 25)
- for(var/obj/vehicle/multitile/R in T)
- R.take_damage_type(15, "acid")
+ for(var/obj/vehicle/multitile/vehicle in cur_turf)
+ vehicle.take_damage_type(15, "acid")
- for(var/obj/structure/machinery/m56d_hmg/auto/H in T)
- H.update_health(XENO_ACID_HMG_DAMAGE)
+ for(var/obj/structure/machinery/m56d_hmg/auto/gun in cur_turf)
+ gun.update_health(XENO_ACID_HMG_DAMAGE)
//No effect when merely entering the smoke turf, for balance reasons
-/obj/effect/particle_effect/smoke/xeno_burn/Crossed(mob/living/carbon/M as mob)
+/obj/effect/particle_effect/smoke/xeno_burn/Crossed(mob/living/carbon/affected_mob as mob)
return
-/obj/effect/particle_effect/smoke/xeno_burn/affect(mob/living/carbon/M)
- ..()
-
- if(M.ally_of_hivenumber(hivenumber))
- return
-
- if(isyautja(M) && prob(75))
- return
- if(M.stat == DEAD)
- return
- if(HAS_TRAIT(M, TRAIT_NESTED) && M.status_flags & XENO_HOST)
- return
-
- M.last_damage_data = cause_data
+/obj/effect/particle_effect/smoke/xeno_burn/affect(mob/living/carbon/affected_mob)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(affected_mob.stat == DEAD)
+ return FALSE
+ if(affected_mob.ally_of_hivenumber(hivenumber))
+ return FALSE
+ if(isyautja(affected_mob) && prob(75))
+ return FALSE
+ if(HAS_TRAIT(affected_mob, TRAIT_NESTED) && affected_mob.status_flags & XENO_HOST)
+ return FALSE
- M.apply_damage(3, OXY) //Basic oxyloss from "can't breathe"
+ affected_mob.last_damage_data = cause_data
+ affected_mob.apply_damage(3, OXY) //Basic oxyloss from "can't breathe"
- if(isxeno(M))
- M.apply_damage(gas_damage * XVX_ACID_DAMAGEMULT, BURN) //Inhalation damage
+ if(isxeno(affected_mob))
+ affected_mob.apply_damage(gas_damage * XVX_ACID_DAMAGEMULT, BURN) //Inhalation damage
else
- M.apply_damage(gas_damage, BURN) //Inhalation damage
+ affected_mob.apply_damage(gas_damage, BURN) //Inhalation damage
- if(M.coughedtime != 1 && !M.stat && ishuman(M)) //Coughing/gasping
- M.coughedtime = 1
- if(prob(50))
- M.emote("cough")
+ if(affected_mob.coughedtime < world.time && !affected_mob.stat && ishuman(affected_mob)) //Coughing/gasping
+ affected_mob.coughedtime = world.time + 1.5 SECONDS
+ if(issynth(affected_mob))
+ affected_mob.visible_message(SPAN_DANGER("[affected_mob]'s skin is sloughing off!"),\
+ SPAN_DANGER("Your skin is sloughing off!"))
else
- M.emote("gasp")
- addtimer(VARSET_CALLBACK(M, coughedtime, 0), 1.5 SECONDS)
+ if(prob(50))
+ affected_mob.emote("cough")
+ else
+ affected_mob.emote("gasp")
//Topical damage (acid on exposed skin)
- to_chat(M, SPAN_DANGER("Your skin feels like it is melting away!"))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- H.apply_armoured_damage(amount*rand(15, 20), ARMOR_BIO, BURN) //Burn damage, randomizes between various parts //Amount corresponds to upgrade level, 1 to 2.5
+ to_chat(affected_mob, SPAN_DANGER("Your skin feels like it is melting away!"))
+ if(ishuman(affected_mob))
+ var/mob/living/carbon/human/human = affected_mob
+ human.apply_armoured_damage(amount*rand(15, 20), ARMOR_BIO, BURN) //Burn damage, randomizes between various parts //Amount corresponds to upgrade level, 1 to 2.5
else
- M.burn_skin(5) //Failsafe for non-humans
- M.updatehealth()
+ affected_mob.burn_skin(5) //Failsafe for non-humans
+ affected_mob.last_damage_data = cause_data
+ return TRUE
//Xeno neurotox smoke.
/obj/effect/particle_effect/smoke/xeno_weak
@@ -448,24 +572,27 @@
return
/obj/effect/particle_effect/smoke/xeno_weak/affect(mob/living/carbon/moob) // This applies every tick someone is in the smoke
- ..()
+ . = ..()
+ if(!.)
+ return FALSE
+ if(moob.stat == DEAD)
+ return FALSE
if(isxeno(moob))
- return
+ return FALSE
if(isyautja(moob))
- neuro_dose = neuro_dose*2 // Yautja get half effects
- msg = "You resist the tingling smoke's effects!"
- return
- if(moob.stat == DEAD)
- return
+ return FALSE
if(HAS_TRAIT(moob, TRAIT_NESTED) && moob.status_flags & XENO_HOST)
- return
+ return FALSE
+
+ var/mob/living/carbon/human/human_moob
if(ishuman(moob))
- var/mob/living/carbon/human/H = moob
- if(H.chem_effect_flags & CHEM_EFFECT_RESIST_NEURO)
- return
+ human_moob = moob
+ if(human_moob.chem_effect_flags & CHEM_EFFECT_RESIST_NEURO)
+ return FALSE
+
var/effect_amt = floor(6 + amount*6)
moob.eye_blurry = max(moob.eye_blurry, effect_amt)
- moob.apply_effect(max(moob.eye_blurry, effect_amt), EYE_BLUR)
+ moob.EyeBlur(max(moob.eye_blurry, effect_amt))
moob.apply_damage(5, OXY) // Base "I can't breath oxyloss" Slightly more longer lasting then stamina damage
// reworked code below
if(!issynth(moob))
@@ -474,18 +601,18 @@
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
- moob.coughedtime = 1
+ if(human_moob && moob.coughedtime < world.time && !moob.stat) //Coughing/gasping
+ moob.coughedtime = world.time + 1.5 SECONDS
if(prob(50))
moob.Slow(1)
moob.emote("cough")
else
moob.emote("gasp")
- addtimer(VARSET_CALLBACK(moob, coughedtime, 0), 1.5 SECONDS)
else
msg = "You are consumed by the harmless gas, it is hard to navigate in!"
- moob.apply_effect(SLOW,1)
+ moob.Slow(1)
to_chat(moob, SPAN_DANGER(msg))
+ return TRUE
/obj/effect/particle_effect/smoke/xeno_weak_fire
time_to_live = 16
@@ -503,16 +630,21 @@
. = ..()
/obj/effect/particle_effect/smoke/xeno_weak_fire/affect(mob/living/carbon/moob)
- ..()
-
+ . = ..()
+ if(!.)
+ return FALSE
+ if(moob.stat == DEAD)
+ return FALSE
if(isxeno(moob))
- return
+ return FALSE
if(isyautja(moob) && prob(75))
- return
- if(moob.stat == DEAD)
- return
+ return FALSE
if(HAS_TRAIT(moob, TRAIT_NESTED) && moob.status_flags & XENO_HOST)
- return
+ return FALSE
+
+ var/mob/living/carbon/human/human_moob
+ if(ishuman(moob))
+ human_moob = moob
var/effect_amt = floor(6 + amount*6)
@@ -521,56 +653,60 @@
if(!moob.eye_blind) //Eye exposure damage
to_chat(moob, SPAN_DANGER("Your eyes sting. You can't see!"))
moob.SetEyeBlind(floor(effect_amt/3))
- if(moob.coughedtime != 1 && !moob.stat) //Coughing/gasping
- moob.coughedtime = 1
- if(prob(50))
- moob.emote("cough")
- else
- moob.emote("gasp")
- addtimer(VARSET_CALLBACK(moob, coughedtime, 0), 1.5 SECONDS)
- if (prob(20))
- moob.apply_effect(1, WEAKEN)
+
+ if(human_moob && moob.coughedtime < world.time && !moob.stat) //Coughing/gasping
+ moob.coughedtime = world.time + 1.5 SECONDS
+ if(!issynth(moob))
+ if(prob(50))
+ moob.emote("cough")
+ else
+ moob.emote("gasp")
+
+ if(prob(20))
+ moob.KnockDown(1)
//Topical damage (neurotoxin on exposed skin)
to_chat(moob, SPAN_DANGER("Your body is going numb, almost as if paralyzed!"))
if(prob(40 + floor(amount*15))) //Highly likely to drop items due to arms/hands seizing up
moob.drop_held_item()
- if(ishuman(moob))
- var/mob/living/carbon/human/Human = moob
- Human.temporary_slowdown = max(Human.temporary_slowdown, 4) //One tick every two second
- Human.recalculate_move_delay = TRUE
+ if(human_moob)
+ human_moob.temporary_slowdown = max(human_moob.temporary_slowdown, 4) //One tick every two second
+ human_moob.recalculate_move_delay = TRUE
+ return TRUE
/obj/effect/particle_effect/smoke/xeno_weak_fire/spread_smoke(direction)
set waitfor = 0
sleep(spread_speed)
- if(QDELETED(src)) return
- var/turf/U = get_turf(src)
- if(!U) return
+ if(QDELETED(src))
+ return
+ var/turf/start_turf = get_turf(src)
+ if(!start_turf)
+ return
for(var/i in GLOB.cardinals)
if(direction && i != direction)
continue
- var/turf/T = get_step(U, i)
- if(check_airblock(U,T)) //smoke can't spread that way
+ var/turf/cur_turf = get_step(start_turf, i)
+ if(check_airblock(start_turf, cur_turf)) //smoke can't spread that way
continue
- var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T // Check for existing smoke and act accordingly
+ var/obj/effect/particle_effect/smoke/foundsmoke = locate() in cur_turf // Check for existing smoke and act accordingly
if(foundsmoke)
- if(foundsmoke.smokeranking <= src.smokeranking)
+ if(foundsmoke.smokeranking <= smokeranking)
qdel(foundsmoke)
else
continue
- var/obj/effect/particle_effect/smoke/S = new type(T, amount, cause_data)
+ var/obj/effect/particle_effect/smoke/smoke = new type(cur_turf, amount, cause_data)
- for (var/atom/A in T)
- if (istype(A, /mob/living))
- var/mob/living/M = A
- M.ExtinguishMob()
- if(istype(A, /obj/flamer_fire))
- qdel(A)
+ for (var/atom/cur_atom in cur_turf)
+ if (istype(cur_atom, /mob/living))
+ var/mob/living/affected_mob = cur_atom
+ affected_mob.ExtinguishMob()
+ if(istype(cur_atom, /obj/flamer_fire))
+ qdel(cur_atom)
- S.setDir(pick(GLOB.cardinals))
- S.time_to_live = time_to_live
- if(S.amount>0)
- S.spread_smoke()
+ smoke.setDir(pick(GLOB.cardinals))
+ smoke.time_to_live = time_to_live
+ if(smoke.amount > 0)
+ smoke.spread_smoke()
/////////////////////////////////////////////
@@ -604,11 +740,11 @@
/datum/effect_system/smoke_spread/start()
if(holder)
location = get_turf(holder)
- var/obj/effect/particle_effect/smoke/S = new smoke_type(location, amount+1, cause_data)
+ var/obj/effect/particle_effect/smoke/smoke = new smoke_type(location, amount+1, cause_data)
if(lifetime)
- S.time_to_live = lifetime
- if(S.amount)
- S.spread_smoke(direction)
+ smoke.time_to_live = lifetime
+ if(smoke.amount > 0)
+ smoke.spread_smoke(direction)
/datum/effect_system/smoke_spread/bad
smoke_type = /obj/effect/particle_effect/smoke/bad
@@ -645,16 +781,16 @@
/datum/effect_system/smoke_spread/xeno_extinguish_fire/start()
if(holder)
location = get_turf(holder)
- var/obj/effect/particle_effect/smoke/S = new smoke_type(location, amount+1, cause_data)
+ var/obj/effect/particle_effect/smoke/smoke = new smoke_type(location, amount+1, cause_data)
- for (var/atom/A in location)
- if (istype(A, /mob/living))
- var/mob/living/M = A
- M.ExtinguishMob()
- if(istype(A, /obj/flamer_fire))
- qdel(A)
+ for (var/atom/cur_atom in location)
+ if (istype(cur_atom, /mob/living))
+ var/mob/living/affected_mob = cur_atom
+ affected_mob.ExtinguishMob()
+ if(istype(cur_atom, /obj/flamer_fire))
+ qdel(cur_atom)
if(lifetime)
- S.time_to_live = lifetime
- if(S.amount)
- S.spread_smoke(direction)
+ smoke.time_to_live = lifetime
+ if(smoke.amount > 0)
+ smoke.spread_smoke(direction)
diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm
index de03f1779f2b..597886a0cb85 100644
--- a/code/game/objects/items/devices/cictablet.dm
+++ b/code/game/objects/items/devices/cictablet.dm
@@ -46,7 +46,8 @@
/obj/item/device/cotablet/attack_self(mob/living/carbon/human/user as mob)
..()
- if(src.allowed(user) && user.wear_id?.check_biometrics(user))
+ var/obj/item/card/id/card = user.get_idcard()
+ if(allowed(user) && card?.check_biometrics(user))
tgui_interact(user)
else
to_chat(user, SPAN_DANGER("Access denied."))
@@ -109,8 +110,8 @@
var/signed = null
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
- var/obj/item/card/id/id = human_user.wear_id
- if(istype(id))
+ var/obj/item/card/id/id = human_user.get_idcard()
+ if(id)
var/paygrade = get_paygrades(id.paygrade, FALSE, human_user.gender)
signed = "[paygrade] [id.registered_name]"
diff --git a/code/game/objects/items/devices/defibrillator.dm b/code/game/objects/items/devices/defibrillator.dm
index 4a5ad7cc13ed..518fdb1a9591 100644
--- a/code/game/objects/items/devices/defibrillator.dm
+++ b/code/game/objects/items/devices/defibrillator.dm
@@ -199,8 +199,10 @@
playsound(get_turf(src), 'sound/items/defib_failed.ogg', 25, 0)
if(heart && heart.organ_status >= ORGAN_BROKEN)
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Patient's heart is too damaged. Immediate surgery is advised."))
+ msg_admin_niche("[key_name_admin(user)] failed an attempt to revive [key_name_admin(H)] with [src] because of heart damage.")
return
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Patient's general condition does not allow reviving."))
+ msg_admin_niche("[key_name_admin(user)] failed an attempt to revive [key_name_admin(H)] with [src].")
return
if(!H.client) //Freak case, no client at all. This is a braindead mob (like a colonist)
@@ -227,6 +229,7 @@
break
if(H.health > HEALTH_THRESHOLD_DEAD)
user.visible_message(SPAN_NOTICE("[icon2html(src, viewers(src))] \The [src] beeps: Defibrillation successful."))
+ msg_admin_niche("[key_name_admin(user)] successfully revived [key_name_admin(H)] with [src].")
playsound(get_turf(src), 'sound/items/defib_success.ogg', 25, 0)
user.track_life_saved(user.job)
user.life_revives_total++
@@ -239,6 +242,7 @@
window_flash(H.client)
else
user.visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] \The [src] buzzes: Defibrillation failed. Vital signs are too weak, repair damage and try again.")) //Freak case
+ msg_admin_niche("[key_name_admin(user)] failed an attempt to revive [key_name_admin(H)] with [src] because of weak vitals.")
playsound(get_turf(src), 'sound/items/defib_failed.ogg', 25, 0)
if(heart && prob(25))
heart.take_damage(rand(min_heart_damage_dealt, max_heart_damage_dealt), TRUE) // Make death and revival leave lasting consequences
diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm
index f45eeadee5b7..3dd8533a046d 100644
--- a/code/game/objects/items/devices/portable_vendor.dm
+++ b/code/game/objects/items/devices/portable_vendor.dm
@@ -58,8 +58,8 @@
to_chat(user, SPAN_WARNING("Access denied."))
return
- var/obj/item/card/id/idcard = human_user.wear_id
- if(!istype(idcard)) //not wearing an ID
+ var/obj/item/card/id/idcard = human_user.get_idcard()
+ if(!idcard) //not wearing an ID
to_chat(human_user, SPAN_WARNING("Access denied. No ID card detected"))
return
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 52f8bd76e894..b9b7e94d9ae5 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -414,10 +414,10 @@
var/mob/living/carbon/human/wearer = usr
if(!istype(wearer))
return
- var/obj/item/card/id/id_card = wearer.wear_id?.GetID()
- if(!istype(id_card))
+ var/obj/item/card/id/id_card = wearer.get_idcard()
+ if(!id_card)
return
-
+
var/datum/paygrade/paygrade_actual = GLOB.paygrades[id_card.paygrade]
if(!paygrade_actual)
return
diff --git a/code/game/objects/items/pamphlets.dm b/code/game/objects/items/pamphlets.dm
index 027ea796c73b..d8bbb2a01432 100644
--- a/code/game/objects/items/pamphlets.dm
+++ b/code/game/objects/items/pamphlets.dm
@@ -80,8 +80,8 @@
to_chat(user, SPAN_WARNING("Only squad riflemen can use this."))
return
- var/obj/item/card/id/ID = user.wear_id
- if(!istype(ID)) //not wearing an ID
+ var/obj/item/card/id/ID = user.get_idcard()
+ if(!ID) //not wearing an ID
to_chat(user, SPAN_WARNING("You should wear your ID before doing this."))
return FALSE
if(!ID.check_biometrics(user))
@@ -95,7 +95,7 @@
user.rank_fallback = "ass"
user.hud_set_squad()
- var/obj/item/card/id/ID = user.wear_id
+ var/obj/item/card/id/ID = user.get_idcard()
ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "Spotter")
GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "Spotter")
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 4882db3b83ea..baa91db19396 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -154,7 +154,7 @@
//Returns true if the user's id matches the lock's
/obj/item/storage/backpack/proc/compare_id(mob/living/carbon/human/H)
- var/obj/item/card/id/card = H.wear_id
+ var/obj/item/card/id/card = H.get_idcard()
if(!card || locking_id.registered_name != card.registered_name)
return FALSE
else return TRUE
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 314628bab9a3..f9f5983c925d 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -683,8 +683,8 @@
to_chat(user, SPAN_NOTICE("It must have some kind of ID lock..."))
return FALSE
- var/obj/item/card/id/idcard = human_user.wear_id
- if(!istype(idcard)) //not wearing an ID
+ var/obj/item/card/id/idcard = human_user.get_idcard()
+ if(!idcard) //not wearing an ID
to_chat(human_user, SPAN_NOTICE("It must have some kind of ID lock..."))
return FALSE
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index caf1f25676b3..7fa32cc21eaa 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -425,7 +425,7 @@
desc = "It can carry pistol magazines and revolver speedloaders."
max_w_class = SIZE_SMALL
icon_state = "pistol_mag"
- storage_slots = 3
+ storage_slots = 4
can_hold = list(
/obj/item/ammo_magazine/pistol,
diff --git a/code/game/objects/items/storage/smartpack.dm b/code/game/objects/items/storage/smartpack.dm
index d012e773617b..3763064aa333 100644
--- a/code/game/objects/items/storage/smartpack.dm
+++ b/code/game/objects/items/storage/smartpack.dm
@@ -1,5 +1,5 @@
#define BACKPACK_LIGHT_LEVEL 6
-#define PROTECTIVE_COST 50
+#define PROTECTIVE_COST 150
#define REPAIR_COST 100
#define IMMOBILE_COST 20
diff --git a/code/game/objects/prop.dm b/code/game/objects/prop.dm
index ac94e8ab03b4..cc941b19ed97 100644
--- a/code/game/objects/prop.dm
+++ b/code/game/objects/prop.dm
@@ -2,6 +2,29 @@
name = "prop"
desc = "Some kind of prop."
+/// A prop that acts as a replacement for another item, mimicking their looks.
+/// Mainly used in Reqs Tutorial to provide the full item selections without side effects.
+/obj/item/prop/replacer
+ /// The type that this object is taking the place of
+ var/original_type
+
+/obj/item/prop/replacer/Initialize(mapload, obj/original_type)
+ if(!original_type)
+ return INITIALIZE_HINT_QDEL
+ . = ..()
+ src.original_type = original_type
+ var/obj/created_type = new original_type // Instancing this for the sake of assigning its appearance to the prop and nothing else
+ name = initial(original_type.name)
+ icon = initial(original_type.icon)
+ icon_state = initial(original_type.icon_state)
+ desc = initial(original_type.desc)
+ if(ispath(original_type, /obj/item))
+ var/obj/item/item_type = original_type
+ item_state = initial(item_type.item_state)
+
+ appearance = created_type.appearance
+ qdel(created_type)
+
/obj/item/prop/laz_top
name = "lazertop"
icon = 'icons/obj/structures/props/server_equipment.dmi'
diff --git a/code/game/objects/structures/blocker.dm b/code/game/objects/structures/blocker.dm
index 33f79d7e9d32..aa438aafac64 100644
--- a/code/game/objects/structures/blocker.dm
+++ b/code/game/objects/structures/blocker.dm
@@ -126,8 +126,10 @@
visible = TRUE
-// for fuel pump since it's a large sprite.
+/obj/structure/blocker/forcefield/human/bulletproof/get_projectile_hit_boolean()
+ return TRUE
+// for fuel pump since it's a large sprite.
/obj/structure/blocker/fuelpump
name = "\improper Fuel Pump"
desc = "It is a machine that pumps fuel around the ship."
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 e65d28e96f33..6391eeefb498 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
@@ -45,37 +45,37 @@
src.req_access += pick(get_access(ACCESS_LIST_MARINE_MAIN))
/obj/structure/closet/secure_closet/proc/togglelock(mob/living/user)
- if(src.opened)
+ if(opened)
to_chat(user, SPAN_NOTICE("Close the locker first."))
return
- if(src.broken)
+ if(broken)
to_chat(user, SPAN_WARNING("The locker appears to be broken."))
return
if(user.loc == src)
to_chat(user, SPAN_NOTICE("You can't reach the lock from inside."))
return
- if(src.allowed(user))
+ if(allowed(user))
if(slotlocked && ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.wear_id)
- var/obj/item/card/id/I = H.wear_id
- if(I.claimedgear)
+ var/mob/living/carbon/human/human = user
+ var/obj/item/card/id/card = human.get_idcard()
+ if(card)
+ if(card.claimedgear)
return
switch(slotlocktype)
if("engi")
- if(H.job != "Squad Combat Technician")
+ if(human.job != "Squad Combat Technician")
return // stop people giving medics engineer prep access or IDs somehow
if("medic")
- if(H.job != "Squad Hospital Corpsman")
+ if(human.job != "Squad Hospital Corpsman")
return // same here
- I.claimedgear = 1 // you only get one locker, all other roles have this set 1 by default
- slotlocked = 0 // now permanently unlockable
+ card.claimedgear = TRUE // you only get one locker, all other roles have this set 1 by default
+ slotlocked = FALSE // now permanently unlockable
else
return // they have no ID on, fuck them.
- src.locked = !src.locked
- for(var/mob/O in viewers(user, 3))
- if((O.client && !( O.blinded )))
- to_chat(O, SPAN_NOTICE("The locker has been [locked ? null : "un"]locked by [user]."))
+ locked = !locked
+ for(var/mob/mob in viewers(user, 3))
+ if((mob.client && !( mob.blinded )))
+ to_chat(mob, SPAN_NOTICE("The locker has been [locked ? null : "un"]locked by [user]."))
update_icon()
else
to_chat(user, SPAN_NOTICE("Access Denied"))
diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm
index 89bc3da6ab23..0ab3e98356d5 100644
--- a/code/game/objects/structures/misc.dm
+++ b/code/game/objects/structures/misc.dm
@@ -7,6 +7,20 @@
anchored = TRUE
health = 250
+/obj/structure/showcase/attack_alien(mob/living/carbon/xenomorph/xeno)
+ if(xeno.a_intent == INTENT_HARM)
+ if(unslashable)
+ return
+ xeno.animation_attack_on(src)
+ playsound(loc, 'sound/effects/metalhit.ogg', 25, 1)
+ xeno.visible_message(SPAN_DANGER("[xeno] slices [src] apart!"),
+ SPAN_DANGER("We slice [src] apart!"), null, 5, CHAT_TYPE_XENO_COMBAT)
+ deconstruct(FALSE)
+ return XENO_ATTACK_ACTION
+ else
+ attack_hand(xeno)
+ return XENO_NONCOMBAT_ACTION
+
/obj/structure/showcase/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
@@ -273,7 +287,7 @@
. = ..()
if(over_object != usr || !Adjacent(usr))
return
-
+
if(!ishuman(usr))
return
diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm
index 745dd7ed40fc..16ab0fed895f 100644
--- a/code/game/objects/structures/props.dm
+++ b/code/game/objects/structures/props.dm
@@ -686,6 +686,20 @@
health = 75
density = TRUE
+/obj/structure/prop/ice_colony/dense/attack_alien(mob/living/carbon/xenomorph/xeno)
+ if(xeno.a_intent == INTENT_HARM)
+ if(unslashable)
+ return
+ xeno.animation_attack_on(src)
+ playsound(loc, 'sound/effects/metalhit.ogg', 25, 1)
+ xeno.visible_message(SPAN_DANGER("[xeno] slices [src] apart!"),
+ SPAN_DANGER("We slice [src] apart!"), null, 5, CHAT_TYPE_XENO_COMBAT)
+ deconstruct(FALSE)
+ return XENO_ATTACK_ACTION
+ else
+ attack_hand(xeno)
+ return XENO_NONCOMBAT_ACTION
+
/obj/structure/prop/ice_colony/dense/ice_tray
name = "ice slab tray"
icon_state = "ice_tray"
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 4cdcb1a970ca..d9f15922eeaf 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -7,6 +7,8 @@
desc = "A rectangular metallic frame sitting on four legs with a back panel. Designed to fit the sitting position, more or less comfortably."
icon_state = "chair"
buckle_lying = 0
+ var/north_layer = FLY_LAYER
+ var/non_north_layer = OBJ_LAYER
var/propelled = FALSE //Check for fire-extinguisher-driven chairs
var/can_rotate = TRUE
var/picked_up_item = /obj/item/weapon/twohanded/folded_metal_chair
@@ -25,10 +27,10 @@
flags_can_pass_all_temp = PASS_OVER
/obj/structure/bed/chair/handle_rotation() //Making this into a separate proc so office chairs can call it on Move()
- if(src.dir == NORTH)
- src.layer = FLY_LAYER
+ if(dir == NORTH)
+ layer = north_layer
else
- src.layer = OBJ_LAYER
+ layer = non_north_layer
if(buckled_mob)
buckled_mob.setDir(dir)
@@ -257,6 +259,10 @@
debris = list()
picked_up_item = null
+/obj/structure/bed/chair/comfy/arc
+ non_north_layer = BELOW_OBJ_LAYER
+ layer = BELOW_OBJ_LAYER
+
/obj/structure/bed/chair/comfy/orange
icon_state = "comfychair_orange"
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 3e61939cb1ca..c1d0352766a6 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -1323,9 +1323,9 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
req_access = list(ACCESS_MARINE_CREWMAN)
circuit = /obj/item/circuitboard/computer/supplycomp/vehicle
// Can only retrieve one vehicle per round
- var/spent = TRUE
- var/tank_unlocked = FALSE
- var/list/allowed_roles = list(JOB_CREWMAN)
+ var/spent = FALSE
+ var/tank_unlocked = TRUE
+ var/list/allowed_roles = list(JOB_TANK_CREW)
var/list/vehicles
@@ -1384,9 +1384,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
. = ..()
vehicles = list(
- new /datum/vehicle_order/apc(),
- new /datum/vehicle_order/apc/med(),
- new /datum/vehicle_order/apc/cmd(),
+ new /datum/vehicle_order/tank/plain
)
if(!GLOB.VehicleElevatorConsole)
@@ -1477,7 +1475,6 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
if(VO?.has_vehicle_lock())
return
-
spent = TRUE
ordered_vehicle = new VO.ordered_vehicle(middle_turf)
SSshuttle.vehicle_elevator.request(SSshuttle.getDock("almayer vehicle"))
diff --git a/code/modules/admin/player_panel/actions/punish.dm b/code/modules/admin/player_panel/actions/punish.dm
index 1b7d313b6121..5d2298fc8fc2 100644
--- a/code/modules/admin/player_panel/actions/punish.dm
+++ b/code/modules/admin/player_panel/actions/punish.dm
@@ -267,11 +267,12 @@
GLOB.data_core.manifest_modify(new_name, WEAKREF(target_mob))
if(ishuman(target_mob))
var/mob/living/carbon/human/target_human = target_mob
- if(target_human.wear_id && target_human.wear_id.registered_ref == WEAKREF(target_human))
- target_human.wear_id.name = "[target_human.real_name]'s ID Card"
- target_human.wear_id.registered_name = "[target_human.real_name]"
- if(target_human.wear_id.assignment)
- target_human.wear_id.name += " ([target_human.wear_id.assignment])"
+ var/obj/item/card/id/card = target_human.get_idcard()
+ if(card?.registered_ref == WEAKREF(target_human))
+ card.name = "[target_human.real_name]'s ID Card"
+ card.registered_name = "[target_human.real_name]"
+ if(card.assignment)
+ card.name += " ([card.assignment])"
target_mob.client.prefs.real_name = new_name
target_mob.client.prefs.save_character()
diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm
index ff0e9cc6ebaf..69395e6e69e9 100644
--- a/code/modules/admin/tabs/event_tab.dm
+++ b/code/modules/admin/tabs/event_tab.dm
@@ -81,6 +81,8 @@
/client/proc/handle_bomb_drop(atom/epicenter)
var/custom_limit = 5000
+ var/power_warn_threshold = 500
+ var/falloff_warn_threshold = 0.05
var/list/choices = list("Small Bomb", "Medium Bomb", "Big Bomb", "Custom Bomb")
var/list/falloff_shape_choices = list("CANCEL", "Linear", "Exponential")
var/choice = tgui_input_list(usr, "What size explosion would you like to produce?", "Drop Bomb", choices)
@@ -113,6 +115,11 @@
if(power > custom_limit)
return
+
+ if((power >= power_warn_threshold) && ((1 / (power / falloff)) <= falloff_warn_threshold) && (explosion_shape == EXPLOSION_FALLOFF_SHAPE_LINEAR)) // The lag can be a bit situational, but a large-power explosion with minimal (linear) falloff can absolutely bring the server to a halt in certain cases.
+ if(tgui_input_list(src, "This bomb has the potential to lag the server. Are you sure you wish to drop it?", "Drop confirm", list("Yes", "No")) != "Yes")
+ return
+
cell_explosion(epicenter, power, falloff, explosion_shape, null, cause_data)
message_admins("[key_name(src, TRUE)] dropped a custom cell bomb with power [power], falloff [falloff] and falloff_shape [shape_choice]!")
message_admins("[ckey] used 'Drop Bomb' at [epicenter.loc].")
@@ -492,8 +499,8 @@
if(random_names)
var/random_name = "[lowertext(H.species.name)] ([rand(1, 999)])"
H.change_real_name(H, random_name)
- if(H.wear_id)
- var/obj/item/card/id/card = H.wear_id
+ var/obj/item/card/id/card = H.get_idcard()
+ if(card)
card.registered_name = H.real_name
card.name = "[card.registered_name]'s ID Card ([card.assignment])"
diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm
index 000d94e70866..f3af6ed440e9 100644
--- a/code/modules/admin/topic/topic.dm
+++ b/code/modules/admin/topic/topic.dm
@@ -2248,6 +2248,21 @@
return
return remove_tagged_datum(datum_to_remove)
+ if(href_list["view_bug_report"])
+ if(!check_rights(R_ADMIN|R_MOD))
+ return
+
+ var/datum/tgui_bug_report_form/bug_report = locate(href_list["view_bug_report"])
+ if(!istype(bug_report) || QDELETED(bug_report))
+ to_chat(usr, SPAN_WARNING("This bug report is no longer available."))
+ return
+
+ if(!bug_report.assign_admin(usr))
+ return
+
+ bug_report.tgui_interact(usr)
+ return
+
if(href_list["show_tags"])
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 60c2092d8dc3..83e12be9c574 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -200,14 +200,14 @@
return
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if (H.wear_id)
- var/obj/item/card/id/id = H.wear_id
+ var/obj/item/card/id/id = H.get_idcard()
+ if(id)
id.icon_state = "gold"
- id:access = get_access(ACCESS_LIST_GLOBAL)
+ id.access = get_access(ACCESS_LIST_GLOBAL)
else
- var/obj/item/card/id/id = new/obj/item/card/id(M);
+ id = new(M)
id.icon_state = "gold"
- id:access = get_access(ACCESS_LIST_GLOBAL)
+ id.access = get_access(ACCESS_LIST_GLOBAL)
id.registered_name = H.real_name
id.registered_ref = WEAKREF(H)
id.assignment = "Captain"
@@ -266,7 +266,7 @@
var/datum/paygrade/account_paygrade = GLOB.paygrades[custom_paygrade]
- var/obj/item/card/id/card = account_user.wear_id
+ var/obj/item/card/id/card = account_user.get_idcard()
generated_account = create_account(account_user.real_name, starting_amount, account_paygrade)
if(card)
card.associated_account_number = generated_account.account_number
diff --git a/code/modules/admin/verbs/mob_verbs.dm b/code/modules/admin/verbs/mob_verbs.dm
index abb43461c2fe..3b4de192e78f 100644
--- a/code/modules/admin/verbs/mob_verbs.dm
+++ b/code/modules/admin/verbs/mob_verbs.dm
@@ -370,7 +370,7 @@
message_admins("[key_name(src)] changed hivenumber of [H] to [H.hivenumber].")
-/client/proc/cmd_admin_change_their_name(mob/living/carbon/X)
+/client/proc/cmd_admin_change_their_name(mob/living/carbon/carbon)
set name = "Change Name"
set category = null
@@ -378,19 +378,20 @@
if(!newname)
return
- if(!X)
+ if(!carbon)
to_chat(usr, "This mob no longer exists")
return
- var/old_name = X.name
- X.change_real_name(X, newname)
- if(istype(X, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = X
- if(H.wear_id)
- H.wear_id.name = "[H.real_name]'s ID Card"
- H.wear_id.registered_name = "[H.real_name]"
- if(H.wear_id.assignment)
- H.wear_id.name += " ([H.wear_id.assignment])"
+ var/old_name = carbon.name
+ carbon.change_real_name(carbon, newname)
+ if(ishuman(carbon))
+ var/mob/living/carbon/human/human = carbon
+ var/obj/item/card/id/card = human.get_idcard()
+ if(card)
+ card.name = "[human.real_name]'s ID Card"
+ card.registered_name = "[human.real_name]"
+ if(card.assignment)
+ card.name += " ([card.assignment])"
message_admins("[key_name(src)] changed name of [old_name] to [newname].")
diff --git a/code/modules/admin/verbs/select_equipment.dm b/code/modules/admin/verbs/select_equipment.dm
index 7e78652c5c35..90269f70c1aa 100644
--- a/code/modules/admin/verbs/select_equipment.dm
+++ b/code/modules/admin/verbs/select_equipment.dm
@@ -10,15 +10,15 @@
var/newrank = tgui_input_list(usr, "Select new rank for [H]", "Change the mob's rank and skills", rank_list)
if (!newrank)
return
- if(!H)
+ if(QDELETED(H))
return
- var/obj/item/card/id/I = H.wear_id
+ var/obj/item/card/id/I = H.get_idcard()
if(GLOB.RoleAuthority.roles_by_name[newrank])
var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newrank]
H.comm_title = J.get_comm_title()
H.set_skills(J.get_skills())
- if(istype(I))
+ if(I)
I.access = J.get_access()
I.rank = J.title
I.assignment = J.disp_title
@@ -48,7 +48,7 @@
if(!newskillset || newskillset == "Keep Skillset")
return
- if(!H)
+ if(QDELETED(H))
return
var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newskillset]
@@ -58,25 +58,25 @@
var/newcommtitle = input("Write the custom title appearing on comms chat (e.g. Spc)", "Comms title") as null|text
if(!newcommtitle)
return
- if(!H)
+ if(QDELETED(H))
return
H.comm_title = newcommtitle
- if(!istype(I) || I != H.wear_id)
+ if(!I || I != H.get_idcard())
to_chat(usr, "The mob has no id card, unable to modify ID and chat title.")
else
var/newchattitle = input("Write the custom title appearing in chat (e.g. SGT)", "Chat title") as null|text
if(!newchattitle)
return
- if(!H || I != H.wear_id)
+ if(QDELETED(H) || I != H.get_idcard())
return
I.paygrade = newchattitle
var/IDtitle = input("Write the custom title on your ID (e.g. Squad Specialist)", "ID title") as null|text
if(!IDtitle)
return
- if(!H || I != H.wear_id)
+ if(QDELETED(H) || I != H.get_idcard())
return
I.rank = IDtitle
@@ -92,7 +92,7 @@
if(!newskillset)
return
- if(!H)
+ if(QDELETED(H))
return
var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newskillset]
diff --git a/code/modules/almayer/machinery.dm b/code/modules/almayer/machinery.dm
index 9411c229d2f3..76eef40c081f 100644
--- a/code/modules/almayer/machinery.dm
+++ b/code/modules/almayer/machinery.dm
@@ -106,7 +106,9 @@
/obj/structure/machinery/prop/almayer/CICmap/computer
name = "map terminal"
desc = "A terminal that displays a map of the current operation location."
- icon_state = "security"
+ icon = 'icons/obj/vehicles/interiors/arc.dmi'
+ icon_state = "cicmap_computer"
+ density = FALSE
/obj/structure/machinery/prop/almayer/CICmap/upp
minimap_type = MINIMAP_FLAG_UPP
diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm
index a78dd0d38464..2220f8f82fd2 100644
--- a/code/modules/character_traits/biology_traits.dm
+++ b/code/modules/character_traits/biology_traits.dm
@@ -82,7 +82,7 @@
/datum/character_trait/biology/bad_leg/New()
. = ..()
// Not on definition as several lists are added
- inapplicable_roles = list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL, JOB_ORDNANCE_TECH, JOB_MARINE) + JOB_SQUAD_ROLES_LIST + JOB_MARINE_RAIDER_ROLES_LIST + JOB_ERT_GRUNT_LIST
+ inapplicable_roles = list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_TANK_CREW, JOB_INTEL, JOB_ORDNANCE_TECH, JOB_MARINE) + JOB_SQUAD_ROLES_LIST + JOB_MARINE_RAIDER_ROLES_LIST + JOB_ERT_GRUNT_LIST
bad_cane_roles = list(JOB_SURVIVOR, JOB_STOWAWAY)
fancy_cane_roles = list(JOB_CO_SURVIVOR, CORPORATE_SURVIVOR, JOB_CMO, JOB_CORPORATE_LIAISON, JOB_SEA, JOB_CHIEF_ENGINEER) + JOB_COMMAND_ROLES_LIST
inapplicable_species = list(SPECIES_SYNTHETIC, SPECIES_YAUTJA)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 2432303a1416..1971deba6356 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -596,6 +596,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
dat += "tgui Window Placement: [(tgui_lock) ? "Primary monitor" : "Free (default)"]
"
dat += "Play Admin Sounds: [(toggles_sound & SOUND_MIDI) ? "Yes" : "No"]
"
dat += "Play Announcement Sounds As Ghost: [(toggles_sound & SOUND_OBSERVER_ANNOUNCEMENTS) ? "Yes" : "No"]
"
+ dat += "Play Fax Sounds As Ghost: [(toggles_sound & SOUND_FAX_MACHINE) ? "Yes" : "No"]
"
dat += "Toggle Meme or Atmospheric Sounds: Toggle
"
dat += "Set Eye Blur Type: Set
"
dat += "Set Flash Type: Set
"
@@ -666,7 +667,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
* * width - Screen' width.
* * height - Screen's height.
*/
-/datum/preferences/proc/SetChoices(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
+/datum/preferences/proc/SetChoices(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
if(!GLOB.RoleAuthority)
return
@@ -784,7 +785,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
* * width - Screen' width.
* * height - Screen's height.
*/
-/datum/preferences/proc/set_job_slots(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
+/datum/preferences/proc/set_job_slots(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750)
if(!GLOB.RoleAuthority)
return
@@ -1850,6 +1851,9 @@ GLOBAL_LIST_INIT(bgstate_options, list(
if("hear_observer_announcements")
toggles_sound ^= SOUND_OBSERVER_ANNOUNCEMENTS
+ if("hear_faxes")
+ toggles_sound ^= SOUND_FAX_MACHINE
+
if("lobby_music")
toggles_sound ^= SOUND_LOBBY
if(toggles_sound & SOUND_LOBBY)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index db52f58acc68..e261595d300f 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 8
-#define SAVEFILE_VERSION_MAX 23
+#define SAVEFILE_VERSION_MAX 24
//handles converting savefiles to new formats
//MAKE SURE YOU KEEP THIS UP TO DATE!
@@ -142,6 +142,12 @@
skin_color = "tan3"
S["skin_color"] << skin_color
+ if(savefile_version < 24) // adds fax machine sounds on by default
+ var/sound_toggles
+ S["toggles_sound"] >> sound_toggles
+ sound_toggles |= (SOUND_FAX_MACHINE)
+ S["toggles_sound"] << sound_toggles
+
savefile_version = SAVEFILE_VERSION_MAX
return 1
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index 9db140f54958..cb3114f6c5a4 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -15,7 +15,7 @@
if(!admin_holder) return
prefs.toggles_sound ^= SOUND_ADMINHELP
prefs.save_preferences()
- to_chat(usr,SPAN_BOLDNOTICE( "You will [(prefs.toggles_sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive."))
+ to_chat(usr, SPAN_BOLDNOTICE("You will [(prefs.toggles_sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive."))
/client/proc/toggleprayers()
set name = "Show/Hide Prayers"
@@ -33,6 +33,14 @@
prefs.save_preferences()
to_chat(usr, SPAN_BOLDNOTICE("You will [(prefs.toggles_sound & SOUND_OBSERVER_ANNOUNCEMENTS) ? "now" : "no longer"] hear announcement sounds as an observer."))
+/client/verb/toggle_fax_machine_sounds()
+ set name = "Hear/Silence Ghost Fax Machines"
+ set category = "Preferences.Sound"
+ set desc = "Toggle hearing a notification of faxes while being an observer."
+ prefs.toggles_sound ^= SOUND_FAX_MACHINE
+ prefs.save_preferences()
+ to_chat(usr, SPAN_BOLDNOTICE("You will [(prefs.toggles_sound & SOUND_FAX_MACHINE) ? "now" : "no longer"] hear a fax sounds as an observer."))
+
/client/verb/toggletitlemusic()
set name = "Hear/Silence LobbyMusic"
set category = "Preferences.Sound"
diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm
index 889359bb7eef..4e22f1b5e6ba 100644
--- a/code/modules/cm_aliens/structures/egg.dm
+++ b/code/modules/cm_aliens/structures/egg.dm
@@ -55,6 +55,10 @@
. = ..()
if(isxeno(user) && status == EGG_GROWN)
. += "Ctrl + Click egg to retrieve child into your empty hand if you can carry it."
+ if(isobserver(user) && status == EGG_GROWN)
+ var/datum/hive_status/hive = GLOB.hive_datum[hivenumber]
+ var/current_hugger_count = hive.get_current_playable_facehugger_count();
+ . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support [SPAN_NOTICE("[hive.playable_hugger_limit]")] facehuggers."
/obj/effect/alien/egg/attack_alien(mob/living/carbon/xenomorph/M)
if(status == EGG_BURST || status == EGG_DESTROYED)
diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm
index e24ff8d167d8..32cf0ee591b5 100644
--- a/code/modules/cm_aliens/structures/special/egg_morpher.dm
+++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm
@@ -44,6 +44,9 @@
. = ..()
if(isxeno(user) || isobserver(user))
. += "It has [stored_huggers] facehuggers within, with [huggers_to_grow] more to grow (reserved: [huggers_reserved])."
+ if(isobserver(user))
+ var/current_hugger_count = linked_hive.get_current_playable_facehugger_count();
+ . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support [SPAN_NOTICE("[linked_hive.playable_hugger_limit]")] facehuggers."
/obj/effect/alien/resin/special/eggmorph/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/grab))
diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm
index b0270848950b..ae3be4d55bef 100644
--- a/code/modules/cm_aliens/structures/special/pylon_core.dm
+++ b/code/modules/cm_aliens/structures/special/pylon_core.dm
@@ -62,6 +62,9 @@
/obj/effect/alien/resin/special/pylon/get_examine_text(mob/user)
. = ..()
+ if(!isobserver(user) && !isxeno(user))
+ return
+
var/lesser_count = 0
for(var/mob/living/carbon/xenomorph/lesser_drone/lesser in linked_hive.totalXenos)
lesser_count++
diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm
index e0220d017d42..cbc7deffcd07 100644
--- a/code/modules/cm_marines/equipment/kit_boxes.dm
+++ b/code/modules/cm_marines/equipment/kit_boxes.dm
@@ -257,8 +257,8 @@
if(!GLOB.available_specialist_kit_boxes[selection] || GLOB.available_specialist_kit_boxes[selection] <= 0)
to_chat(user, SPAN_WARNING("No more kits of this type may be chosen!"))
return FALSE
- var/obj/item/card/id/ID = user.wear_id
- if(!istype(ID) || ID.registered_ref != WEAKREF(user))
+ var/obj/item/card/id/card = user.get_idcard()
+ if(!card || card.registered_ref != WEAKREF(user))
to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("ID card")] or [SPAN_INFO("dog tags")] to select a specialization!"))
return
var/turf/T = get_turf(loc)
@@ -297,8 +297,8 @@
user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
if(specialist_assignment)
user.put_in_hands(spec_box)
- ID.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + ID.assignment + " ([specialist_assignment])")
- GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), ID.assignment)
+ card.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + card.assignment + " ([specialist_assignment])")
+ GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment)
return TRUE
return FALSE
diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm
index 6d1aba4aca70..93ef0e21e8cb 100644
--- a/code/modules/cm_marines/marines_consoles.dm
+++ b/code/modules/cm_marines/marines_consoles.dm
@@ -942,6 +942,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor)
JOB_DROPSHIP_PILOT = 23,
JOB_DROPSHIP_CREW_CHIEF = 24,
JOB_INTEL = 25,
+ JOB_TANK_CREW = 26,
// 30-39: Security
JOB_CHIEF_POLICE = 30,
JOB_PROVOST_TML = 30,
diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index ce69115cee48..a4286b043eba 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -512,15 +512,13 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation)
var/distance = 18
var/fire_level = 70
var/burn_level = 80
- var/fire_color = null
+ var/fire_color = LIGHT_COLOR_CYAN
var/fire_type = "white"
/obj/structure/ob_ammo/warhead/incendiary/warhead_impact(turf/target)
. = ..()
if (!.)
return
- if(fire_color)
- fire_type = "dynamic"
new /obj/effect/overlay/temp/blinking_laser (target)
sleep(10)
diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm
index 031e464b3f82..84a27622959a 100644
--- a/code/modules/cm_marines/overwatch.dm
+++ b/code/modules/cm_marines/overwatch.dm
@@ -184,13 +184,11 @@
if(is_ground_level(current_turf.z))
continue
+ var/obj/item/card/id/card = marine_human.get_idcard()
if(marine_human.job)
role = marine_human.job
- else if(istype(marine_human.wear_id, /obj/item/card/id)) //decapitated marine is mindless,
- var/obj/item/card/id/ID = marine_human.wear_id //we use their ID to get their role.
- if(ID.rank)
- role = ID.rank
-
+ else if(card?.rank) //decapitated marine is mindless,
+ role = card.rank
if(current_squad.squad_leader)
if(marine_human == current_squad.squad_leader)
@@ -249,15 +247,14 @@
if(JOB_SQUAD_SPECIALIST)
spec_count++
if(marine_human)
- if(istype(marine_human.wear_id, /obj/item/card/id)) //decapitated marine is mindless,
- var/obj/item/card/id/ID = marine_human.wear_id //we use their ID to get their role.
- if(ID.assignment)
- if(specialist_type)
- specialist_type = "MULTIPLE"
- else
- var/list/spec_type = splittext(ID.assignment, "(")
- if(islist(spec_type) && (length(spec_type) > 1))
- specialist_type = splittext(spec_type[2], ")")[1]
+ var/obj/item/card/id/card = marine_human.get_idcard()
+ if(card?.assignment) //decapitated marine is mindless,
+ if(specialist_type)
+ specialist_type = "MULTIPLE"
+ else
+ var/list/spec_type = splittext(card.assignment, "(")
+ if(islist(spec_type) && (length(spec_type) > 1))
+ specialist_type = splittext(spec_type[2], ")")[1]
else if(!specialist_type)
specialist_type = "UNKNOWN"
if(mob_state != "Dead")
@@ -589,9 +586,9 @@
if(sl_headset)
sl_headset.keys += new /obj/item/device/encryptionkey/squadlead/acting(sl_headset)
sl_headset.recalculateChannels()
- if(istype(selected_sl.wear_id, /obj/item/card/id))
- var/obj/item/card/id/ID = selected_sl.wear_id
- ID.access += ACCESS_MARINE_LEADER
+ var/obj/item/card/id/card = selected_sl.get_idcard()
+ if(card)
+ card.access += ACCESS_MARINE_LEADER
selected_sl.hud_set_squad()
selected_sl.update_inv_head() //updating marine helmet leader overlays
selected_sl.update_inv_wear_suit()
@@ -696,7 +693,8 @@
to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("[transfer_marine] is KIA.")]")
return
- if(!istype(transfer_marine.wear_id, /obj/item/card/id))
+ var/obj/item/card/id/card = transfer_marine.get_idcard()
+ if(!card)
to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("Transfer aborted. [transfer_marine] isn't wearing an ID.")]")
return
@@ -713,7 +711,8 @@
to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("[transfer_marine] is KIA.")]")
return
- if(!istype(transfer_marine.wear_id, /obj/item/card/id))
+ card = transfer_marine.get_idcard()
+ if(!card)
to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("Transfer aborted. [transfer_marine] isn't wearing an ID.")]")
return
@@ -726,7 +725,7 @@
to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("Transfer aborted. [new_squad] can't have another [transfer_marine.job].")]")
return
- . = transfer_marine_to_squad(transfer_marine, new_squad, old_squad)
+ . = transfer_marine_to_squad(transfer_marine, new_squad, old_squad, card)
if(.)
visible_message("[icon2html(src, viewers(src))] [SPAN_BOLDNOTICE("[transfer_marine] has been transfered from squad '[old_squad]' to squad '[new_squad]'. Logging to enlistment file.")]")
to_chat(transfer_marine, "[icon2html(src, transfer_marine)] \[Overwatch\]: You've been transfered to [new_squad]!")
@@ -872,7 +871,8 @@
name = "Broken Overwatch Console"
/obj/structure/machinery/computer/overwatch/almayer/small
- icon_state = "engineering_terminal"
+ icon = 'icons/obj/vehicles/interiors/arc.dmi'
+ icon_state = "overwatch_computer"
/obj/structure/machinery/computer/overwatch/clf
faction = FACTION_CLF
diff --git a/code/modules/cm_marines/radar.dm b/code/modules/cm_marines/radar.dm
index 80b3bb7bcb0c..aa332d601395 100644
--- a/code/modules/cm_marines/radar.dm
+++ b/code/modules/cm_marines/radar.dm
@@ -205,12 +205,12 @@
continue
var/crewmember_name = "Unknown"
var/crewmember_rank = "Unknown"
- if(humanoid.wear_id)
- var/obj/item/card/id/ID = humanoid.wear_id.GetID()
- if(ID?.registered_name)
- crewmember_name = ID.registered_name
- if(ID?.assignment)
- crewmember_rank = ID.assignment
+ var/obj/item/card/id/card = humanoid.get_idcard()
+ if(card)
+ if(card.registered_name)
+ crewmember_name = card.registered_name
+ if(card.assignment)
+ crewmember_rank = card.assignment
switch(humanoid.stat)
if(CONSCIOUS)
crewmember_name = "[crewmember_name] ([crewmember_rank]) (Conscious)"
diff --git a/code/modules/cm_tech/droppod/equipment.dm b/code/modules/cm_tech/droppod/equipment.dm
index 727bfccf0e28..da8392a1517e 100644
--- a/code/modules/cm_tech/droppod/equipment.dm
+++ b/code/modules/cm_tech/droppod/equipment.dm
@@ -27,11 +27,22 @@
equipment_to_spawn.forceMove(loc)
/obj/structure/droppod/equipment/sentry/spawn_equipment(equipment, mob/M)
- var/obj/structure/machinery/defenses/sentry/S = ..()
- S.owner_mob = M
- return S
+ var/obj/structure/machinery/defenses/sentry/sentry = ..()
+ sentry.owner_mob = M
+ return sentry
/obj/structure/droppod/equipment/sentry/move_equipment()
..()
- var/obj/structure/machinery/defenses/sentry/S = equipment_to_spawn
- S.power_on()
+ var/obj/structure/machinery/defenses/sentry/sentry = equipment_to_spawn
+ sentry.power_on()
+
+/obj/structure/droppod/equipment/sentry_holder/spawn_equipment(equipment, mob/M)
+ var/obj/structure/machinery/sentry_holder/holder = ..()
+ var/obj/structure/machinery/defenses/sentry/sentry = holder.deployed_turret
+ sentry.owner_mob = M
+ return holder
+
+/obj/structure/droppod/equipment/sentry_holder/move_equipment()
+ ..()
+ var/obj/structure/machinery/sentry_holder/holder = equipment_to_spawn
+ holder.deploy_sentry()
diff --git a/code/modules/cm_tech/implements/tank.dm b/code/modules/cm_tech/implements/tank.dm
index ec1b81e9f675..9cd8a5c6a804 100644
--- a/code/modules/cm_tech/implements/tank.dm
+++ b/code/modules/cm_tech/implements/tank.dm
@@ -18,7 +18,7 @@
name = "tank coupon"
desc = "We're done playing! This coupon allows the ship crew to retrieve a complete Longstreet tank from Vehicle ASRS. Make sure to send the ASRS lift down so it can be retrieved. One use only. LTB not included. Comes with free friendly fire."
vehicle_type = /datum/vehicle_order/tank/broken
- vehicle_category = "TANK"
+ vehicle_category = "LONGSTREET"
/obj/item/vehicle_coupon/attack_self(mob/user)
if(QDELETED(src))
diff --git a/code/modules/cm_tech/techs/marine/tier1/arc.dm b/code/modules/cm_tech/techs/marine/tier1/arc.dm
index dc02762cc5f0..1e3a193626c4 100644
--- a/code/modules/cm_tech/techs/marine/tier1/arc.dm
+++ b/code/modules/cm_tech/techs/marine/tier1/arc.dm
@@ -12,6 +12,19 @@
flags = TREE_FLAG_MARINE
+
+/datum/tech/arc/can_unlock(mob/unlocking_mob)
+ . = ..()
+
+ var/obj/structure/machinery/cm_vending/gear/vehicle_crew/gearcomp = GLOB.VehicleGearConsole
+
+ if(gearcomp.selected_vehicle == "TANK")
+ to_chat(unlocking_mob, SPAN_WARNING ("A vehicle has already been selected for this operation."))
+ return FALSE
+
+ return TRUE
+
+
/datum/tech/arc/on_unlock()
. = ..()
diff --git a/code/modules/cm_tech/techs/marine/tier1/points.dm b/code/modules/cm_tech/techs/marine/tier1/points.dm
index 7768d8da2ab7..5cd19bb9e978 100644
--- a/code/modules/cm_tech/techs/marine/tier1/points.dm
+++ b/code/modules/cm_tech/techs/marine/tier1/points.dm
@@ -6,13 +6,13 @@
announce_name = "ALMAYER SPECIAL ASSETS AUTHORIZED"
announce_message = "Additional supply budget has been authorised for this operation."
- required_points = 15
+ required_points = 7
increase_per_purchase = 1
flags = TREE_FLAG_MARINE
tier = /datum/tier/one
- var/points_to_give = 100
+ var/points_to_give = 50
/datum/tech/repeatable/req_points/proc/get_tech_scaling_value()
//We take the number of marine players, deduced from other lists, and then get a scale multiplier from it, to be used in arbitrary manners to distribute equipment
@@ -33,13 +33,13 @@
announce_message = "Additional dropship part fabricator points have been authorised for this operation."
- required_points = 12
+ required_points = 6
increase_per_purchase = 1
flags = TREE_FLAG_MARINE
tier = /datum/tier/one
- var/points_to_give = 2500
+ var/points_to_give = 2000
/datum/tech/repeatable/dropship_points/on_unlock()
. = ..()
diff --git a/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm b/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm
index 51675ccd27f2..506dc2d846c5 100644
--- a/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm
+++ b/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm
@@ -2,7 +2,7 @@
name = "OB Ammo"
desc = "Purchase orbital bombardment ammo."
- required_points = 10
+ required_points = 5
increase_per_purchase = 2
tier = /datum/tier/two
diff --git a/code/modules/cm_tech/techtree.dm b/code/modules/cm_tech/techtree.dm
index 689600fcc5f2..fbad30478081 100644
--- a/code/modules/cm_tech/techtree.dm
+++ b/code/modules/cm_tech/techtree.dm
@@ -180,6 +180,7 @@
/// `tech`: a typepath to a tech
/datum/techtree/proc/get_node(tech)
+ RETURN_TYPE(/datum/tech)
return techs_by_type[tech]
/datum/techtree/proc/on_node_gained(obj/structure/resource_node/RN)
diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm
index a29941fd0c6c..af4e497862fa 100644
--- a/code/modules/defenses/defenses.dm
+++ b/code/modules/defenses/defenses.dm
@@ -81,7 +81,7 @@
if(ishuman(user))
message += SPAN_INFO("A multitool can be used to disassemble it.")
message += "\n"
- message += SPAN_INFO("The turret is currently [locked? "locked" : "unlocked"] to non-engineers.")
+ message += SPAN_INFO("It is currently [locked? "locked" : "unlocked"] to non-engineers.")
message += "\n"
message += SPAN_INFO("It has [SPAN_HELPFUL("[health]/[health_max]")] health.")
message += "\n"
@@ -138,12 +138,16 @@
switch(selection)
if(FACTION_MARINE)
faction_group = FACTION_LIST_MARINE
- if(SENTRY_FACTION_WEYLAND)
- faction_group = FACTION_LIST_MARINE_WY
if(SENTRY_FACTION_HUMAN)
faction_group = FACTION_LIST_HUMANOID
if(SENTRY_FACTION_COLONY)
faction_group = list(FACTION_MARINE, FACTION_COLONIST)
+ if(SENTRY_FACTION_WEYLAND)
+ faction_group = FACTION_LIST_MARINE_WY
+ if(FACTION_WY)
+ faction_group = FACTION_LIST_WY
+ if(FACTION_UPP)
+ faction_group = FACTION_LIST_UPP
/obj/structure/machinery/defenses/start_processing()
diff --git a/code/modules/defenses/handheld.dm b/code/modules/defenses/handheld.dm
index 233dad313d25..5b5831c9bb15 100644
--- a/code/modules/defenses/handheld.dm
+++ b/code/modules/defenses/handheld.dm
@@ -143,6 +143,41 @@
defense_type = /obj/structure/machinery/defenses/sentry/mini
deployment_time = 0.75 SECONDS
+/obj/item/defenses/handheld/sentry/wy
+ name = "handheld WY 202-GMA1 smart sentry"
+ desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ icon_state = "Normal wy_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/wy
+ deployment_time = 5 SECONDS
+
+/obj/item/defenses/handheld/sentry/wy/mini
+ name = "handheld WY 14-GRA2 mini sentry"
+ icon_state = "Mini wy_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/mini/wy
+ deployment_time = 2 SECONDS
+
+/obj/item/defenses/handheld/sentry/wy/heavy
+ name = "handheld WY 2-ADT-A3 heavy sentry"
+ icon = 'icons/obj/structures/machinery/defenses/wy_heavy.dmi'
+ icon_state = "Heavy wy_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/dmr/wy
+ deployment_time = 10 SECONDS
+
+/obj/item/defenses/handheld/sentry/upp
+ name = "handheld UPP SDS-R3 sentry gun"
+ desc = "A compact version of the UPP defense sentry SDS-R1. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ icon_state = "Normal upp_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/upp
+ deployment_time = 5 SECONDS
+
+/obj/item/defenses/handheld/sentry/upp/light
+ name = "handheld UPP SDS-R8 light sentry"
+ desc = "A compact version of the UPP defense sentry SDS-R7. Designed for deployment in the field."
+ icon_state = "Light upp_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/upp/light
+ deployment_time = 2 SECONDS
// FLAMER BASE AND UPGRADES
/obj/item/defenses/handheld/sentry/flamer
@@ -202,6 +237,24 @@
defense_type = /obj/structure/machinery/defenses/sentry/flamer/plasma
ammo_convert = /obj/item/ammo_magazine/sentry_flamer/glob
+/obj/item/defenses/handheld/sentry/flamer/wy
+ name = "handheld WY 406-FE2 smart sentry"
+ desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ icon_state = "Normal wy_flamer_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/flamer/wy
+ deployment_time = 5 SECONDS
+ ammo_convert = /obj/item/ammo_magazine/sentry_flamer/wy
+
+/obj/item/defenses/handheld/sentry/flamer/upp
+ name = "handheld UPP SDS-R5 sentry flamer"
+ desc = "A compact version of the UPP defenses. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ icon_state = "Normal upp_flamer_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/flamer/upp
+ deployment_time = 5 SECONDS
+ ammo_convert = /obj/item/ammo_magazine/sentry_flamer/upp
+
// TESLA BASE AND UPGRADES
/obj/item/defenses/handheld/tesla_coil
@@ -300,4 +353,19 @@
deployment_time = 2 SECONDS
defense_type = /obj/structure/machinery/defenses/planted_flag/range
+/obj/item/defenses/handheld/planted_flag/wy
+ name = "handheld WY planted flag"
+ desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ icon_state = "WY planted_flag_handheld"
+ deployment_time = 3 SECONDS
+ defense_type = /obj/structure/machinery/defenses/planted_flag/wy
+
+/obj/item/defenses/handheld/planted_flag/upp
+ name = "handheld UPP planted flag"
+ desc = "A compact version of the UPP defenses. Designed for deployment in the field."
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ icon_state = "UPP planted_flag_handheld"
+ deployment_time = 5 SECONDS
+ defense_type = /obj/structure/machinery/defenses/planted_flag/upp
diff --git a/code/modules/defenses/planted_flag.dm b/code/modules/defenses/planted_flag.dm
index fc50b6ba53f0..d2b9b23e8f3b 100644
--- a/code/modules/defenses/planted_flag.dm
+++ b/code/modules/defenses/planted_flag.dm
@@ -115,6 +115,40 @@
H.activate_order_buff(COMMAND_ORDER_FOCUS, buff_intensity, 5 SECONDS)
H.activate_order_buff(COMMAND_ORDER_MOVE, buff_intensity, 5 SECONDS)
+/obj/structure/machinery/defenses/planted_flag/wy
+ name = "WY planted flag"
+ desc = "A planted flag with the iconic WY flag plastered all over it, you feel a burst of energy by its mere sight."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ disassemble_time = 6 SECONDS
+ hack_time = 25 SECONDS
+ health = 300
+ health_max = 300
+ area_range = 11
+ handheld_type = /obj/item/defenses/handheld/planted_flag/wy
+ defense_type = "WY"
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = SENTRY_FACTION_WEYLAND,
+ )
+
+/obj/structure/machinery/defenses/planted_flag/wy/apply_buff_to_player(mob/living/carbon/human/H)
+ H.activate_order_buff(COMMAND_ORDER_HOLD, buff_intensity, 2 SECONDS)
+ H.activate_order_buff(COMMAND_ORDER_FOCUS, buff_intensity, 2 SECONDS)
+ H.activate_order_buff(COMMAND_ORDER_MOVE, buff_intensity, 2 SECONDS)
+
+/obj/structure/machinery/defenses/planted_flag/upp
+ name = "UPP planted flag"
+ desc = "A planted flag with the iconic UPP flag plastered all over it, you feel a burst of energy by its mere sight."
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ disassemble_time = 5 SECONDS
+ health = 300
+ health_max = 300
+ area_range = 11
+ handheld_type = /obj/item/defenses/handheld/planted_flag/upp
+ defense_type = "UPP"
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = FACTION_UPP,
+ )
+
/obj/item/storage/backpack/jima
name = "JIMA frame mount"
icon = 'icons/obj/items/clothing/backpacks.dmi'
diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm
index 3a8a50b5eed7..492482f19416 100644
--- a/code/modules/defenses/sentry.dm
+++ b/code/modules/defenses/sentry.dm
@@ -18,7 +18,7 @@
var/fire_delay = 4
var/immobile = FALSE //Used for prebuilt ones.
var/obj/item/ammo_magazine/ammo = new /obj/item/ammo_magazine/sentry
- var/sentry_type = "sentry" //Used for the icon
+ var/sentry_type = "uac_sentry" //Used for the icon
display_additional_stats = TRUE
/// Light strength when turned on
var/luminosity_strength = 5
@@ -45,7 +45,7 @@
/// action list is configurable for all subtypes, this is just an example
choice_categories = list(
// SENTRY_CATEGORY_ROF = list(ROF_SINGLE, ROF_BURST, ROF_FULL_AUTO),
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN, FACTION_UPP),
)
selected_categories = list(
@@ -115,16 +115,16 @@
overlays.Cut()
if(stat == DEFENSE_DAMAGED)
- overlays += "[defense_type] uac_[sentry_type]_destroyed"
+ overlays += "[defense_type] [sentry_type]_destroyed"
return
if(!ammo || ammo && !ammo.current_rounds)
- overlays += "[defense_type] uac_[sentry_type]_noammo"
+ overlays += "[defense_type] [sentry_type]_noammo"
return
if(turned_on)
- overlays += "[defense_type] uac_[sentry_type]_on"
+ overlays += "[defense_type] [sentry_type]_on"
else
- overlays += "[defense_type] uac_[sentry_type]"
+ overlays += "[defense_type] [sentry_type]"
/obj/structure/machinery/defenses/sentry/attack_hand_checks(mob/user)
@@ -468,7 +468,7 @@
fire(target)
/obj/structure/machinery/defenses/sentry/premade
- name = "UA-577 Gauss Turret"
+ name = "\improper UA-577 Gauss Turret"
immobile = TRUE
turned_on = TRUE
icon_state = "premade" //for the map editor only
@@ -497,14 +497,14 @@
return
/obj/structure/machinery/defenses/sentry/premade/dumb
- name = "Modified UA-577 Gauss Turret"
+ name = "modified UA-577 Gauss Turret"
desc = "A deployable, semi-automated turret with AI targeting capabilities. Armed with an M30 Autocannon and a high-capacity drum magazine. This one's IFF system has been disabled, and it will open fire on any targets within range."
faction_group = null
ammo = new /obj/item/ammo_magazine/sentry/premade/dumb
//the turret inside a static sentry deployment system
/obj/structure/machinery/defenses/sentry/premade/deployable
- name = "UA-633 Static Gauss Turret"
+ name = "\improper UA-633 Static Gauss Turret"
desc = "A fully-automated defence turret with mid-range targeting capabilities. Armed with a modified M32-S Autocannon and an internal belt feed."
density = TRUE
faction_group = FACTION_LIST_MARINE
@@ -526,14 +526,31 @@
choice_categories[SENTRY_CATEGORY_IFF] = list(SENTRY_FACTION_COLONY, SENTRY_FACTION_WEYLAND)
selected_categories[SENTRY_CATEGORY_IFF] = SENTRY_FACTION_COLONY
+/obj/structure/machinery/defenses/sentry/premade/deployable/wy
+ name = "WY 5-GSE3 Static Turret"
+ desc = "An old static, semi-automated turret with AI targeting capabilities from Weyland-Yutani."
+ icon = 'icons/obj/structures/machinery/defenses/wy_static.dmi'
+ defense_type = "Static"
+ sentry_type = "wy_sentry"
+ health = 350
+ health_max = 350
+ faction_group = list(FACTION_MARINE, FACTION_COLONIST, FACTION_SURVIVOR, FACTION_WY)
+ fire_delay = 0.6 SECONDS
+ damage_mult = 2
+
+/obj/structure/machinery/defenses/sentry/premade/deployable/wy/Initialize()
+ . = ..()
+ choice_categories[SENTRY_CATEGORY_IFF] = list(SENTRY_FACTION_COLONY, SENTRY_FACTION_WEYLAND)
+ selected_categories[SENTRY_CATEGORY_IFF] = SENTRY_FACTION_COLONY
+
/obj/structure/machinery/defenses/sentry/premade/deployable/almayer
- name = "UA-635C Static Gauss Turret"
+ name = "\improper UA-635C Static Gauss Turret"
desc = "A fully-automated defence turret with mid-range targeting capabilities. Armed with a modified M32-S Autocannon and an internal belt feed and modified for UA warship use."
fire_delay = 0.4 SECONDS
omni_directional = TRUE
/obj/structure/machinery/defenses/sentry/premade/deployable/almayer/mini
- name = "UA 512-S mini sentry"
+ name = "\improper UA 512-S mini sentry"
desc = "A fully-automated defence turret with mid-range targeting capabilities. Armed with a modified M30 Autocannon and an internal belt feed and modified for UA warship use."
defense_type = "Mini"
fire_delay = 0.25 SECONDS
@@ -546,6 +563,68 @@
handheld_type = /obj/item/defenses/handheld/sentry/mini
composite_icon = FALSE
+/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone
+ name = "\improper UA-577 Spaceborne Gauss Turret"
+ fire_delay = 2
+ sentry_range = 10
+ omni_directional = TRUE
+ /// How long the battery for this turret lasts. Will warn low at 70% and critical at 90% use.
+ var/battery_duration = 20 MINUTES
+ /// The current battery state
+ var/battery_state = TURRET_BATTERY_STATE_OK
+
+/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone/Initialize()
+ . = ..()
+
+ var/low_battery_time = ceil(battery_duration * 0.7)
+ var/critical_battery_time = ceil(battery_duration * 0.9)
+ addtimer(CALLBACK(src, PROC_REF(set_battery_state), TURRET_BATTERY_STATE_LOW), low_battery_time)
+ addtimer(CALLBACK(src, PROC_REF(set_battery_state), TURRET_BATTERY_STATE_CRITICAL), critical_battery_time)
+ addtimer(CALLBACK(src, PROC_REF(set_battery_state), TURRET_BATTERY_STATE_DEAD), battery_duration)
+
+/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone/get_examine_text(mob/user)
+ . = ..()
+ switch(battery_state)
+ if(TURRET_BATTERY_STATE_OK)
+ . += SPAN_INFO("Its battery indictor is green, fully charged.")
+ if(TURRET_BATTERY_STATE_LOW)
+ . += SPAN_INFO("Its battery indictor is flashing yellow.")
+ if(TURRET_BATTERY_STATE_CRITICAL)
+ . += SPAN_INFO("Its battery indictor is flashing red.")
+ if(TURRET_BATTERY_STATE_DEAD)
+ . += SPAN_INFO("It appears to be offline.")
+
+/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone/proc/set_battery_state(state)
+ battery_state = state
+ switch(state)
+ if(TURRET_BATTERY_STATE_LOW)
+ playsound(loc, 'sound/weapons/smg_empty_alarm.ogg', 15, 1)
+ visible_message(SPAN_WARNING("[name] beeps steadily as its battery is getting low."))
+ if(TURRET_BATTERY_STATE_CRITICAL)
+ playsound(loc, 'sound/weapons/smg_empty_alarm.ogg', 20, 1)
+ visible_message(SPAN_WARNING("[name] beeps steadily as its battery gets critically low."))
+ if(TURRET_BATTERY_STATE_DEAD)
+ playsound(loc, 'sound/machines/terminal_shutdown.ogg', 35, 1)
+ turned_on = FALSE
+ power_off_action()
+ update_icon()
+
+/obj/structure/machinery/defenses/sentry/premade/deployable/colony/landing_zone/set_range()
+ var/range = sentry_range - 1
+ var/dbl_range = range * 2
+
+ if(omni_directional)
+ range_bounds = RECT(x, y, dbl_range, dbl_range)
+ return
+ switch(dir)
+ if(EAST)
+ range_bounds = RECT(x+range, y, dbl_range, dbl_range)
+ if(WEST)
+ range_bounds = RECT(x-range, y, dbl_range, dbl_range)
+ if(NORTH)
+ range_bounds = RECT(x, y+range, dbl_range, dbl_range)
+ if(SOUTH)
+ range_bounds = RECT(x, y-range, dbl_range, dbl_range)
//the turret inside the shuttle sentry deployment system
/obj/structure/machinery/defenses/sentry/premade/dropship
@@ -566,7 +645,7 @@
#define SENTRY_SNIPER_RANGE 10
/obj/structure/machinery/defenses/sentry/dmr
- name = "UA 725-D Sniper Sentry"
+ name = "\improper UA 725-D Sniper Sentry"
desc = "A fully-automated defence turret with long-range targeting capabilities. Armed with a modified M32-S Autocannon and an internal belt feed."
defense_type = "DMR"
health = 150
@@ -603,7 +682,7 @@
#undef SENTRY_SNIPER_RANGE
/obj/structure/machinery/defenses/sentry/shotgun
- name = "UA 12-G Shotgun Sentry"
+ name = "\improper UA 12-G Shotgun Sentry"
defense_type = "Shotgun"
health = 250
health_max = 250
@@ -634,7 +713,7 @@
L.apply_effect(1, WEAKEN)
/obj/structure/machinery/defenses/sentry/mini
- name = "UA 512-M mini sentry"
+ name = "\improper UA 512-M mini sentry"
defense_type = "Mini"
fire_delay = 0.15 SECONDS
health = 150
@@ -740,5 +819,86 @@
new /obj/item/stack/sheet/plasteel/medium_stack(loc)
return ..()
+/obj/structure/machinery/defenses/sentry/wy
+ name = "WY 202-GMA1 Smart Sentry"
+ desc = "A deployable, fully-automated turret with AI targeting capabilities used by the PMC."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ sentry_type = "wy_sentry"
+ fire_delay = 2 SECONDS
+ health = 350
+ health_max = 350
+ damage_mult = 3.5
+ disassemble_time = 5 SECONDS
+ hack_time = 25 SECONDS
+ sentry_range = 6
+ omni_directional = TRUE
+ handheld_type = /obj/item/defenses/handheld/sentry/wy
+ ammo = new /obj/item/ammo_magazine/sentry/wy
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = SENTRY_FACTION_WEYLAND,
+ )
+
+/obj/structure/machinery/defenses/sentry/mini/wy
+ name = "WY 14-GRA2 Mini Sentry"
+ desc = "A deployable, semi-automated turret with AI targeting capabilities used by the PMC."
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ sentry_type = "wy_sentry"
+ fire_delay = 0.08 SECONDS
+ health = 200
+ health_max = 200
+ damage_mult = 0.3
+ disassemble_time = 2 SECONDS
+ hack_time = 25 SECONDS
+ handheld_type = /obj/item/defenses/handheld/sentry/wy/mini
+ ammo = new /obj/item/ammo_magazine/sentry/wy/mini
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = SENTRY_FACTION_WEYLAND,
+ )
+
+/obj/structure/machinery/defenses/sentry/dmr/wy
+ name = "WY 2-ADT-A3 Heavy Sentry"
+ desc = "A deployable, semi-automated turret with AI targeting capabilities used by the PMC."
+ defense_type = "Heavy"
+ icon = 'icons/obj/structures/machinery/defenses/wy_heavy.dmi'
+ sentry_type = "wy_sentry"
+ fire_delay = 4 SECONDS
+ health = 600
+ health_max = 600
+ damage_mult = 5
+ disassemble_time = 10 SECONDS
+ hack_time = 25 SECONDS
+ sentry_range = 8
+ handheld_type = /obj/item/defenses/handheld/sentry/wy
+ ammo = new /obj/item/ammo_magazine/sentry/wy
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = SENTRY_FACTION_WEYLAND,
+ )
+
+/obj/structure/machinery/defenses/sentry/upp
+ name = "UPP SDS-R3 Sentry Gun"
+ desc = "A deployable, fully-automated turret with AI targeting capabilities used by the UPP."
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ sentry_type = "upp_sentry"
+ health = 300
+ health_max = 300
+ damage_mult = 1.2
+ disassemble_time = 5 SECONDS
+ handheld_type = /obj/item/defenses/handheld/sentry/upp
+ ammo = new /obj/item/ammo_magazine/sentry/upp
+ selected_categories = list(
+ SENTRY_CATEGORY_IFF = FACTION_UPP,
+ )
+
+/obj/structure/machinery/defenses/sentry/upp/light
+ name = "UPP SDS-R8 Light Sentry"
+ defense_type = "Light"
+ fire_delay = 0.3 SECONDS
+ health = 200
+ health_max = 200
+ disassemble_time = 2 SECONDS
+ sentry_range = 3
+ omni_directional = TRUE
+ handheld_type = /obj/item/defenses/handheld/sentry/upp/light
+
#undef SENTRY_FIREANGLE
#undef SENTRY_RANGE
diff --git a/code/modules/defenses/sentry_flamer.dm b/code/modules/defenses/sentry_flamer.dm
index 711bdaa54857..979d18eb41d1 100644
--- a/code/modules/defenses/sentry_flamer.dm
+++ b/code/modules/defenses/sentry_flamer.dm
@@ -1,10 +1,10 @@
/obj/structure/machinery/defenses/sentry/flamer
- name = "\improper UA 42-F sentry flamer"
+ name = "\improper UA 42-F Sentry Flamer"
icon = 'icons/obj/structures/machinery/defenses/flamer.dmi'
desc = "A deployable, semi-automated turret with AI targeting capabilities. Armed with a special flamer and a 100 liters fuel tank."
fire_delay = 30
ammo = new /obj/item/ammo_magazine/sentry_flamer
- sentry_type = "flamer"
+ sentry_type = "uac_flamer"
handheld_type = /obj/item/defenses/handheld/sentry/flamer
health = 200
health_max = 200
@@ -99,3 +99,68 @@
range_bounds = RECT(x, y - (FLAMER_SENTRY_SNIPER_RANGE/2), FLAMER_SENTRY_SNIPER_RANGE, FLAMER_SENTRY_SNIPER_RANGE)
#undef FLAMER_SENTRY_SNIPER_RANGE
+
+
+/obj/structure/machinery/defenses/sentry/flamer/wy
+ name = "WY 406-FE2 Smart Sentry"
+ icon = 'icons/obj/structures/machinery/defenses/wy_defenses.dmi'
+ desc = "A deployable, fully-automated turret with AI targeting capabilities used by the PMC."
+ health = 300
+ health_max = 300
+ fire_delay = 2 SECONDS
+ disassemble_time = 5 SECONDS
+ hack_time = 25 SECONDS
+ ammo = new /obj/item/ammo_magazine/sentry_flamer/wy
+ sentry_type = "wy_flamer"
+ sentry_range = 6
+ omni_directional = TRUE
+ handheld_type = /obj/item/defenses/handheld/sentry/flamer/wy
+ selected_categories = list(
+ SENTRY_CATEGORY_ROF = ROF_SINGLE,
+ SENTRY_CATEGORY_IFF = SENTRY_FACTION_WEYLAND,
+ )
+
+/obj/structure/machinery/defenses/sentry/flamer/wy/destroyed_action()
+ visible_message("[icon2html(src, viewers(src))] [SPAN_WARNING("The [name] starts spitting out sparks and smoke!")]")
+ playsound(loc, 'sound/mecha/critdestrsyndi.ogg', 25, 1)
+ for(var/i = 1 to 6)
+ setDir(pick(NORTH, EAST, SOUTH, WEST))
+ sleep(2)
+
+ if(ammo.current_rounds != 0)
+ var/datum/reagent/napalm/sticky/sticky_napalm = new()
+ new /obj/flamer_fire(loc, create_cause_data("sentry explosion", owner_mob), sticky_napalm, 2)
+ cell_explosion(loc, 10, 10, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data("sentry explosion", owner_mob))
+ if(!QDELETED(src))
+ qdel(src)
+
+
+/obj/structure/machinery/defenses/sentry/flamer/upp
+ name = "UPP SDS-R5 Sentry Flamer"
+ icon = 'icons/obj/structures/machinery/defenses/upp_defenses.dmi'
+ desc = "A deployable, fully-automated turret with AI targeting capabilities used by the UPP."
+ health = 300
+ health_max = 300
+ fire_delay = 1 SECONDS
+ disassemble_time = 5 SECONDS
+ ammo = new /obj/item/ammo_magazine/sentry_flamer/upp
+ sentry_type = "upp_flamer"
+ handheld_type = /obj/item/defenses/handheld/sentry/flamer/upp
+ selected_categories = list(
+ SENTRY_CATEGORY_ROF = ROF_SINGLE,
+ SENTRY_CATEGORY_IFF = FACTION_UPP,
+ )
+
+/obj/structure/machinery/defenses/sentry/flamer/upp/destroyed_action()
+ visible_message("[icon2html(src, viewers(src))] [SPAN_WARNING("The [name] starts spitting out sparks and smoke!")]")
+ playsound(loc, 'sound/mecha/critdestrsyndi.ogg', 25, 1)
+ for(var/i = 1 to 6)
+ setDir(pick(NORTH, EAST, SOUTH, WEST))
+ sleep(2)
+
+ if(ammo.current_rounds != 0)
+ var/datum/reagent/napalm/gel/gel_napalm = new()
+ new /obj/flamer_fire(loc, create_cause_data("sentry explosion", owner_mob), gel_napalm, 2)
+ cell_explosion(loc, 10, 10, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data("sentry explosion", owner_mob))
+ if(!QDELETED(src))
+ qdel(src)
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index f4aaf7c06560..e7ac5d767dab 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -428,26 +428,28 @@ log transactions
//stolen wholesale and then edited a bit from newscasters, which are awesome and by Agouri
/obj/structure/machinery/atm/proc/scan_user(mob/living/carbon/human/human_user as mob)
+ if(authenticated_account)
+ return
+ var/obj/item/card/id/card = human_user.get_idcard()
+ if(!card)
+ return
+
+ authenticated_account = attempt_account_access(card.associated_account_number)
if(!authenticated_account)
- if(human_user.wear_id)
- var/obj/item/card/id/I
- if(istype(human_user.wear_id, /obj/item/card/id))
- I = human_user.wear_id
- if(I)
- authenticated_account = attempt_account_access(I.associated_account_number)
- if(authenticated_account)
- to_chat(human_user, SPAN_NOTICE("[icon2html(src, human_user)] Access granted. Welcome user '[authenticated_account.owner_name].'"))
-
- //create a transaction log entry
- var/datum/transaction/T = new()
- T.target_name = authenticated_account.owner_name
- T.purpose = "Remote terminal access"
- T.source_terminal = machine_id
- T.date = GLOB.current_date_string
- T.time = worldtime2text()
- authenticated_account.transaction_log.Add(T)
-
- view_screen = NO_SCREEN
+ return
+
+ to_chat(human_user, SPAN_NOTICE("[icon2html(src, human_user)] Access granted. Welcome user '[authenticated_account.owner_name].'"))
+
+ //create a transaction log entry
+ var/datum/transaction/log = new()
+ log.target_name = authenticated_account.owner_name
+ log.purpose = "Remote terminal access"
+ log.source_terminal = machine_id
+ log.date = GLOB.current_date_string
+ log.time = worldtime2text()
+ authenticated_account.transaction_log.Add(log)
+
+ view_screen = NO_SCREEN
// put the currently held id on the ground or in the hand of the user
/obj/structure/machinery/atm/proc/release_held_id(mob/living/carbon/human/human_user as mob)
diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm
index bb168f22457b..dbee0e435ba4 100644
--- a/code/modules/gear_presets/clf.dm
+++ b/code/modules/gear_presets/clf.dm
@@ -170,7 +170,6 @@
spawn_rebel_suit(new_human)
spawn_rebel_shoes(new_human)
- spawn_rebel_gloves(new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson, WEAR_EYES)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow, WEAR_HANDS)
diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm
index 8be44f94a2e8..45c06776a4a8 100644
--- a/code/modules/gear_presets/cmb.dm
+++ b/code/modules/gear_presets/cmb.dm
@@ -460,9 +460,6 @@
/datum/equipment_preset/uscm/cmb/leader
name = "USCM Anchorpoint Station Team Leader"
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
-/datum/equipment_preset/uscm/cmb/leader/New()
- . = ..()
-
assignment = "Anchorpoint Station Marine Team Leader"
rank = JOB_SQUAD_LEADER
paygrade = PAY_SHORT_ME6
@@ -505,9 +502,6 @@
/datum/equipment_preset/uscm/cmb/rto
name = "USCM Anchorpoint Station Technical Specialist"
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
-/datum/equipment_preset/uscm/cmb/rto/New()
- . = ..()
-
assignment = "Anchorpoint Station Marine Technical Specialist"
rank = JOB_SQUAD_TEAM_LEADER
paygrade = PAY_SHORT_ME4
@@ -550,9 +544,6 @@
/datum/equipment_preset/uscm/cmb/medic
name = "USCM Anchorpoint Station Corpsman"
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
-/datum/equipment_preset/uscm/cmb/medic/New()
- . = ..()
-
assignment = "Anchorpoint Station Hospital Corpsman"
rank = JOB_SQUAD_MEDIC
paygrade = PAY_SHORT_ME3
@@ -611,9 +602,6 @@
/datum/equipment_preset/uscm/cmb/smartgunner
name = "USCM Anchorpoint Station Smartgunner"
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
-/datum/equipment_preset/uscm/cmb/smartgunner/New()
- . = ..()
-
assignment = "Anchorpoint Station Marine Smartgunner"
rank = JOB_SQUAD_SMARTGUN
paygrade = PAY_SHORT_ME3
diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm
index b8330e0e4c70..7bf9592a6209 100644
--- a/code/modules/gear_presets/corpses.dm
+++ b/code/modules/gear_presets/corpses.dm
@@ -529,6 +529,9 @@
//Colonial Supervisor
+/datum/equipment_preset/corpse/wy
+ flags = EQUIPMENT_PRESET_STUB
+
/datum/equipment_preset/corpse/wy/manager
name = "Corpse - Corporate Supervisor"
assignment = "Colony Supervisor"
diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm
index 99b8bf634eed..9ea05749fe0d 100644
--- a/code/modules/gear_presets/other.dm
+++ b/code/modules/gear_presets/other.dm
@@ -881,8 +881,8 @@
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/dogtag
- assignment = JOB_CREWMAN
- rank = JOB_CREWMAN
+ assignment = JOB_TANK_CREW
+ rank = JOB_TANK_CREW
paygrade = PAY_SHORT_ME4
role_comm_title = "CRMN"
minimum_age = 30
@@ -968,4 +968,25 @@
new_human.nutrition = NUTRITION_LOW
/datum/equipment_preset/tutorial/fed
+ name = "Tutorial (Fed)"
underfed = FALSE
+
+
+/datum/equipment_preset/uscm/tutorial_rifleman
+ name = "Tutorial Rifleman"
+ flags = EQUIPMENT_PRESET_EXTRA
+ assignment = JOB_SQUAD_MARINE
+ rank = JOB_SQUAD_MARINE
+ paygrade = "ME2"
+ role_comm_title = "RFN"
+ skills = /datum/skills/pfc/crafty
+ minimap_icon = "private"
+
+/datum/equipment_preset/uscm/tutorial_rifleman/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/head/helmet/marine(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/medium(new_human), WEAR_JACKET)
+ 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/gloves/marine(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+
diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm
index 16c65dde01aa..8dde038f3891 100644
--- a/code/modules/gear_presets/pmc.dm
+++ b/code/modules/gear_presets/pmc.dm
@@ -1688,8 +1688,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/shovel/etool/folded, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/mini, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/mini, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/wy/mini, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/wy/mini, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full, WEAR_R_STORE)
@@ -1755,9 +1755,9 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("HANDHELD DEFENSE (CHOOSE 1)", 0, null, null, null),
- list("JIMA Planted Flag", 0, /obj/item/defenses/handheld/planted_flag, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("UA 42-F Sentry Flamer", 0, /obj/item/defenses/handheld/sentry/flamer, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("UA 571-C Sentry Gun", 0, /obj/item/defenses/handheld/sentry, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("WY Planted Flag", 0, /obj/item/defenses/handheld/planted_flag/wy, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("WY 406-FE2 Smart Sentry", 0, /obj/item/defenses/handheld/sentry/flamer/wy, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("WY 202-GMA1 Smart Sentry", 0, /obj/item/defenses/handheld/sentry/wy, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
list("ENGINEERING SUPPLIES", 0, null, null, null),
list("Airlock Circuit Board", 2, /obj/item/circuitboard/airlock, null, VENDOR_ITEM_REGULAR),
diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
index 3fdbe72c05be..c09e6eee9385 100644
--- a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
+++ b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
@@ -83,7 +83,10 @@
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE)
-// cmb synth
+// cmb synth (of note /datum/equipment_preset/synth/survivor/cmb_synth also exists)
+/datum/equipment_preset/synth/survivor/cmb
+ flags = EQUIPMENT_PRESET_STUB
+
/datum/equipment_preset/synth/survivor/cmb/synth
name = "Survivor - Synthetic - CMB Investigative Synthetic(Riot Response)"
paygrade = PAY_SHORT_CMBS
diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm
index 5b010a8cb8ea..329bac97a89f 100644
--- a/code/modules/gear_presets/survivors/misc.dm
+++ b/code/modules/gear_presets/survivors/misc.dm
@@ -204,8 +204,8 @@ Everything below isn't used or out of place.
// ----- Mercenary Survivors
-// after double check pmc/miner/one isn't being used anywhere.
-/datum/equipment_preset/survivor/pmc/miner/one
+// after double check pmc/miner isn't being used anywhere.
+/datum/equipment_preset/survivor/pmc/miner
name = "Survivor - Mercenary"
flags = EQUIPMENT_PRESET_START_OF_ROUND
@@ -214,7 +214,7 @@ Everything below isn't used or out of place.
flags = EQUIPMENT_PRESET_START_OF_ROUND
access = list(ACCESS_CIVILIAN_PUBLIC)
-/datum/equipment_preset/survivor/pmc/miner/one/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/survivor/pmc/miner/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/mercenary/miner, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/mercenary/miner, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/mercenary/miner, WEAR_HEAD)
@@ -293,6 +293,7 @@ Everything below isn't used or out of place.
/// used in Shivas Snowball
/datum/equipment_preset/survivor/clf/cold
+ name = "CLF Survivor (Cold)"
//children of spawn rebel shoes proc
/datum/equipment_preset/survivor/clf/cold/spawn_rebel_suit(mob/living/carbon/human/human)
diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
index 44d029d44c87..124bf2772be5 100644
--- a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
+++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
@@ -45,7 +45,6 @@
/datum/equipment_preset/survivor/pmc/medic
name = "Survivor - PMC Medic"
assignment = JOB_PMC_MEDIC
- rank = JOB_PMC_MEDIC
paygrade = PAY_SHORT_PMC_MS
skills = /datum/skills/civilian/survivor/pmc/medic
@@ -65,7 +64,6 @@
/datum/equipment_preset/survivor/pmc/engineer
name = "Survivor - PMC Engineer"
assignment = JOB_PMC_ENGINEER
- rank = JOB_PMC_ENGINEER
paygrade = PAY_SHORT_PMC_TEC
skills = /datum/skills/civilian/survivor/pmc/engineer
@@ -152,42 +150,42 @@
role_comm_title = "WY Syn"
/datum/equipment_preset/synth/survivor/pmc/load_race(mob/living/carbon/human/new_human)
- new_human.set_species(SYNTH_GEN_THREE)
+ new_human.set_species(SYNTH_GEN_THREE)
/datum/equipment_preset/synth/survivor/pmc/load_gear(mob/living/carbon/human/new_human)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/scalpel/manager, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/weylandyutani, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET)
-
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE)
-
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET)
-
- new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/tool/crew_monitor, WEAR_IN_BACK)
-
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE)
-
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/scalpel/manager, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/weylandyutani, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crew_monitor, WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE)
diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm
index 9bfa2335e94a..2fde67e931b9 100644
--- a/code/modules/gear_presets/synths.dm
+++ b/code/modules/gear_presets/synths.dm
@@ -147,6 +147,9 @@
. = ..()
access = get_access(ACCESS_LIST_WY_PMC)
+/datum/equipment_preset/synth/survivor/wy
+ flags = EQUIPMENT_PRESET_STUB
+
/datum/equipment_preset/synth/survivor/wy/New()
. = ..()
access = get_access(ACCESS_LIST_COLONIAL_ALL) + get_region_accesses(2) + get_region_accesses(4) + ACCESS_MARINE_RESEARCH + ACCESS_WY_GENERAL // for WY synths - admin building and wy fax machines access
@@ -268,6 +271,9 @@
survivor_variant = ENGINEERING_SURVIVOR
+/datum/equipment_preset/synth/survivor/corporate_synth
+ name = "Survivor - Synthetic - Corporate Synth"
+
/datum/equipment_preset/synth/survivor/corporate_synth/load_gear(mob/living/carbon/human/new_human)
..()
add_random_cl_survivor_loot(new_human)
@@ -473,6 +479,7 @@
)
survivor_variant = SECURITY_SURVIVOR
+ flags = EQUIPMENT_PRESET_EXTRA
/datum/equipment_preset/synth/survivor/wy/protection_synth
name = "Survivor - Synthetic - Corporate Protection Synth"
@@ -495,6 +502,7 @@
)
survivor_variant = SECURITY_SURVIVOR
+ flags = EQUIPMENT_PRESET_EXTRA
/datum/equipment_preset/synth/survivor/wy/corporate_synth
name = "Survivor - Synthetic - Corporate Clerical Synth"
@@ -517,6 +525,7 @@
)
survivor_variant = CORPORATE_SURVIVOR
+ flags = EQUIPMENT_PRESET_EXTRA
/datum/equipment_preset/synth/survivor/icc_synth
name = "Survivor - Synthetic - Interstellar Commerce Commission Synthetic"
diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm
index 450662ba25c3..417a893ffdee 100644
--- a/code/modules/gear_presets/upp.dm
+++ b/code/modules/gear_presets/upp.dm
@@ -418,7 +418,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //.33
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //.66
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) //1.66
- new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/mini, WEAR_IN_BACK) //2.66
+ new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/upp/light, WEAR_IN_BACK) //2.66
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/cct, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
@@ -491,9 +491,9 @@
list("Essential Sapper Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("HANDHELD DEFENSE (CHOOSE 1)", 0, null, null, null),
- list("JIMA Planted Flag", 0, /obj/item/defenses/handheld/planted_flag, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("UA 42-F Sentry Flamer", 0, /obj/item/defenses/handheld/sentry/flamer, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("UA 571-C Sentry Gun", 0, /obj/item/defenses/handheld/sentry, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("UPP Planted Flag", 0, /obj/item/defenses/handheld/planted_flag/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("UPP SDS-R5 Sentry Flamer", 0, /obj/item/defenses/handheld/sentry/flamer/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
+ list("UPP SDS-R3 Sentry Gun", 0, /obj/item/defenses/handheld/sentry/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
list("ENGINEERING SUPPLIES", 0, null, null, null),
list("Airlock Circuit Board", 2, /obj/item/circuitboard/airlock, null, VENDOR_ITEM_REGULAR),
@@ -2566,8 +2566,8 @@
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //1.3
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //1.6
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //2
- new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) //3
- new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/mini, WEAR_IN_BACK) //4
+ new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/upp/light, WEAR_IN_BACK) //3
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) //4
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/cct, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm
index eec3b6157877..4b018eea1d50 100644
--- a/code/modules/gear_presets/uscm.dm
+++ b/code/modules/gear_presets/uscm.dm
@@ -35,13 +35,13 @@
if(!GLOB.data_core.manifest_modify(new_human.real_name, WEAKREF(new_human), assignment, rank))
GLOB.data_core.manifest_inject(new_human)
- var/obj/item/card/id/ID = new_human.wear_id
+ var/obj/item/card/id/ID = new_human.get_idcard()
var/datum/money_account/acct = create_account(new_human, rand(30, 50), GLOB.paygrades[ID.paygrade])
ID.associated_account_number = acct.account_number
var/datum/squad/auto_squad = get_squad_by_name(auto_squad_name)
if(auto_squad)
- transfer_marine_to_squad(new_human, auto_squad, new_human.assigned_squad, new_human.wear_id)
+ transfer_marine_to_squad(new_human, auto_squad, new_human.assigned_squad, ID)
if(!ert_squad && !auto_squad.active)
auto_squad.engage_squad(FALSE)
@@ -131,7 +131,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/uscm/sg/full
- name = "USCM Squad Smartgunner"
+ name = "USCM Squad Smartgunner (Full)"
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
/datum/equipment_preset/uscm/sg/full/load_gear(mob/living/carbon/human/new_human)
@@ -161,8 +161,8 @@
ACCESS_MARINE_CHARLIE,
ACCESS_MARINE_DELTA,
)
- assignment = JOB_CREWMAN
- rank = JOB_CREWMAN
+ assignment = JOB_TANK_CREW
+ rank = JOB_TANK_CREW
paygrade = PAY_SHORT_ME4
role_comm_title = "CRMN"
minimum_age = 30
diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm
index eb206c8259bf..1a03dc3f6b22 100644
--- a/code/modules/gear_presets/uscm_event.dm
+++ b/code/modules/gear_presets/uscm_event.dm
@@ -104,10 +104,6 @@
new_human.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(new_human), WEAR_EYES)
-/datum/equipment_preset/uscm_event/general/o7
- name = "USCM O-7 - Brigadier General (High Command)"
- paygrade = PAY_SHORT_MO7
-
/datum/equipment_preset/uscm_event/general/o8
name = "USCM O-8 - Major General (High Command)"
paygrade = PAY_SHORT_MO8
diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm
index 019095f9ce38..75152268326c 100644
--- a/code/modules/gear_presets/uscm_medical.dm
+++ b/code/modules/gear_presets/uscm_medical.dm
@@ -62,7 +62,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/uscm_medical/doctor
- name = "USCM Surgeon"
+ name = "USCM Doctor"
assignment = JOB_DOCTOR
rank = JOB_DOCTOR
@@ -85,7 +85,7 @@
//Surgeon this part of the code is to change the name on your ID
/datum/equipment_preset/uscm_ship/uscm_medical/doctor/surgeon
-
+ name = "USCM Surgeon"
assignment = JOB_SURGEON
/datum/equipment_preset/uscm_ship/uscm_medical/doctor/surgeon/load_gear(mob/living/carbon/human/new_human)
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 9bccf2a2ec78..a53504fec0c9 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -102,7 +102,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/reporter
- name = "Combat Correspondent"
+ name = "Combat Correspondent (Press)"
flags = EQUIPMENT_PRESET_START_OF_ROUND
access = list(
@@ -586,7 +586,6 @@
flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE
idtype = /obj/item/card/id/silver
- access
assignment = JOB_SEA
rank = JOB_SEA
paygrade = PAY_SHORT_ME7
diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm
index b9ca1a6e02d4..75e8e013c03f 100644
--- a/code/modules/gear_presets/whiteout.dm
+++ b/code/modules/gear_presets/whiteout.dm
@@ -270,7 +270,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/pmc/w_y_whiteout/low_threat/medic
- name = "Whiteout Team Medic"
+ name = "Whiteout Team Operative Medic"
/datum/equipment_preset/pmc/w_y_whiteout/low_threat/medic/load_gear(mob/living/carbon/human/new_human)
// back
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index e974a93553a3..0ea2b3856da1 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -314,6 +314,8 @@
if(observe_target_mob)
clean_observe_target()
+ set_huds_from_prefs()
+
/mob/dead/observer/Destroy(force)
GLOB.observer_list -= src
QDEL_NULL(orbit_menu)
@@ -471,6 +473,12 @@ Works together with spawning an observer, noted above.
mind = null
+ // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers or lesser drone
+ var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath
+
+ // if they died as facehugger or lesser drone, bypass typical TOD checks
+ ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src))
+
if(ghost.client)
ghost.client.init_verbs()
ghost.client.change_view(GLOB.world_view_size) //reset view range to default
@@ -485,13 +493,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 or lesser drone
- var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath
-
- // if they died as facehugger or lesser drone, bypass typical TOD checks
- ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src))
+ ghost.client.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod)
- ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod)
+ else if(persistent_ckey)
+ var/datum/player_details/details = GLOB.player_details[persistent_ckey]
+ if(details)
+ details.larva_queue_time = max(details.larva_queue_time, new_tod)
ghost.set_huds_from_prefs()
diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm
index 1cb301e96c07..4bc4abf7036c 100644
--- a/code/modules/mob/dead/observer/orbit.dm
+++ b/code/modules/mob/dead/observer/orbit.dm
@@ -133,6 +133,10 @@
serialized["nickname"] = human.real_name
var/icon = human.assigned_equipment_preset?.minimap_icon
+ if(islist(icon))
+ for(var/key in icon)
+ icon = key
+ break
serialized["icon"] = icon ? icon : "private"
if(human.assigned_squad)
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index c97e4344cabf..34582a6612d4 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -131,3 +131,5 @@
else if(death_data?.cause_name == "existing")
// Corpses spawn as gibbed true to avoid sfx, even though they aren't actually gibbed...
AddComponent(/datum/component/weed_food)
+
+ update_execute_hud()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index eb19593bde46..6db31ea6451a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1704,3 +1704,18 @@
item.showoff(src)
return TRUE
return ..()
+
+/mob/living/carbon/human/on_knockedout_trait_gain(datum/source)
+ . = ..()
+
+ update_execute_hud()
+
+ return .
+
+/mob/living/carbon/human/on_knockedout_trait_loss(datum/source)
+ . = ..()
+
+ update_execute_hud()
+
+ return .
+
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 9eac835dccba..e44106d90abb 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -60,7 +60,7 @@
var/obj/item/head = null
var/obj/item/wear_l_ear = null
var/obj/item/wear_r_ear = null
- var/obj/item/card/id/wear_id = null
+ var/obj/item/wear_id = null
var/obj/item/r_store = null
var/obj/item/l_store = null
var/obj/item/s_store = null
@@ -137,7 +137,7 @@
var/last_chew = 0
//taken from human.dm
- hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD)
+ hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD)
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
var/allow_gun_usage = TRUE
var/melee_allowed = TRUE
diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
index 0d850a47f73e..0772d952d082 100644
--- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
@@ -40,9 +40,9 @@
else
clear_fullscreen("oxy")
-
//Fire and Brute damage overlay (BSSR)
- var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp
+ var/max_health_normalisation = (species ? species.total_health : 100) / 100
+ var/hurtdamage = (getBruteLoss() + getFireLoss()) / max_health_normalisation + damageoverlaytemp
damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not.
if(hurtdamage)
var/severity = 0
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 9a0cd177e885..dfb903368503 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -345,8 +345,11 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
client.add_to_screen(wear_id)
wear_id.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_id, hud_used.ui_datum.ui_id)
- if(!wear_id.pinned_on_uniform || (w_uniform && w_uniform.displays_id && !(w_uniform.flags_jumpsuit & UNIFORM_JACKET_REMOVED)))
- var/image/id_overlay = wear_id.get_mob_overlay(src, WEAR_ID)
+ var/obj/item/card/id/card = get_idcard()
+ if(!card)
+ return
+ if(!card.pinned_on_uniform || (w_uniform && w_uniform.displays_id && !(w_uniform.flags_jumpsuit & UNIFORM_JACKET_REMOVED)))
+ var/image/id_overlay = card.get_mob_overlay(src, WEAR_ID)
id_overlay.layer = -ID_LAYER
overlays_standing[ID_LAYER] = id_overlay
apply_overlay(ID_LAYER)
diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
index 2cbb2af2ce86..b07f766b179d 100644
--- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
@@ -218,6 +218,7 @@
//////////////////////////////////////////////////////////////////
var/xeno_mobhud = FALSE //whether the xeno mobhud is activated or not.
var/xeno_hostile_hud = FALSE // 'Hostile' HUD - the verb Xenos use to see tags, etc on humans
+ var/execute_hud = FALSE // Crit HUD, only visible to vampire lurkers
var/list/plasma_types = list() //The types of plasma the caste contains
var/list/xeno_shields = list() // List of /datum/xeno_shield that holds all active shields on the Xeno.
var/acid_splash_cooldown = 5 SECONDS //Time it takes between acid splash retaliate procs
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm
index 51f23f22a09f..094732300a1f 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm
@@ -267,10 +267,10 @@
if(iscarbon(hit_target) && !xeno.can_not_harm(hit_target) && hit_target.stat != DEAD)
if(targeted_atom == hit_target) //reward for a direct hit
- to_chat(xeno, SPAN_XENOHIGHDANGER("We directly slam [hit_target] with our tail, throwing it back after impaling it on our tail!"))
+ to_chat(xeno, SPAN_XENOHIGHDANGER("We attack [hit_target], with our tail, piercing their body!"))
hit_target.apply_armoured_damage(15, ARMOR_MELEE, BRUTE, "chest")
else
- to_chat(xeno, SPAN_XENODANGER("We attack [hit_target] with our tail, throwing it back after stabbing it with our tail!"))
+ to_chat(xeno, SPAN_XENODANGER("We attack [hit_target], slashing them with our tail!"))
else
xeno.visible_message(SPAN_XENOWARNING("\The [xeno] swipes their tail through the air!"), SPAN_XENOWARNING("We swipe our tail through the air!"))
apply_cooldown(cooldown_modifier = 0.2)
@@ -282,9 +282,18 @@
stab_direction = turn(get_dir(xeno, targeted_atom), 180)
playsound(hit_target,'sound/weapons/alien_tail_attack.ogg', 50, TRUE)
- if(hit_target.mob_size < MOB_SIZE_BIG)
- step_away(hit_target, xeno)
+ var/direction = Get_Compass_Dir(xeno, targeted_atom) //More precise than get_dir.
+
+ if(!step(hit_target, direction))
+ playsound(hit_target.loc, "punch", 25, 1)
+ hit_target.visible_message(SPAN_DANGER("[hit_target] slams into an obstacle!"),
+ isxeno(hit_target) ? SPAN_XENODANGER("We slam into an obstacle!") : SPAN_HIGHDANGER("You slam into an obstacle!"), null, 4, CHAT_TYPE_TAKING_HIT)
+ hit_target.apply_damage(MELEE_FORCE_TIER_2)
+ if (hit_target.mob_size < MOB_SIZE_BIG)
+ hit_target.KnockDown(0.5)
+ else
+ hit_target.Slow(0.5)
/// To reset the direction if they haven't moved since then in below callback.
var/last_dir = xeno.dir
@@ -296,11 +305,7 @@
addtimer(CALLBACK(src, PROC_REF(reset_direction), xeno, last_dir, new_dir), 0.5 SECONDS)
hit_target.apply_armoured_damage(get_xeno_damage_slash(hit_target, xeno.caste.melee_damage_upper), ARMOR_MELEE, BRUTE, "chest")
-
- if(hit_target.mob_size < MOB_SIZE_BIG)
- hit_target.apply_effect(0.5, WEAKEN)
- else
- hit_target.apply_effect(0.5, SLOW)
+ hit_target.Slow(0.5)
hit_target.last_damage_data = create_cause_data(xeno.caste_type, xeno)
log_attack("[key_name(xeno)] attacked [key_name(hit_target)] with Tail Jab")
@@ -341,6 +346,12 @@
if(xeno.action_busy)
return
+ if(target_carbon.status_flags & XENO_HOST)
+ for(var/obj/item/alien_embryo/embryo in target_carbon)
+ if(HIVE_ALLIED_TO_HIVE(xeno.hivenumber, embryo.hivenumber))
+ to_chat(xeno, SPAN_WARNING("We should not harm this host! It has a sister inside."))
+ return
+
xeno.visible_message(SPAN_DANGER("[xeno] grabs [target_carbon]’s head aggressively."), \
SPAN_XENOWARNING("We grab [target_carbon]’s head aggressively."))
diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
index 2576d0bc599b..de0cefeea76d 100644
--- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
+++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
@@ -504,7 +504,7 @@
//Slashing fences
/obj/structure/fence/attack_alien(mob/living/carbon/xenomorph/M)
M.animation_attack_on(src)
- var/damage_dealt = 5
+ var/damage_dealt = 25
M.visible_message(SPAN_DANGER("[M] mangles [src]!"), \
SPAN_DANGER("We mangle [src]!"), \
SPAN_DANGER("We hear twisting metal!"), 5, CHAT_TYPE_XENO_COMBAT)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
index 35d500b15816..532f77d1bec2 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
@@ -415,6 +415,14 @@
make_combat_effective()
AddComponent(/datum/component/footstep, 2 , 35, 11, 4, "alien_footstep_large")
+ RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(check_block))
+
+/mob/living/carbon/xenomorph/queen/proc/check_block(mob/queen, turf/new_loc)
+ SIGNAL_HANDLER
+ for(var/mob/living/carbon/xenomorph/xeno in new_loc.contents)
+ if(xeno.hivenumber == hivenumber)
+ xeno.KnockDown((5 DECISECONDS) / GLOBAL_STATUS_MULTIPLIER)
+ playsound(src, 'sound/weapons/alien_knockdown.ogg', 25, 1)
/mob/living/carbon/xenomorph/queen/generate_name()
if(!nicknumber)
diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status.dm b/code/modules/mob/living/carbon/xenomorph/hive_status.dm
index e7e1fab0dd45..4782bcd8b288 100644
--- a/code/modules/mob/living/carbon/xenomorph/hive_status.dm
+++ b/code/modules/mob/living/carbon/xenomorph/hive_status.dm
@@ -874,6 +874,13 @@
return TRUE
+/datum/hive_status/proc/get_current_playable_facehugger_count()
+ var/count = 0
+ for(var/mob/mob as anything in totalXenos)
+ if(isfacehugger(mob))
+ count++
+ return count
+
/datum/hive_status/proc/spawn_as_hugger(mob/dead/observer/user, atom/A)
var/mob/living/carbon/xenomorph/facehugger/hugger = new /mob/living/carbon/xenomorph/facehugger(A.loc, null, hivenumber)
user.mind.transfer_to(hugger, TRUE)
diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/lurker/vampire.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/lurker/vampire.dm
index 34dfcc325943..820aa662c919 100644
--- a/code/modules/mob/living/carbon/xenomorph/strains/castes/lurker/vampire.dm
+++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/lurker/vampire.dm
@@ -25,4 +25,8 @@
lurker.damage_modifier -= XENO_DAMAGE_MOD_VERY_SMALL
lurker.attack_speed_modifier -= 2
+ var/datum/mob_hud/execute_hud = GLOB.huds[MOB_HUD_EXECUTE]
+ execute_hud.add_hud_to(lurker, lurker)
+ lurker.execute_hud = TRUE
+
lurker.recalculate_everything()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 13408be2096e..8a792943e345 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -662,7 +662,7 @@ note dizziness decrements automatically in the mob's Life() proc.
// facing verbs
/mob/proc/canface()
- if(client.moving) return 0
+ if(client?.moving) return 0
if(stat==2) return 0
if(anchored) return 0
if(monkeyizing) return 0
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index edabde203ab6..4c2c83d18257 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -211,20 +211,20 @@
if(isnull(preview_front))
preview_front = new()
- owner.add_to_screen(preview_front)
preview_front.vis_contents += preview_dummy
preview_front.screen_loc = "preview:0,0"
preview_front.icon_state = bg_state
+ owner.add_to_screen(preview_front)
if(isnull(rotate_left))
rotate_left = new(null, preview_dummy)
- owner.add_to_screen(rotate_left)
rotate_left.screen_loc = "preview:-1:16,0"
+ owner.add_to_screen(rotate_left)
if(isnull(rotate_right))
rotate_right = new(null, preview_dummy)
- owner.add_to_screen(rotate_right)
rotate_right.screen_loc = "preview:1:-16,0"
+ owner.add_to_screen(rotate_right)
/datum/preferences/proc/job_pref_to_gear_preset()
var/high_priority
@@ -260,6 +260,8 @@
return /datum/equipment_preset/uscm/intel/full
if(JOB_CAS_PILOT)
return /datum/equipment_preset/uscm_ship/gp/full
+ if(JOB_TANK_CREW)
+ return /datum/equipment_preset/uscm/tank/full
if(JOB_DROPSHIP_PILOT)
return /datum/equipment_preset/uscm_ship/dp/full
if(JOB_DROPSHIP_CREW_CHIEF)
diff --git a/code/modules/objectives/objective_memory_storage.dm b/code/modules/objectives/objective_memory_storage.dm
index de2ab30691cc..c84f71556743 100644
--- a/code/modules/objectives/objective_memory_storage.dm
+++ b/code/modules/objectives/objective_memory_storage.dm
@@ -221,7 +221,8 @@ GLOBAL_DATUM_INIT(intel_system, /datum/intel_system, new())
/obj/structure/machinery/computer/intel/disk_reader // ARC computer to save on tile space
name = "\improper SIGINT terminal"
desc = "An USCM computer capable of uploading data to the intelligence database. It has a disk reader slot built into the bottom, as well."
- icon_state = "terminal"
+ icon = 'icons/obj/vehicles/interiors/arc.dmi'
+ icon_state = "sigint_computer"
/obj/structure/machinery/computer/intel/disk_reader/Initialize()
. = ..()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 69a458a983d0..db7a163f7536 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -872,6 +872,8 @@ User can be passed as null, (a gun reloading itself for instance), so we need to
if(!current_mag || QDELETED(current_mag) || (current_mag.loc != src && !loc_override))
cock(user)
+ current_mag = null
+ update_icon()
return
if(drop_override || !user) //If we want to drop it on the ground or there's no user.
diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm
index d031074dabd7..1c2adc2360a3 100644
--- a/code/modules/projectiles/guns/revolvers.dm
+++ b/code/modules/projectiles/guns/revolvers.dm
@@ -6,7 +6,7 @@
w_class = SIZE_MEDIUM
matter = list("metal" = 2000)
- fire_sound = 'sound/weapons/gun_44mag_v3.ogg'
+ fire_sound = 'sound/weapons/gun_44mag_v4.ogg'
reload_sound = 'sound/weapons/gun_44mag_speed_loader.wav'
cocked_sound = 'sound/weapons/gun_revolver_spun.ogg'
unload_sound = 'sound/weapons/gun_44mag_open_chamber.wav'
diff --git a/code/modules/projectiles/magazines/flamer.dm b/code/modules/projectiles/magazines/flamer.dm
index feaaf7bc0a79..8a453beb90b4 100644
--- a/code/modules/projectiles/magazines/flamer.dm
+++ b/code/modules/projectiles/magazines/flamer.dm
@@ -249,3 +249,24 @@
matter = list("metal" = 3750)
flamer_chem = null
custom = TRUE
+
+//tanks printable by the research biomass machine
+/obj/item/ammo_magazine/flamer_tank/custom/upgraded
+ name = "Upgraded custom incinerator tank"
+ desc = "A fuel tank used to store fuel for use in the M240 incinerator unit. This one has been modified with a larger and more sophisticated internal propellant tank, allowing for bigger capacity and stronger fuels."
+ matter = list("metal" = 50) // no free metal
+ flamer_chem = null
+ max_rounds = 200
+ max_range = 7
+ fuel_pressure = 1
+ max_duration = 50
+ max_intensity = 60
+ custom = TRUE
+
+/obj/item/ammo_magazine/flamer_tank/smoke/upgraded
+ name = "Large custom incinerator smoke tank"
+ desc = "A tank holding powdered smoke that expands when exposed to an open flame and carries any chemicals along with it. This one has been outfitted with an upgraded internal compressor, allowing for bigger capacity."
+ matter = list("metal" = 50) //no free metal
+ flamer_chem = null
+ custom = TRUE
+ max_rounds = 150
diff --git a/code/modules/projectiles/magazines/sentries.dm b/code/modules/projectiles/magazines/sentries.dm
index 4e885278050b..c76688d97a4e 100644
--- a/code/modules/projectiles/magazines/sentries.dm
+++ b/code/modules/projectiles/magazines/sentries.dm
@@ -29,6 +29,30 @@
max_rounds = 50
default_ammo = /datum/ammo/bullet/shotgun/buckshot
+/obj/item/ammo_magazine/sentry/wy
+ name = "H20 ammo drum (10x42mm Caseless)"
+ desc = "An ammo drum of 200 10x42mm caseless rounds for the WY 202-GMA1 Smart Sentry. Just feed it into the sentry gun's ammo port when its ammo is depleted."
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi'
+ icon_state = "wy22e5"
+ caliber = "10x42mm"
+ max_rounds = 200
+
+/obj/item/ammo_magazine/sentry/wy/mini
+ name = "H16 ammo drum (10x12mm Caseless)"
+ desc = "An ammo drum of 1000 10x12mm caseless rounds for the WY 14-GRA2 Mini Sentry. Just feed it into the sentry gun's ammo port when its ammo is depleted."
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi'
+ icon_state = "wy22e5"
+ caliber = "10x12mm"
+ max_rounds = 1000
+
+/obj/item/ammo_magazine/sentry/upp
+ name = "SR32 ammo drum (10x32mm Caseless)"
+ desc = "An ammo drum of 200 10x32mm caseless rounds for the UPP SDS-R3 Sentry Gun. Just feed it into the sentry gun's ammo port when its ammo is depleted."
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "uppsds4"
+ caliber = "10x42mm"
+ max_rounds = 200
+
// FLAMER Sentry
/obj/item/ammo_magazine/sentry_flamer
name = "sentry incinerator tank"
@@ -51,3 +75,21 @@
name = "mini sentry incinerator tank"
desc = "A fuel tank of Ultra Thick Napthal Fuel, used in the UA 45-FM."
default_ammo = /datum/ammo/flamethrower/sentry_flamer/mini
+
+/obj/item/ammo_magazine/sentry_flamer/wy
+ name = "wy sentry incinerator tank"
+ desc = "A fuel tank of Ultra Thick Sticky Napthal Fuel, used in the WY 406-FE2."
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi'
+ icon_state = "wy22e5"
+ caliber = "Sticky Napalm"
+ max_rounds = 200
+ default_ammo = /datum/ammo/flamethrower/sentry_flamer/wy
+
+/obj/item/ammo_magazine/sentry_flamer/upp
+ name = "upp sentry incinerator tank"
+ desc = "A fuel tank of Ultra Thick Gel Napthal Fuel, used in the UPP SDS-R5 Sentry Flamer."
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "uppsds4"
+ caliber = "Sticky Napalm"
+ max_rounds = 200
+ default_ammo = /datum/ammo/flamethrower/sentry_flamer/upp
diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm
index d469daff494c..bbbb7f27639f 100644
--- a/code/modules/reagents/chemistry_properties/prop_positive.dm
+++ b/code/modules/reagents/chemistry_properties/prop_positive.dm
@@ -492,7 +492,7 @@
var/obj/item/alien_embryo/embryo = content
if(embryo && istype(embryo))
if(embryo.counter > 0)
- embryo.counter = embryo.counter - potency
+ embryo.counter = embryo.counter - (potency * delta_time)
current_human.take_limb_damage(0,POTENCY_MULTIPLIER_MEDIUM*potency)
else
embryo.stage--
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index 2b3407fa9414..00dcd987f089 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -382,7 +382,13 @@
return
var/mob/living/carbon/human/human_user = user
- if(!(ACCESS_MARINE_SENIOR in human_user.wear_id?.access) && !(ACCESS_MARINE_DROPSHIP in human_user.wear_id?.access))
+ var/obj/item/card/id/card = human_user.get_idcard()
+
+ if(!card)
+ to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\"."))
+ return
+
+ if(!(ACCESS_MARINE_SENIOR in card.access) && !(ACCESS_MARINE_DROPSHIP in card.access))
to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\"."))
return
diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm
index e8e93a040889..b78ea85c7c3c 100644
--- a/code/modules/shuttle/shuttle_rotate.dm
+++ b/code/modules/shuttle/shuttle_rotate.dm
@@ -25,6 +25,14 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
pixel_x = oldPY
pixel_y = (oldPX*(-1))
+
+/* ***********************************Object rotate procs*********************************** */
+
+/obj/vehicle/multitile/shuttleRotate(rotation, params)
+ params &= ~ROTATE_OFFSET
+ return ..()
+
+
/* ***********************************Turf rotate procs*********************************** */
/turf/closed/mineral/shuttleRotate(rotation, params)
diff --git a/code/modules/vehicles/apc/apc.dm b/code/modules/vehicles/apc/apc.dm
index 78219e439832..b7d35f21fbe3 100644
--- a/code/modules/vehicles/apc/apc.dm
+++ b/code/modules/vehicles/apc/apc.dm
@@ -87,7 +87,7 @@ GLOBAL_LIST_EMPTY(command_apc_list)
/obj/vehicle/multitile/apc/load_role_reserved_slots()
var/datum/role_reserved_slots/RRS = new
RRS.category_name = "Crewmen"
- RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
RRS.total = 2
role_reserved_slots += RRS
diff --git a/code/modules/vehicles/apc/apc_command.dm b/code/modules/vehicles/apc/apc_command.dm
index 54647279ec3b..8d056daec2ea 100644
--- a/code/modules/vehicles/apc/apc_command.dm
+++ b/code/modules/vehicles/apc/apc_command.dm
@@ -68,7 +68,7 @@
/obj/vehicle/multitile/apc/command/load_role_reserved_slots()
var/datum/role_reserved_slots/RRS = new
RRS.category_name = "Crewmen"
- RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
RRS.total = 2
role_reserved_slots += RRS
diff --git a/code/modules/vehicles/apc/apc_medical.dm b/code/modules/vehicles/apc/apc_medical.dm
index f8809bedaa73..7d462e7da27b 100644
--- a/code/modules/vehicles/apc/apc_medical.dm
+++ b/code/modules/vehicles/apc/apc_medical.dm
@@ -32,7 +32,7 @@
/obj/vehicle/multitile/apc/medical/load_role_reserved_slots()
var/datum/role_reserved_slots/RRS = new
RRS.category_name = "Crewmen"
- RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
RRS.total = 2
role_reserved_slots += RRS
diff --git a/code/modules/vehicles/arc/arc.dm b/code/modules/vehicles/arc/arc.dm
index feee097c3638..8f5a8ee5d8e9 100644
--- a/code/modules/vehicles/arc/arc.dm
+++ b/code/modules/vehicles/arc/arc.dm
@@ -17,11 +17,10 @@
interior_map = /datum/map_template/interior/arc
- passengers_slots = 3
- xenos_slots = 5
+ passengers_slots = 2 // 5 total. Reserved slots are added to passenger slots.
+ xenos_slots = 4
entrances = list(
- "left" = list(2, 0),
"right" = list(-2, 0),
)
diff --git a/code/modules/vehicles/arc/interior.dm b/code/modules/vehicles/arc/interior.dm
new file mode 100644
index 000000000000..c8d7d0934e4d
--- /dev/null
+++ b/code/modules/vehicles/arc/interior.dm
@@ -0,0 +1,13 @@
+/obj/structure/interior_exit/vehicle/arc
+ name = "ARC side door"
+ icon = 'icons/obj/vehicles/interiors/arc.dmi'
+ icon_state = "exit_door"
+
+/obj/structure/prop/vehicle/arc
+ name = "ARC chassis"
+
+ icon = 'icons/obj/vehicles/interiors/arc_chassis.dmi'
+ icon_state = "arc_chassis"
+ layer = ABOVE_TURF_LAYER
+ mouse_opacity = FALSE
+
diff --git a/code/modules/vehicles/hardpoints/armor/snowplow.dm b/code/modules/vehicles/hardpoints/armor/snowplow.dm
index 84e589658029..a1b1a9dc800c 100644
--- a/code/modules/vehicles/hardpoints/armor/snowplow.dm
+++ b/code/modules/vehicles/hardpoints/armor/snowplow.dm
@@ -6,7 +6,7 @@
disp_icon = "tank"
disp_icon_state = "snowplow"
- health = 600
+ health = 150
activatable = 1
/obj/item/hardpoint/armor/snowplow/livingmob_interact(mob/living/M)
diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm
index bdf106aecac3..2a01098de523 100644
--- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm
+++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm
@@ -27,7 +27,7 @@
slot = HDPT_TURRET
// big beefy chonk of metal
- health = 750
+ health = 450
damage_multiplier = 0.05
accepted_hardpoints = list(
diff --git a/code/modules/vehicles/hardpoints/wheels/treads.dm b/code/modules/vehicles/hardpoints/wheels/treads.dm
index b718d1c8e897..dd819ea2af03 100644
--- a/code/modules/vehicles/hardpoints/wheels/treads.dm
+++ b/code/modules/vehicles/hardpoints/wheels/treads.dm
@@ -8,7 +8,7 @@
slot = HDPT_TREADS
- health = 500
+ health = 300
//with this settings, takes 3 tiles to reach top speed
move_delay = 3.8
@@ -20,7 +20,7 @@
name = "Reinforced Treads"
desc = "These treads are made of a tougher material and are more durable. However, the extra weight slows the tank down slightly."
- health = 750
+ health = 500
acid_resistant = TRUE
move_max_momentum = 5 //same top speed, but takes 5 tiles to reach it
diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm
index 5571995594f0..1ad6fb5bb8df 100644
--- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm
+++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm
@@ -15,7 +15,7 @@
unslashable = TRUE
indestructible = TRUE
- var/list/role_restriction = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ var/list/role_restriction = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
var/obj/item/storage/internal/container
diff --git a/code/modules/vehicles/interior/interior_landmarks.dm b/code/modules/vehicles/interior/interior_landmarks.dm
index fa1eee8651ac..cd9f2e74df15 100644
--- a/code/modules/vehicles/interior/interior_landmarks.dm
+++ b/code/modules/vehicles/interior/interior_landmarks.dm
@@ -267,6 +267,7 @@
V.vehicle = I.exterior
V.pixel_x = pixel_x
V.pixel_y = pixel_y
+ V.layer = layer
V.alpha = alpha
V.update_icon()
@@ -286,6 +287,7 @@
V.vehicle = I.exterior
V.pixel_x = pixel_x
V.pixel_y = pixel_y
+ V.layer = layer
V.alpha = alpha
qdel(src)
diff --git a/code/modules/vehicles/tank/tank.dm b/code/modules/vehicles/tank/tank.dm
index 147e359471df..1cc1174c43fe 100644
--- a/code/modules/vehicles/tank/tank.dm
+++ b/code/modules/vehicles/tank/tank.dm
@@ -90,7 +90,7 @@
/obj/vehicle/multitile/tank/load_role_reserved_slots()
var/datum/role_reserved_slots/RRS = new
RRS.category_name = "Crewmen"
- RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
RRS.total = 2
role_reserved_slots += RRS
@@ -165,6 +165,39 @@
return TRUE
+/obj/vehicle/multitile/tank/MouseDrop_T(mob/dropped, mob/user)
+ . = ..()
+ if((dropped != user) || !isxeno(user))
+ return
+
+ if(health > 0)
+ to_chat(user, SPAN_XENO("We can't jump over [src] until it is destroyed!"))
+ return
+
+ var/turf/current_turf = get_turf(user)
+ var/dir_to_go = get_dir(current_turf, src)
+ for(var/i in 1 to 3)
+ current_turf = get_step(current_turf, dir_to_go)
+ if(!(current_turf in locs))
+ break
+
+ if(current_turf.density)
+ to_chat(user, SPAN_XENO("The path over [src] is obstructed!"))
+ return
+
+ // Now we check to make sure the turf on the other side of the tank isn't dense too
+ current_turf = get_step(current_turf, dir_to_go)
+ if(current_turf.density)
+ to_chat(user, SPAN_XENO("The path over [src] is obstructed!"))
+ return
+
+ to_chat(user, SPAN_XENO("We begin to jump over [src]..."))
+ if(!do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE))
+ to_chat(user, SPAN_XENO("We stop jumping over [src]."))
+ return
+
+ user.forceMove(current_turf)
+ to_chat(user, SPAN_XENO("We jump to the other side of [src]."))
/*
** PRESETS SPAWNERS
*/
diff --git a/colonialmarines.dme b/colonialmarines.dme
index ce7c050d6dba..5193cd3571cb 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -332,6 +332,7 @@
#include "code\datums\ASRS.dm"
#include "code\datums\beam.dm"
#include "code\datums\browser.dm"
+#include "code\datums\bug_report.dm"
#include "code\datums\callback.dm"
#include "code\datums\changelog.dm"
#include "code\datums\combat_personalized.dm"
@@ -691,6 +692,7 @@
#include "code\datums\tutorial\marine\_marine.dm"
#include "code\datums\tutorial\marine\basic_marine.dm"
#include "code\datums\tutorial\marine\medical_basic.dm"
+#include "code\datums\tutorial\marine\reqs_line.dm"
#include "code\datums\tutorial\ss13\_ss13.dm"
#include "code\datums\tutorial\ss13\basic_ss13.dm"
#include "code\datums\tutorial\ss13\intents.dm"
@@ -804,6 +806,7 @@
#include "code\game\jobs\job\command\auxiliary\dropship_pilot.dm"
#include "code\game\jobs\job\command\auxiliary\intel.dm"
#include "code\game\jobs\job\command\auxiliary\senior.dm"
+#include "code\game\jobs\job\command\auxiliary\tank_crew.dm"
#include "code\game\jobs\job\command\cic\captain.dm"
#include "code\game\jobs\job\command\cic\executive.dm"
#include "code\game\jobs\job\command\cic\staffofficer.dm"
@@ -2413,6 +2416,7 @@
#include "code\modules\vehicles\apc\apc_medical.dm"
#include "code\modules\vehicles\apc\interior.dm"
#include "code\modules\vehicles\arc\arc.dm"
+#include "code\modules\vehicles\arc\interior.dm"
#include "code\modules\vehicles\arc\verbs.dm"
#include "code\modules\vehicles\hardpoints\hardpoint.dm"
#include "code\modules\vehicles\hardpoints\armor\armor.dm"
diff --git a/config/example/config.txt b/config/example/config.txt
index 0aff7ee6def9..d63e6822465c 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -253,3 +253,8 @@ GAMEMODE_DEFAULT Extended
CLIENT_ERROR_VERSION 514
#CLIENT_ERROR_BUILD 1589
#CLIENT_ERROR_MESSAGE Your version of BYOND is too old, may have issues, and is blocked from accessing this server.
+
+## GITHUB API
+#GITHUB_APP_API
+#REPO_NAME cmss13
+#ORG cmss13-devs
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6376.yml b/html/changelogs/AutoChangeLog-pr-6376.yml
new file mode 100644
index 000000000000..b85a58274d4b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6376.yml
@@ -0,0 +1,5 @@
+author: "Red-byte3D"
+delete-after: True
+changes:
+ - balance: "Vampire tail jab now only stuns if you knockback an enemy into an obstacle."
+ - spellcheck: "Vampire lurkers no longer \"throw it back\" after hitting somebody with their Tail Jab"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6379.yml b/html/changelogs/AutoChangeLog-pr-6379.yml
deleted file mode 100644
index 05381813fec5..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6379.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: "Zonespace27"
-delete-after: True
-changes:
- - balance: "All squad roles can now use M707 pamphlets"
- - bugfix: "Skillless M707 spotting scopes now consistently work."
- - bugfix: "M707 magazine overlay no longer disappears when the gun is empty with an inserted magazine"
- - bugfix: "Fixed M707 being usable without the correct trait"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index 6c7f9c524779..47ee4f9f6cae 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -84,3 +84,146 @@
- rscdel: passive generation increase of research credits is removed
ThePiachu:
- spellcheck: Fixed a typo in Admin Game Panel
+2024-06-11:
+ Zonespace27:
+ - balance: All squad roles can now use M707 pamphlets
+ - bugfix: Skillless M707 spotting scopes now consistently work.
+ - bugfix: M707 magazine overlay no longer disappears when the gun is empty with
+ an inserted magazine
+ - bugfix: Fixed M707 being usable without the correct trait
+2024-06-13:
+ Drathek:
+ - bugfix: Fixed some jobs having no minimap icon in orbit menu
+ - bugfix: Fixed ghost huds resetting settings if you were ghostized while disconnected
+ - bugfix: Fixed larva queue time of death not getting recorded if client is missing
+ TheGamerdk:
+ - bugfix: Command can now access the helmet cameras of any deploying command staff
+ ThePiachu:
+ - bugfix: CLF Engineers now properly spawn with insulated gloves again.
+ Zonespace27:
+ - admin: Potentially laggy uses of the drop-bomb verb now have a confirmation warning.
+ cuberound:
+ - balance: dropship fabricator extra budget price 12 -> 6 , 2500 -> 2000 points
+ - balance: supply extra budget 15 -> 7, 10k -> 5k
+ - balance: all OB 10 -> 5 intel points, one shell and five fuel
+ fira:
+ - rscadd: Added a Tutorial for tending to the Requisitions Line
+2024-06-15:
+ AndroBetel:
+ - balance: Pistol mag pouch now has 4 slots instead of 3.
+ Blundir:
+ - imageadd: resprite of spearhead cmb revolver
+ Comxy:
+ - rscadd: Adds W-Y branded sentries.
+ - imageadd: Adds W-Y defenses sprites.
+ Drathek:
+ - bugfix: Fixed Queen Mother being unable to award a Queen
+ - rscadd: Added preference for toggling the fax machine received sound as an observer
+ TheGamerdk:
+ - bugfix: Fixes small issue allowing medals to teleport
+ Zonespace, Zydras:
+ - bugfix: Vehicle elevator no longer incorrectly rotates vehicles
+ - rscadd: New ARC exterior and interior
+ - balance: ARC now fits 5 humans instead of 7
+ - balance: ARC now fits 4 xenos intead of 5
+ - balance: ARC's RE700 turret armor pen 10->15
+ - balance: On account of the smaller size, the ARC no longer has a nanomed.
+ Zonespace27:
+ - bugfix: Pyro spec flamer should be linked to its tank more consistently.
+ - qol: Added some missing objectives to the xenomorph - basic tutorial.
+ harryob:
+ - bugfix: the preview window in character setup now remains visible when looking
+ at it as a ghost
+2024-06-16:
+ Drathek:
+ - bugfix: Fixed wallets as IDs breaking many things
+ - admin: Added niche logging for revival attempts
+2024-06-17:
+ GrrrKitten:
+ - bugfix: fixes a bug that fully jammed guns being used in akimbo
+ Steelpoint:
+ - mapadd: Civilian Clothing Storage Vendors have been added to the Gym on the USS
+ Almayer. These allow anyone to vend civilian clothes. These vendors require
+ CIC access to unlock however.
+ TheGamerdk:
+ - bugfix: The game no longer tricks predators and synths into thinking they're more
+ damaged than they actually are.
+ - rscadd: Special insert synthetics on most maps will now be able to gain access
+ to synthetic equipment vendors, provided they're given access by USCM command
+ staff. (Synth access on their ID)
+ coldironwarrior:
+ - bugfix: fixed corpsmen gloves and the map being mutually exclusive in the corpsman
+ vendor
+ - bugfix: incen OB fire now makes blue light.
+ iloveloopers:
+ - qol: Grow boxes can now be destroyed by xenos.
+ realforest2001:
+ - bugfix: Medical cryo tubes no longer delete their occupant when destroyed.
+ vero5123:
+ - bugfix: fixes vampire being able to execute hugged marines
+ - bugfix: fixes cas being able to target shipside signals
+2024-06-19:
+ Diegoflores31:
+ - bugfix: Fixes CO being unable to award medals.
+ Drathek:
+ - bugfix: Fixed various equipment_presets not getting cached or looked up correctly
+ Git-Nivrak:
+ - qol: Dir-assist will now prioritize non-xenos over xenos.
+ Red-byte3D:
+ - balance: Synthetic Protective Form now takes 150 charge instead of 50.
+ TheGamerdk:
+ - rscadd: Overwatch console shows dead marines by default.
+ VileBeggar:
+ - soundadd: The M44 combat revolver has had its firing sound changed.
+ wshuwshuwshi:
+ - bugfix: Adds a 1.5x modifier to the amount taken from larva timer based on chem
+ property level
+ - bugfix: swaps the 1.5 multiplier for a delta_time multiplier
+ - bugfix: improved the formatting of the code to have proper spacing
+2024-06-20:
+ Drathek cuberound:
+ - balance: After three minutes from round start, landing zones will be covered in
+ a deadly gas
+ - balance: First dropship deployment will clear gas, and first dropship arrival
+ will deploy 4 sentries that last 20 minutes
+ - refactor: Refactored smoke code
+ - maptweak: Expanded LZ areas on Trijent Dam and Kutjevo Refinery
+ - maptweak: Shrunk LZ1 on Shivas Snowball and LZ2 on LV624 slightly
+ - maptweak: Removed fog on Chances Claim since it will be replaced by smoke and
+ tweaked southern tunnel area to not be considered a LZ
+ - bugfix: Fixed weird LZ lighting on some maps
+ - spellcheck: Replaced/removed synth coughing emotes in smoke
+ Git-Nivrak:
+ - qol: Added an hud icon for vampires that lets them know when an enemy can be executed.
+ Nomoresolvalou:
+ - rscadd: Added masks to synth snowflake vendor
+ Red-byte3D:
+ - balance: Re-adds Vehicle Crewmen
+ - balance: Tank now unlocks at 200 pop.
+ - balance: Re-adds tank and its attachements back to the tank-bay.
+ - balance: You can no longer have the ARC & TANK in the same round. if the arc is
+ bought the tank is unavailable and vice versa.
+ Zonespace27:
+ - rscdel: Pyro flamers now start unlinked from their tanks again
+ iloveloopers:
+ - rscadd: Added new upgraded incinerator fuel tanks printable by the biomass analyzer.
+ vero5123:
+ - rscadd: Adds the ability for users to make bug reports in-game
+ - ui: New bug report system ui
+ zzzmike:
+ - qol: examining eggs/morphers tells you current number of huggers and the limit
+2024-06-21:
+ Drathek:
+ - bugfix: Fixed the core showing lesser drone counts to humans when examined
+ Git-Nivrak:
+ - balance: You can no longer extinguish yourself with your own acid spray.
+ - balance: Queen will now briefly shove xenos if they are in a tile she is trying
+ to move to, preventing bodyblock.
+ cuberound:
+ - balance: patting fire on ground harms the xeno, more intense fire means more harm
+ iloveloopers:
+ - balance: Fence health nerfed, now can be 2 tapped by xenos
+ - qol: Fuel cell recyclers no longer block movement
+ - qol: Showcases are now slashable by xenos
+ zzzmike:
+ - bugfix: more survivors now listed in survivor category on observe menu
diff --git a/icons/misc/tutorial.dmi b/icons/misc/tutorial.dmi
index 31c9f72d3853..aee42db11bd7 100644
Binary files a/icons/misc/tutorial.dmi and b/icons/misc/tutorial.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi
index 91dc908a8293..cb80cb6cc10c 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi
index c5b67e97c2e1..7bad7eb2c583 100644
Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ
diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi
index 978479eecaa0..ecbc5fb84969 100644
Binary files a/icons/obj/items/clothing/belts.dmi and b/icons/obj/items/clothing/belts.dmi differ
diff --git a/icons/obj/items/clothing/pouches.dmi b/icons/obj/items/clothing/pouches.dmi
index 6a7af0d3e049..4c7ba6d4d856 100644
Binary files a/icons/obj/items/clothing/pouches.dmi and b/icons/obj/items/clothing/pouches.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi
index 5632ca31481e..7327bf6a611b 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi
index 11eab502b0cf..6a8bbca97e4f 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/wy.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi
index caa62ef55605..17e7e6f221ae 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi differ
diff --git a/icons/obj/items/weapons/guns/lineart.dmi b/icons/obj/items/weapons/guns/lineart.dmi
index a746bce1716b..6ea81af6d088 100644
Binary files a/icons/obj/items/weapons/guns/lineart.dmi and b/icons/obj/items/weapons/guns/lineart.dmi differ
diff --git a/icons/obj/structures/machinery/defenses/upp_defenses.dmi b/icons/obj/structures/machinery/defenses/upp_defenses.dmi
new file mode 100644
index 000000000000..09313b374f36
Binary files /dev/null and b/icons/obj/structures/machinery/defenses/upp_defenses.dmi differ
diff --git a/icons/obj/structures/machinery/defenses/wy_defenses.dmi b/icons/obj/structures/machinery/defenses/wy_defenses.dmi
new file mode 100644
index 000000000000..a05da0cf7703
Binary files /dev/null and b/icons/obj/structures/machinery/defenses/wy_defenses.dmi differ
diff --git a/icons/obj/structures/machinery/defenses/wy_heavy.dmi b/icons/obj/structures/machinery/defenses/wy_heavy.dmi
new file mode 100644
index 000000000000..a6a7fbf49c8e
Binary files /dev/null and b/icons/obj/structures/machinery/defenses/wy_heavy.dmi differ
diff --git a/icons/obj/structures/machinery/defenses/wy_static.dmi b/icons/obj/structures/machinery/defenses/wy_static.dmi
new file mode 100644
index 000000000000..92a890880221
Binary files /dev/null and b/icons/obj/structures/machinery/defenses/wy_static.dmi differ
diff --git a/icons/obj/vehicles/arc.dmi b/icons/obj/vehicles/arc.dmi
index f662d5475ac0..c13153072ee2 100644
Binary files a/icons/obj/vehicles/arc.dmi and b/icons/obj/vehicles/arc.dmi differ
diff --git a/icons/obj/vehicles/interiors/arc.dmi b/icons/obj/vehicles/interiors/arc.dmi
new file mode 100644
index 000000000000..4ab29a7400ff
Binary files /dev/null and b/icons/obj/vehicles/interiors/arc.dmi differ
diff --git a/icons/obj/vehicles/interiors/arc_chassis.dmi b/icons/obj/vehicles/interiors/arc_chassis.dmi
new file mode 100644
index 000000000000..255687f8fa0d
Binary files /dev/null and b/icons/obj/vehicles/interiors/arc_chassis.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index c9112160d94f..5b30eaa53bf7 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -62,14 +62,11 @@
set name = "Submit Bug"
set desc = "Submit a bug."
set hidden = TRUE
-
- if(tgui_alert(src, "Please search for the bug first to make sure you aren't posting a duplicate.", "No dupe bugs please", list("OK", "Cancel")) != "OK")
- return
-
- if(tgui_alert(src, "This will open the GitHub in your browser. Are you sure?", "Confirm", list("Yes", "No")) != "Yes")
+ if(!usr)
return
+ var/datum/tgui_bug_report_form/report = new(usr)
- src << link(CONFIG_GET(string/githuburl))
+ report.tgui_interact(usr)
return
/client/verb/set_fps()
diff --git a/maps/interiors/arc.dmm b/maps/interiors/arc.dmm
index 4da63cbff383..f1a7f11a8f34 100644
--- a/maps/interiors/arc.dmm
+++ b/maps/interiors/arc.dmm
@@ -1,296 +1,113 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aD" = (
-/obj/effect/landmark/interior/spawn/weapons_loader,
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_12"
+"dH" = (
+/obj/effect/landmark/interior/spawn/entrance{
+ alpha = 50;
+ exit_type = /obj/structure/interior_exit/vehicle/arc;
+ name = "ARC exit door";
+ pixel_y = -10;
+ tag = "right"
},
+/turf/open/floor,
/area/interior/vehicle/arc)
-"be" = (
-/obj/structure/interior_wall/apc{
- icon_state = "door_back"
- },
-/turf/open/void/vehicle,
-/area/space)
-"cJ" = (
-/obj/structure/interior_wall/apc{
- icon_state = "rear_1"
- },
+"sE" = (
/turf/open/void/vehicle,
/area/space)
-"dM" = (
-/obj/structure/interior_wall/apc{
- icon_state = "rear_2"
+"yX" = (
+/obj/effect/landmark/interior/spawn/telephone{
+ pixel_x = -12;
+ pixel_y = 15
},
-/turf/open/void/vehicle,
-/area/space)
-"dU" = (
/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor{
dir = 4
},
-/obj/structure/machinery/cm_vending/sorted/medical/wall_med/vehicle{
- pixel_x = 6;
- pixel_y = 28
- },
/obj/item/device/megaphone,
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_9_1"
- },
-/area/interior/vehicle/arc)
-"jb" = (
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_11"
- },
+/turf/open/floor,
/area/interior/vehicle/arc)
-"ml" = (
-/obj/structure/interior_wall/apc{
- icon_state = "wall"
- },
-/obj/effect/landmark/interior/spawn/telephone,
-/turf/open/void/vehicle,
-/area/space)
-"mR" = (
-/obj/structure/interior_wall/apc{
- icon_state = "front_wheel_R"
- },
-/turf/open/void/vehicle,
-/area/space)
-"ro" = (
-/obj/structure/interior_wall/apc{
- alpha = 100;
- icon_state = "wall_door_front";
- layer = 5.2;
- pixel_y = 32
- },
-/turf/open/void/vehicle,
-/area/space)
-"ru" = (
-/turf/open/shuttle/vehicle{
- icon_state = "floor_1_6"
- },
-/area/interior/vehicle/arc)
-"tD" = (
-/obj/structure/interior_wall/apc{
- icon_state = "rear_6"
- },
-/turf/open/void/vehicle,
-/area/space)
-"vt" = (
-/obj/structure/interior_wall/apc{
- icon_state = "rear_wheel_L"
- },
-/turf/open/void/vehicle,
-/area/space)
-"we" = (
-/obj/structure/interior_wall/apc{
- alpha = 100;
- icon_state = "door_front";
- layer = 5.2;
- pixel_y = 32
- },
-/turf/open/void/vehicle,
-/area/space)
-"wK" = (
-/obj/structure/interior_wall/apc{
- icon_state = "wheel_front_top_1";
- pixel_x = 1;
- pixel_y = -4
- },
-/turf/open/void/vehicle,
-/area/space)
-"ym" = (
-/obj/structure/interior_wall/apc{
- icon_state = "rear_wheel_R";
- opacity = 0
- },
-/turf/open/void/vehicle,
-/area/space)
-"yX" = (
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_8_1"
- },
-/area/interior/vehicle/arc)
-"CB" = (
-/obj/structure/interior_wall/apc{
- icon_state = "wall";
- opacity = 0
- },
-/turf/open/void/vehicle,
-/area/space)
"Dn" = (
/obj/structure/machinery/prop/almayer/CICmap/computer{
dir = 4;
- pixel_y = 8
+ layer = 2.98;
+ pixel_x = -13;
+ pixel_y = 4
},
-/obj/structure/surface/table/reinforced/prison{
- pixel_y = -3
- },
-/obj/structure/machinery/computer/overwatch/almayer/small{
+/obj/structure/machinery/computer/groundside_operations/arc{
dir = 4;
- layer = 3.01;
- pixel_y = -5
- },
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_10_1"
- },
-/area/interior/vehicle/arc)
-"Gy" = (
-/obj/structure/interior_wall/apc{
- icon_state = "front_1"
- },
-/turf/open/void/vehicle,
-/area/space)
-"HB" = (
-/obj/structure/interior_wall/apc{
- icon_state = "corner_small_L"
- },
-/obj/structure/interior_wall/apc{
- icon_state = "rear_5"
- },
-/turf/open/void/vehicle,
-/area/space)
-"HJ" = (
-/obj/structure/interior_wall/apc{
- icon_state = "front_6"
- },
-/turf/open/void/vehicle,
-/area/space)
-"Jc" = (
-/obj/structure/interior_wall/apc{
- icon_state = "corner_small_R"
+ layer = 2.981;
+ pixel_x = -13;
+ pixel_y = -9
},
-/obj/structure/interior_wall/apc{
- icon_state = "front_5"
- },
-/turf/open/void/vehicle,
-/area/space)
-"Ng" = (
-/obj/structure/interior_wall/apc{
- icon_state = "wall"
- },
-/turf/open/void/vehicle,
-/area/space)
-"NS" = (
-/obj/structure/bed/chair/comfy{
+/obj/structure/bed/chair/comfy/arc{
dir = 8
},
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_5"
- },
+/turf/open/floor,
/area/interior/vehicle/arc)
-"Ol" = (
-/obj/effect/landmark/interior/spawn/entrance{
- alpha = 50;
- exit_type = /obj/structure/interior_exit/vehicle/apc;
- name = "Right APC door";
- tag = "right"
- },
-/obj/effect/landmark/interior/spawn/interior_viewport{
- dir = 8;
- pixel_x = 5;
- pixel_y = 1
- },
-/turf/open/shuttle/vehicle{
- icon_state = "floor_1_12"
- },
-/area/interior/vehicle/arc)
-"Po" = (
-/obj/structure/surface/table/reinforced/prison{
- pixel_y = -3
- },
-/obj/structure/machinery/computer/intel/disk_reader{
+"DG" = (
+/obj/structure/machinery/computer/overwatch/almayer/small{
dir = 4;
- pixel_y = 6
+ layer = 2.982;
+ pixel_x = -13;
+ pixel_y = 10
},
-/obj/structure/machinery/computer/groundside_operations{
+/obj/structure/machinery/computer/intel/disk_reader{
dir = 4;
- pixel_y = -7
- },
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_8_1"
- },
-/area/interior/vehicle/arc)
-"Rb" = (
-/turf/open/void/vehicle,
-/area/space)
-"Rf" = (
-/obj/structure/interior_wall/apc{
- icon_state = "front_2"
+ layer = 2.983;
+ pixel_x = -13;
+ pixel_y = -3
},
-/turf/open/void/vehicle,
-/area/space)
-"Zs" = (
-/obj/structure/bed/chair/comfy{
+/obj/structure/bed/chair/comfy/arc{
dir = 8
},
-/turf/open/shuttle/vehicle{
- icon_state = "floor_3_8_1"
+/turf/open/floor,
+/area/interior/vehicle/arc)
+"Ly" = (
+/obj/effect/landmark/interior/spawn/weapons_loader{
+ pixel_x = -2
},
+/turf/open/floor,
/area/interior/vehicle/arc)
-"ZF" = (
+"NS" = (
/obj/effect/landmark/interior/spawn/interior_viewport{
- dir = 8;
- pixel_x = 5;
- pixel_y = 8
- },
-/obj/effect/landmark/interior/spawn/entrance{
- alpha = 50;
- dir = 1;
- exit_type = /obj/structure/interior_exit/vehicle/apc;
- name = "Left APC door";
- pixel_y = 32;
- tag = "left"
+ layer = 2.98;
+ pixel_x = 8;
+ pixel_y = 4
},
-/turf/open/shuttle/vehicle{
- icon_state = "floor_1_11"
+/obj/structure/bed/chair/vehicle{
+ pixel_x = -7
},
+/turf/open/floor,
/area/interior/vehicle/arc)
+"Rb" = (
+/obj/structure/prop/vehicle/arc,
+/turf/open/void/vehicle,
+/area/space)
(1,1,1) = {"
-tD
-HB
-dM
-cJ
+sE
+sE
+sE
Rb
"}
(2,1,1) = {"
-Ng
-Po
+sE
Dn
-vt
-Rb
+DG
+sE
"}
(3,1,1) = {"
-ml
-Zs
+sE
NS
-ym
-Rb
+dH
+sE
"}
(4,1,1) = {"
-Ng
-jb
+sE
yX
-aD
-ro
+Ly
+sE
"}
(5,1,1) = {"
-be
-ZF
-ru
-Ol
-we
-"}
-(6,1,1) = {"
-wK
-CB
-dU
-mR
-Rb
-"}
-(7,1,1) = {"
-HJ
-Jc
-Rf
-Gy
-Rb
+sE
+sE
+sE
+sE
"}
diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm
index 0c33d3d251f8..ec598eebd59c 100644
--- a/maps/map_files/DesertDam/Desert_Dam.dmm
+++ b/maps/map_files/DesertDam/Desert_Dam.dmm
@@ -141,7 +141,7 @@
icon_state = "road_edge_decal11"
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aaB" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal9"
@@ -307,13 +307,13 @@
dir = 4;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"abb" = (
/obj/structure/flora/bush/desert{
icon_state = "tree_3"
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"abc" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 4
@@ -370,7 +370,7 @@
dir = 6;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"abk" = (
/turf/closed/wall/hangar{
name = "reinforced metal wall"
@@ -551,7 +551,7 @@
dir = 5;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"abO" = (
/obj/structure/surface/rack,
/turf/open/floor/prison,
@@ -1032,7 +1032,7 @@
/turf/open/asphalt/cement_sunbleached{
icon_state = "cement_sunbleached1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"adr" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 6
@@ -1273,7 +1273,7 @@
/turf/open/asphalt/cement_sunbleached{
icon_state = "cement_sunbleached1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aeh" = (
/obj/effect/blocker/toxic_water/Group_2,
/turf/open/desert/desert_shore/shore_edge1{
@@ -1569,7 +1569,7 @@
"aeY" = (
/obj/structure/prop/dam/boulder/boulder1,
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aeZ" = (
/obj/structure/bed/chair/office/light{
dir = 4
@@ -1745,7 +1745,7 @@
/turf/open/asphalt{
icon_state = "tile"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"afz" = (
/turf/open/desert/rock/deep/transition{
dir = 9
@@ -4391,7 +4391,7 @@
/turf/open/asphalt{
icon_state = "tile"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"ani" = (
/obj/structure/closet/crate/trashcart,
/turf/open/asphalt/cement_sunbleached{
@@ -5021,11 +5021,6 @@
icon_state = "whitepurplecorner"
},
/area/desert_dam/interior/lab_northeast/east_lab_central_hallway)
-"apa" = (
-/turf/open/asphalt/cement_sunbleached{
- icon_state = "cement_sunbleached4"
- },
-/area/desert_dam/exterior/valley/valley_northwest)
"apb" = (
/obj/structure/machinery/computer/shuttle/elevator_controller/elevator_call/trijent/lz1{
pixel_y = 32
@@ -5254,7 +5249,7 @@
"apP" = (
/obj/structure/flora/grass/desert/lightgrass_7,
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"apR" = (
/obj/effect/decal/sand_overlay/sand1/corner1,
/turf/open/desert/desert_shore/desert_shore1,
@@ -5353,7 +5348,7 @@
dir = 4
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aqg" = (
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_northwest)
@@ -5610,7 +5605,7 @@
dir = 1
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aqU" = (
/obj/structure/machinery/door/airlock/almayer/security/glass/colony{
dir = 1;
@@ -10195,7 +10190,7 @@
unacidable = 1
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aEH" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -11271,7 +11266,7 @@
"aHW" = (
/obj/structure/flora/grass/desert/lightgrass_4,
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aHX" = (
/obj/structure/machinery/light{
dir = 1
@@ -12854,7 +12849,7 @@
icon_state = "S"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aMK" = (
/obj/structure/surface/rack,
/obj/effect/spawner/random/tech_supply,
@@ -12875,7 +12870,7 @@
icon_state = "tree_3"
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aMN" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
@@ -12930,13 +12925,13 @@
icon_state = "W"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aMU" = (
/obj/effect/decal/warning_stripes{
icon_state = "N"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aMV" = (
/obj/effect/decal/sand_overlay/sand1/corner1{
dir = 4
@@ -13019,7 +13014,7 @@
icon_state = "N"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aNf" = (
/obj/structure/machinery/power/port_gen/pacman,
/turf/open/floor/plating,
@@ -13069,7 +13064,7 @@
icon_state = "N"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aNn" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal9"
@@ -13152,7 +13147,7 @@
icon_state = "W"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aNy" = (
/turf/open/floor/prison{
dir = 10;
@@ -13162,14 +13157,14 @@
"aNz" = (
/obj/effect/decal/sand_overlay/sand1,
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aNA" = (
/obj/effect/decal/sand_overlay/sand1,
/obj/structure/machinery/conveyor_switch{
id = "cargo_landing"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aNB" = (
/obj/structure/surface/rack,
/obj/item/stack/sheet/mineral/phoron{
@@ -13768,7 +13763,7 @@
icon_state = "tree_2"
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"aPL" = (
/obj/structure/machinery/shower{
dir = 1
@@ -14541,7 +14536,7 @@
/turf/open/asphalt/cement_sunbleached{
icon_state = "cement_sunbleached19"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aSe" = (
/turf/open/floor{
dir = 1;
@@ -15004,7 +14999,7 @@
dir = 5;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aTF" = (
/turf/open/desert/rock/deep/transition{
dir = 5
@@ -15331,7 +15326,7 @@
/turf/open/asphalt/cement_sunbleached{
icon_state = "cement_sunbleached9"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aUK" = (
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor/prison{
@@ -15464,7 +15459,7 @@
/turf/open/asphalt/cement_sunbleached{
icon_state = "cement_sunbleached1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"aVm" = (
/turf/closed/wall/r_wall,
/area/desert_dam/building/administration/office)
@@ -15559,14 +15554,6 @@
icon_state = "cement_sunbleached15"
},
/area/desert_dam/exterior/landing_pad_one)
-"aVH" = (
-/obj/effect/decal/sand_overlay/sand1{
- dir = 8
- },
-/turf/open/asphalt/cement_sunbleached{
- icon_state = "cement_sunbleached15"
- },
-/area/desert_dam/exterior/valley/valley_northwest)
"aVI" = (
/turf/closed/wall/r_wall,
/area/desert_dam/building/administration/control_room)
@@ -17275,7 +17262,7 @@
icon_state = "stop_decal5"
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"baX" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt/cement_sunbleached{
@@ -17763,7 +17750,7 @@
},
/obj/structure/desertdam/decals/road_stop,
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"bcD" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 8
@@ -18815,7 +18802,7 @@
dir = 5;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"bgf" = (
/obj/structure/platform_decoration{
dir = 8
@@ -19158,6 +19145,10 @@
/obj/structure/surface/table,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/control_room)
+"bhp" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"bhq" = (
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/control_room)
@@ -26357,6 +26348,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/landing_pad_one)
+"bFC" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 9
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"bFD" = (
/turf/open/floor/prison{
dir = 10;
@@ -36823,7 +36820,7 @@
dir = 4
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"cnB" = (
/obj/structure/platform{
dir = 8
@@ -40528,7 +40525,7 @@
dir = 8;
icon_state = "desert_transition_corner1"
},
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"czB" = (
/obj/structure/platform,
/obj/effect/blocker/toxic_water/Group_1,
@@ -41767,9 +41764,6 @@
icon_state = "darkbrown2"
},
/area/desert_dam/building/mining/workshop_foyer)
-"cCY" = (
-/turf/open/desert/dirt,
-/area/desert_dam/exterior/rock)
"cCZ" = (
/obj/structure/machinery/landinglight/ds2/delaytwo{
dir = 4
@@ -43119,7 +43113,7 @@
dir = 5;
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"cGS" = (
/obj/structure/machinery/landinglight/ds2/delaytwo,
/turf/open/asphalt/cement_sunbleached{
@@ -45890,7 +45884,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"cQd" = (
/obj/item/trash/cheesie,
/obj/effect/landmark/objective_landmark/close,
@@ -46085,7 +46079,7 @@
dir = 10
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"cQN" = (
/obj/structure/machinery/power/apc{
dir = 1;
@@ -46507,6 +46501,12 @@
icon_state = "cement_sunbleached15"
},
/area/desert_dam/exterior/valley/valley_civilian)
+"cSn" = (
+/turf/open/desert/dirt{
+ dir = 8;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"cSo" = (
/obj/structure/surface/table/reinforced,
/obj/structure/machinery/door/window/eastleft{
@@ -46707,7 +46707,7 @@
dir = 5
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"cTa" = (
/obj/structure/machinery/door/poddoor/almayer/locked{
dir = 4;
@@ -47725,7 +47725,7 @@
},
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"cXD" = (
/turf/open/floor/prison{
icon_state = "darkbrown2"
@@ -48278,7 +48278,7 @@
icon_state = "W"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"dax" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -48373,9 +48373,6 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_civilian)
-"daU" = (
-/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
"daX" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -48403,7 +48400,7 @@
id = "cargo_landing"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"dbd" = (
/obj/structure/machinery/light{
dir = 8
@@ -49335,7 +49332,7 @@
},
/obj/effect/landmark/railgun_camera_pos,
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"deA" = (
/obj/structure/largecrate/random,
/turf/open/floor/prison{
@@ -49455,13 +49452,13 @@
icon_state = "S"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"deV" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
/turf/open/floor/plating,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"deW" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -49945,7 +49942,7 @@
"dgG" = (
/obj/structure/prop/dam/large_boulder/boulder2,
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"dgH" = (
/obj/structure/disposalpipe/segment{
dir = 1;
@@ -50260,6 +50257,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_civilian)
+"dja" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 8
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"djg" = (
/obj/item/paper_bin,
/obj/item/tool/stamp,
@@ -51765,7 +51768,7 @@
dir = 1
},
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"dvZ" = (
/obj/structure/flora/grass/tallgrass/desert/corner{
dir = 9
@@ -53108,7 +53111,7 @@
/turf/open/desert/dirt{
icon_state = "desert_transition_edge1"
},
-/area/desert_dam/exterior/valley/valley_northwest)
+/area/desert_dam/exterior/landing_pad_one)
"dDD" = (
/obj/structure/surface/table/reinforced,
/obj/item/clothing/head/welding,
@@ -60135,6 +60138,12 @@
icon_state = "cement_sunbleached9"
},
/area/desert_dam/exterior/valley/bar_valley_dam)
+"ekN" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal7"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"emt" = (
/obj/effect/decal/sand_overlay/sand1/corner1{
dir = 1
@@ -60160,6 +60169,12 @@
icon_state = "whitered"
},
/area/desert_dam/building/medical/surgery_room_one)
+"erF" = (
+/turf/open/desert/dirt{
+ dir = 5;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"esG" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -60200,7 +60215,7 @@
},
/obj/effect/decal/sand_overlay/sand1/corner1,
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"eCK" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/liquid_fuel,
@@ -60242,6 +60257,18 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_labs)
+"eRL" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal2"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
+"eRX" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal8"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"eTi" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/objective_landmark/close,
@@ -60311,6 +60338,15 @@
icon_state = "cement_sunbleached14"
},
/area/desert_dam/exterior/valley/valley_civilian)
+"eZC" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal2"
+ },
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 8
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"eZE" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal2"
@@ -60320,6 +60356,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_hydro)
+"eZN" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal10"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"faE" = (
/obj/structure/flora/grass/tallgrass/desert/corner{
dir = 1
@@ -60426,6 +60468,12 @@
},
/turf/closed/wall/rock/orange,
/area/desert_dam/exterior/rock)
+"fqj" = (
+/turf/open/desert/dirt{
+ dir = 8;
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"fqt" = (
/turf/open/desert/dirt{
dir = 9;
@@ -60581,7 +60629,7 @@
"fSc" = (
/obj/structure/flora/grass/desert/lightgrass_12,
/turf/open/desert/dirt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"fTk" = (
/obj/structure/sink/kitchen,
/obj/structure/surface/table/reinforced,
@@ -60600,6 +60648,10 @@
icon_state = "cement_sunbleached4"
},
/area/desert_dam/exterior/valley/valley_hydro)
+"fYz" = (
+/obj/structure/flora/grass/tallgrass/desert/corner,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"fYS" = (
/obj/structure/largecrate/random,
/obj/effect/decal/cleanable/dirt,
@@ -60806,6 +60858,16 @@
icon_state = "whiteyellow"
},
/area/desert_dam/interior/dam_interior/garage)
+"gBQ" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal4"
+ },
+/obj/structure/desertdam/decals/road_stop{
+ dir = 8;
+ icon_state = "stop_decal5"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"gBV" = (
/obj/effect/landmark/crap_item,
/obj/effect/decal/cleanable/dirt,
@@ -60883,6 +60945,12 @@
dir = 10
},
/area/desert_dam/interior/dam_interior/garage)
+"gLg" = (
+/turf/open/desert/dirt{
+ dir = 1;
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"gLl" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 1
@@ -61050,6 +61118,18 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_hydro)
+"hjz" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "N"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
+"hjW" = (
+/turf/open/desert/dirt{
+ dir = 9;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"hmA" = (
/obj/structure/surface/table/almayer,
/obj/item/paper_bin,
@@ -61095,6 +61175,11 @@
icon_state = "cement_sunbleached1"
},
/area/desert_dam/exterior/valley/south_valley_dam)
+"htc" = (
+/turf/open/desert/dirt{
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"hvD" = (
/obj/structure/shuttle/diagonal{
icon_state = "swall_f10"
@@ -61173,6 +61258,10 @@
"hCf" = (
/turf/open/asphalt/cement_sunbleached,
/area/desert_dam/exterior/valley/south_valley_dam)
+"hCY" = (
+/obj/structure/flora/grass/desert/lightgrass_3,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"hDT" = (
/obj/structure/flora/bush/desert/cactus{
icon_state = "cactus_4"
@@ -61242,6 +61331,12 @@
icon_state = "bright_clean"
},
/area/desert_dam/building/mining/workshop)
+"hTf" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 6
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"hTg" = (
/obj/effect/landmark/survivor_spawner,
/turf/open/floor{
@@ -61260,6 +61355,10 @@
/obj/structure/blocker/forcefield/multitile_vehicles,
/turf/closed/wall/r_wall/chigusa,
/area/desert_dam/interior/lab_northeast/east_lab_west_hallway)
+"hVV" = (
+/obj/structure/flora/grass/desert/lightgrass_9,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"hWz" = (
/obj/structure/surface/table/reinforced,
/obj/effect/landmark/objective_landmark/medium,
@@ -61349,6 +61448,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/bar_valley_dam)
+"ign" = (
+/turf/open/desert/dirt{
+ dir = 10;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"ihT" = (
/obj/structure/surface/table,
/obj/effect/landmark/objective_landmark/close,
@@ -61521,6 +61626,12 @@
icon_state = "desert_transition_edge1"
},
/area/desert_dam/exterior/valley/valley_wilderness)
+"iHF" = (
+/turf/open/desert/dirt{
+ dir = 10;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"iIB" = (
/obj/structure/surface/table/reinforced,
/obj/effect/landmark/objective_landmark/far,
@@ -61533,6 +61644,10 @@
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/prison,
/area/desert_dam/exterior/valley/south_valley_dam)
+"iKp" = (
+/obj/structure/desertdam/decals/road_edge,
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"iNg" = (
/obj/structure/machinery/door/airlock/almayer/engineering/colony{
dir = 2;
@@ -61622,11 +61737,19 @@
icon_state = "cement_sunbleached18"
},
/area/desert_dam/exterior/valley/bar_valley_dam)
+"iZY" = (
+/obj/structure/flora/grass/desert/heavygrass_3,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"jbx" = (
/turf/open/asphalt{
icon_state = "tile"
},
/area/desert_dam/exterior/valley/bar_valley_dam)
+"jcb" = (
+/obj/structure/flora/grass/desert/lightgrass_6,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"jci" = (
/obj/structure/closet/secure_closet/personal,
/obj/effect/landmark/objective_landmark/close,
@@ -61662,6 +61785,15 @@
icon_state = "cement_sunbleached14"
},
/area/desert_dam/exterior/valley/valley_hydro)
+"jqU" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal2"
+ },
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 8
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"jre" = (
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/prison{
@@ -62031,6 +62163,12 @@
},
/turf/open/floor/sandstone/runed,
/area/desert_dam/interior/caves/temple)
+"kPo" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal4"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"kPs" = (
/obj/structure/blocker/forcefield/multitile_vehicles,
/turf/open/desert/dirt,
@@ -62241,6 +62379,11 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_hydro)
+"lzs" = (
+/turf/open/desert/dirt{
+ icon_state = "rock1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"lzZ" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
@@ -62277,6 +62420,9 @@
icon_state = "whiteyellowfull"
},
/area/desert_dam/interior/lab_northeast/east_lab_lobby)
+"lIt" = (
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"lIK" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal4"
@@ -62285,7 +62431,7 @@
dir = 1
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"lJM" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 9
@@ -62383,6 +62529,12 @@
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_crashsite)
+"lZP" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 9
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"mar" = (
/obj/structure/surface/rack,
/obj/effect/spawner/random/tech_supply,
@@ -62430,6 +62582,13 @@
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_civilian)
+"mfH" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"mfK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -62459,6 +62618,12 @@
icon_state = "sterile_white"
},
/area/desert_dam/interior/dam_interior/workshop)
+"mjR" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal6"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"mkd" = (
/obj/effect/decal/warning_stripes{
icon_state = "E"
@@ -62500,6 +62665,12 @@
icon_state = "green"
},
/area/desert_dam/interior/dam_interior/atmos_storage)
+"moq" = (
+/turf/open/desert/dirt{
+ dir = 6;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"mqM" = (
/obj/effect/landmark/monkey_spawn,
/turf/open/desert/rock,
@@ -62530,6 +62701,10 @@
icon_state = "multi_tiles"
},
/area/desert_dam/interior/caves/temple)
+"muj" = (
+/obj/structure/flora/grass/tallgrass/desert,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"myx" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/floor/prison{
@@ -62566,6 +62741,19 @@
},
/turf/open/gm/river/desert/shallow,
/area/desert_dam/exterior/river/riverside_south)
+"mBO" = (
+/obj/structure/flora/grass/tallgrass/desert,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
+"mDd" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal12"
+ },
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 10
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"mDz" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt/cement_sunbleached{
@@ -62707,6 +62895,9 @@
icon_state = "kitchen"
},
/area/desert_dam/building/cafeteria/cafeteria)
+"mZb" = (
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"mZj" = (
/obj/effect/decal/sand_overlay/sand1{
dir = 4
@@ -62737,6 +62928,12 @@
"ncm" = (
/turf/open/desert/rock/deep,
/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
+"ndF" = (
+/turf/open/desert/dirt{
+ dir = 1;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"ndP" = (
/obj/structure/stairs/perspective{
color = "#b29082";
@@ -62762,6 +62959,12 @@
icon_state = "cement_sunbleached13"
},
/area/desert_dam/exterior/valley/south_valley_dam)
+"niN" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 1
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"nji" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
@@ -62808,6 +63011,12 @@
icon_state = "sterile_white"
},
/area/desert_dam/building/dorms/restroom)
+"nnv" = (
+/turf/open/desert/dirt{
+ dir = 9;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"nsf" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal12"
@@ -63009,6 +63218,11 @@
/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall,
/turf/open/asphalt/cement_sunbleached,
/area/desert_dam/exterior/valley/valley_crashsite)
+"ogc" = (
+/turf/open/desert/dirt{
+ icon_state = "rock1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"oit" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/desert/dirt{
@@ -63022,6 +63236,10 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/bar_valley_dam)
+"onm" = (
+/obj/structure/flora/grass/desert/lightgrass_4,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"onA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
@@ -63151,6 +63369,10 @@
icon_state = "desert_transition_edge1"
},
/area/desert_dam/exterior/valley/valley_hydro)
+"oJT" = (
+/obj/structure/flora/grass/desert/lightgrass_2,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"oJW" = (
/obj/structure/machinery/light{
dir = 8
@@ -63163,6 +63385,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_hydro)
+"oMz" = (
+/turf/open/desert/dirt{
+ dir = 4;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"oNS" = (
/obj/structure/stairs,
/obj/structure/platform{
@@ -63326,7 +63554,7 @@
dir = 1
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"ppS" = (
/obj/structure/surface/table,
/obj/effect/landmark/objective_landmark/science,
@@ -63388,6 +63616,14 @@
icon_state = "white"
},
/area/desert_dam/interior/dam_interior/garage)
+"pzk" = (
+/obj/effect/decal/sand_overlay/sand1/corner1{
+ dir = 1
+ },
+/turf/open/asphalt/cement_sunbleached{
+ icon_state = "cement_sunbleached18"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"pzv" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal5"
@@ -63450,6 +63686,13 @@
/obj/structure/window/framed/hangar/reinforced,
/turf/open/floor/plating,
/area/desert_dam/interior/dam_interior/garage)
+"pHs" = (
+/obj/structure/desertdam/decals/road_stop{
+ dir = 8;
+ icon_state = "stop_decal5"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"pHU" = (
/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door,
/obj/effect/landmark/structure_spawner/setup/distress/xeno_door,
@@ -63498,6 +63741,11 @@
icon_state = "cement_sunbleached3"
},
/area/desert_dam/exterior/valley/valley_civilian)
+"pRD" = (
+/turf/open/desert/dirt{
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"pSM" = (
/obj/effect/landmark/nightmare{
insert_tag = "purple-new-bridge"
@@ -63562,6 +63810,12 @@
dir = 6
},
/area/desert_dam/interior/caves/temple)
+"qkz" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"qkJ" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal4"
@@ -63575,6 +63829,10 @@
icon_state = "cement12"
},
/area/desert_dam/exterior/telecomm/lz1_south)
+"qlr" = (
+/obj/structure/flora/grass/desert/heavygrass_4,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"qlx" = (
/obj/effect/decal/sand_overlay/sand1,
/obj/structure/blocker/forcefield/multitile_vehicles,
@@ -63696,6 +63954,12 @@
icon_state = "cement_sunbleached18"
},
/area/desert_dam/exterior/valley/south_valley_dam)
+"qDl" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/asphalt/cement_sunbleached{
+ icon_state = "cement_sunbleached9"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"qEJ" = (
/obj/structure/desertdam/decals/road_edge,
/obj/effect/decal/cleanable/dirt,
@@ -63714,6 +63978,12 @@
/obj/structure/flora/grass/tallgrass/desert/corner,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_hydro)
+"qHh" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 10
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"qHt" = (
/obj/structure/surface/table,
/obj/effect/landmark/objective_landmark/close,
@@ -63725,6 +63995,10 @@
/obj/structure/flora/grass/desert/lightgrass_10,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/bar_valley_dam)
+"qIC" = (
+/obj/structure/flora/tree/joshua,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"qJI" = (
/obj/structure/machinery/power/apc{
dir = 1;
@@ -63762,6 +64036,12 @@
icon_state = "squareswood"
},
/area/desert_dam/interior/caves/temple)
+"qLE" = (
+/turf/open/desert/dirt{
+ dir = 5;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"qLT" = (
/obj/structure/showcase{
desc = "An ancient, dusty tomb with strange alien writing. It's best not to touch it.";
@@ -64142,6 +64422,19 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_medical)
+"sav" = (
+/turf/open/desert/dirt{
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
+"saQ" = (
+/obj/structure/fence,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
+"saS" = (
+/obj/structure/flora/grass/desert/heavygrass_9,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"sbP" = (
/obj/effect/decal/sand_overlay/sand1,
/obj/effect/decal/cleanable/liquid_fuel,
@@ -64325,6 +64618,22 @@
icon_state = "cement_sunbleached4"
},
/area/desert_dam/exterior/valley/valley_hydro)
+"sAm" = (
+/turf/open/desert/dirt{
+ dir = 1;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
+"sAZ" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal7"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
+"sCW" = (
+/obj/structure/largecrate/random/secure,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"sDf" = (
/obj/effect/decal/cleanable/generic,
/turf/open/floor/prison{
@@ -64403,7 +64712,7 @@
dir = 6
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"sOu" = (
/obj/structure/surface/table/reinforced,
/obj/structure/machinery/chem_dispenser/soda{
@@ -64431,6 +64740,14 @@
icon_state = "desert_transition_corner1"
},
/area/desert_dam/interior/caves/temple)
+"sQE" = (
+/obj/effect/decal/sand_overlay/sand1/corner1{
+ dir = 4
+ },
+/turf/open/asphalt/cement_sunbleached{
+ icon_state = "cement_sunbleached18"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"sRl" = (
/obj/effect/landmark/nightmare{
insert_tag = "uppcrash"
@@ -64451,6 +64768,14 @@
"sUr" = (
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_labs)
+"sUF" = (
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 8
+ },
+/turf/open/asphalt{
+ icon_state = "tile"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"sWS" = (
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
@@ -64565,7 +64890,7 @@
icon_state = "road_edge_decal3"
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"tni" = (
/obj/effect/decal/sand_overlay/sand1,
/turf/open/asphalt{
@@ -64608,6 +64933,12 @@
icon_state = "bright_clean"
},
/area/desert_dam/interior/dam_interior/garage)
+"txr" = (
+/turf/open/desert/dirt{
+ dir = 4;
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"txD" = (
/obj/structure/toilet{
dir = 8
@@ -64792,6 +65123,15 @@
/obj/structure/flora/grass/tallgrass/desert,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_hydro)
+"ucS" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal2"
+ },
+/obj/effect/decal/sand_overlay/sand1/corner1{
+ dir = 4
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"uez" = (
/turf/closed/wall/hangar{
name = "reinforced metal wall"
@@ -64823,6 +65163,10 @@
dir = 1
},
/area/desert_dam/interior/caves/temple)
+"uic" = (
+/obj/structure/machinery/colony_floodlight,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"uis" = (
/obj/effect/decal/sand_overlay/sand1,
/turf/open/asphalt/cement_sunbleached{
@@ -64874,6 +65218,15 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/south_valley_dam)
+"urC" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal9"
+ },
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 9
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"uso" = (
/obj/structure/surface/table/reinforced/prison{
color = "#6b675e"
@@ -64955,6 +65308,12 @@
icon_state = "dirt2"
},
/area/desert_dam/exterior/valley/valley_crashsite)
+"uHx" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal8"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"uHT" = (
/obj/structure/machinery/camera/autoname/lz_camera,
/turf/open/floor/plating,
@@ -64967,6 +65326,10 @@
icon_state = "whitegreenfull"
},
/area/desert_dam/building/medical/treatment_room)
+"uJl" = (
+/obj/structure/flora/grass/desert/lightgrass_9,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"uKo" = (
/obj/structure/platform/mineral/sandstone/runed{
dir = 4
@@ -64995,6 +65358,10 @@
},
/turf/open/desert/rock,
/area/desert_dam/exterior/valley/valley_crashsite)
+"uME" = (
+/obj/structure/flora/grass/desert/lightgrass_2,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"uMG" = (
/obj/structure/platform{
dir = 1
@@ -65036,6 +65403,11 @@
/obj/structure/flora/grass/desert/lightgrass_9,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_hydro)
+"uSv" = (
+/turf/open/asphalt{
+ icon_state = "tile"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"uTo" = (
/obj/structure/flora/grass/tallgrass/desert,
/turf/open/desert/dirt,
@@ -65051,6 +65423,11 @@
/obj/effect/decal/remains/human,
/turf/open/desert/rock,
/area/desert_dam/interior/caves/temple)
+"uWt" = (
+/turf/closed/wall/hangar{
+ name = "reinforced metal wall"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"uWT" = (
/obj/effect/decal/warning_stripes{
icon_state = "N"
@@ -65072,6 +65449,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_medical)
+"uZr" = (
+/turf/open/desert/dirt{
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"vfr" = (
/obj/structure/blocker/forcefield/multitile_vehicles,
/turf/open/desert/dirt{
@@ -65116,6 +65498,10 @@
/obj/structure/fence,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_hydro)
+"vjO" = (
+/obj/structure/flora/grass/desert/lightgrass_12,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"vnf" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -65263,6 +65649,12 @@
icon_state = "cement_sunbleached3"
},
/area/desert_dam/exterior/telecomm/lz2_storage)
+"vGu" = (
+/obj/effect/decal/warning_stripes{
+ icon_state = "W"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"vHj" = (
/obj/effect/decal/warning_stripes{
icon_state = "N"
@@ -65338,6 +65730,12 @@
icon_state = "cement_sunbleached19"
},
/area/desert_dam/exterior/valley/bar_valley_dam)
+"vTA" = (
+/turf/open/desert/dirt{
+ dir = 6;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"vTR" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal4"
@@ -65434,6 +65832,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall/r_wall/bunker,
/area/desert_dam/interior/dam_interior/garage)
+"wpr" = (
+/obj/effect/decal/sand_overlay/sand1,
+/turf/open/asphalt{
+ icon_state = "tile"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"wpW" = (
/obj/structure/flora/grass/desert/lightgrass_6,
/turf/open/desert/dirt,
@@ -65487,6 +65891,12 @@
/obj/structure/desertdam/decals/road_edge,
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_telecoms)
+"wuV" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal5"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"wya" = (
/obj/effect/decal/warning_stripes{
icon_state = "N"
@@ -65519,6 +65929,16 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_telecoms)
+"wDC" = (
+/obj/structure/prop/dam/large_boulder/boulder1,
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
+"wEy" = (
+/turf/open/desert/dirt{
+ dir = 1;
+ icon_state = "desert_transition_corner1"
+ },
+/area/desert_dam/exterior/landing_pad_one)
"wFv" = (
/obj/structure/surface/table/reinforced,
/turf/open/floor/prison{
@@ -65682,6 +66102,12 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_hydro)
+"xbA" = (
+/obj/structure/desertdam/decals/road_edge{
+ icon_state = "road_edge_decal12"
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_one)
"xcG" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal3"
@@ -65988,6 +66414,12 @@
/obj/structure/blocker/forcefield/multitile_vehicles,
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_civilian)
+"xOm" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 5
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_two)
"xOK" = (
/obj/effect/blocker/toxic_water/Group_2,
/obj/structure/disposalpipe/segment,
@@ -66024,6 +66456,12 @@
icon_state = "tile"
},
/area/desert_dam/exterior/valley/valley_labs)
+"xUS" = (
+/turf/open/desert/dirt{
+ dir = 4;
+ icon_state = "desert_transition_edge1"
+ },
+/area/desert_dam/exterior/landing_pad_two)
"xUU" = (
/obj/effect/decal/cleanable/blood/gibs/xeno/body,
/turf/open/floor/corsat{
@@ -66031,6 +66469,12 @@
icon_state = "squareswood"
},
/area/desert_dam/interior/caves/temple)
+"xWj" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 6
+ },
+/turf/open/desert/dirt,
+/area/desert_dam/exterior/landing_pad_one)
"xYb" = (
/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall,
/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall,
@@ -66066,6 +66510,13 @@
},
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_labs)
+"ybW" = (
+/obj/structure/desertdam/decals/road_edge,
+/obj/effect/decal/sand_overlay/sand1{
+ dir = 4
+ },
+/turf/open/asphalt,
+/area/desert_dam/exterior/landing_pad_two)
"ydw" = (
/obj/structure/window/framed/hangar/reinforced,
/obj/structure/blocker/forcefield/multitile_vehicles,
@@ -66133,7 +66584,7 @@
icon_state = "E"
},
/turf/open/asphalt,
-/area/desert_dam/exterior/valley/valley_cargo)
+/area/desert_dam/exterior/landing_pad_two)
"ylT" = (
/obj/structure/machinery/light{
dir = 4
@@ -68236,7 +68687,7 @@ dTs
dTs
dTs
dTs
-cuH
+lzs
dTs
dTs
dTs
@@ -68244,7 +68695,7 @@ dTs
dTs
dTs
dTs
-cuH
+lzs
dTs
dTs
dTs
@@ -68468,18 +68919,18 @@ dTs
dTs
dTs
dTs
-csA
-crq
-csA
-crq
+gLg
+sav
+gLg
+sav
dTs
dTs
dTs
-cwB
-cwB
-crq
-csA
-crq
+xUS
+xUS
+sav
+gLg
+sav
dTs
dTs
dTs
@@ -68695,27 +69146,27 @@ dTs
dTs
dTs
dTs
-csA
-cwB
-crq
+gLg
+xUS
+sav
dTs
dTs
-csA
-cwB
-csD
-crr
-csD
-crr
-cwB
-cwB
-csD
-doE
-doE
-crr
-csD
-crr
-crq
-cuH
+gLg
+xUS
+vTA
+erF
+vTA
+erF
+xUS
+xUS
+vTA
+lIt
+lIt
+erF
+vTA
+erF
+sav
+lzs
dTs
dTs
dTs
@@ -68922,35 +69373,35 @@ dTs
dTs
dTs
dTs
-csA
-cwB
-crq
+gLg
+xUS
+sav
dTs
dTs
-csA
-cwB
-csD
-doE
-cxV
-csB
-crr
-csD
-doE
-doE
-doE
+gLg
+xUS
+vTA
+lIt
+sAm
+htc
+erF
+vTA
+lIt
+lIt
+lIt
aMM
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
cGR
-cwB
-crq
+xUS
+sav
dTs
dTs
dTs
@@ -69154,55 +69605,295 @@ dTs
dTs
dTs
dTs
-cuH
-csA
-csD
-doE
-crr
-cwB
-crq
-csB
-doE
-doE
-doE
+lzs
+gLg
+vTA
+lIt
+erF
+xUS
+sav
+htc
+lIt
+lIt
+lIt
cGR
-csD
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
+vTA
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+sAm
+dTs
+dTs
+dTs
+dTs
+acu
+"}
+(14,1,1) = {"
+acu
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+dTs
+afD
+afk
+cEl
+aTQ
+cxj
+awh
+afD
+dTs
+dTs
+afD
+afD
+afD
+awi
+awi
+awi
+bPO
+bPO
+cdh
+cdh
+ceD
+ceD
+cwl
+ceA
+ceA
+ceA
+axk
+ceA
+aSI
+chG
+ceA
+acs
+acs
+aya
+aya
+aya
+aya
+acs
+acs
+cjO
+aTH
+aTU
+cjO
+aTZ
+aUe
+aUe
+aUe
+aTZ
+aTZ
+aUe
+aUe
+aUe
+aTZ
+ceA
+ceA
+cId
+ceA
+bPA
+bSv
+bSG
+bYR
+beN
+aUm
+jLI
+cez
+jZZ
+dTs
+dTs
+dTs
+dTs
+cfE
+cfe
+cgm
+cgt
+cgZ
+cih
+cih
+cjI
+cih
+cqd
+cqd
+cqd
+cqd
+cqd
+cqd
+cqd
+cih
+cvF
+cwx
+cxN
+cmm
+cUg
doE
doE
doE
doE
doE
+cPG
+cTD
+cYY
+cUf
cxV
dTs
dTs
+xUS
+xUS
+vTA
+lIt
+lIt
+lIt
+lIt
+erF
+vTA
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+urC
+ybW
+ybW
+mDd
+lIt
+lIt
+erF
+sav
+dTs
dTs
dTs
acu
"}
-(14,1,1) = {"
+(15,1,1) = {"
acu
dTs
dTs
dTs
dTs
dTs
+wEy
dTs
dTs
+wEy
+oMz
+uZr
+ogc
dTs
dTs
dTs
+uZr
dTs
dTs
dTs
@@ -69222,249 +69913,9 @@ dTs
dTs
dTs
dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-afD
-afk
-cEl
-aTQ
-cxj
-awh
-afD
-dTs
-dTs
-afD
-afD
-afD
-awi
-awi
-awi
-bPO
-bPO
-cdh
-cdh
-ceD
-ceD
-cwl
-ceA
-ceA
-ceA
-axk
-ceA
-aSI
-chG
-ceA
-acs
-acs
-aya
-aya
-aya
-aya
-acs
-acs
-cjO
-aTH
-aTU
-cjO
-aTZ
-aUe
-aUe
-aUe
-aTZ
-aTZ
-aUe
-aUe
-aUe
-aTZ
-ceA
-ceA
-cId
-ceA
-bPA
-bSv
-bSG
-bYR
-beN
-aUm
-jLI
-cez
-jZZ
-dTs
-dTs
-dTs
-dTs
-cfE
-cfe
-cgm
-cgt
-cgZ
-cih
-cih
-cjI
-cih
-cqd
-cqd
-cqd
-cqd
-cqd
-cqd
-cqd
-cih
-cvF
-cwx
-cxN
-cmm
-cUg
-doE
-doE
-doE
-doE
-doE
-cPG
-cTD
-cYY
-cUf
-cxV
-dTs
-dTs
-cwB
-cwB
-csD
-doE
-doE
-doE
-doE
-crr
-csD
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-doE
-cuL
-crw
-crw
-cuz
-doE
-doE
-crr
-crq
-dTs
-dTs
-dTs
-acu
-"}
-(15,1,1) = {"
-acu
-dTs
-dTs
-dTs
-dTs
-dTs
-air
-dTs
-dTs
-air
-amP
-apt
-ahu
-dTs
-dTs
-dTs
-apt
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-dTs
-ahu
-air
-apt
+ogc
+wEy
+uZr
dTs
dTs
dTs
@@ -69620,7 +70071,7 @@ cCO
ctK
dTs
dTs
-cwz
+iHF
aKY
cMq
cGu
@@ -69647,14 +70098,14 @@ cGu
cMq
cQn
lIK
-crx
-crx
+dws
+dws
tlh
-doE
-doE
+lIt
+lIt
dgG
-cxV
-cuH
+sAm
+lzs
dTs
dTs
acu
@@ -69665,25 +70116,25 @@ dTs
dTs
dTs
dTs
-ahu
-ais
-apu
+ogc
+pRD
+qLE
aba
abj
cSZ
abN
-apt
-ahu
-air
-aiY
-apu
-apt
-ahu
+uZr
+ogc
+wEy
+moq
+qLE
+uZr
+ogc
dTs
dTs
dTs
dTs
-air
+wEy
dTs
dTs
dTs
@@ -69695,14 +70146,14 @@ dTs
dTs
dTs
dTs
-air
-amP
-aiY
-axZ
-ahu
+wEy
+oMz
+moq
+ndF
+ogc
dTs
-amP
-apt
+oMz
+uZr
dTs
dTs
dTs
@@ -69854,7 +70305,7 @@ cCU
cAa
dTs
dTs
-csD
+vTA
alh
cMC
aav
@@ -69880,14 +70331,14 @@ cGG
cDL
cMC
cgh
-cUl
-cvJ
-crz
+kPo
+qkz
+hjz
tlh
-doE
-doE
-doE
-cxV
+lIt
+lIt
+lIt
+sAm
dTs
dTs
dTs
@@ -69897,30 +70348,30 @@ acu
acu
dTs
dTs
-ahu
-ahu
-air
-aiY
-aqz
-cQf
-nzB
-nzB
+ogc
+ogc
+wEy
+moq
+uJl
+xWj
+mBO
+mBO
cSZ
aTC
-amP
-aiY
-aiZ
-aiZ
-apu
-apt
-ahu
+oMz
+moq
+mZb
+mZb
+qLE
+uZr
+ogc
dTs
dTs
-air
-aiY
-apu
-amP
-apt
+wEy
+moq
+qLE
+oMz
+uZr
dTs
dTs
dTs
@@ -69929,15 +70380,15 @@ dTs
dTs
dTs
dTs
-aiY
-apc
+moq
+oJT
apP
-apu
-apt
-ait
-aja
-apu
-apt
+qLE
+uZr
+txr
+ign
+qLE
+uZr
dTs
dTs
dTs
@@ -70114,15 +70565,15 @@ tcB
cDY
cMD
cBS
-cUl
-crx
-crx
+kPo
+dws
+dws
tlh
-doE
-doE
-doE
-crr
-crq
+lIt
+lIt
+lIt
+erF
+sav
dTs
dTs
acu
@@ -70130,52 +70581,52 @@ acu
(18,1,1) = {"
acu
dTs
-air
-amP
-amP
-aiY
-aiZ
-aiZ
+wEy
+oMz
+oMz
+moq
+mZb
+mZb
cQL
-cRc
-nzB
+dja
+mBO
dvW
apP
-aiZ
-aiZ
-aiZ
-aiZ
-aiZ
-apu
-apt
-air
-amP
-aiY
-aiZ
-aJm
-aiZ
-apu
-amP
-apt
-ahu
+mZb
+mZb
+mZb
+mZb
+mZb
+qLE
+uZr
+wEy
+oMz
+moq
+mZb
+qIC
+mZb
+qLE
+oMz
+uZr
+ogc
dTs
dTs
-aiY
-axZ
-ait
-aja
-aiZ
-apc
-aiZ
-apu
-amP
-aiY
-aiZ
-apu
-apt
-ahu
-air
-apt
+moq
+ndF
+txr
+ign
+mZb
+oJT
+mZb
+qLE
+oMz
+moq
+mZb
+qLE
+uZr
+ogc
+wEy
+uZr
dTs
dTs
dTs
@@ -70348,69 +70799,69 @@ cDY
cDY
cML
cBS
-cUl
-crx
-crx
+kPo
+dws
+dws
tlh
-doE
-cuO
-doE
-doE
-cxV
-cuH
+lIt
+uic
+lIt
+lIt
+sAm
+lzs
dTs
acu
"}
(19,1,1) = {"
acu
dTs
-ais
-aiZ
-aJm
-aiZ
-aiZ
+pRD
+mZb
+qIC
+mZb
+mZb
aQS
-anF
+vjO
aHW
cQL
-dvZ
-aqz
-aiZ
-aiZ
-aiZ
+lZP
+uJl
+mZb
+mZb
+mZb
aQS
-aqz
-aiZ
-apu
-aiY
-aiZ
-aiZ
-aiZ
-aiZ
-aiZ
-aiZ
+uJl
+mZb
+qLE
+moq
+mZb
+mZb
+mZb
+mZb
+mZb
+mZb
aQS
-apu
-amP
-aiY
-aiZ
-aiZ
-apu
-amP
-aiY
-aiZ
-aiZ
+qLE
+oMz
+moq
+mZb
+mZb
+qLE
+oMz
+moq
+mZb
+mZb
ben
-aiZ
-aiZ
-aiZ
-aiZ
-aiZ
+mZb
+mZb
+mZb
+mZb
+mZb
bge
-amP
-aiY
-apu
-amP
+oMz
+moq
+qLE
+oMz
bht
bht
bht
@@ -70582,15 +71033,15 @@ cDY
cDY
cNb
cRB
-cUl
-cvJ
-crz
+kPo
+qkz
+hjz
tlh
-doE
-doE
-doE
-doE
-cxV
+lIt
+lIt
+lIt
+lIt
+sAm
dTs
dTs
acu
@@ -70598,9 +71049,9 @@ acu
(20,1,1) = {"
acu
dTs
-ais
-aiZ
-aiZ
+pRD
+mZb
+mZb
aPA
aQe
aQT
@@ -70816,14 +71267,14 @@ cDY
cDY
cNh
djl
-daD
-crx
-crx
+sAZ
+dws
+dws
tlh
-doE
-doE
-csE
-cxU
+lIt
+lIt
+uME
+hjW
dTs
dTs
dTs
@@ -70832,9 +71283,9 @@ acu
(21,1,1) = {"
acu
dTs
-ait
-aja
-aiZ
+txr
+ign
+mZb
aPB
aQf
aQU
@@ -71024,7 +71475,7 @@ cRM
cRM
dFn
doE
-cCY
+doE
cDb
abS
cDY
@@ -71050,15 +71501,15 @@ cDY
cDY
cNi
dws
-crx
-crx
-crx
+dws
+dws
+dws
tlh
-crv
-drL
-drO
-crr
-crq
+onm
+hTf
+xOm
+erF
+sav
dTs
dTs
acu
@@ -71067,8 +71518,8 @@ acu
acu
dTs
dTs
-ait
-aja
+txr
+ign
aPB
aQg
aQV
@@ -71284,15 +71735,15 @@ cDY
cDY
cNx
dws
-crx
-cvJ
-crz
+dws
+qkz
+hjz
tlh
fSc
-dsE
-drT
-cru
-cxV
+fYz
+niN
+hCY
+sAm
dTs
dTs
acu
@@ -71302,7 +71753,7 @@ acu
dTs
dTs
dTs
-ais
+pRD
aPB
aQg
aQV
@@ -71518,15 +71969,15 @@ cDY
cDY
cPI
dws
-crx
-crx
-crx
+dws
+dws
+dws
tlh
-drL
-uTo
-drN
-doE
-crr
+hTf
+muj
+bFC
+lIt
+erF
dTs
dTs
acu
@@ -71536,7 +71987,7 @@ acu
dTs
dTs
dTs
-ais
+pRD
aPB
aQg
aQV
@@ -71752,15 +72203,15 @@ cDY
cDY
cPW
djk
-cUk
-crx
-crx
+eRX
+dws
+dws
tlh
-duc
-drN
-cAd
-doE
-cxU
+qHh
+bFC
+hVV
+lIt
+hjW
czA
dTs
acu
@@ -71770,7 +72221,7 @@ acu
dTs
dTs
dTs
-ais
+pRD
aPB
aQg
aQV
@@ -71986,14 +72437,14 @@ cDY
cDY
cMD
cRE
-cUl
-cvJ
-crz
+kPo
+qkz
+hjz
tlh
-csE
-cxT
-doE
-doE
+uME
+jcb
+lIt
+lIt
dTs
dTs
dTs
@@ -72004,7 +72455,7 @@ acu
dTs
dTs
dTs
-ais
+pRD
aPB
aQg
aQV
@@ -72220,15 +72671,15 @@ cDY
cDY
cML
cBS
-cUl
-crx
-crx
+kPo
+dws
+dws
tlh
-cru
-csE
-doE
-doE
-cxV
+hCY
+uME
+lIt
+lIt
+sAm
dTs
dTs
acu
@@ -72237,8 +72688,8 @@ acu
acu
dTs
dTs
-air
-aiY
+wEy
+moq
aPB
aQh
aQW
@@ -72454,15 +72905,15 @@ tcB
cDY
cNb
cBS
-cUl
-crx
-crx
+kPo
+dws
+dws
tlh
-drL
-drO
-doE
-doE
-cxV
+hTf
+xOm
+lIt
+lIt
+sAm
dTs
dTs
acu
@@ -72472,7 +72923,7 @@ acu
dTs
dTs
dDB
-aiZ
+mZb
aPC
aQi
aQX
@@ -72688,15 +73139,15 @@ cFP
cLL
cMC
cgh
-cUl
-cvJ
-crz
+kPo
+qkz
+hjz
tlh
-dsE
-drT
-cru
-doE
-cxV
+fYz
+niN
+hCY
+lIt
+sAm
dTs
dTs
acu
@@ -72705,9 +73156,9 @@ acu
acu
dTs
dTs
-ais
-aiZ
-aiZ
+pRD
+mZb
+mZb
aQj
aQY
aQZ
@@ -72922,14 +73373,14 @@ cDX
cDX
cES
cRB
-cUl
-crx
-crx
+kPo
+dws
+dws
tlh
-duc
-drN
-csE
-cxU
+qHh
+bFC
+uME
+hjW
dTs
dTs
dTs
@@ -72939,9 +73390,9 @@ acu
acu
tZQ
aad
-aiY
-aiZ
-aiZ
+moq
+mZb
+mZb
aQj
aQZ
aQZ
@@ -73132,38 +73583,38 @@ cEa
crw
crw
poM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-cRM
-daD
-crx
-crx
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+djl
+sAZ
+dws
+dws
tlh
-csE
-cAd
-doE
-cxV
+uME
+hVV
+lIt
+sAm
dTs
dTs
dTs
@@ -73177,15 +73628,15 @@ aqf
aqf
aqf
aqT
-auy
-auy
-auy
-aPJ
-aql
-ara
-asc
-auy
-arZ
+iKp
+iKp
+iKp
+ekN
+aSY
+aQg
+mjR
+iKp
+xbA
aLa
aWh
aWh
@@ -73366,38 +73817,38 @@ crx
crx
crx
ylS
-crx
-crx
+dws
+dws
ylS
-crx
-crx
+dws
+dws
ylS
-dvo
-dvo
+bhp
+bhp
ylS
-crx
-crx
+dws
+dws
ylS
-dvo
-dvo
+bhp
+bhp
cXA
-crx
-crx
+dws
+dws
ylS
-crx
-crx
+dws
+dws
ylS
-crx
-crx
+dws
+dws
ylS
-crx
-cvJ
-crz
+dws
+qkz
+hjz
tlh
-doE
-cuO
+lIt
+uic
aPK
-cxV
+sAm
dTs
dTs
dTs
@@ -73405,21 +73856,21 @@ acu
"}
(32,1,1) = {"
acu
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aqg
-agV
-aqg
-asa
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQV
+beT
+aQV
+aUi
qoJ
aWh
aWh
@@ -73599,39 +74050,39 @@ crx
crx
crx
crx
-cvG
-crx
-crx
-cvG
-crx
-crx
-cvG
-crx
-dvo
-cKL
-dvo
-dvo
-cKL
-dvo
-crx
-cvG
-crx
-crx
-cvG
-crx
-crx
-cvG
-crx
-crx
-cvG
-crx
-crx
-crx
+vGu
+dws
+dws
+vGu
+dws
+dws
+vGu
+dws
+bhp
+mfH
+bhp
+bhp
+mfH
+bhp
+dws
+vGu
+dws
+dws
+vGu
+dws
+dws
+vGu
+dws
+dws
+vGu
+dws
+dws
+dws
tlh
-csE
-doE
-doE
-cxV
+uME
+lIt
+lIt
+sAm
dTs
dTs
dTs
@@ -73639,21 +74090,21 @@ acu
"}
(33,1,1) = {"
acu
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aqg
-agV
-aqg
-asa
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQV
+beT
+aQV
+aUi
abQ
aWh
aWh
@@ -73833,38 +74284,38 @@ cuJ
cuJ
cuJ
cuJ
-cuJ
+jqU
cnA
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cUk
-crx
-dvo
+djk
+djk
+djk
+djk
+djk
+djk
+eRX
+dws
+bhp
cQc
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
-cMJ
+djk
+djk
+djk
+djk
+djk
+djk
+djk
+djk
+djk
+djk
eCk
-cuJ
-cuJ
-cuJ
-cuJ
-cuJ
+jqU
+jqU
+jqU
+jqU
+jqU
sNX
-doE
-doE
-doE
+lIt
+lIt
+lIt
dTs
dTs
dTs
@@ -73873,21 +74324,21 @@ acu
"}
(34,1,1) = {"
acu
-aKW
-aKW
-aKW
-aKW
-aKW
-aKW
-aKW
-aKW
-aSc
-aIJ
-aql
-ara
-agV
-aqg
-asa
+eZC
+eZC
+eZC
+eZC
+eZC
+eZC
+eZC
+eZC
+ucS
+uHx
+aSY
+aQg
+beT
+aQV
+aUi
cEc
aWh
aWh
@@ -74086,18 +74537,18 @@ cNo
bvA
daw
deU
-cQm
-cQm
+uSv
+uSv
aMT
aNx
-cKp
-doE
-doE
-doE
-doE
-doE
-doE
-doE
+uWt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
+lIt
dTs
dTs
dTs
@@ -74110,18 +74561,18 @@ acu
tZQ
tZQ
dTs
-ars
-aja
-aiZ
-aiZ
-aFu
+cSn
+ign
+mZb
+mZb
+wDC
aSd
-apz
-aqg
-aqg
-aqg
-aqg
-asa
+aSx
+aQV
+aQV
+aQV
+aQV
+aUi
aLa
aWh
aWh
@@ -74318,20 +74769,20 @@ cVH
cVH
cXD
bvA
-daU
+cDY
deV
-cQm
-cQm
+uSv
+uSv
aMU
aNz
-cKr
-doE
-doE
-doE
-doE
-doE
+saQ
+lIt
+lIt
+lIt
+lIt
+lIt
dTs
-doE
+lIt
dTs
dTs
dTs
@@ -74345,17 +74796,17 @@ dTs
dTs
dTs
dTs
-ait
-aja
-aiZ
-aiZ
-aIa
-apz
-aqg
-aqg
-agV
-aqg
-asa
+txr
+ign
+mZb
+mZb
+aPB
+aSx
+aQV
+aQV
+beT
+aQV
+aUi
qoJ
aWh
aWh
@@ -74552,17 +75003,17 @@ cVH
cVH
cXN
bvA
-daU
+cDY
aMJ
-cQm
-cQm
+uSv
+uSv
aNe
aNz
-cKr
-doE
-doE
-doE
-doE
+saQ
+lIt
+lIt
+lIt
+lIt
dTs
dTs
dTs
@@ -74580,16 +75031,16 @@ dTs
dTs
dTs
dTs
-ais
-aiZ
-aiZ
-aIa
-apz
-aql
-ara
-agV
-aqg
-asa
+pRD
+mZb
+mZb
+aPB
+aSx
+aSY
+aQg
+beT
+aQV
+aUi
abQ
aWh
aWh
@@ -74788,14 +75239,14 @@ aMw
aMI
dbc
aMJ
-cQm
-cQm
+uSv
+uSv
aNm
aNA
-cKr
-doE
-doE
-doE
+saQ
+lIt
+lIt
+lIt
dTs
dTs
dTs
@@ -74814,16 +75265,16 @@ dTs
dTs
dTs
dTs
-ait
-aja
-aiZ
-aIa
-apz
-aqg
-aqg
-agV
-aqg
-asa
+txr
+ign
+mZb
+aPB
+aSx
+aQV
+aQV
+beT
+aQV
+aUi
cEc
aWh
aWh
@@ -75027,8 +75478,8 @@ bvA
ddJ
bvA
bvA
-doE
-doE
+lIt
+lIt
dTs
dTs
dTs
@@ -75049,14 +75500,14 @@ dTs
dTs
dTs
dTs
-ais
+pRD
abb
-aIa
-apz
-aqg
-aqg
-asd
-auz
+aPB
+aSx
+aQV
+aQV
+wuV
+eRL
aaA
aLa
aWh
@@ -75283,13 +75734,13 @@ dTs
dTs
dTs
dTs
-ait
-aja
-aIa
-apz
-aql
-ara
-asa
+txr
+ign
+aPB
+aSx
+aSY
+aQg
+aUi
aUD
aVg
acJ
@@ -75516,14 +75967,14 @@ dTs
dTs
dTs
dTs
-ahu
-ahu
-ais
-aIa
-apz
-aqg
-aqg
-asa
+ogc
+ogc
+pRD
+aPB
+aSx
+aQV
+aQV
+aUi
aUD
aVh
aQY
@@ -75749,15 +76200,15 @@ dTs
dTs
dTs
dTs
-ahu
-ahu
-air
-aiY
-aIa
-apz
-aqg
-aqg
-asa
+ogc
+ogc
+wEy
+moq
+aPB
+aSx
+aQV
+aQV
+aUi
aUE
aVj
aQX
@@ -75987,38 +76438,38 @@ aOc
aOc
aOc
aOc
-aoD
-apz
-aql
-ara
-asc
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
-auy
+pzk
+aSx
+aSY
+aQg
+mjR
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
+iKp
aQg
aQV
aQV
@@ -76221,38 +76672,38 @@ aPD
byX
iqK
aOc
-aoE
-apz
-aqg
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
-aDb
-aqg
-aqg
+aSa
+aSx
+aQV
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
+aQW
+aQV
+aQV
aQg
aQV
aSY
@@ -76455,38 +76906,38 @@ aPD
aPD
iqK
aau
-aoE
-apz
-aqg
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
-aDc
-aqg
-aqg
+aSa
+aSx
+aQV
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
+aQU
+aQV
+aQV
aQg
aQV
aSY
@@ -76689,38 +77140,38 @@ aPE
pDd
aPE
aau
-aoE
-aIK
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-auz
-aIJ
-aqg
-aqg
-asd
-auz
-auz
-auz
-auz
+aSa
+eZN
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+eRL
+uHx
+aQV
+aQV
+wuV
+eRL
+eRL
+eRL
+eRL
aQg
aQV
aQV
@@ -76923,38 +77374,38 @@ rFz
aPF
aRc
aOc
-akz
-aNp
-aNp
-aNp
-aNp
-alo
-alo
-alo
-alo
-alo
-alo
-alo
-alo
-alo
-aNp
-aNp
-alo
-alo
-aNp
-aNp
-aNp
-aNp
-aNp
-apO
-apA
+aUE
+aQX
+aQX
+aQX
+aQX
+aVg
+aVg
+aVg
+aVg
+aVg
+aVg
+aVg
+aVg
+aVg
+aQX
+aQX
+aVg
+aVg
+aQX
+aQX
+aQX
+aQX
+aQX
+aRZ
+gBQ
dez
-aNL
+pHs
baW
-aky
-aNp
-aNp
-apO
+aUC
+aQX
+aQX
+aRZ
bfn
aQW
aQW
@@ -77170,24 +77621,24 @@ aVk
adq
aeg
aVk
-aVH
-aoe
+bhh
+sUF
afy
-apa
-aoG
+aUD
+aVh
anh
-aoe
-aoe
-aoe
-aoe
-bco
+sUF
+sUF
+sUF
+sUF
+sQE
bcC
-aNL
-aNL
+pHs
+pHs
baW
-aoE
+aSa
anh
-aoe
+sUF
aUH
bfo
bfo
@@ -77396,41 +77847,41 @@ rFz
rFz
bzU
aOc
-bej
-bfp
-bej
-aiZ
-acW
-aiZ
-aiZ
-aiZ
+iZY
+saS
+iZY
+mZb
+sCW
+mZb
+mZb
+mZb
aeY
-aiZ
-ajS
-bvh
-avC
-aDe
-beD
-aiZ
-aiZ
-aiZ
-aIa
-apz
-aql
-ara
-asa
-aoE
-aDe
-aiZ
-aqy
-aja
-aiZ
-aqy
-ars
-aja
-aiZ
-aiZ
-aqy
+mZb
+aQj
+qDl
+aVG
+wpr
+qlr
+mZb
+mZb
+mZb
+aPB
+aSx
+aSY
+aQg
+aUi
+aSa
+wpr
+mZb
+nnv
+ign
+mZb
+nnv
+cSn
+ign
+mZb
+mZb
+nnv
dTs
dTs
dTs
@@ -77630,8 +78081,8 @@ rFz
rFz
aRc
aau
-aja
-bej
+ign
+iZY
aVI
aVI
aVI
@@ -77655,15 +78106,15 @@ aqg
asa
bdV
bep
-aqy
-axY
-ait
-ars
+nnv
+fqj
+txr
+cSn
dTs
dTs
-ait
-ars
-ars
+txr
+cSn
+cSn
dTs
dTs
dTs
@@ -77864,8 +78315,8 @@ aPF
aPF
aRc
aau
-ait
-aja
+txr
+ign
aVI
azf
aYu
@@ -77889,14 +78340,14 @@ aqg
asa
bdW
aiZ
-axZ
-ahu
+ndF
+ogc
dTs
dTs
dTs
dTs
dTs
-ahu
+ogc
dTs
dTs
dTs
@@ -78098,8 +78549,8 @@ aRD
aTg
aTh
aOc
-ahu
-ait
+ogc
+txr
aVI
aNs
aWl
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index 7cd4120ce4a4..fc8a5f896be1 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -1942,7 +1942,7 @@
},
/obj/item/stack/snow,
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"aje" = (
/obj/structure/machinery/light/double{
dir = 4;
@@ -2015,7 +2015,7 @@
},
/obj/item/tool/shovel/snow,
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"ajF" = (
/obj/item/tool/shovel/etool,
/turf/open/auto_turf/snow/layer3,
@@ -3767,7 +3767,7 @@
dir = 1
},
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"avz" = (
/obj/structure/surface/rack,
/obj/item/bodybag/tarp/snow{
@@ -6661,10 +6661,6 @@
opacity = 0
},
/area/shiva/interior/aerodrome)
-"bcM" = (
-/obj/structure/flora/bush/ausbushes/lavendergrass,
-/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
"bcV" = (
/obj/structure/platform/strata{
dir = 1
@@ -7244,7 +7240,7 @@
dir = 8
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"bHN" = (
/obj/item/ammo_magazine/rifle/boltaction{
pixel_x = -7;
@@ -9396,7 +9392,7 @@
dir = 1
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"eit" = (
/obj/effect/decal/cleanable/blood/drip,
/turf/open/auto_turf/ice/layer1,
@@ -9955,7 +9951,7 @@
"eSN" = (
/obj/vehicle/train/cargo/engine,
/turf/open/floor/plating/plating_catwalk/shiva,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"eTV" = (
/obj/structure/flora/bush/ausbushes/lavendergrass{
icon_state = "lavendergrass_2"
@@ -12418,7 +12414,7 @@
dir = 8
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"hyu" = (
/turf/open/floor/shiva{
icon_state = "bluefull"
@@ -13037,10 +13033,6 @@
dir = 1
},
/area/shiva/interior/colony/deck)
-"idG" = (
-/obj/structure/flora/tree/dead/tree_4,
-/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
"idR" = (
/obj/structure/platform_decoration/strata{
dir = 1
@@ -13255,10 +13247,6 @@
/obj/effect/decal/cleanable/blood/oil/streak,
/turf/open/auto_turf/snow/layer0,
/area/shiva/interior/warehouse)
-"ipc" = (
-/obj/vehicle/train/cargo/trolley,
-/turf/open/auto_turf/snow/layer0,
-/area/shiva/exterior/lz1_valley)
"ipP" = (
/obj/structure/machinery/colony_floodlight,
/turf/open/auto_turf/snow/layer3,
@@ -13694,7 +13682,7 @@
dir = 8
},
/turf/open/auto_turf/snow/layer4,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"iHN" = (
/obj/effect/landmark/survivor_spawner,
/turf/open/floor/shiva{
@@ -13770,7 +13758,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer1,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"iLf" = (
/obj/item/lightstick/red/spoke/planted{
pixel_x = 12;
@@ -13839,7 +13827,7 @@
pixel_y = 28
},
/turf/open/auto_turf/snow/layer0,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"iPg" = (
/turf/open/floor/shiva{
dir = 8;
@@ -14105,7 +14093,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"jay" = (
/turf/open/floor/shiva{
dir = 1;
@@ -14191,7 +14179,7 @@
dir = 8
},
/turf/open/auto_turf/snow/layer4,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"jhq" = (
/turf/open/floor/shiva{
icon_state = "radiator_tile"
@@ -15125,7 +15113,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"khz" = (
/obj/item/device/flashlight,
/turf/open/floor/shiva,
@@ -18470,7 +18458,7 @@
"nAs" = (
/obj/effect/decal/cleanable/blood/oil,
/turf/open/auto_turf/snow/layer1,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"nAY" = (
/turf/open/floor/shiva{
icon_state = "yellowcorners"
@@ -18543,13 +18531,6 @@
icon_state = "yellowfull"
},
/area/shiva/interior/aux_power)
-"nEH" = (
-/obj/effect/landmark/monkey_spawn,
-/obj/effect/decal/warning_stripes{
- icon_state = "E-corner"
- },
-/turf/open/floor/plating,
-/area/shiva/exterior/lz1_valley)
"nEQ" = (
/obj/structure/inflatable,
/turf/open/auto_turf/snow/layer2,
@@ -20544,7 +20525,7 @@
"pKK" = (
/obj/item/lightstick/red/variant,
/turf/open/auto_turf/snow/layer0,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"pKP" = (
/obj/structure/surface/table,
/obj/item/device/flashlight/lamp/green{
@@ -21261,7 +21242,7 @@
"que" = (
/obj/item/lightstick/red/variant/planted,
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"qvr" = (
/obj/structure/machinery/alarm{
dir = 8;
@@ -22362,6 +22343,10 @@
/obj/structure/prop/ice_colony/soil_net,
/turf/open/auto_turf/snow/layer2,
/area/shiva/exterior/junkyard)
+"rNY" = (
+/obj/effect/landmark/monkey_spawn,
+/turf/open/auto_turf/snow/layer0,
+/area/shiva/exterior/junkyard)
"rNZ" = (
/obj/structure/prop/ice_colony/dense/planter_box{
dir = 9
@@ -22668,7 +22653,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"scN" = (
/obj/structure/surface/table,
/obj/item/device/assembly/infra,
@@ -22901,10 +22886,6 @@
},
/turf/open/auto_turf/snow/layer2,
/area/shiva/exterior/junkyard/cp_bar)
-"sqb" = (
-/obj/item/lightstick/red/variant/planted,
-/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
"sqy" = (
/obj/item/wrapping_paper,
/obj/structure/surface/table/reinforced/prison,
@@ -23055,7 +23036,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"sAe" = (
/obj/structure/machinery/light/double{
dir = 4;
@@ -23837,7 +23818,7 @@
/area/shiva/interior/caves/cp_camp)
"tpg" = (
/turf/open/floor/plating/plating_catwalk/shiva,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"tpL" = (
/obj/effect/decal/warning_stripes{
icon_state = "NW-out"
@@ -25752,10 +25733,6 @@
icon_state = "kitchen"
},
/area/shiva/interior/colony/central)
-"vdk" = (
-/obj/vehicle/train/cargo/engine,
-/turf/open/auto_turf/snow/layer0,
-/area/shiva/exterior/lz1_valley)
"vdw" = (
/obj/item/lightstick/red/spoke/planted{
layer = 2.99;
@@ -25983,7 +25960,7 @@
dir = 8
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"voH" = (
/obj/structure/machinery/landinglight/ds2/spoke{
pixel_x = 1;
@@ -26021,7 +25998,7 @@
dir = 9
},
/turf/open/auto_turf/snow/layer2,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"vrm" = (
/obj/structure/bed/chair/office/light{
dir = 4
@@ -27183,7 +27160,7 @@
dir = 4
},
/turf/open/auto_turf/snow/layer1,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"wOq" = (
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/shiva{
@@ -27679,12 +27656,16 @@
icon_state = "multi_tiles"
},
/area/shiva/interior/colony/research_hab)
+"xwk" = (
+/obj/item/lightstick/red/variant,
+/turf/open/auto_turf/snow/layer1,
+/area/shiva/exterior/junkyard)
"xwo" = (
/obj/structure/platform/shiva/catwalk{
dir = 8
},
/turf/open/auto_turf/snow/layer3,
-/area/shiva/exterior/lz1_valley)
+/area/shiva/exterior/junkyard)
"xwL" = (
/obj/structure/filingcabinet,
/obj/effect/landmark/objective_landmark/close,
@@ -34636,7 +34617,7 @@ mcH
mcH
mcH
mcH
-nEH
+mcH
mcH
mcH
mcH
@@ -34952,22 +34933,22 @@ pvv
pvv
fRg
uji
-aDM
-uqb
-uqb
-uqb
-kLM
-kLM
-iQq
-iQq
-iQq
-iQq
-kLM
-kLM
-sqb
-lNg
-aDM
-aDM
+ofw
+kop
+kop
+kop
+tHd
+tHd
+kyD
+kyD
+kyD
+kyD
+tHd
+tHd
+rtZ
+jMf
+ofw
+ofw
huz
huz
huz
@@ -35114,22 +35095,22 @@ pvv
pvv
fRg
hGj
-kLM
-iOu
-uqb
-kJQ
-uqb
-iQq
-iQq
-iQq
-iQq
-kLM
-iQq
-kLM
-uqb
-kLM
+tHd
+xvp
+kop
+xwk
+kop
+kyD
+kyD
+kyD
+kyD
+tHd
+kyD
+tHd
+kop
+tHd
que
-aDM
+ofw
huz
kys
pef
@@ -35276,22 +35257,22 @@ pvv
pvv
fRg
hGj
-kLM
-iQq
-kLM
-uqb
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-iQq
-iQq
-kLM
-kLM
-kLM
+tHd
+kyD
+tHd
+kop
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+kyD
+kyD
+tHd
+tHd
+tHd
huz
krU
axJ
@@ -35438,22 +35419,22 @@ pvv
pvv
gxK
hGj
-iQq
-iQq
-iQq
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-kLM
-iQq
-iQq
-iQq
+kyD
+kyD
+kyD
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+tHd
+kyD
+kyD
+kyD
huz
axJ
axJ
@@ -35600,21 +35581,21 @@ dbH
fhv
fRg
hGj
-kLM
-kLM
-iQq
-iQq
-kLM
-vdk
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
+tHd
+tHd
+kyD
+kyD
+tHd
+fHx
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
tpg
exX
qIr
@@ -35762,21 +35743,21 @@ aUA
gIQ
fRg
hGj
-uqb
-uqb
-uqb
-kLM
-iQq
-ipc
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
+kop
+kop
+kop
+tHd
+kyD
+dyt
+kyD
+kyD
+kyD
+rNY
+kyD
+kyD
+kyD
+kyD
+kyD
eSN
akF
alS
@@ -35924,21 +35905,21 @@ deV
eVG
fRg
hGj
-uqb
-kLM
-kLM
-iQq
-iQq
-ipc
-iQq
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
+kop
+tHd
+tHd
+kyD
+kyD
+dyt
+kyD
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
tpg
exX
qIr
@@ -36086,21 +36067,21 @@ dKR
pvv
fRg
hGj
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-kLM
-uqb
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+tHd
+kop
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
tpg
exX
qIr
@@ -36248,22 +36229,22 @@ pvv
pvv
fRg
hGj
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-aDM
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+ofw
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
huz
aut
rdS
@@ -36410,22 +36391,22 @@ pvv
pvv
fRg
hGj
-iQq
-iOu
-kLM
-iOu
-kLM
-kLM
-iQq
-kLM
-iQq
-iQq
-iQq
-iQq
+kyD
+xvp
+tHd
+xvp
+tHd
+tHd
+kyD
+tHd
+kyD
+kyD
+kyD
+kyD
pKK
-iQq
-iOu
-kLM
+kyD
+xvp
+tHd
huz
rdS
axJ
@@ -36577,12 +36558,12 @@ khx
jac
khx
iHu
-idG
-kLM
-iQq
-iQq
-kLM
-kLM
+jXD
+tHd
+kyD
+kyD
+tHd
+tHd
huz
huz
huz
@@ -36739,12 +36720,12 @@ iMA
iMA
uKZ
ehV
-aDM
-kTP
-iQq
-iQq
-kLM
-uqb
+ofw
+aQJ
+kyD
+kyD
+tHd
+kop
huz
cio
ieD
@@ -36902,10 +36883,10 @@ cLq
iMA
avx
voo
-kLM
-iQq
-iQq
-kLM
+tHd
+kyD
+kyD
+tHd
tpg
exX
qIr
@@ -37063,11 +37044,11 @@ fRg
xQa
iMA
avx
-uqb
-kLM
-iQq
-iQq
-kLM
+kop
+tHd
+kyD
+kyD
+tHd
tpg
exX
alW
@@ -37225,12 +37206,12 @@ fRg
uKZ
uKZ
vqV
-kLM
-kLM
-iQq
-iQq
-iQq
-kLM
+tHd
+tHd
+kyD
+kyD
+kyD
+tHd
huz
pJM
ayZ
@@ -37387,12 +37368,12 @@ fRg
iMA
nIA
scp
-kLM
-iQq
-iQq
-kLM
-iQq
-iQq
+tHd
+kyD
+kyD
+tHd
+kyD
+kyD
huz
aQq
axJ
@@ -37548,13 +37529,13 @@ pvv
oCG
kjM
oCG
-iQq
-iQq
-iQq
-kLM
-aDM
-kLM
-iQq
+kyD
+kyD
+kyD
+tHd
+ofw
+tHd
+kyD
huz
huz
avz
@@ -37710,14 +37691,14 @@ pvv
oCG
wRm
oCG
-iQq
-iQq
-iQq
+kyD
+kyD
+kyD
szU
-kLM
-iQq
-iQq
-uqb
+tHd
+kyD
+kyD
+kop
ncS
pTp
pTp
@@ -37873,13 +37854,13 @@ fRg
iMA
tLC
hye
-kLM
-iQq
-kLM
-iQq
-iQq
-kLM
-uqb
+tHd
+kyD
+tHd
+kyD
+kyD
+tHd
+kop
ncS
mRc
rdS
@@ -38035,13 +38016,13 @@ iMA
uKZ
uKZ
ehV
-kLM
-iQq
-iQq
-iQq
-kLM
-kLM
-uqb
+tHd
+kyD
+kyD
+kyD
+tHd
+tHd
+kop
ncS
bWB
auh
@@ -38197,12 +38178,12 @@ obb
vHX
iMA
ehV
-kLM
-iQq
-iQq
-kLM
-uqb
-uqb
+tHd
+kyD
+kyD
+tHd
+kop
+kop
huz
huz
auh
@@ -38359,11 +38340,11 @@ krm
iXx
iMA
ehV
-uqb
-kLM
-iQq
+kop
+tHd
+kyD
nAs
-uqb
+kop
ajE
huz
qSW
@@ -38521,11 +38502,11 @@ iMA
iMA
uKZ
ehV
-uqb
-kLM
-iQq
-iQq
-kLM
+kop
+tHd
+kyD
+kyD
+tHd
ajd
huz
fjS
@@ -38683,11 +38664,11 @@ jhm
bHC
bHC
iKW
-kLM
-iQq
-iQq
-iQq
-iQq
+tHd
+kyD
+kyD
+kyD
+kyD
qIr
oWk
qIr
@@ -38840,16 +38821,16 @@ pvv
pvv
fRg
hvZ
-kLM
-iOu
-kLM
-iOu
-kLM
-iQq
-kLM
-iQq
-iQq
-iQq
+tHd
+xvp
+tHd
+xvp
+tHd
+kyD
+tHd
+kyD
+kyD
+kyD
qIr
oWk
qIr
@@ -39002,16 +38983,16 @@ aSA
pvv
fRg
hvZ
-kLM
-iQq
-iQq
-iQq
-iQq
-kLM
-iQq
-iQq
-iQq
-iQq
+tHd
+kyD
+kyD
+kyD
+kyD
+tHd
+kyD
+kyD
+kyD
+kyD
qIr
akF
alS
@@ -39164,16 +39145,16 @@ wTz
pvv
fRg
hvZ
-iQq
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-iQq
-iQq
+kyD
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+kyD
+kyD
qIr
exX
qIr
@@ -39326,16 +39307,16 @@ dbH
wvx
fRg
hvZ
-kLM
-iQq
-kLM
-iQq
-iQq
-iQq
-kLM
-snN
-kTP
-iQq
+tHd
+kyD
+tHd
+kyD
+kyD
+kyD
+tHd
+rli
+aQJ
+kyD
huz
huz
kLi
@@ -39488,16 +39469,16 @@ dCS
eoH
fRg
hvZ
-iQq
-iQq
-kLM
-iQq
-iQq
-kLM
-bcM
-aDM
-lNg
-kLM
+kyD
+kyD
+tHd
+kyD
+kyD
+tHd
+qLS
+ofw
+jMf
+tHd
huz
huz
dLi
@@ -39650,16 +39631,16 @@ deV
uyI
fRg
hvZ
-iQq
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-aDM
-uqb
-iQq
+kyD
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+ofw
+kop
+kyD
huz
huz
huz
@@ -39812,17 +39793,17 @@ pti
pvv
fRg
hvZ
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-lNg
-kLM
-iQq
-iQq
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+jMf
+tHd
+kyD
+kyD
huz
huz
huz
@@ -39974,18 +39955,18 @@ pvv
pvv
fRg
hvZ
-kLM
-kLM
-iQq
-iQq
-iQq
-iQq
-iQq
-kLM
-kLM
-iQq
-iQq
-iQq
+tHd
+tHd
+kyD
+kyD
+kyD
+kyD
+kyD
+tHd
+tHd
+kyD
+kyD
+kyD
lXQ
cwZ
kAw
@@ -40136,18 +40117,18 @@ pvv
pvv
fRg
hvZ
-kLM
-iOu
-kLM
-iOu
-kLM
-kLM
-iQq
-kLM
-iQq
-iQq
-kLM
-iQq
+tHd
+xvp
+tHd
+xvp
+tHd
+tHd
+kyD
+tHd
+kyD
+kyD
+tHd
+kyD
jWh
cwZ
kAw
@@ -40299,17 +40280,17 @@ pvv
fWq
uji
iOA
-aDM
-lNg
-kLM
-uqb
-uqb
-iQq
-iQq
-kLM
-kLM
-kLM
-kLM
+ofw
+jMf
+tHd
+kop
+kop
+kyD
+kyD
+tHd
+tHd
+tHd
+tHd
fpF
wSv
kAw
diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm
index b1beb0dfc2b1..f61ed5ee3597 100644
--- a/maps/map_files/Kutjevo/Kutjevo.dmm
+++ b/maps/map_files/Kutjevo/Kutjevo.dmm
@@ -244,7 +244,7 @@
"arh" = (
/obj/item/prop/alien/hugger,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"arr" = (
/obj/structure/blocker/invisible_wall,
/obj/structure/platform/kutjevo{
@@ -541,7 +541,7 @@
"aIy" = (
/obj/structure/largecrate/black_market/confiscated_equipment,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"aIF" = (
/obj/structure/prop/dam/boulder/boulder1,
/turf/open/auto_turf/sand/layer1,
@@ -767,7 +767,7 @@
/turf/open/floor/kutjevo/tan/alt_edge{
dir = 1
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"bde" = (
/obj/structure/flora/grass/tallgrass/desert/corner{
dir = 10
@@ -1139,10 +1139,13 @@
pixel_y = 4
},
/turf/open/floor/almayer/research/containment/floor1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"bEp" = (
/turf/closed/wall/kutjevo/rock,
/area/kutjevo/exterior/scrubland)
+"bEt" = (
+/turf/open/floor/kutjevo/multi_tiles,
+/area/kutjevo/exterior/lz_pad)
"bEH" = (
/turf/open/auto_turf/sand/layer2,
/area/kutjevo/interior/colony_north)
@@ -1180,7 +1183,7 @@
"bGi" = (
/obj/item/stack/sheet/wood,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"bGv" = (
/obj/item/reagent_container/food/drinks/cans/waterbottle,
/turf/open/auto_turf/sand/layer0,
@@ -1423,7 +1426,7 @@
icon_state = "tree_3"
},
/turf/open/auto_turf/sand/layer0,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"bXc" = (
/obj/structure/surface/rack,
/obj/effect/landmark/objective_landmark/close,
@@ -1481,7 +1484,7 @@
dir = 4
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"ccu" = (
/turf/open/floor/kutjevo/tan/grey_inner_edge{
dir = 8
@@ -1595,6 +1598,10 @@
},
/turf/open/floor/kutjevo/colors/cyan/tile,
/area/kutjevo/interior/complex/med/operating)
+"cou" = (
+/obj/effect/decal/cleanable/blood/xeno,
+/turf/open/floor/kutjevo/multi_tiles,
+/area/kutjevo/exterior/lz_pad)
"coF" = (
/obj/structure/machinery/power/apc{
dir = 1;
@@ -1645,6 +1652,12 @@
dir = 6
},
/area/kutjevo/interior/complex/botany)
+"cpD" = (
+/obj/structure/flora/bush/desert{
+ icon_state = "tree_3"
+ },
+/turf/open/auto_turf/sand/layer1,
+/area/kutjevo/exterior/lz_pad)
"cqc" = (
/obj/structure/surface/table/almayer,
/obj/item/ammo_magazine/shotgun/buckshot{
@@ -1692,7 +1705,7 @@
"ctA" = (
/obj/structure/largecrate,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"ctD" = (
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_30"
@@ -1982,6 +1995,10 @@
},
/turf/open/auto_turf/sand/layer0,
/area/kutjevo/exterior/lz_dunes)
+"cLr" = (
+/obj/item/stack/sheet/metal,
+/turf/open/auto_turf/sand/layer1,
+/area/kutjevo/exterior/lz_pad)
"cLQ" = (
/turf/open/mars_cave{
icon_state = "mars_cave_7"
@@ -2243,7 +2260,7 @@
"cYb" = (
/obj/structure/largecrate/supply/floodlights,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"cZt" = (
/obj/effect/decal/cleanable/blood,
/obj/structure/machinery/door_control/brbutton{
@@ -2397,7 +2414,7 @@
dir = 4
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dib" = (
/turf/open/gm/river/desert/shallow_edge,
/area/kutjevo/exterior/runoff_river)
@@ -2437,6 +2454,9 @@
dir = 10
},
/area/kutjevo/interior/colony_South/power2)
+"dmy" = (
+/turf/open/asphalt/cement_sunbleached,
+/area/kutjevo/exterior/lz_pad)
"dnd" = (
/turf/open/gm/river/desert/shallow_edge{
dir = 8
@@ -2484,11 +2504,11 @@
dir = 1
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dpH" = (
/obj/structure/largecrate/random/case/double,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dql" = (
/obj/structure/prop/dam/wide_boulder/boulder1,
/turf/open/auto_turf/sand/layer1,
@@ -2649,7 +2669,7 @@
/turf/open/desert/desert_shore/shore_edge1{
dir = 8
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dzd" = (
/obj/item/storage/briefcase,
/turf/open/auto_turf/sand/layer0,
@@ -2694,6 +2714,9 @@
dir = 8
},
/area/kutjevo/exterior/runoff_river)
+"dBj" = (
+/turf/open/floor/kutjevo/plate,
+/area/kutjevo/exterior/lz_pad)
"dBt" = (
/obj/structure/flora/bush/ausbushes/grassybush{
pixel_x = -8;
@@ -2746,7 +2769,7 @@
/area/kutjevo/exterior/Northwest_Colony)
"dDL" = (
/turf/open/gm/river/desert/shallow,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dEI" = (
/obj/effect/decal/cleanable/blood/oil,
/obj/structure/machinery/landinglight/ds1/delayone,
@@ -2914,7 +2937,7 @@
pixel_y = 14
},
/turf/open/desert/desert_shore/desert_shore1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"dQq" = (
/obj/structure/flora/grass/tallgrass/desert/corner{
dir = 5
@@ -3255,7 +3278,7 @@
dir = 8
},
/turf/open/auto_turf/sand/layer0,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"ejP" = (
/obj/structure/bed/sofa/south/grey/left,
/turf/open/floor/kutjevo/multi_tiles,
@@ -3398,7 +3421,7 @@
/obj/structure/surface/rack,
/obj/item/tool/crowbar/red,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"era" = (
/obj/structure/closet/crate/freezer/rations,
/obj/item/defenses/handheld/tesla_coil,
@@ -3650,7 +3673,7 @@
/turf/open/desert/desert_shore/desert_shore1{
dir = 1
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"eFX" = (
/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door,
/obj/effect/landmark/structure_spawner/setup/distress/xeno_door,
@@ -3673,7 +3696,7 @@
"eGL" = (
/obj/effect/landmark/objective_landmark/close,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"eHX" = (
/turf/open/auto_turf/sand/layer0,
/area/kutjevo/exterior/telecomm/lz1_south)
@@ -3910,7 +3933,7 @@
/obj/structure/closet/crate,
/obj/effect/landmark/objective_landmark/medium,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"eVv" = (
/obj/structure/machinery/light{
dir = 1
@@ -4188,7 +4211,7 @@
/area/kutjevo/exterior/stonyfields)
"fmN" = (
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"fmR" = (
/obj/structure/surface/table/almayer,
/obj/item/reagent_container/food/drinks/bottle/vodka,
@@ -4617,7 +4640,7 @@
/obj/structure/surface/table/gamblingtable,
/obj/item/toy/handcard/aceofspades,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"fTk" = (
/turf/open/floor/kutjevo/multi_tiles{
dir = 4
@@ -4687,7 +4710,7 @@
dir = 4
},
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"fYI" = (
/turf/open/gm/river/desert/shallow_corner{
dir = 4
@@ -4839,7 +4862,7 @@
"gmA" = (
/obj/item/stack/sheet/wood,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"gmS" = (
/obj/structure/machinery/shower{
dir = 1;
@@ -5344,7 +5367,7 @@
"gTO" = (
/obj/structure/surface/rack,
/turf/open/floor/kutjevo/plate,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"gUa" = (
/obj/structure/platform/kutjevo/smooth{
dir = 1
@@ -5555,7 +5578,7 @@
dir = 4
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"hnE" = (
/obj/structure/platform/kutjevo/rock{
dir = 4
@@ -6167,7 +6190,7 @@
"iiy" = (
/obj/item/weapon/twohanded/folded_metal_chair,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"iiG" = (
/turf/open/gm/river/desert/deep,
/area/kutjevo/interior/complex/botany/east_tech)
@@ -6318,6 +6341,10 @@
dir = 4
},
/area/kutjevo/interior/complex/med/triage)
+"izY" = (
+/obj/effect/decal/cleanable/blood/xeno,
+/turf/open/auto_turf/sand/layer1,
+/area/kutjevo/exterior/lz_pad)
"iBa" = (
/turf/open/floor/kutjevo/colors/orange/inner_corner{
dir = 1
@@ -6377,7 +6404,7 @@
/obj/structure/flora/grass/desert/lightgrass_9,
/obj/effect/decal/cleanable/blood/oil,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"iDz" = (
/obj/structure/flora/grass/tallgrass/desert/corner,
/turf/open/auto_turf/sand/layer1,
@@ -6974,7 +7001,7 @@
"juC" = (
/obj/structure/largecrate/random/secure,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"juH" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 6;
@@ -7162,6 +7189,9 @@
dir = 6
},
/area/kutjevo/interior/power)
+"jGF" = (
+/turf/open/floor/almayer/research/containment/floor2,
+/area/kutjevo/exterior/lz_pad)
"jGX" = (
/obj/effect/landmark/survivor_spawner,
/turf/open/floor/kutjevo/colors,
@@ -7302,7 +7332,7 @@
dir = 8
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"jUP" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 1;
@@ -7789,7 +7819,7 @@
/obj/structure/closet/crate,
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"kBz" = (
/obj/effect/landmark/monkey_spawn,
/turf/open/auto_turf/sand/layer1,
@@ -7822,7 +7852,7 @@
anchored = 0
},
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"kDS" = (
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/botany)
@@ -8071,7 +8101,7 @@
"kVA" = (
/obj/structure/largecrate/supply/supplies/metal,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"kVH" = (
/obj/structure/flora/grass/desert/lightgrass_11,
/turf/open/auto_turf/sand/layer1,
@@ -8096,6 +8126,9 @@
dir = 1
},
/area/kutjevo/interior/complex/Northwest_Security_Checkpoint)
+"kWX" = (
+/turf/open/auto_turf/sand/layer2,
+/area/kutjevo/exterior/lz_pad)
"kYb" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/book/manual/atmospipes,
@@ -8435,7 +8468,7 @@
"lxN" = (
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"lyD" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 8;
@@ -8466,6 +8499,9 @@
dir = 4
},
/area/kutjevo/interior/power/comms)
+"lzD" = (
+/turf/open/floor/almayer/research/containment/floor1,
+/area/kutjevo/exterior/lz_pad)
"lAn" = (
/obj/structure/machinery/light{
dir = 4
@@ -8584,6 +8620,9 @@
dir = 1
},
/area/kutjevo/interior/foremans_office)
+"lKk" = (
+/turf/open/auto_turf/sand/layer1,
+/area/kutjevo/exterior/lz_pad)
"lKR" = (
/obj/structure/platform_decoration/kutjevo,
/turf/open/floor/kutjevo/colors/purple/edge{
@@ -8654,7 +8693,7 @@
dir = 1
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"lNt" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/item/stack/sheet/metal/medium_stack,
@@ -8805,7 +8844,7 @@
"mao" = (
/obj/structure/prop/dam/large_boulder/boulder1,
/turf/open/auto_turf/sand/layer0,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"mar" = (
/turf/open/floor/kutjevo/tan/multi_tiles{
dir = 1
@@ -8913,7 +8952,7 @@
"mfk" = (
/obj/structure/largecrate/random/case/double,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"mfD" = (
/obj/structure/prop/dam/truck/mining,
/turf/open/auto_turf/sand/layer1,
@@ -9004,7 +9043,7 @@
/turf/open/desert/desert_shore/shore_edge1{
dir = 1
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"mkJ" = (
/obj/structure/machinery/light,
/turf/open/floor/kutjevo/colors/orange,
@@ -9191,6 +9230,11 @@
/obj/item/storage/pill_bottle/dexalin/skillless,
/turf/open/floor/kutjevo/grey/plate,
/area/kutjevo/interior/complex/med)
+"mAb" = (
+/turf/open/floor/kutjevo/tan/multi_tiles{
+ dir = 1
+ },
+/area/kutjevo/exterior/lz_pad)
"mAD" = (
/obj/structure/barricade/wooden{
dir = 1;
@@ -9433,7 +9477,7 @@
"mIT" = (
/obj/structure/machinery/landinglight/ds2/delayone,
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"mJq" = (
/obj/structure/machinery/computer/cameras/telescreen/entertainment{
icon_state = "ai_bsod";
@@ -9922,6 +9966,12 @@
},
/turf/open/floor/almayer/research/containment/floor2,
/area/kutjevo/interior/complex/botany)
+"nvi" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 9
+ },
+/turf/open/auto_turf/sand/layer0,
+/area/kutjevo/exterior/lz_pad)
"nvG" = (
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/kutjevo/colors/red,
@@ -10695,7 +10745,7 @@
"oun" = (
/obj/structure/barricade/wooden,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"ouR" = (
/obj/structure/blocker/invisible_wall,
/obj/structure/xenoautopsy/tank/larva,
@@ -10888,7 +10938,7 @@
/area/kutjevo/interior/complex/botany/east_tech)
"oJE" = (
/turf/open/floor/kutjevo/tan/alt_edge,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"oJV" = (
/obj/structure/machinery/light{
dir = 1
@@ -10897,7 +10947,7 @@
/area/kutjevo/exterior/scrubland)
"oKx" = (
/turf/closed/wall/kutjevo/rock,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"oKA" = (
/obj/item/storage/toolbox/electrical,
/turf/open/floor/kutjevo/colors/orange,
@@ -10931,6 +10981,10 @@
"oMZ" = (
/turf/closed/wall/kutjevo/colony,
/area/kutjevo/interior/foremans_office)
+"oNE" = (
+/obj/structure/flora/grass/tallgrass/desert,
+/turf/open/auto_turf/sand/layer0,
+/area/kutjevo/exterior/lz_pad)
"oNG" = (
/turf/closed/wall/kutjevo/rock,
/area/kutjevo/exterior/construction)
@@ -11795,7 +11849,7 @@
dir = 8
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"pPJ" = (
/turf/open/gm/river/desert/shallow,
/area/kutjevo/exterior/lz_dunes)
@@ -11827,7 +11881,7 @@
"pRL" = (
/obj/structure/largecrate,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"pRS" = (
/obj/effect/decal/cleanable/blood,
/turf/open/floor/kutjevo/multi_tiles{
@@ -11866,7 +11920,7 @@
pixel_y = 14
},
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"pVd" = (
/obj/structure/platform/kutjevo{
dir = 1
@@ -12035,7 +12089,7 @@
/turf/open/floor/kutjevo/tan/alt_edge{
dir = 1
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"qny" = (
/turf/open/desert/desert_shore/shore_corner2{
dir = 1
@@ -12289,7 +12343,7 @@
/turf/open/floor/kutjevo/tan/alt_edge{
dir = 4
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"qEq" = (
/turf/open/floor/kutjevo/tan/alt_inner_edge{
dir = 4
@@ -12500,7 +12554,7 @@
dir = 1
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"qTN" = (
/obj/structure/platform/kutjevo/smooth{
dir = 1
@@ -12510,7 +12564,7 @@
"qUC" = (
/obj/structure/surface/rack,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"qUZ" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/kutjevo/tan/alt_edge{
@@ -12607,7 +12661,7 @@
"rdx" = (
/obj/structure/largecrate/random/case/double,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"rej" = (
/obj/structure/prop/dam/large_boulder/boulder1,
/turf/open/auto_turf/sand/layer0,
@@ -12617,7 +12671,7 @@
/turf/open/desert/desert_shore/desert_shore1{
dir = 4
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"rfE" = (
/obj/structure/blocker/forcefield/multitile_vehicles,
/turf/closed/wall/kutjevo/colony/reinforced,
@@ -12735,12 +12789,16 @@
dir = 4
},
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"rme" = (
/turf/open/floor/kutjevo/multi_tiles{
dir = 4
},
/area/kutjevo/interior/complex/botany)
+"rmg" = (
+/obj/structure/flora/grass/tallgrass/desert,
+/turf/open/auto_turf/sand/layer1,
+/area/kutjevo/exterior/lz_pad)
"rmo" = (
/obj/structure/platform/kutjevo/rock,
/obj/structure/platform/kutjevo/rock{
@@ -12808,6 +12866,10 @@
},
/turf/open/floor/kutjevo/colors/purple,
/area/kutjevo/interior/construction)
+"rst" = (
+/obj/structure/prop/dam/boulder/boulder1,
+/turf/open/auto_turf/sand/layer0,
+/area/kutjevo/exterior/lz_pad)
"rsM" = (
/obj/structure/machinery/power/apc{
dir = 1;
@@ -13167,7 +13229,7 @@
/turf/open/floor/kutjevo/tan/alt_edge{
dir = 8
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"rTi" = (
/obj/structure/platform_decoration/kutjevo/rock{
dir = 1
@@ -13306,7 +13368,7 @@
"saK" = (
/obj/structure/machinery/landinglight/ds2/delaytwo,
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"sbb" = (
/obj/structure/stairs/perspective/kutjevo{
icon_state = "p_stair_ew_full_cap"
@@ -13823,7 +13885,7 @@
/obj/effect/decal/cleanable/blood/oil,
/obj/structure/machinery/landinglight/ds2/delayone,
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"sLx" = (
/obj/structure/largecrate/random/secure,
/turf/open/floor/kutjevo/colors/orange,
@@ -13943,7 +14005,7 @@
"sUt" = (
/obj/structure/machinery/landinglight/ds2/delaythree,
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"sUC" = (
/obj/structure/blocker/invisible_wall,
/obj/structure/filtration/coagulation_arm,
@@ -13985,6 +14047,10 @@
/obj/effect/landmark/queen_spawn,
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/interior/colony_N_East)
+"sWR" = (
+/obj/effect/decal/cleanable/blood/xeno,
+/turf/open/asphalt/cement_sunbleached,
+/area/kutjevo/exterior/lz_pad)
"sXj" = (
/obj/structure/largecrate/random/case/small,
/obj/effect/spawner/random/toolbox{
@@ -14050,6 +14116,12 @@
"tax" = (
/turf/open/gm/river/desert/shallow_edge,
/area/kutjevo/exterior/runoff_dunes)
+"tbk" = (
+/obj/structure/flora/grass/tallgrass/desert/corner{
+ dir = 10
+ },
+/turf/open/auto_turf/sand/layer0,
+/area/kutjevo/exterior/lz_pad)
"tbx" = (
/obj/structure/flora/grass/tallgrass/desert/corner{
dir = 9
@@ -14220,7 +14292,7 @@
/turf/open/desert/desert_shore/shore_edge1{
dir = 4
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"tnM" = (
/obj/structure/machinery/light{
dir = 1
@@ -14510,13 +14582,16 @@
"tGE" = (
/obj/structure/machinery/floodlight/landing,
/turf/open/floor/kutjevo/plate,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
+"tHh" = (
+/turf/open/auto_turf/sand/layer0,
+/area/kutjevo/exterior/lz_pad)
"tHI" = (
/obj/structure/machinery/landinglight/ds2/delaytwo{
dir = 8
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"tIh" = (
/turf/open/gm/river/desert/shallow_edge{
dir = 4
@@ -14547,7 +14622,7 @@
/area/kutjevo/exterior/runoff_dunes)
"tIY" = (
/turf/open/desert/desert_shore/shore_edge1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"tKC" = (
/obj/structure/bed/sofa/vert/white,
/turf/open/floor/kutjevo/tan,
@@ -15474,7 +15549,7 @@
"uTr" = (
/obj/structure/largecrate,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"uWk" = (
/obj/structure/platform/kutjevo/rock{
dir = 1
@@ -15817,7 +15892,7 @@
"vrB" = (
/obj/structure/machinery/floodlight,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"vse" = (
/obj/structure/bed/stool,
/turf/open/auto_turf/sand/layer0,
@@ -16166,7 +16241,7 @@
/area/kutjevo/interior/complex/botany)
"vPm" = (
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"vPE" = (
/obj/effect/decal/cleanable/blood/xeno{
icon_state = "xgib1"
@@ -16295,6 +16370,9 @@
},
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/exterior/scrubland)
+"wax" = (
+/turf/closed/wall/kutjevo/colony,
+/area/kutjevo/exterior/lz_pad)
"waP" = (
/obj/structure/stairs/perspective/kutjevo{
icon_state = "p_stair_ew_full_cap_butt"
@@ -16423,7 +16501,7 @@
"wlg" = (
/obj/structure/surface/rack,
/turf/open/floor/kutjevo/tan,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wlq" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/book/manual/engineering_construction,
@@ -16496,7 +16574,7 @@
dir = 4
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wrO" = (
/turf/open/gm/river/desert/shallow_edge{
dir = 1
@@ -16566,7 +16644,7 @@
"wvg" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/almayer/research/containment/floor1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wvr" = (
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/colony_South)
@@ -16586,7 +16664,7 @@
"wvX" = (
/obj/structure/machinery/landinglight/ds2,
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wwc" = (
/obj/structure/prop/wooden_cross{
desc = "A wooden grave marker. The name 'Richard' is carved into the wood.";
@@ -16598,7 +16676,7 @@
pixel_y = -2
},
/turf/open/auto_turf/sand/layer0,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wwd" = (
/obj/item/stool,
/turf/open/floor/kutjevo/colors/green/tile,
@@ -16731,7 +16809,7 @@
pixel_y = 13
},
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wFa" = (
/obj/structure/filingcabinet,
/obj/effect/landmark/objective_landmark/science,
@@ -16910,7 +16988,7 @@
dir = 1
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"wXy" = (
/obj/effect/landmark/static_comms/net_two,
/turf/open/auto_turf/sand/layer2,
@@ -16985,7 +17063,7 @@
"xcG" = (
/obj/effect/decal/cleanable/blood/oil,
/turf/open/floor/kutjevo/colors/orange,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"xcI" = (
/obj/structure/barricade/wooden{
dir = 4
@@ -17197,7 +17275,7 @@
"xrT" = (
/obj/structure/flora/grass/desert/lightgrass_8,
/turf/open/auto_turf/sand/layer1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"xti" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 4;
@@ -17299,7 +17377,7 @@
dir = 4
},
/turf/open/floor/almayer/research/containment/floor1,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"xBb" = (
/obj/structure/platform/kutjevo{
dir = 4
@@ -17321,7 +17399,7 @@
dir = 8
},
/turf/open/floor/kutjevo/multi_tiles,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"xDY" = (
/obj/item/weapon/gun/rifle/m16,
/turf/open/floor/kutjevo/colors/orange,
@@ -17337,7 +17415,7 @@
/obj/structure/surface/rack,
/obj/item/packageWrap,
/turf/open/floor/almayer/research/containment/floor2,
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"xGF" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 4;
@@ -17652,7 +17730,7 @@
/turf/open/desert/desert_shore/desert_shore1{
dir = 8
},
-/area/kutjevo/exterior/Northwest_Colony)
+/area/kutjevo/exterior/lz_pad)
"yfo" = (
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/colony_central)
@@ -18510,9 +18588,9 @@ dxF
dxF
dxF
nTw
-huR
-huR
-huR
+dmy
+dmy
+dmy
nTw
dxF
sWF
@@ -18677,10 +18755,10 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
-xBm
+dmy
+dmy
+dmy
+jGF
sWF
sWF
nJp
@@ -18844,9 +18922,9 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
+dmy
+dmy
+dmy
oun
wwQ
oca
@@ -19011,9 +19089,9 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
+dmy
+dmy
+dmy
oun
wwQ
oFX
@@ -19178,9 +19256,9 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
+dmy
+dmy
+dmy
oun
wwQ
oFX
@@ -19326,13 +19404,13 @@ dxF
dxF
dxF
dxF
-ybV
-ybV
-ybV
-ybV
-ybV
-ybV
-ybV
+oNE
+oNE
+oNE
+oNE
+oNE
+oNE
+oNE
dxF
dxF
dxF
@@ -19345,10 +19423,10 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
-xBm
+dmy
+dmy
+dmy
+jGF
sWF
bQk
opQ
@@ -19491,17 +19569,17 @@ dxF
dxF
dxF
wwc
-hrz
-arM
-ybV
-mSG
-ybV
-mSG
-mSG
-mSG
-ybV
-ybV
-ybV
+tHh
+tbk
+oNE
+rmg
+oNE
+rmg
+rmg
+rmg
+oNE
+oNE
+oNE
dxF
dxF
dxF
@@ -19512,10 +19590,10 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
-xBm
+dmy
+dmy
+dmy
+jGF
qzj
sOF
swq
@@ -19650,17 +19728,17 @@ dxF
dxF
dxF
dxF
-hrz
+tHh
dxF
dxF
dxF
dxF
-hrz
-hrz
-hrz
-hrz
-hrz
-arM
+tHh
+tHh
+tHh
+tHh
+tHh
+tbk
eiX
eiX
eiX
@@ -19669,7 +19747,7 @@ eiX
eiX
eiX
eiX
-ksW
+nvi
dxF
dxF
dxF
@@ -19679,10 +19757,10 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
-xBm
+dmy
+dmy
+dmy
+jGF
qzj
qfw
rwL
@@ -19817,28 +19895,28 @@ dxF
mjW
yfc
tIY
-hrz
+tHh
dxF
dxF
dxF
-hrz
+tHh
bWA
-hrz
-hrz
-hrz
-sVF
-iin
-iin
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
+tHh
+tHh
+tHh
+lKk
+kWX
+kWX
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
dxF
dxF
dxF
@@ -19846,10 +19924,10 @@ dxF
dxF
dxF
dxF
-huR
-huR
-huR
-xBm
+dmy
+dmy
+dmy
+jGF
wwQ
eur
opQ
@@ -19984,39 +20062,39 @@ dxF
eFy
dDL
dOU
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-sVF
-sVF
-sVF
-sVF
-sVF
-iin
-iin
-hrz
-hrz
-bNG
-hrz
-hrz
-sVF
-sVF
-sVF
-hrz
-hrz
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+lKk
+lKk
+lKk
+lKk
+lKk
+kWX
+kWX
+tHh
+tHh
+rst
+tHh
+tHh
+lKk
+lKk
+lKk
+tHh
+tHh
bWA
-hrz
+tHh
dxF
dxF
dxF
dxF
-iin
-huR
-huR
-xBm
+kWX
+dmy
+dmy
+jGF
sWF
sWF
khW
@@ -20151,40 +20229,40 @@ dxF
tnI
rfz
dyW
-sVF
-sVF
-sVF
-iin
-iin
-sVF
-sVF
-hrz
-hrz
-hrz
-sVF
-iin
-iin
-iin
-hrz
-hrz
-hrz
-hrz
-sVF
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-iin
-iin
-sVF
-sVF
-huR
-huR
-xBm
-aUF
+lKk
+lKk
+lKk
+kWX
+kWX
+lKk
+lKk
+tHh
+tHh
+tHh
+lKk
+kWX
+kWX
+kWX
+tHh
+tHh
+tHh
+tHh
+lKk
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+kWX
+kWX
+lKk
+lKk
+dmy
+dmy
+jGF
+bEt
sWF
sWF
sWF
@@ -20316,50 +20394,50 @@ dxF
dxF
dxF
dxF
-iin
-hrz
-hrz
-hrz
-hrz
-sVF
-hrz
-hrz
-hrz
-iin
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-hrz
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-hrz
-hrz
-hrz
-hrz
-hrz
-sVF
-sVF
-sVF
-huR
-huR
-lRy
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
+kWX
+tHh
+tHh
+tHh
+tHh
+lKk
+tHh
+tHh
+tHh
+kWX
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+tHh
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+tHh
+tHh
+tHh
+tHh
+tHh
+lKk
+lKk
+lKk
+dmy
+dmy
+dBj
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
rzh
dxF
dxF
@@ -20484,49 +20562,49 @@ dxF
dxF
dxF
dxF
-hrz
-hrz
-iin
-sVF
+tHh
+tHh
+kWX
+lKk
qDH
qDH
qDH
-iin
-iin
-iin
-iin
-iin
-sVF
+kWX
+kWX
+kWX
+kWX
+kWX
+lKk
qDH
qDH
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
qDH
qDH
qDH
-sVF
-sVF
-huR
-huR
-sVF
-sVF
-sVF
-iin
-iin
-iin
-sVF
-sVF
-sVF
-sVF
+lKk
+lKk
+dmy
+dmy
+lKk
+lKk
+lKk
+kWX
+kWX
+kWX
+lKk
+lKk
+lKk
+lKk
dxF
dxF
dxF
@@ -20651,49 +20729,49 @@ dxF
dxF
dxF
dxF
-hrz
-iin
-iin
-sVF
-lRy
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-lRy
-huR
-huR
-huR
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
+tHh
+kWX
+kWX
+lKk
+dBj
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+dBj
+dmy
+dmy
+dmy
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
dxF
dxF
dxF
@@ -20818,11 +20896,11 @@ dxF
dxF
dxF
dxF
-hrz
-iin
-sVF
+tHh
+kWX
+lKk
oJE
-xBm
+jGF
tGE
hnq
dhL
@@ -20847,19 +20925,19 @@ ccs
hnq
dhL
tGE
-xBm
-huR
-huR
-huR
-sVF
-sVF
+jGF
+dmy
+dmy
+dmy
+lKk
+lKk
qDH
qDH
qDH
qDH
qDH
-sVF
-sVF
+lKk
+lKk
dxF
dxF
dxF
@@ -20985,11 +21063,11 @@ dxF
dxF
dxF
dxF
-iin
-sVF
-hrz
-sVF
-xBm
+kWX
+lKk
+tHh
+lKk
+jGF
wvX
hzN
wqk
@@ -21014,17 +21092,17 @@ wqk
hzN
hzN
dpt
-xBm
-huR
-huR
-huR
-sVF
+jGF
+dmy
+dmy
+dmy
+lKk
oJE
-lRy
-dht
-dht
-dht
-lRy
+dBj
+lzD
+lzD
+lzD
+dBj
qnd
xrT
dxF
@@ -21151,12 +21229,12 @@ dxF
dxF
dxF
dxF
-iin
-iin
-sVF
-hrz
-sVF
-xBm
+kWX
+kWX
+lKk
+tHh
+lKk
+jGF
sUt
hzN
hzN
@@ -21181,19 +21259,19 @@ hzN
ppX
hzN
lNl
-xBm
-huR
-huR
-huR
-sVF
+jGF
+dmy
+dmy
+dmy
+lKk
oJE
-xBm
+jGF
uTr
mfk
mfk
-xBm
+jGF
qnd
-sVF
+lKk
dxF
dxF
dxF
@@ -21318,12 +21396,12 @@ dxF
dxF
dxF
dxF
-iin
-bGg
-sVF
-hrz
+kWX
+cpD
+lKk
+tHh
oJE
-xBm
+jGF
saK
hzN
hzN
@@ -21348,20 +21426,20 @@ hzN
ppX
hzN
qTI
-xBm
-huR
-huR
-sVF
-sVF
+jGF
+dmy
+dmy
+lKk
+lKk
oJE
-xBm
+jGF
rlI
pRL
vrB
-xBm
+jGF
qnd
-sVF
-pkP
+lKk
+wax
pkP
pkP
hrz
@@ -21485,12 +21563,12 @@ dxF
dxF
dxF
dxF
-iin
-sVF
-sVF
-sVF
+kWX
+lKk
+lKk
+lKk
oJE
-xBm
+jGF
sLf
hzN
ppX
@@ -21515,20 +21593,20 @@ ppX
ppX
hzN
wXf
-xBm
-huR
-huR
-sVF
-iin
+jGF
+dmy
+dmy
+lKk
+kWX
oJE
-xBm
+jGF
fmN
fmN
fmN
-xBm
+jGF
qnd
-sVF
-mar
+lKk
+mAb
ggC
mar
hrz
@@ -21652,12 +21730,12 @@ dxF
dxF
dxF
dxF
-iin
-sVF
-sVF
-sVF
+kWX
+lKk
+lKk
+lKk
oJE
-xBm
+jGF
wvX
hzN
ppX
@@ -21682,20 +21760,20 @@ hzN
eBI
hzN
dpt
-xBm
-huR
-huR
-sVF
-iin
+jGF
+dmy
+dmy
+lKk
+kWX
oJE
-xBm
+jGF
wlg
vPm
vPm
-xBm
+jGF
qnd
-sVF
-mar
+lKk
+mAb
ggC
mar
hrz
@@ -21819,12 +21897,12 @@ dxF
dxF
dxF
dxF
-iin
-iin
-sVF
-hrz
+kWX
+kWX
+lKk
+tHh
oJE
-xBm
+jGF
sUt
hzN
ppX
@@ -21849,20 +21927,20 @@ hzN
hzN
hzN
lNl
-xBm
-huR
-huR
-sVF
-sVF
+jGF
+dmy
+dmy
+lKk
+lKk
oJE
-xBm
+jGF
qUC
kVA
fmN
-xBm
+jGF
qnd
-sVF
-mar
+lKk
+mAb
ggC
mar
sVF
@@ -21986,12 +22064,12 @@ dxF
dxF
dxF
dxF
-hrz
-iin
-hrz
-iin
-iin
-xBm
+tHh
+kWX
+tHh
+kWX
+kWX
+jGF
saK
hzN
ppX
@@ -22016,20 +22094,20 @@ hzN
hzN
hzN
qTI
-xBm
-huR
-huR
-sVF
-sVF
+jGF
+dmy
+dmy
+lKk
+lKk
oJE
-lRy
-dht
-dht
-dht
-lRy
+dBj
+lzD
+lzD
+lzD
+dBj
qnd
-sVF
-mar
+lKk
+mAb
pkP
mar
iin
@@ -22153,12 +22231,12 @@ dxF
dxF
dxF
dxF
-hrz
-hrz
-hrz
-hrz
+tHh
+tHh
+tHh
+tHh
oJE
-xBm
+jGF
mIT
hzN
ppX
@@ -22183,20 +22261,20 @@ ppX
ppX
hzN
wXf
-xBm
-huR
-huR
-huR
-sVF
-sVF
+jGF
+dmy
+dmy
+dmy
+lKk
+lKk
rSU
rSU
rSU
rSU
rSU
-sVF
-sVF
-mar
+lKk
+lKk
+mAb
ggC
mar
hrz
@@ -22320,12 +22398,12 @@ dxF
dxF
dxF
dxF
-hrz
+tHh
mao
-hrz
-iin
+tHh
+kWX
oJE
-xBm
+jGF
wvX
hzN
hzN
@@ -22350,20 +22428,20 @@ hzN
ppX
eBI
dpt
-xBm
-huR
-huR
-huR
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-bGg
-mar
+jGF
+dmy
+dmy
+dmy
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+cpD
+mAb
ggC
mar
hrz
@@ -22487,12 +22565,12 @@ dxF
dxF
dxF
dxF
-hrz
-hrz
-hrz
-hrz
-iin
-xBm
+tHh
+tHh
+tHh
+tHh
+kWX
+jGF
sUt
hzN
hzN
@@ -22517,20 +22595,20 @@ hzN
ppX
eBI
lNl
-xBm
-huR
-huR
-huR
-sVF
-hrz
-sVF
-sVF
-sVF
-sVF
-tjJ
-sVF
-sVF
-mar
+jGF
+dmy
+dmy
+dmy
+lKk
+tHh
+lKk
+lKk
+lKk
+lKk
+izY
+lKk
+lKk
+mAb
ggC
mar
hrz
@@ -22654,12 +22732,12 @@ dxF
dxF
dxF
dxF
-hrz
-hrz
-hrz
-hrz
+tHh
+tHh
+tHh
+tHh
oJE
-xBm
+jGF
saK
hzN
wqk
@@ -22684,18 +22762,18 @@ wqk
hzN
hzN
qTI
-xBm
-huR
-huR
-huR
-lRy
-dht
-dht
-dht
-dht
-dht
-dht
-dht
+jGF
+dmy
+dmy
+dmy
+dBj
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
hoK
hoK
hoK
@@ -22821,12 +22899,12 @@ dxF
dxF
dxF
dxF
-hrz
-hrz
-hrz
-sVF
+tHh
+tHh
+tHh
+lKk
oJE
-xBm
+jGF
tGE
pPz
jUK
@@ -22851,17 +22929,17 @@ tHI
pPz
jUK
tGE
-xBm
-huR
-huR
-huR
-xBm
-aUF
-aUF
-aUF
-aUF
-aUF
-aUF
+jGF
+dmy
+dmy
+dmy
+jGF
+bEt
+bEt
+bEt
+bEt
+bEt
+bEt
hoK
hoK
hbL
@@ -22986,44 +23064,44 @@ dxF
dxF
dxF
dxF
-dxF
-dxF
-hrz
-hrz
-sVF
-sVF
+dxF
+dxF
+tHh
+tHh
+lKk
+lKk
oJE
-lRy
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-dht
-lRy
-huR
-huR
-huR
+dBj
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+lzD
+dBj
+dmy
+dmy
+dmy
lxN
-aUF
+bEt
hoK
hoK
dkW
@@ -23155,42 +23233,42 @@ dxF
dxF
dxF
dxF
-hrz
-iin
-sVF
-sVF
-bGg
+tHh
+kWX
+lKk
+lKk
+cpD
rSU
rSU
rSU
-sVF
+lKk
rSU
rSU
-sVF
+lKk
rSU
rSU
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
rSU
-sVF
-huR
-huR
-huR
-xBm
-aUF
+lKk
+dmy
+dmy
+dmy
+jGF
+bEt
hoK
lOr
iNY
@@ -23321,43 +23399,43 @@ dxF
dxF
dxF
dxF
-iin
-iin
-iin
-iin
-sVF
-hrz
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-sVF
-hrz
-sVF
-sVF
-hrz
-hrz
-hrz
-hrz
-iin
-iin
+kWX
+kWX
+kWX
+kWX
+lKk
+tHh
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+lKk
+tHh
+lKk
+lKk
+tHh
+tHh
+tHh
+tHh
+kWX
+kWX
oKx
oKx
-sVF
+lKk
qDH
qDH
qDH
qDH
qDH
-sVF
-huR
-huR
-huR
-xBm
-aUF
+lKk
+dmy
+dmy
+dmy
+jGF
+bEt
uAJ
iZi
nZK
@@ -23489,42 +23567,42 @@ dxF
dxF
dxF
dxF
-iin
-iin
-iin
-iin
-iin
-iin
-iin
-sVF
-sVF
-sVF
-sVF
-sVF
-dFx
-hrz
-hrz
-hrz
-hrz
-hrz
-sVF
-hrz
-hrz
-hrz
-hrz
+kWX
+kWX
+kWX
+kWX
+kWX
+kWX
+kWX
+lKk
+lKk
+lKk
+lKk
+lKk
+cLr
+tHh
+tHh
+tHh
+tHh
+tHh
+lKk
+tHh
+tHh
+tHh
+tHh
oKx
-sVF
+lKk
gTO
-dht
-dht
-dht
-lRy
+lzD
+lzD
+lzD
+dBj
qnd
-huR
-huR
-huR
-xBm
-aUF
+dmy
+dmy
+dmy
+jGF
+bEt
hEC
ipy
nZK
@@ -23661,37 +23739,37 @@ dxF
dxF
dxF
rzh
-dht
+lzD
bEn
bEn
-dht
-dht
-dht
+lzD
+lzD
+lzD
xAr
-dht
+lzD
xAr
wvg
-dht
-dht
-dht
-dht
-lRy
-hrz
-hrz
-hrz
-hrz
+lzD
+lzD
+lzD
+lzD
+dBj
+tHh
+tHh
+tHh
+tHh
eqQ
xFN
cYb
gmA
juC
-xBm
+jGF
qnd
-huR
-huR
-huR
-xBm
-aUF
+dmy
+dmy
+dmy
+jGF
+bEt
uAJ
mbc
nZK
@@ -23840,25 +23918,25 @@ uzp
acx
jnV
jnV
-aUF
-aUF
-xBm
-hrz
-hrz
-hrz
-hrz
+bEt
+bEt
+jGF
+tHh
+tHh
+tHh
+tHh
oJE
-xBm
+jGF
fmN
vPm
uTr
kBm
bdd
-huR
-huR
-huR
-xBm
-gzb
+dmy
+dmy
+dmy
+jGF
+cou
hEC
fEu
nZK
@@ -24008,24 +24086,24 @@ sjE
pHR
jnV
jnV
-aUF
-xBm
-sVF
-hrz
-hrz
-hrz
+bEt
+jGF
+lKk
+tHh
+tHh
+tHh
oJE
-xBm
+jGF
kDD
vPm
vPm
rdx
bdd
-huR
-huR
-huR
-xBm
-aUF
+dmy
+dmy
+dmy
+jGF
+bEt
hoK
pLN
fYE
@@ -24176,23 +24254,23 @@ cWc
hst
jnV
jnV
-xBm
-sVF
+jGF
+lKk
fYF
-hrz
-hrz
+tHh
+tHh
oJE
-xBm
+jGF
fmN
vPm
fmN
ctA
qnd
-huR
-huR
-huR
-xBm
-aUF
+dmy
+dmy
+dmy
+jGF
+bEt
hoK
hoK
ybd
@@ -24343,23 +24421,23 @@ cWc
cWc
dfz
jnV
-xBm
-sVF
+jGF
+lKk
fSK
-sVF
-sVF
+lKk
+lKk
oJE
-xBm
+jGF
fmN
vPm
bGi
-xBm
+jGF
bdd
-huR
-huR
-huR
-xBm
-aUF
+dmy
+dmy
+dmy
+jGF
+bEt
hoK
hoK
nmw
@@ -24511,22 +24589,22 @@ cWc
kSy
pma
wEU
-sVF
+lKk
iiy
eGL
-bGg
-sVF
-xBm
+cpD
+lKk
+jGF
xcG
vPm
fmN
-xBm
-iin
-huR
-huR
-huR
-xBm
-aUF
+jGF
+kWX
+dmy
+dmy
+dmy
+jGF
+bEt
hoK
yhV
onC
@@ -24678,22 +24756,22 @@ cWc
jiX
fto
pUB
-sVF
+lKk
arh
-sVF
-sVF
-iin
-xBm
+lKk
+lKk
+kWX
+jGF
dpH
aIy
vPm
-xBm
-iin
-huR
-huR
-huR
-xBm
-aUF
+jGF
+kWX
+dmy
+dmy
+dmy
+jGF
+bEt
uAJ
uEr
nZK
@@ -24844,23 +24922,23 @@ lSc
lSc
fto
jnV
-xBm
-sVF
-sVF
-sVF
-sVF
-iin
-xBm
+jGF
+lKk
+lKk
+lKk
+lKk
+kWX
+jGF
eUJ
aIy
juC
-xBm
+jGF
qnd
-sVF
-huR
-kZV
-xBm
-aUF
+lKk
+dmy
+sWR
+jGF
+bEt
uAJ
jOA
nZK
@@ -25011,23 +25089,23 @@ iXh
ntz
jnV
jnV
-xBm
-sVF
-sVF
-sVF
-sVF
+jGF
+lKk
+lKk
+lKk
+lKk
oJE
-xBm
+jGF
fmN
dpH
juC
-xBm
+jGF
qnd
-iin
-huR
-huR
-xBm
-gzb
+kWX
+dmy
+dmy
+jGF
+cou
hEC
fKD
nZK
@@ -25182,19 +25260,19 @@ rzh
dxF
dxF
iCQ
-sVF
-sVF
-lRy
-dht
-dht
-dht
-lRy
+lKk
+lKk
+dBj
+lzD
+lzD
+lzD
+dBj
qnd
-iin
-huR
-huR
-xBm
-aUF
+kWX
+dmy
+dmy
+jGF
+bEt
uAJ
iZi
nZK
@@ -25350,18 +25428,18 @@ dxF
dxF
dxF
dxF
-sVF
+lKk
rSU
rSU
rSU
rSU
rSU
-sVF
-sVF
-huR
-huR
-xBm
-aUF
+lKk
+lKk
+dmy
+dmy
+jGF
+bEt
hoK
xca
pyZ
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 94c7420a6da4..93436ca83de0 100644
--- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
+++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
@@ -331,10 +331,6 @@
icon_state = "marked"
},
/area/lv522/indoors/b_block/bar)
-"ait" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
"aiw" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal3";
@@ -799,7 +795,7 @@
},
/obj/item/stack/sheet/metal,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"aut" = (
/turf/open/floor/corsat{
dir = 5;
@@ -1090,7 +1086,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -1466,7 +1461,7 @@
/turf/open/floor/corsat{
icon_state = "marked"
},
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"aQU" = (
/obj/structure/machinery/computer/cameras{
dir = 4;
@@ -1496,7 +1491,7 @@
},
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"aRH" = (
/obj/effect/decal/warning_stripes{
icon_state = "SE-out";
@@ -3246,7 +3241,7 @@
dir = 4
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"bLI" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet/engineering_electrical,
@@ -3404,7 +3399,7 @@
/area/lv522/outdoors/colony_streets/north_street)
"bPJ" = (
/turf/closed/wall/strata_outpost,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"bPQ" = (
/obj/item/prop/helmetgarb/spacejam_tickets{
desc = "Two original, crisp, orange, tickets.";
@@ -3446,7 +3441,7 @@
"bQA" = (
/obj/structure/largecrate/random,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"bQC" = (
/obj/structure/bed/chair{
dir = 1
@@ -4456,14 +4451,6 @@
icon_state = "greenfull"
},
/area/lv522/indoors/b_block/hydro)
-"cpU" = (
-/obj/structure/machinery/floodlight/landing,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/prison{
- dir = 4;
- icon_state = "greenfull"
- },
-/area/lv522/landing_zone_1)
"cpX" = (
/obj/item/toy/beach_ball/holoball,
/obj/item/shard{
@@ -4893,7 +4880,7 @@
"czE" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"czG" = (
/obj/structure/sign/safety/radio_rad{
pixel_y = 26
@@ -5244,13 +5231,6 @@
icon_state = "brown"
},
/area/lv522/atmos/east_reactor)
-"cHY" = (
-/obj/structure/platform_decoration{
- dir = 8
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
"cIe" = (
/obj/structure/surface/rack,
/obj/item/tool/minihoe{
@@ -5409,7 +5389,7 @@
},
/obj/item/stack/sheet/wood,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"cJW" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 10
@@ -6261,7 +6241,6 @@
},
/area/lv522/oob)
"das" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1/delayone,
/turf/open/floor/plating,
/area/lv522/landing_zone_1)
@@ -7046,7 +7025,7 @@
dir = 1
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"dnQ" = (
/turf/open/floor/corsat{
icon_state = "browncorner"
@@ -7171,7 +7150,6 @@
dir = 4;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"drg" = (
@@ -8925,7 +8903,7 @@
/obj/vehicle/train/cargo/trolley,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"edk" = (
/turf/open/floor/corsat{
dir = 8;
@@ -8972,7 +8950,7 @@
pixel_y = 6
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"eeG" = (
/obj/structure/prop/ice_colony/dense/planter_box{
dir = 9
@@ -9250,7 +9228,6 @@
pixel_y = -6
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -9467,6 +9444,10 @@
icon_state = "marked"
},
/area/lv522/atmos/east_reactor)
+"enB" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/lv522/landing_zone_1/tunnel/far)
"enD" = (
/obj/structure/curtain/red,
/turf/open/floor/prison{
@@ -9640,7 +9621,6 @@
/area/lv522/atmos/north_command_centre)
"epN" = (
/obj/structure/closet/emcloset,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"epS" = (
@@ -9709,7 +9689,7 @@
"eqV" = (
/obj/structure/largecrate/random/barrel,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"erw" = (
/obj/vehicle/train/cargo/trolley,
/obj/effect/landmark/objective_landmark/close,
@@ -9854,10 +9834,9 @@
},
/obj/vehicle/train/cargo/engine,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"evg" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/power/apc/weak{
dir = 8
},
@@ -9874,7 +9853,7 @@
dir = 1
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"evv" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/surface/table/reinforced/prison,
@@ -9947,7 +9926,6 @@
/area/lv522/atmos/east_reactor)
"ewn" = (
/obj/structure/platform,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement4"
},
@@ -10011,7 +9989,6 @@
dir = 1
},
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"exZ" = (
@@ -10054,7 +10031,6 @@
},
/area/lv522/outdoors/colony_streets/central_streets)
"eyy" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1,
/turf/open/floor/plating,
/area/lv522/landing_zone_1)
@@ -10995,6 +10971,9 @@
icon_state = "floor_plate"
},
/area/lv522/landing_zone_2/ceiling)
+"eSW" = (
+/turf/open/gm/river,
+/area/lv522/landing_zone_1/tunnel/far)
"eSY" = (
/obj/structure/pipes/standard/simple/hidden/green,
/obj/effect/decal/cleanable/dirt,
@@ -11006,16 +10985,6 @@
icon_state = "plate"
},
/area/lv522/atmos/reactor_garage)
-"eTu" = (
-/obj/structure/stairs/perspective{
- icon_state = "p_stair_full"
- },
-/obj/structure/platform{
- dir = 4
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
"eTQ" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 10
@@ -11327,7 +11296,6 @@
phone_id = "LZ1 Service Tunnel";
pixel_y = 24
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"eZY" = (
@@ -11381,12 +11349,6 @@
},
/turf/open/floor/grass,
/area/lv522/indoors/a_block/garden)
-"fbh" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement{
- icon_state = "cement1"
- },
-/area/lv522/outdoors/colony_streets/south_west_street)
"fbA" = (
/obj/structure/prop/invuln/ice_prefab/standalone{
icon_state = "white"
@@ -12247,7 +12209,7 @@
dir = 8
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fvo" = (
/obj/structure/pipes/vents/pump,
/turf/open/floor/corsat{
@@ -12372,10 +12334,6 @@
icon_state = "plate"
},
/area/lv522/atmos/east_reactor/west)
-"fxZ" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
"fyl" = (
/obj/structure/pipes/vents/pump,
/obj/effect/decal/cleanable/dirt,
@@ -12567,7 +12525,6 @@
},
/area/lv522/outdoors/colony_streets/east_central_street)
"fBL" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1/delaytwo,
/turf/open/floor/prison{
dir = 4;
@@ -12610,7 +12567,7 @@
dir = 1
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fCl" = (
/obj/structure/barricade/wooden{
dir = 1
@@ -12688,7 +12645,6 @@
/obj/item/tool/pen/blue/clicky,
/obj/effect/landmark/objective_landmark/close,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -12734,7 +12690,6 @@
pixel_x = 5;
registered_name = "John Forklift"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -12898,10 +12853,6 @@
icon_state = "blue_plate"
},
/area/lv522/indoors/c_block/mining)
-"fHB" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement,
-/area/lv522/outdoors/colony_streets/south_west_street)
"fHC" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 5
@@ -12990,7 +12941,7 @@
dir = 1
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fKf" = (
/obj/structure/platform{
dir = 1
@@ -13072,7 +13023,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -13090,7 +13040,6 @@
pixel_x = 8;
pixel_y = 12
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"fLP" = (
@@ -13262,12 +13211,6 @@
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/prison,
/area/lv522/indoors/lone_buildings/outdoor_bot)
-"fPt" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement{
- icon_state = "cement2"
- },
-/area/lv522/outdoors/colony_streets/south_west_street)
"fPB" = (
/obj/structure/bed/chair,
/obj/effect/decal/cleanable/dirt,
@@ -13391,7 +13334,6 @@
},
/area/lv522/atmos/sewer)
"fSo" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1,
/turf/open/floor/prison{
dir = 4;
@@ -13532,7 +13474,7 @@
dir = 4
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fVU" = (
/obj/structure/prop/invuln/ice_prefab{
dir = 1
@@ -13693,7 +13635,7 @@
dir = 4
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fYP" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_door,
/turf/open/floor/corsat{
@@ -13735,7 +13677,7 @@
},
/obj/structure/closet/firecloset/full,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"fZy" = (
/obj/structure/prop/invuln/ice_prefab{
dir = 10
@@ -14001,7 +13943,6 @@
/area/lv522/atmos/east_reactor)
"gej" = (
/obj/structure/platform,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement4"
},
@@ -14097,7 +14038,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/platform,
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"gfi" = (
/obj/item/weapon/twohanded/folded_metal_chair,
/obj/item/prop/alien/hugger{
@@ -14118,7 +14059,7 @@
/obj/item/prop/alien/hugger,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"gfu" = (
/obj/structure/surface/table/woodentable/fancy,
/obj/item/device/flashlight/lamp/green,
@@ -14185,7 +14126,6 @@
},
/area/lv522/indoors/a_block/hallway)
"ggS" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -14391,7 +14331,7 @@
/obj/structure/machinery/light/small,
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"gkY" = (
/obj/structure/closet/bombcloset,
/turf/open/asphalt/cement,
@@ -14804,7 +14744,7 @@
/obj/structure/largecrate/random,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"guj" = (
/obj/structure/machinery/door/airlock/almayer/generic{
dir = 1;
@@ -15557,7 +15497,7 @@
},
/obj/structure/platform,
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"gJD" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -15603,7 +15543,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -15900,7 +15839,6 @@
pixel_y = 6
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -16147,7 +16085,7 @@
dir = 4
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"gWg" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_nest,
/obj/effect/landmark/xeno_spawn,
@@ -16202,7 +16140,6 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"gXc" = (
@@ -16414,7 +16351,6 @@
},
/area/lv522/indoors/b_block/bridge)
"haf" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1/delaytwo,
/turf/open/floor/plating,
/area/lv522/landing_zone_1)
@@ -16993,7 +16929,7 @@
dir = 4
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"hiV" = (
/obj/item/prop/alien/hugger,
/obj/structure/pipes/standard/simple/hidden/green{
@@ -18193,6 +18129,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison,
/area/lv522/atmos/outdoor)
+"hHe" = (
+/obj/structure/platform{
+ dir = 1
+ },
+/turf/open/gm/river,
+/area/lv522/landing_zone_1/tunnel/far)
"hHh" = (
/obj/structure/platform{
dir = 4
@@ -18911,7 +18853,6 @@
/area/lv522/atmos/sewer)
"hTW" = (
/obj/structure/largecrate/random/secure,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"hTX" = (
@@ -18960,7 +18901,6 @@
pixel_x = 7;
pixel_y = 7
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"hUY" = (
@@ -19298,7 +19238,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/item/prop/alien/hugger,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"ici" = (
/obj/effect/decal/cleanable/vomit{
icon_state = "vomit_4"
@@ -19718,7 +19658,6 @@
/area/lv522/indoors/c_block/mining)
"ikb" = (
/obj/structure/surface/rack,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"ike" = (
@@ -19850,7 +19789,6 @@
pixel_y = 6
},
/obj/item/tool/pen/blue/clicky,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -20039,7 +19977,6 @@
/obj/structure/platform_decoration{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/south_west_street)
"isa" = (
@@ -20223,7 +20160,6 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"ivj" = (
@@ -20346,7 +20282,7 @@
"ixV" = (
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"ixW" = (
/obj/structure/stairs/perspective{
dir = 8;
@@ -20772,7 +20708,7 @@
},
/obj/structure/machinery/light/small,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"iGF" = (
/obj/structure/bed/chair{
dir = 8
@@ -20865,7 +20801,6 @@
pixel_x = -6;
pixel_y = 6
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"iIs" = (
@@ -21852,7 +21787,7 @@
dir = 8
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"jbd" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -23183,7 +23118,6 @@
/area/lv522/landing_zone_2)
"jxF" = (
/obj/structure/largecrate/guns/russian,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"jxI" = (
@@ -23466,7 +23400,6 @@
/area/lv522/outdoors/nw_rockies)
"jCh" = (
/obj/structure/machinery/door/airlock/almayer/maint,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -23657,7 +23590,7 @@
icon_state = "p_stair_full"
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"jFr" = (
/obj/structure/cargo_container/arious/rightmid,
/turf/open/floor/prison,
@@ -24187,7 +24120,6 @@
dir = 5;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"jPj" = (
@@ -24252,7 +24184,6 @@
"jQC" = (
/obj/structure/machinery/light,
/obj/structure/machinery/disposal,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -24682,7 +24613,6 @@
dir = 6;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"jYZ" = (
@@ -24720,7 +24650,6 @@
},
/area/lv522/indoors/a_block/hallway)
"jZD" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement3"
},
@@ -24811,7 +24740,6 @@
"kbo" = (
/obj/structure/surface/rack,
/obj/item/stack/sheet/metal/medium_stack,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"kbq" = (
@@ -26527,7 +26455,7 @@
dir = 4
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"kEo" = (
/obj/structure/machinery/colony_floodlight{
layer = 4.3
@@ -26703,6 +26631,15 @@
icon_state = "darkredfull2"
},
/area/lv522/indoors/a_block/security)
+"kHW" = (
+/obj/structure/stairs/perspective{
+ icon_state = "p_stair_full"
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/lv522/landing_zone_1/tunnel/far)
"kHX" = (
/obj/structure/platform_decoration{
dir = 4
@@ -27087,7 +27024,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -27529,13 +27465,6 @@
icon_state = "darkpurplefull2"
},
/area/lv522/indoors/a_block/dorms)
-"kWp" = (
-/obj/structure/window/framed/strata/reinforced,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/corsat{
- icon_state = "marked"
- },
-/area/lv522/landing_zone_1/ceiling)
"kWH" = (
/obj/structure/stairs/perspective{
dir = 8;
@@ -27678,7 +27607,6 @@
/obj/structure/platform_decoration{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"kZs" = (
@@ -27690,18 +27618,6 @@
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/prison,
/area/lv522/indoors/a_block/admin)
-"kZJ" = (
-/obj/structure/window/framed/strata/reinforced,
-/obj/structure/machinery/door/poddoor/almayer/closed{
- id = "LZ1_Lockdown_Lo";
- name = "Emergency Lockdown"
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/corsat{
- icon_state = "marked"
- },
-/area/lv522/landing_zone_1/ceiling)
"kZX" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal{
@@ -28047,7 +27963,6 @@
/obj/structure/platform_decoration{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"lhb" = (
@@ -29054,10 +28969,6 @@
icon_state = "darkpurplefull2"
},
/area/lv522/indoors/a_block/dorms)
-"lBl" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"lBu" = (
/obj/structure/machinery/light{
dir = 4
@@ -29490,7 +29401,6 @@
/area/lv522/atmos/filt)
"lJq" = (
/obj/structure/largecrate/random/secure,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/shale/layer1,
/area/lv522/landing_zone_1)
"lJU" = (
@@ -29500,7 +29410,6 @@
pixel_y = 6
},
/obj/item/tool/pen/blue/clicky,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -30057,7 +29966,6 @@
/area/lv522/indoors/a_block/kitchen/glass)
"lWj" = (
/obj/structure/platform,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"lWm" = (
@@ -30712,6 +30620,10 @@
icon_state = "floor_marked"
},
/area/lv522/atmos/east_reactor/south)
+"mlv" = (
+/obj/structure/largecrate/random/secure,
+/turf/open/floor/plating,
+/area/lv522/landing_zone_1/tunnel/far)
"mly" = (
/obj/structure/closet/firecloset/full,
/obj/effect/decal/cleanable/dirt,
@@ -30818,7 +30730,6 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement1"
},
@@ -30927,7 +30838,6 @@
/obj/structure/machinery/light{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -30945,7 +30855,6 @@
pixel_x = 8;
pixel_y = 20
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -31266,7 +31175,6 @@
pixel_x = -8;
pixel_y = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"muP" = (
@@ -31309,7 +31217,6 @@
/area/lv522/atmos/reactor_garage)
"mvP" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"mvR" = (
@@ -31426,7 +31333,6 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"mxO" = (
@@ -31486,7 +31392,6 @@
dir = 8;
pixel_y = 5
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -31506,7 +31411,6 @@
/obj/item/device/flashlight/lamp{
pixel_x = 6
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -31756,7 +31660,6 @@
},
/obj/effect/landmark/objective_landmark/close,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -31918,7 +31821,7 @@
},
/obj/vehicle/train/cargo/trolley,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"mJt" = (
/obj/structure/stairs/perspective{
dir = 9;
@@ -32125,7 +32028,6 @@
/area/lv522/atmos/filt)
"mMX" = (
/obj/structure/powerloader_wreckage,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"mNc" = (
@@ -32213,7 +32115,6 @@
/obj/item/device/flashlight/lamp{
pixel_x = -8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -32299,7 +32200,6 @@
name = "remote door-control";
pixel_y = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -32899,7 +32799,6 @@
},
/area/lv522/indoors/a_block/hallway)
"naS" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/obj/structure/machinery/landinglight/ds1/delaythree,
/turf/open/floor/plating,
/area/lv522/landing_zone_1)
@@ -33246,13 +33145,6 @@
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/floor/plating,
/area/lv522/atmos/filt)
-"nhi" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/structure/machinery/landinglight/ds1/delaytwo{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1)
"nhs" = (
/obj/item/weapon/twohanded/folded_metal_chair,
/obj/effect/decal/cleanable/dirt,
@@ -33301,7 +33193,6 @@
/area/lv522/atmos/filt)
"niA" = (
/obj/structure/largecrate/random/barrel/green,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement12"
},
@@ -33566,7 +33457,6 @@
pixel_y = -8
},
/obj/effect/decal/strata_decals/grime/grime3,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison,
/area/lv522/landing_zone_1/ceiling)
"nnz" = (
@@ -33603,7 +33493,6 @@
/obj/item/weapon/twohanded/folded_metal_chair,
/obj/item/prop/alien/hugger,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison,
/area/lv522/landing_zone_1/ceiling)
"noD" = (
@@ -33907,7 +33796,6 @@
pixel_y = 5
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison,
/area/lv522/landing_zone_1/ceiling)
"nsv" = (
@@ -33991,7 +33879,6 @@
"ntT" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/largecrate/random/barrel/white,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"nud" = (
@@ -34044,7 +33931,6 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -34071,13 +33957,6 @@
},
/turf/open/floor/prison,
/area/lv522/indoors/lone_buildings/outdoor_bot)
-"nvV" = (
-/obj/structure/platform{
- dir = 1
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
"nwj" = (
/turf/closed/wall/strata_outpost,
/area/lv522/indoors/a_block/dorms/glass)
@@ -34121,7 +34000,6 @@
/area/lv522/indoors/a_block/admin)
"nxF" = (
/obj/structure/machinery/light/small,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"nxJ" = (
@@ -34402,7 +34280,6 @@
},
/area/lv522/atmos/east_reactor/south)
"nEq" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"nEX" = (
@@ -34461,7 +34338,6 @@
/area/lv522/atmos/filt)
"nGe" = (
/obj/structure/cargo_container/kelland/left,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"nGq" = (
@@ -34497,7 +34373,6 @@
/area/lv522/atmos/filt)
"nGJ" = (
/obj/structure/cargo_container/kelland/right,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/shale/layer1,
/area/lv522/landing_zone_1)
"nGU" = (
@@ -34729,7 +34604,6 @@
/area/lv522/indoors/a_block/dorm_north)
"nMc" = (
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/shale/layer1,
/area/lv522/landing_zone_1)
"nMd" = (
@@ -35164,7 +35038,7 @@
/obj/structure/largecrate/random/secure,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"nSm" = (
/obj/structure/surface/table/almayer,
/obj/item/trash/plate,
@@ -35181,7 +35055,6 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"nSA" = (
@@ -35328,7 +35201,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"nVN" = (
/obj/item/ammo_magazine/flamer_tank/empty,
/obj/effect/decal/cleanable/liquid_fuel,
@@ -35583,7 +35456,7 @@
"nYU" = (
/obj/effect/acid_hole,
/turf/closed/wall/strata_outpost,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"nYW" = (
/obj/structure/machinery/space_heater/radiator/red{
dir = 1;
@@ -35615,6 +35488,9 @@
icon_state = "floor_plate"
},
/area/lv522/atmos/cargo_intake)
+"nZP" = (
+/turf/open/floor/plating,
+/area/lv522/landing_zone_1/tunnel/far)
"oaa" = (
/turf/open/asphalt/cement{
icon_state = "cement14"
@@ -35857,7 +35733,7 @@
dir = 8
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"oeT" = (
/obj/structure/pipes/vents/pump,
/obj/structure/machinery/light{
@@ -35916,7 +35792,6 @@
pixel_x = -9;
pixel_y = 12
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"ofZ" = (
@@ -36084,7 +35959,6 @@
dir = 9;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"oiD" = (
@@ -36118,7 +35992,6 @@
/turf/open/floor/plating,
/area/lv522/atmos/cargo_intake)
"oiY" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement14"
},
@@ -36137,7 +36010,6 @@
/obj/structure/machinery/space_heater/radiator/red{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -36259,7 +36131,6 @@
pixel_x = 9;
pixel_y = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -36333,7 +36204,7 @@
},
/obj/structure/largecrate/random/barrel/white,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"ooG" = (
/obj/structure/machinery/power/apc/weak{
dir = 1
@@ -36372,7 +36243,6 @@
},
/obj/structure/machinery/light,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -36495,6 +36365,12 @@
icon_state = "blue"
},
/area/lv522/indoors/a_block/hallway)
+"orA" = (
+/obj/structure/platform_decoration{
+ dir = 8
+ },
+/turf/open/gm/river,
+/area/lv522/landing_zone_1/tunnel/far)
"orE" = (
/obj/item/prop/colony/used_flare,
/turf/open/auto_turf/sand_white/layer0,
@@ -36876,7 +36752,6 @@
/area/lv522/indoors/a_block/dorms)
"oyY" = (
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"ozk" = (
@@ -37006,7 +36881,6 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"oBx" = (
@@ -37391,7 +37265,6 @@
/obj/structure/platform_decoration{
dir = 10
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"oKI" = (
@@ -37667,7 +37540,6 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -37740,7 +37612,6 @@
/obj/structure/machinery/light{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -37941,7 +37812,6 @@
/obj/structure/machinery/space_heater/radiator/red{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -38007,7 +37877,6 @@
name = "High Pressure Door";
unacidable = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -38116,11 +37985,6 @@
icon_state = "floor_plate"
},
/area/lv522/atmos/way_in_command_centre)
-"oYM" = (
-/obj/structure/platform_decoration,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"oYO" = (
/obj/structure/platform{
dir = 1
@@ -38180,7 +38044,6 @@
/area/lv522/indoors/a_block/admin)
"paT" = (
/obj/structure/cargo_container/kelland/right,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"pbi" = (
@@ -38272,7 +38135,7 @@
dir = 8
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"pdq" = (
/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{
name = "\improper B-Block - Hydroponics Airlock";
@@ -38376,7 +38239,6 @@
/area/lv522/atmos/way_in_command_centre)
"pez" = (
/obj/structure/cargo_container/horizontal/blue/top,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"peM" = (
@@ -38384,7 +38246,7 @@
dir = 1
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"peS" = (
/obj/structure/surface/table/almayer{
dir = 1;
@@ -38621,13 +38483,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/lv522/indoors/c_block/cargo)
-"pid" = (
-/obj/structure/machinery/door/airlock/almayer/generic,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/corsat{
- icon_state = "marked"
- },
-/area/lv522/landing_zone_1/ceiling)
"pit" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/auto_turf/sand_white/layer0,
@@ -38666,10 +38521,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/lv522/indoors/c_block/cargo)
-"pjl" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/closed/wall/strata_ice/dirty,
-/area/lv522/oob)
"pjm" = (
/obj/structure/platform{
dir = 8
@@ -38738,13 +38589,6 @@
icon_state = "squares"
},
/area/lv522/atmos/reactor_garage)
-"pkH" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/prison{
- dir = 4;
- icon_state = "greenfull"
- },
-/area/lv522/landing_zone_1)
"plb" = (
/obj/structure/machinery/door_display/research_cell{
dir = 4;
@@ -39128,16 +38972,6 @@
},
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/central_streets)
-"pvd" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/structure/machinery/landinglight/ds1/delayone{
- dir = 4
- },
-/turf/open/floor/prison{
- dir = 4;
- icon_state = "greenfull"
- },
-/area/lv522/landing_zone_1)
"pvz" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/light,
@@ -39208,17 +39042,7 @@
pixel_y = -6
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
-"pwH" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/structure/machinery/landinglight/ds1/delayone{
- dir = 8
- },
-/turf/open/floor/prison{
- dir = 4;
- icon_state = "greenfull"
- },
-/area/lv522/landing_zone_1)
+/area/lv522/landing_zone_1/tunnel/far)
"pwJ" = (
/obj/structure/prop/dam/crane/damaged,
/turf/open/floor/prison{
@@ -39694,12 +39518,10 @@
/obj/structure/platform_decoration{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"pFw" = (
/obj/structure/cargo_container/horizontal/blue/middle,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"pFF" = (
@@ -39813,7 +39635,7 @@
dir = 8
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"pHT" = (
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor/corsat,
@@ -39967,17 +39789,6 @@
},
/turf/open/floor/corsat,
/area/lv522/atmos/cargo_intake)
-"pLm" = (
-/obj/structure/platform,
-/obj/structure/platform{
- dir = 4
- },
-/obj/structure/platform_decoration{
- dir = 6
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"pLs" = (
/obj/structure/barricade/wooden{
dir = 4
@@ -40248,7 +40059,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/firecloset/full,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"pQx" = (
/obj/structure/closet/firecloset/full,
/turf/open/floor/prison{
@@ -40269,7 +40080,6 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -40651,7 +40461,7 @@
"pXv" = (
/obj/item/prop/alien/hugger,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"pXx" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -40699,7 +40509,6 @@
/obj/structure/stairs/perspective{
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"pYu" = (
@@ -40815,10 +40624,9 @@
icon_state = "p_stair_full"
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"qbf" = (
/obj/structure/cargo_container/horizontal/blue/bottom,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"qbi" = (
@@ -41924,7 +41732,7 @@
"qxf" = (
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall/strata_outpost,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"qxg" = (
/obj/structure/surface/table/almayer,
/obj/item/paper,
@@ -42007,7 +41815,7 @@
},
/obj/item/stack/sheet/metal,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"qxX" = (
/obj/structure/pipes/standard/simple/hidden/green,
/obj/effect/decal/cleanable/dirt,
@@ -42264,11 +42072,6 @@
icon_state = "marked"
},
/area/lv522/indoors/a_block/bridges/corpo)
-"qCs" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
"qCB" = (
/obj/structure/surface/rack,
/obj/item/clothing/shoes/blue{
@@ -42356,7 +42159,6 @@
dir = 1;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"qDw" = (
@@ -42368,7 +42170,6 @@
dir = 5;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"qDL" = (
@@ -42739,7 +42540,7 @@
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"qLa" = (
/obj/structure/barricade/wooden{
dir = 4
@@ -42764,12 +42565,10 @@
/area/lv522/outdoors/w_rockies)
"qLk" = (
/obj/structure/closet/firecloset/full,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"qLu" = (
/obj/structure/platform,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/south_west_street)
"qLy" = (
@@ -42834,13 +42633,6 @@
icon_state = "70"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
-"qMJ" = (
-/obj/structure/platform{
- dir = 8
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"qNg" = (
/obj/structure/machinery/door/airlock/almayer/generic{
name = "\improper Bedroom"
@@ -43043,7 +42835,7 @@
pixel_y = 6
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"qPT" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/space_heater/radiator/red{
@@ -43468,7 +43260,6 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"qWf" = (
@@ -43520,7 +43311,6 @@
"qXs" = (
/obj/structure/closet/firecloset/full,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"qXH" = (
@@ -43945,7 +43735,6 @@
/area/lv522/indoors/a_block/fitness/glass)
"rcR" = (
/obj/structure/largecrate/random/barrel/white,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"rcV" = (
@@ -44182,7 +43971,7 @@
dir = 1
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"rhh" = (
/obj/structure/bed/chair/wheelchair,
/obj/effect/decal/cleanable/dirt,
@@ -44405,7 +44194,6 @@
/obj/structure/bed/chair{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"rmD" = (
@@ -44485,7 +44273,6 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/north_west_street)
"rnT" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement12"
},
@@ -44707,7 +44494,7 @@
},
/obj/structure/largecrate/random/barrel,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"rsF" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 5
@@ -45060,7 +44847,6 @@
dir = 4;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"ryu" = (
@@ -45121,7 +44907,6 @@
/area/lv522/outdoors/colony_streets/north_west_street)
"rzz" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -45160,7 +44945,6 @@
/area/lv522/indoors/a_block/dorms)
"rAu" = (
/obj/structure/platform_decoration,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement2"
},
@@ -45186,7 +44970,7 @@
"rAM" = (
/obj/structure/largecrate/random/case,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"rAX" = (
/turf/open/floor{
dir = 4;
@@ -45356,12 +45140,6 @@
icon_state = "51"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
-"rFw" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement{
- icon_state = "cement4"
- },
-/area/lv522/outdoors/colony_streets/south_west_street)
"rFT" = (
/obj/structure/machinery/landinglight/ds2,
/turf/open/floor/plating,
@@ -45472,7 +45250,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -45498,12 +45275,6 @@
icon_state = "floor_marked"
},
/area/lv522/outdoors/colony_streets/north_east_street)
-"rJv" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement{
- icon_state = "cement15"
- },
-/area/lv522/outdoors/colony_streets/south_west_street)
"rJB" = (
/obj/effect/decal/cleanable/blood/xeno{
icon_state = "xgib3"
@@ -45829,7 +45600,6 @@
dir = 6;
layer = 3.51
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/landing_zone_1)
"rOD" = (
@@ -45870,13 +45640,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison,
/area/lv522/indoors/c_block/t_comm)
-"rPQ" = (
-/obj/structure/platform_decoration{
- dir = 4
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"rQd" = (
/obj/structure/closet/secure_closet/quartermaster,
/turf/open/floor/prison{
@@ -46034,7 +45797,6 @@
/area/lv522/indoors/a_block/admin)
"rSh" = (
/obj/structure/largecrate/random/barrel/white,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -46302,7 +46064,6 @@
/obj/structure/platform_decoration{
dir = 10
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/south_west_street)
"rYu" = (
@@ -46440,7 +46201,6 @@
/area/lv522/oob)
"saL" = (
/obj/structure/platform,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/landing_zone_1)
"saQ" = (
@@ -46603,7 +46363,6 @@
/area/lv522/indoors/a_block/dorms)
"sdN" = (
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"sdR" = (
@@ -46672,7 +46431,6 @@
/obj/structure/platform_decoration{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement9"
},
@@ -46886,7 +46644,6 @@
/obj/item/key/cargo_train{
icon_state = "keys"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -47216,10 +46973,6 @@
},
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/outdoors/colony_streets/north_street)
-"spj" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/closed/wall/strata_outpost/reinforced,
-/area/lv522/landing_zone_1/tunnel)
"spm" = (
/obj/structure/bed/chair/comfy,
/obj/effect/decal/cleanable/dirt,
@@ -47455,12 +47208,6 @@
icon_state = "89"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
-"std" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/asphalt/cement{
- icon_state = "cement9"
- },
-/area/lv522/outdoors/colony_streets/south_west_street)
"stG" = (
/obj/structure/pipes/vents/pump,
/obj/effect/decal/cleanable/dirt,
@@ -47695,7 +47442,6 @@
/obj/structure/machinery/door/airlock/almayer/generic{
dir = 2
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -47728,7 +47474,6 @@
/obj/structure/platform{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement1"
},
@@ -47843,7 +47588,6 @@
dir = 9;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement3"
},
@@ -47862,13 +47606,6 @@
icon_state = "darkbrownfull2"
},
/area/lv522/indoors/c_block/mining)
-"sCk" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/structure/machinery/landinglight/ds1{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1)
"sCp" = (
/turf/closed/shuttle/dropship2/tornado{
icon_state = "75"
@@ -48114,7 +47851,7 @@
dir = 4
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"sHk" = (
/obj/structure/curtain/red,
/turf/open/floor/corsat{
@@ -48180,7 +47917,6 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -48902,7 +48638,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -49189,7 +48924,6 @@
/obj/structure/stairs/perspective{
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"tbl" = (
@@ -49454,7 +49188,6 @@
icon_state = "p_stair_full"
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement3"
},
@@ -49468,7 +49201,6 @@
"tfl" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/railgun_camera_pos,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -49778,7 +49510,7 @@
},
/obj/structure/platform,
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"tlR" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/faxmachine{
@@ -49834,7 +49566,6 @@
pixel_x = -1;
pixel_y = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -50211,7 +49942,6 @@
dir = 1;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"tue" = (
@@ -51065,7 +50795,6 @@
/area/lv522/atmos/reactor_garage)
"tKS" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -51155,7 +50884,6 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorm_north)
"tMq" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement2"
},
@@ -51166,7 +50894,6 @@
dir = 10;
icon_state = "p_stair_full"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement3"
},
@@ -51401,7 +51128,7 @@
},
/obj/structure/largecrate/random,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"tRI" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/cameras/wooden_tv{
@@ -51413,7 +51140,6 @@
pixel_y = 4
},
/obj/structure/machinery/light,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -51559,7 +51285,6 @@
/obj/structure/surface/table/almayer,
/obj/item/trash/plate,
/obj/item/reagent_container/food/snacks/mushroompizzaslice,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -51586,7 +51311,6 @@
/area/lv522/atmos/way_in_command_centre)
"tVj" = (
/obj/structure/largecrate/random/barrel/white,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -51689,7 +51413,7 @@
},
/obj/vehicle/train/cargo/trolley,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"tXd" = (
/obj/structure/prop/invuln/lattice_prop{
dir = 1;
@@ -51727,7 +51451,6 @@
},
/obj/item/prop/alien/hugger,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -51832,13 +51555,6 @@
icon_state = "greenfull"
},
/area/lv522/indoors/a_block/fitness)
-"tZM" = (
-/obj/structure/platform{
- dir = 4
- },
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/sand_white/layer0,
-/area/lv522/landing_zone_1)
"tZP" = (
/obj/item/prop/alien/hugger,
/obj/effect/decal/cleanable/dirt,
@@ -52204,7 +51920,6 @@
pixel_y = 6
},
/obj/structure/machinery/light,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52556,7 +52271,6 @@
/obj/structure/platform{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement3"
},
@@ -52629,7 +52343,6 @@
pixel_x = -8;
pixel_y = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52647,12 +52360,10 @@
/area/lv522/indoors/c_block/cargo)
"uol" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison,
/area/lv522/landing_zone_1/ceiling)
"uom" = (
/obj/structure/machinery/disposal,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52704,7 +52415,6 @@
pixel_x = 6;
pixel_y = 16
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52730,7 +52440,6 @@
/area/lv522/indoors/b_block/hydro)
"upX" = (
/obj/structure/machinery/disposal,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"upZ" = (
@@ -52750,7 +52459,6 @@
/obj/structure/machinery/power/apc/weak{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"uqo" = (
@@ -52890,7 +52598,6 @@
pixel_y = 4
},
/obj/effect/landmark/objective_landmark/close,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52914,7 +52621,6 @@
/obj/item/trash/cigbutt{
pixel_x = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -52965,7 +52671,6 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"uul" = (
@@ -53073,7 +52778,7 @@
"uwe" = (
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"uwk" = (
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor/corsat{
@@ -53211,7 +52916,7 @@
},
/obj/structure/platform,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"uzD" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/prop/almayer/computer/PC{
@@ -53447,7 +53152,6 @@
dir = 1
},
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"uEX" = (
@@ -53482,7 +53186,6 @@
/obj/structure/platform_decoration{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement14"
},
@@ -53699,7 +53402,6 @@
/area/lv522/indoors/c_block/garage)
"uIF" = (
/obj/structure/barricade/handrail,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"uIJ" = (
@@ -53729,7 +53431,7 @@
"uIY" = (
/obj/structure/platform_decoration,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"uIZ" = (
/obj/structure/window_frame/strata,
/obj/item/stack/rods,
@@ -53838,7 +53540,6 @@
/obj/structure/platform_decoration{
dir = 9
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/landing_zone_1)
"uLk" = (
@@ -54027,7 +53728,6 @@
/obj/structure/platform_decoration{
dir = 5
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/south_west_street)
"uOD" = (
@@ -54076,7 +53776,6 @@
/area/lv522/indoors/c_block/cargo)
"uPo" = (
/obj/structure/largecrate/guns/russian,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -54245,7 +53944,6 @@
/obj/structure/platform{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/gm/river,
/area/lv522/landing_zone_1/tunnel)
"uSn" = (
@@ -54345,7 +54043,6 @@
/obj/structure/platform_decoration{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement1"
},
@@ -54553,7 +54250,6 @@
/obj/structure/platform{
dir = 8
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/ceiling)
"uXO" = (
@@ -54691,7 +54387,6 @@
},
/area/lv522/atmos/east_reactor/south)
"vbu" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison,
/area/lv522/landing_zone_1/ceiling)
"vbF" = (
@@ -54848,7 +54543,6 @@
/obj/structure/platform_decoration{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/ceiling)
"vdV" = (
@@ -54866,10 +54560,6 @@
},
/turf/open/floor/wood,
/area/lv522/indoors/c_block/casino)
-"veq" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/shale/layer1,
-/area/lv522/landing_zone_1)
"ves" = (
/obj/structure/machinery/light{
dir = 8
@@ -55186,7 +54876,6 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms)
"vjC" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/ceiling)
"vjF" = (
@@ -55542,10 +55231,6 @@
},
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/admin)
-"vqw" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/auto_turf/shale/layer2,
-/area/lv522/landing_zone_1)
"vqF" = (
/obj/item/ammo_magazine/rifle/heap{
current_rounds = 0
@@ -55672,7 +55357,6 @@
/area/lv522/indoors/c_block/mining)
"vso" = (
/obj/structure/largecrate/random/barrel/yellow,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -55759,7 +55443,6 @@
},
/area/lv522/indoors/a_block/kitchen)
"vtN" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement{
icon_state = "cement4"
},
@@ -55790,14 +55473,12 @@
/obj/structure/machinery/door/airlock/almayer/maint{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
/area/lv522/landing_zone_1/ceiling)
"vuH" = (
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -56076,7 +55757,6 @@
},
/area/lv522/atmos/east_reactor)
"vAW" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -56119,7 +55799,6 @@
/obj/structure/platform_decoration{
dir = 9
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/gm/river,
/area/lv522/landing_zone_1/tunnel)
"vBx" = (
@@ -56223,7 +55902,6 @@
pixel_y = 19;
serial_number = 16
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/landing_zone_1/ceiling)
"vCG" = (
@@ -56410,7 +56088,6 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/central_streets)
"vGo" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/asphalt/cement,
/area/lv522/landing_zone_1)
"vGp" = (
@@ -56862,8 +56539,6 @@
id = "LZ1_Lockdown_Lo";
name = "Emergency Lockdown"
},
-/obj/effect/landmark/lv624/fog_blocker/short,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -57176,11 +56851,9 @@
"vTQ" = (
/obj/structure/barricade/handrail,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"vTT" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/corsat{
icon_state = "marked"
},
@@ -57250,7 +56923,6 @@
/area/lv522/indoors/a_block/admin)
"vUX" = (
/obj/structure/powerloader_wreckage/ft,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -57278,7 +56950,6 @@
/area/lv522/indoors/a_block/kitchen)
"vVi" = (
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -57426,7 +57097,6 @@
/obj/structure/machinery/computer/cameras/wooden_tv{
pixel_y = 6
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"vZm" = (
@@ -57458,7 +57128,6 @@
/area/lv522/indoors/toilet)
"vZv" = (
/obj/structure/cargo_container/kelland/left,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -57519,7 +57188,6 @@
dir = 4
},
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"waD" = (
@@ -57695,7 +57363,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/largecrate/random/case,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"wdd" = (
/obj/item/stack/sheet/wood,
/obj/effect/decal/cleanable/dirt,
@@ -57724,7 +57392,6 @@
/area/lv522/outdoors/colony_streets/central_streets)
"wdI" = (
/obj/structure/cargo_container/kelland/right,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -57860,7 +57527,7 @@
icon_state = "p_stair_full"
},
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"wfE" = (
/obj/structure/stairs/perspective{
dir = 4;
@@ -58174,7 +57841,6 @@
/area/lv522/indoors/c_block/cargo)
"wlY" = (
/obj/structure/largecrate/random/secure,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 10;
icon_state = "floor_marked"
@@ -58226,7 +57892,6 @@
/obj/structure/machinery/space_heater/radiator/red{
dir = 4
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -59246,7 +58911,6 @@
},
/obj/item/clothing/head/hardhat/white,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -59431,7 +59095,7 @@
/obj/structure/closet/emcloset,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"wLN" = (
/obj/structure/surface/table/almayer,
/obj/item/reagent_container/food/drinks/coffee,
@@ -60197,7 +59861,6 @@
pixel_x = -13;
pixel_y = 2
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -60674,7 +60337,6 @@
/obj/structure/bed/chair{
dir = 1
},
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -60907,7 +60569,7 @@
/obj/structure/largecrate/random/barrel,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"xtb" = (
/turf/closed/wall/strata_outpost,
/area/lv522/indoors/a_block/fitness)
@@ -61204,7 +60866,6 @@
pixel_y = 9
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -61642,7 +61303,6 @@
"xIK" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/largecrate,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
"xIW" = (
@@ -62346,7 +62006,7 @@
dir = 8
},
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
"xVI" = (
/obj/effect/spawner/gibspawner/xeno,
/obj/structure/pipes/standard/simple/hidden/green,
@@ -62560,11 +62220,6 @@
icon_state = "plate"
},
/area/lv522/atmos/cargo_intake)
-"xZN" = (
-/obj/structure/largecrate/random/secure,
-/obj/effect/landmark/lv624/fog_blocker/short,
-/turf/open/floor/plating,
-/area/lv522/landing_zone_1/tunnel)
"xZP" = (
/obj/structure/stairs/perspective{
dir = 1;
@@ -63013,7 +62668,6 @@
},
/area/lv522/outdoors/colony_streets/south_street)
"yhU" = (
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
@@ -63255,7 +62909,6 @@
pixel_x = -7
},
/obj/effect/landmark/objective_landmark/close,
-/obj/effect/landmark/lv624/fog_blocker/short,
/turf/open/floor/prison{
dir = 4;
icon_state = "greenfull"
@@ -63310,7 +62963,7 @@
"ymf" = (
/obj/structure/platform_decoration,
/turf/open/gm/river,
-/area/lv522/landing_zone_1/tunnel)
+/area/lv522/landing_zone_1/tunnel/far)
(1,1,1) = {"
bMX
@@ -64403,7 +64056,7 @@ nGe
pez
pFw
qbf
-lBl
+pxb
paT
pxb
pxb
@@ -64627,11 +64280,11 @@ cpy
cpy
oyY
paT
-lBl
-lBl
-lBl
-lBl
-lBl
+pxb
+pxb
+pxb
+pxb
+pxb
pxb
nQz
tPf
@@ -64853,12 +64506,12 @@ cpy
cpy
cpy
hTW
-lBl
-vqw
-lBl
-lBl
-lBl
-oYM
+pxb
+xqp
+pxb
+pxb
+pxb
+nQz
tPf
oKc
uZc
@@ -65079,13 +64732,13 @@ cpy
cpy
cpy
nGe
-veq
-veq
-vqw
-vqw
-vqw
-oYM
-pLm
+pwa
+pwa
+xqp
+xqp
+xqp
+nQz
+oKc
ryU
ryU
ryU
@@ -65306,12 +64959,12 @@ cpy
cpy
cpy
nGJ
-veq
-veq
-lBl
-oYM
-tZM
-pLm
+pwa
+pwa
+pxb
+nQz
+tPf
+oKc
ryU
ryU
uiM
@@ -65533,10 +65186,10 @@ cpy
cpy
cpy
nMc
-lBl
-oYM
-tZM
-pLm
+pxb
+nQz
+tPf
+oKc
ryU
ryU
ryU
@@ -65759,11 +65412,11 @@ cpy
cpy
cpy
lJq
-lBl
-oYM
-pLm
-pkH
-pkH
+pxb
+nQz
+oKc
+ryU
+ryU
ryU
wuK
xfW
@@ -65986,11 +65639,11 @@ cpy
cpy
cpy
lJq
-oYM
-pLm
-pkH
-pvd
-nhi
+nQz
+oKc
+ryU
+rhk
+uTd
oyf
tns
fOc
@@ -66212,9 +65865,9 @@ cpy
cpy
cpy
cpy
-veq
+pwa
lWj
-cpU
+uZc
fSo
nFj
pRg
@@ -66439,9 +66092,9 @@ tFx
tFx
tFx
niA
-veq
+pwa
oiC
-pkH
+ryU
naS
nFj
nFj
@@ -66666,9 +66319,9 @@ wnP
evg
syM
rnT
-lBl
+pxb
ttT
-pkH
+ryU
haf
nFj
nFj
@@ -66893,9 +66546,9 @@ mvP
ggS
tFx
rnT
-lBl
+pxb
ttT
-pkH
+ryU
das
sYH
sYH
@@ -67118,11 +66771,11 @@ tFx
moI
mxD
uom
-kWp
+ymc
rnT
-lBl
+pxb
ttT
-pkH
+ryU
eyy
sYH
sYH
@@ -67158,11 +66811,11 @@ cpy
eYM
eYM
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
+sRM
eYM
eYM
cpy
@@ -67345,11 +66998,11 @@ tFx
inm
myQ
myZ
-kWp
+ymc
rnT
-lBl
+pxb
ttT
-pkH
+ryU
naS
sYH
sYH
@@ -67385,12 +67038,12 @@ eYM
eYM
uqe
pNa
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
pNa
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -67574,9 +67227,9 @@ rIM
rIM
tFx
rnT
-lBl
+pxb
ttT
-pkH
+ryU
haf
sYH
sYH
@@ -67609,15 +67262,15 @@ pxb
cpy
eYM
eYM
-qCs
-fxZ
+jJF
+wfP
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -67796,14 +67449,14 @@ qJy
aRN
ien
mmw
-fbh
-fbh
-fHB
+veQ
+veQ
+fnA
sSQ
rnT
-lBl
+pxb
ttT
-pkH
+ryU
das
sYH
sYH
@@ -67836,15 +67489,15 @@ pxb
cpy
eYM
hUM
-qCs
-fxZ
+jJF
+wfP
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -68025,12 +67678,12 @@ tZh
ofi
ofi
max
-rFw
+osN
sSQ
rnT
-lBl
+pxb
ttT
-pkH
+ryU
eyy
nFj
nFj
@@ -68063,15 +67716,15 @@ cpy
cpy
eYM
vYY
-fxZ
-fxZ
+wfP
+wfP
eYM
-qCs
-fxZ
-fxZ
+jJF
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -68252,12 +67905,12 @@ hpq
tZh
ofi
max
-rFw
+osN
sSQ
rnT
-lBl
+pxb
jPg
-pkH
+ryU
naS
nFj
nFj
@@ -68291,14 +67944,14 @@ cpy
eYM
ofX
rmC
-fxZ
+wfP
eYM
-qCs
-fxZ
-fxZ
+jJF
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -68482,9 +68135,9 @@ max
ien
ien
ien
-lBl
+pxb
lWj
-cpU
+uZc
fBL
nFj
pRg
@@ -68518,14 +68171,14 @@ cpy
eYM
fLM
rmC
-fxZ
+wfP
eYM
-qCs
-fxZ
-fxZ
+jJF
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -68706,15 +68359,15 @@ hpq
ofi
ofi
max
-rFw
+osN
sSQ
rnT
-lBl
+pxb
lgY
oKG
-pkH
-pwH
-sCk
+ryU
+uEH
+vJj
jIk
aGS
dhP
@@ -68745,14 +68398,14 @@ cpy
eYM
eYM
ivb
-fxZ
+wfP
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -68933,15 +68586,15 @@ gpB
ofi
ofi
max
-rFw
+osN
sSQ
rnT
-lBl
-lBl
+pxb
+pxb
lgY
oKG
-pkH
-pkH
+ryU
+ryU
ryU
tgq
qcO
@@ -68971,15 +68624,15 @@ pxb
cpy
eYM
exQ
-fxZ
-fxZ
+wfP
+wfP
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
eYM
cpy
@@ -69163,11 +68816,11 @@ max
ien
ien
ien
-veq
-lBl
-lBl
+pwa
+pxb
+pxb
lgY
-qMJ
+udi
oKG
ryU
ryU
@@ -69198,16 +68851,16 @@ cpy
cpy
eYM
eYM
-fxZ
-fxZ
+wfP
+wfP
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-nvV
-ait
-ait
+sRM
+hTe
+hTe
eYM
cpy
cpy
@@ -69387,16 +69040,16 @@ hpq
ofi
tZh
max
-rFw
+osN
sSQ
rnT
-veq
-veq
-lBl
-lBl
-lBl
+pwa
+pwa
+pxb
+pxb
+pxb
lgY
-qMJ
+udi
oKG
ryU
ryU
@@ -69425,16 +69078,16 @@ cpy
cpy
eYM
jxF
-fxZ
-xZN
+wfP
+mzi
eYM
-fxZ
-fxZ
+wfP
+wfP
nxF
eYM
-nvV
-ait
-ait
+sRM
+hTe
+hTe
eYM
cpy
cpy
@@ -69614,16 +69267,16 @@ hpq
ofi
max
max
-rFw
+osN
sSQ
rnT
-veq
-veq
-veq
-lBl
-lBl
-lBl
-lBl
+pwa
+pwa
+pwa
+pxb
+pxb
+pxb
+pxb
lgY
oKG
ryU
@@ -69656,12 +69309,12 @@ jCh
eYM
eYM
ivb
-fxZ
-fxZ
+wfP
+wfP
eYM
vBm
-cHY
-ait
+qxk
+hTe
eYM
cpy
cpy
@@ -69841,7 +69494,7 @@ hpq
max
max
max
-rFw
+osN
sSQ
vGo
jZD
@@ -69849,11 +69502,11 @@ jZD
jZD
jZD
oiY
-lBl
-lBl
-lBl
+pxb
+pxb
+pxb
lgY
-qMJ
+udi
oKG
uZc
ryU
@@ -69878,17 +69531,17 @@ pxb
cpy
eYM
eYM
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-fxZ
-fxZ
-qCs
+wfP
+wfP
+jJF
eYM
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -70068,54 +69721,54 @@ hpq
max
max
max
-rFw
+osN
tFx
-kWp
+ymc
tFx
tFx
-kWp
+ymc
tFx
rnT
-lBl
-lBl
-lBl
-lBl
-lBl
+pxb
+pxb
+pxb
+pxb
+pxb
lgY
-qMJ
+udi
qDt
-pkH
-pkH
-pkH
+ryU
+ryU
+ryU
taW
-qMJ
-rPQ
-lBl
-lBl
-lBl
-lBl
-lBl
-lBl
-veq
-veq
-veq
-vqw
-vqw
+udi
+gVn
+pxb
+pxb
+pxb
+pxb
+pxb
+pxb
+pwa
+pwa
+pwa
+xqp
+xqp
cpy
cpy
eYM
mMX
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-fxZ
-fxZ
-qCs
+wfP
+wfP
+jJF
xIK
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -70295,54 +69948,54 @@ xVV
max
max
ofi
-rFw
+osN
aFf
wHo
xzp
ojb
uom
-kWp
+ymc
rnT
-lBl
-lBl
-lBl
-veq
-veq
-lBl
-lBl
+pxb
+pxb
+pxb
+pwa
+pwa
+pxb
+pxb
qDD
rys
rys
rys
jYK
-lBl
-lBl
-lBl
-lBl
-veq
-veq
-lBl
-veq
-veq
-veq
-lBl
-vqw
-vqw
+pxb
+pxb
+pxb
+pxb
+pwa
+pwa
+pxb
+pwa
+pwa
+pwa
+pxb
+xqp
+xqp
cpy
cpy
eYM
mMX
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-fxZ
-fxZ
-fxZ
-qCs
+wfP
+wfP
+wfP
+jJF
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -70522,54 +70175,54 @@ max
max
max
ofi
-rFw
-kZJ
+osN
+aFf
ggS
uol
uol
rzz
-kWp
+ymc
rnT
-lBl
-lBl
-veq
-veq
-veq
-veq
-veq
-veq
-lBl
-lBl
-lBl
-lBl
-lBl
-lBl
-lBl
-veq
-veq
-veq
-veq
-veq
-veq
-lBl
-lBl
-veq
-vqw
+pxb
+pxb
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
+pxb
+pxb
+pxb
+pxb
+pxb
+pxb
+pxb
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
+pxb
+pxb
+pwa
+xqp
cpy
cpy
eYM
oBw
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
eYM
-xZN
-fxZ
-fxZ
-qCs
+mzi
+wfP
+wfP
+jJF
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -70749,7 +70402,7 @@ max
max
max
ofi
-rFw
+osN
kPJ
ggS
nEq
@@ -70757,46 +70410,46 @@ nEq
rzz
syM
rnT
-lBl
-veq
-veq
-veq
-vqw
-veq
-veq
-veq
-veq
-veq
-veq
-veq
-lBl
-lBl
-veq
-veq
-veq
-veq
-veq
-veq
-lBl
-lBl
-lBl
-lBl
-lBl
+pxb
+pwa
+pwa
+pwa
+xqp
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
+pxb
+pxb
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
+pxb
+pxb
+pxb
+pxb
+pxb
cpy
cpy
eYM
sdN
-fxZ
-fxZ
-qCs
+wfP
+wfP
+jJF
eYM
xIK
-fxZ
-fxZ
+wfP
+wfP
rcR
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -70976,31 +70629,31 @@ max
max
ofi
tZh
-rFw
+osN
aFf
lJU
uol
vbu
oPR
-kWp
+ymc
rnT
-veq
-veq
-veq
-lBl
-vqw
-vqw
-veq
-veq
-vqw
-vqw
-vqw
-veq
-veq
-veq
-veq
-veq
-veq
+pwa
+pwa
+pwa
+pxb
+xqp
+xqp
+pwa
+pwa
+xqp
+xqp
+xqp
+pwa
+pwa
+pwa
+pwa
+pwa
+pwa
tMq
jZD
jZD
@@ -71013,17 +70666,17 @@ cpy
cpy
eYM
kbo
-fxZ
-qCs
-qCs
+wfP
+jJF
+jJF
eYM
xIK
-qCs
-fxZ
+jJF
+wfP
rcR
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -71203,22 +70856,22 @@ max
max
ofi
tZh
-rFw
+osN
aFf
xdn
rzz
omG
oRS
-kWp
+ymc
rnT
-veq
-veq
-lBl
-cpy
-lBl
-lBl
-lBl
-veq
+pwa
+pwa
+pxb
+cpy
+pxb
+pxb
+pxb
+pwa
rAu
umK
sCb
@@ -71226,8 +70879,8 @@ tfb
tMt
umK
uFp
-veq
-veq
+pwa
+pwa
vtN
tFx
tFx
@@ -71240,17 +70893,17 @@ cpy
cpy
eYM
ikb
-fxZ
-qCs
+wfP
+jJF
eYM
eYM
eYM
ntT
-fxZ
-fxZ
+wfP
+wfP
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -71429,22 +71082,22 @@ max
max
max
tZh
-fPt
-fHB
+pAj
+fnA
tFx
-kWp
-pid
-kWp
+ymc
+xXO
+ymc
tFx
tFx
rnT
-lBl
-lBl
+pxb
+pxb
cpy
cpy
-lBl
-lBl
-lBl
+pxb
+pxb
+pxb
rAu
rOw
tFx
@@ -71476,8 +71129,8 @@ eYM
jCh
eYM
eYM
-nvV
-ait
+sRM
+hTe
eYM
cpy
cpy
@@ -71656,7 +71309,7 @@ cxv
max
max
tZh
-rFw
+osN
tFx
tFx
eiP
@@ -71665,13 +71318,13 @@ jQC
tFx
tFx
rnT
-lBl
-lBl
-lBl
-lBl
-lBl
-lBl
-veq
+pxb
+pxb
+pxb
+pxb
+pxb
+pxb
+pwa
gej
tFx
tFx
@@ -71693,17 +71346,17 @@ tFx
eYM
uEV
sdN
-fxZ
-qCs
-qCs
+wfP
+jJF
+jJF
eYM
eYM
eYM
nSq
-fxZ
-qCs
+wfP
+jJF
vTQ
-nvV
+sRM
eYM
eYM
cpy
@@ -71883,22 +71536,22 @@ kmq
cxv
max
max
-rFw
+osN
aFf
mFm
nnv
vbu
vbu
rzz
-kWp
+ymc
rnT
-lBl
-lBl
-lBl
-lBl
-lBl
-lBl
-veq
+pxb
+pxb
+pxb
+pxb
+pxb
+pxb
+pwa
gej
tFx
ykU
@@ -71919,18 +71572,18 @@ ggS
tFx
eZW
pET
-fxZ
-fxZ
-fxZ
-qCs
+wfP
+wfP
+wfP
+jJF
xIK
eYM
qXs
-qCs
-fxZ
-fxZ
+jJF
+wfP
+wfP
vTQ
-nvV
+sRM
eYM
cpy
cpy
@@ -72110,7 +71763,7 @@ mBF
hpq
max
max
-rFw
+osN
aFf
mOf
nnW
@@ -72119,13 +71772,13 @@ uol
rzz
syM
rnT
-lBl
-lBl
-lBl
-lBl
-lBl
-veq
-veq
+pxb
+pxb
+pxb
+pxb
+pxb
+pwa
+pwa
gej
ymc
gQy
@@ -72145,19 +71798,19 @@ ggS
rSh
vNW
pYj
-fxZ
-fxZ
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
+wfP
+wfP
waz
eYM
qLk
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
uIF
-nvV
+sRM
eYM
cpy
cpy
@@ -72337,14 +71990,14 @@ kbS
hpq
max
max
-rFw
+osN
aFf
mOP
nsr
uol
uol
oVK
-kWp
+ymc
vGo
jZD
ien
@@ -72371,20 +72024,20 @@ nEq
ggS
tVj
tFx
-eTu
+cLB
kZq
-qCs
+jJF
qVQ
-qCs
+jJF
xIK
eYM
eYM
epN
-fxZ
-qCs
-qCs
+wfP
+jJF
+jJF
uIF
-nvV
+sRM
eYM
cpy
cpy
@@ -72564,7 +72217,7 @@ fnA
dPP
max
max
-rFw
+osN
tFx
tFx
nuU
@@ -72607,11 +72260,11 @@ eYM
eYM
eYM
epN
-fxZ
-fxZ
-fxZ
+wfP
+wfP
+wfP
vTQ
-nvV
+sRM
eYM
cpy
cpy
@@ -72791,22 +72444,22 @@ mBF
hpq
max
max
-std
-fHB
+gMQ
+fnA
tFx
rIM
rIM
rIM
tFx
-fHB
-fbh
-fbh
+fnA
+veQ
+veQ
ien
-fbh
-fbh
-fbh
+veQ
+veQ
+veQ
ien
-fbh
+veQ
qLu
aFf
fDF
@@ -72825,25 +72478,25 @@ vAW
tVj
tFx
tFx
-pjl
-pjl
-pjl
-pjl
-pjl
-pjl
-pjl
+cpy
+cpy
+cpy
+cpy
+cpy
+cpy
+cpy
eYM
eYM
-qCs
+jJF
gXb
-qCs
-qCs
+jJF
+jJF
eYM
eYM
-pjl
-pjl
-pjl
-pjl
+cpy
+cpy
+cpy
+cpy
bMX
"}
(43,1,1) = {"
@@ -73019,13 +72672,13 @@ hpq
max
max
max
-std
-fbh
-fbh
-fbh
-fbh
-fbh
-rJv
+gMQ
+veQ
+veQ
+veQ
+veQ
+veQ
+xVV
ofi
max
max
@@ -73051,23 +72704,23 @@ tFx
tFx
tFx
tFx
-pjl
-pjl
cpy
cpy
cpy
cpy
cpy
-pjl
-pjl
-spj
+cpy
+cpy
+cpy
+cpy
+eYM
eYM
eYM
oWK
eYM
eYM
-pjl
-pjl
+cpy
+cpy
cpy
cpy
cpy
@@ -73270,16 +72923,17 @@ ufS
tFx
tFx
cpy
-fHB
-fbh
-fbh
-fbh
-fbh
-fbh
-fbh
-fbh
-fbh
-fHB
+fnA
+veQ
+veQ
+veQ
+veQ
+veQ
+veQ
+veQ
+veQ
+fnA
+cpy
cpy
cpy
cpy
@@ -73287,13 +72941,12 @@ cpy
cpy
cpy
cpy
-pjl
-spj
+eYM
iIa
drd
uug
-spj
-pjl
+eYM
+cpy
cpy
cpy
cpy
@@ -73517,7 +73170,7 @@ bPJ
bPJ
bPJ
aue
-wfP
+nZP
dnO
bPJ
bPJ
@@ -73745,7 +73398,7 @@ jba
bPJ
edi
pXv
-wfP
+nZP
pQq
nVr
bPJ
@@ -73966,14 +73619,14 @@ ofi
osN
aQH
qaT
-hTe
-hTe
+eSW
+eSW
jFl
aQH
mJs
czE
-wfP
-wfP
+nZP
+nZP
wcY
bPJ
bPJ
@@ -74193,15 +73846,15 @@ ofi
osN
bPJ
fYD
-qxk
+orA
ymf
sHd
bPJ
eeb
-wfP
+nZP
ixV
-wfP
-wfP
+nZP
+nZP
uwe
bPJ
bPJ
@@ -74426,11 +74079,11 @@ bPJ
bPJ
bPJ
rAM
-wfP
-wfP
-wfP
-wfP
-sRM
+nZP
+nZP
+nZP
+nZP
+hHe
bPJ
cpy
bMX
@@ -74653,11 +74306,11 @@ cpy
bPJ
bPJ
qxf
-wfP
-wfP
-wfP
+nZP
+nZP
+nZP
pXv
-sRM
+hHe
bPJ
cpy
bMX
@@ -74880,10 +74533,10 @@ cpy
cpy
bPJ
evu
-wfP
-wfP
-wfP
-jJF
+nZP
+nZP
+nZP
+enB
hiL
bPJ
cpy
@@ -75108,10 +74761,10 @@ cpy
bPJ
bPJ
gfs
-wfP
-wfP
+nZP
+nZP
gWc
-wfP
+nZP
bPJ
cpy
bMX
@@ -75562,9 +75215,9 @@ cpy
cpy
cpy
bPJ
-wfP
-wfP
-wfP
+nZP
+nZP
+nZP
iGD
bPJ
cpy
@@ -75790,7 +75443,7 @@ cpy
cpy
bPJ
bPJ
-wfP
+nZP
ixV
bPJ
bPJ
@@ -76017,8 +75670,8 @@ cpy
cpy
cpy
bPJ
-wfP
-wfP
+nZP
+nZP
ixV
bPJ
cpy
@@ -76245,7 +75898,7 @@ cpy
cpy
bPJ
ica
-wfP
+nZP
fvn
bPJ
cpy
@@ -76472,8 +76125,8 @@ bPJ
bPJ
bPJ
qKV
-jJF
-sRM
+enB
+hHe
bPJ
cpy
bMX
@@ -76699,8 +76352,8 @@ fnA
bPJ
bPJ
fCb
-jJF
-sRM
+enB
+hHe
bPJ
cpy
bMX
@@ -76926,7 +76579,7 @@ osN
bPJ
oeN
rgS
-wfP
+nZP
hiL
bPJ
cpy
@@ -77153,8 +76806,8 @@ osN
bPJ
tXc
fJr
-wfP
-wfP
+nZP
+nZP
bPJ
cpy
bMX
@@ -77380,7 +77033,7 @@ osN
aQH
euT
fJr
-wfP
+nZP
bPJ
bPJ
cpy
@@ -77605,9 +77258,9 @@ max
max
osN
bPJ
-cLB
+kHW
cJF
-wfP
+nZP
gkH
bPJ
cpy
@@ -77834,7 +77487,7 @@ fnA
bPJ
bPJ
aRB
-jJF
+enB
bPJ
bPJ
cpy
@@ -78061,8 +77714,8 @@ bPJ
bPJ
bPJ
bLA
-jJF
-wfP
+enB
+nZP
bPJ
cpy
bMX
@@ -78287,8 +77940,8 @@ fnA
cpy
cpy
bPJ
-wfP
-jJF
+nZP
+enB
fvn
bPJ
cpy
@@ -78514,9 +78167,9 @@ cpy
cpy
cpy
bPJ
-wfP
+nZP
uwe
-sRM
+hHe
bPJ
cpy
bMX
@@ -78741,9 +78394,9 @@ wIr
cpy
bPJ
bPJ
-wfP
-wfP
-sRM
+nZP
+nZP
+hHe
bPJ
cpy
bMX
@@ -78968,8 +78621,8 @@ wIr
wIr
bPJ
xsN
-wfP
-wfP
+nZP
+nZP
bPJ
bPJ
cpy
@@ -79196,7 +78849,7 @@ wIr
wIr
nRY
uwe
-wfP
+nZP
bPJ
cpy
cpy
@@ -79423,7 +79076,7 @@ lBd
wIr
guh
bQA
-wfP
+nZP
bPJ
cpy
cpy
@@ -79649,7 +79302,7 @@ hhI
hLx
wIr
oox
-mzi
+mlv
pXv
bPJ
cpy
@@ -80104,7 +79757,7 @@ pfq
wIr
rsD
bQA
-wfP
+nZP
bPJ
cpy
cpy
@@ -80329,9 +79982,9 @@ aPu
mOJ
wIr
wIr
-mzi
-wfP
-jJF
+mlv
+nZP
+enB
bPJ
cpy
cpy
@@ -80556,9 +80209,9 @@ vDL
wIr
wIr
evu
-wfP
-jJF
-jJF
+nZP
+enB
+enB
bPJ
cpy
cpy
@@ -80783,8 +80436,8 @@ wIr
wIr
qxf
qxf
-wfP
-jJF
+nZP
+enB
bPJ
bPJ
cpy
@@ -81009,9 +80662,9 @@ vLI
wIr
bPJ
wLw
-wfP
-wfP
-wfP
+nZP
+nZP
+nZP
bPJ
cpy
cpy
@@ -81236,9 +80889,9 @@ tOo
bPJ
bPJ
fZo
-wfP
-wfP
-wfP
+nZP
+nZP
+nZP
bPJ
cpy
cpy
@@ -81463,9 +81116,9 @@ mnb
ouj
bPJ
pdp
-wfP
-wfP
-wfP
+nZP
+nZP
+nZP
bPJ
cpy
cpy
@@ -81690,9 +81343,9 @@ mnb
gmu
nYU
geT
-wfP
-jJF
-jJF
+nZP
+enB
+enB
bPJ
cpy
cpy
@@ -81917,8 +81570,8 @@ mnb
gmu
bPJ
tlB
-wfP
-jJF
+nZP
+enB
bPJ
bPJ
cpy
@@ -82144,8 +81797,8 @@ mnb
eDq
bPJ
gJr
-wfP
-wfP
+nZP
+nZP
bPJ
cpy
cpy
@@ -82371,7 +82024,7 @@ tOo
bPJ
bPJ
pHi
-wfP
+nZP
uIY
bPJ
cpy
diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm
index a9baa8a1efc7..ba8e782344ca 100644
--- a/maps/map_files/LV624/LV624.dmm
+++ b/maps/map_files/LV624/LV624.dmm
@@ -17330,10 +17330,6 @@
/obj/structure/flora/jungle/vines/heavy,
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/south_west_jungle)
-"kxo" = (
-/obj/effect/landmark/monkey_spawn,
-/turf/open/gm/grass/grass1,
-/area/lv624/lazarus/landing_zones/lz2)
"kxv" = (
/obj/effect/decal/grass_overlay/grass1/inner{
dir = 1
@@ -22591,6 +22587,10 @@
},
/turf/open/gm/grass/grass1,
/area/lv624/lazarus/landing_zones/lz1)
+"tLe" = (
+/obj/effect/landmark/monkey_spawn,
+/turf/open/gm/grass/grass1,
+/area/lv624/ground/jungle/north_west_jungle)
"tLQ" = (
/obj/structure/flora/bush/ausbushes/genericbush,
/turf/open/gm/grass/grass1,
@@ -30912,7 +30912,7 @@ avo
aFQ
xTM
aAl
-aDv
+aAl
aAp
aAp
nmO
@@ -31140,7 +31140,7 @@ auf
aFm
aAl
wXg
-aDv
+aAl
aAp
nmO
aXX
@@ -31368,7 +31368,7 @@ auf
aFm
aAl
aAl
-aDv
+aAl
aAp
aXX
aRG
@@ -32507,7 +32507,7 @@ tka
lCG
cDQ
oTJ
-nuW
+aAp
aAp
cIL
nmO
@@ -33191,7 +33191,7 @@ oTJ
oTJ
oTJ
oTJ
-nuW
+aAp
aAp
nmO
aXX
@@ -35709,7 +35709,7 @@ aDv
aDv
aRx
aXX
-kxo
+aXX
aXX
aXX
aXX
@@ -38432,7 +38432,7 @@ nuW
psh
psh
psh
-psh
+tLe
psh
tLQ
ado
diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm
index 5c85b09864e1..6e4bfd4c3d1e 100644
--- a/maps/map_files/New_Varadero/New_Varadero.dmm
+++ b/maps/map_files/New_Varadero/New_Varadero.dmm
@@ -430,6 +430,21 @@
/obj/structure/flora/bush/ausbushes/var3/fullgrass,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior/maintenance/security)
+"apt" = (
+/obj/structure/platform/kutjevo/smooth{
+ climb_delay = 1;
+ layer = 2.99
+ },
+/obj/structure/platform/kutjevo/smooth{
+ dir = 8;
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"apG" = (
/obj/structure/blocker/invisible_wall/water,
/obj/item/lightstick/variant/planted,
@@ -834,6 +849,23 @@
icon_state = "floor3"
},
/area/varadero/interior/disposals)
+"aBY" = (
+/obj/structure/barricade/handrail{
+ desc = "Your platforms look pretty heavy king, let me support them for you.";
+ dir = 1;
+ icon_state = "hr_kutjevo";
+ name = "support struts"
+ },
+/obj/structure/platform/kutjevo/smooth{
+ dir = 1;
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"aCd" = (
/obj/structure/barricade/handrail/wire{
layer = 3.1
@@ -1687,7 +1719,7 @@
name = "deep ocean";
default_name = "deep ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"bak" = (
/obj/structure/prop/invuln/overhead_pipe{
dir = 4;
@@ -2499,7 +2531,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"bDs" = (
/obj/item/weapon/gun/flare{
current_mag = null
@@ -4030,7 +4062,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"cEu" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -6724,7 +6756,7 @@
layer = 2.99
},
/turf/open/gm/coast/beachcorner/south_west,
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"evV" = (
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_22"
@@ -9167,7 +9199,7 @@
layer = 3.1
},
/turf/open/gm/coast/beachcorner2/north_west,
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"fWR" = (
/obj/structure/stairs/perspective{
color = "#b29082";
@@ -10880,7 +10912,7 @@
"haR" = (
/obj/structure/prop/rock/brown,
/turf/open/gm/coast/beachcorner2/north_west,
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"haT" = (
/turf/open/floor/shiva{
icon_state = "multi_tiles"
@@ -15468,7 +15500,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"kaY" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/storage/pill_bottle/inaprovaline/skillless{
@@ -16575,6 +16607,17 @@
/obj/effect/decal/cleanable/blood/oil,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/exterior/lz2_near)
+"kMe" = (
+/obj/structure/platform/kutjevo/smooth{
+ dir = 4;
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"kMf" = (
/obj/structure/window/framed/colony/reinforced/tinted,
/turf/open/floor/plating,
@@ -18075,7 +18118,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"lIo" = (
/obj/structure/pipes/standard/simple/hidden/green{
dir = 6
@@ -18900,6 +18943,12 @@
},
/turf/open/floor/carpet,
/area/varadero/interior/chapel)
+"mfP" = (
+/turf/open/gm/river/ocean{
+ name = "deep ocean";
+ default_name = "deep ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"mgq" = (
/obj/structure/pipes/standard/simple/hidden/green,
/obj/structure/disposalpipe/segment,
@@ -22013,7 +22062,7 @@
layer = 2.99
},
/turf/open/gm/coast/beachcorner2/south_west,
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"ohM" = (
/obj/structure/barricade/wooden{
dir = 8
@@ -22191,6 +22240,12 @@
},
/turf/open/floor/carpet,
/area/varadero/interior/library)
+"ooP" = (
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"opd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/reagent_dispensers/beerkeg,
@@ -23809,6 +23864,13 @@
icon_state = "floor3"
},
/area/varadero/interior/security)
+"ppU" = (
+/obj/structure/flora/bush/ausbushes/var3/stalkybush,
+/turf/open/gm/river/ocean{
+ name = "deep ocean";
+ default_name = "deep ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"pqf" = (
/obj/structure/window/phoronreinforced{
dir = 4;
@@ -24259,6 +24321,17 @@
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior_protected/caves/digsite)
+"pEo" = (
+/obj/structure/platform/kutjevo/smooth{
+ dir = 8;
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"pEE" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -24936,6 +25009,9 @@
},
/turf/open/floor/wood,
/area/varadero/interior/bunks)
+"pYH" = (
+/turf/open/gm/coast/beachcorner2/south_west,
+/area/varadero/exterior/pontoon_beach/lz)
"pYI" = (
/obj/effect/landmark/lv624/fog_blocker{
time_to_dispel = 25000
@@ -25792,7 +25868,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"qAS" = (
/obj/effect/landmark/corpsespawner/colonist/burst,
/turf/open/auto_turf/sand_white/layer1,
@@ -28848,6 +28924,15 @@
icon_state = "asteroidfloor"
},
/area/varadero/exterior/lz1_near)
+"ssw" = (
+/obj/structure/platform_decoration/kutjevo{
+ dir = 1
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"ssZ" = (
/obj/item/storage/belt/marine,
/turf/open/floor/carpet,
@@ -29147,6 +29232,13 @@
icon_state = "multi_tiles"
},
/area/varadero/interior/cargo)
+"sAW" = (
+/obj/structure/prop/rock/brown,
+/turf/open/gm/river/ocean{
+ name = "deep ocean";
+ default_name = "deep ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"sAY" = (
/obj/structure/machinery/door/airlock/almayer/maint{
dir = 1;
@@ -30286,7 +30378,7 @@
name = "shallow ocean";
default_name = "shallow ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"tlq" = (
/obj/item/lightstick/red/spoke/planted{
pixel_x = -10;
@@ -30654,6 +30746,15 @@
icon_state = "floor3"
},
/area/varadero/interior/medical)
+"tyV" = (
+/obj/structure/platform_decoration/kutjevo{
+ dir = 4
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"tzp" = (
/obj/structure/machinery/light{
dir = 8
@@ -31025,6 +31126,16 @@
icon_state = "asteroidplating"
},
/area/varadero/interior/oob)
+"tOB" = (
+/obj/structure/platform/kutjevo/smooth{
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"tOK" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/device/camera{
@@ -33585,6 +33696,9 @@
icon_state = "red"
},
/area/varadero/interior/security)
+"vzi" = (
+/turf/closed/wall/rock/brown,
+/area/varadero/exterior/pontoon_beach/lz)
"vzq" = (
/obj/structure/machinery/storm_siren{
pixel_y = 5
@@ -34078,6 +34192,13 @@
icon_state = "darkredfull2"
},
/area/varadero/interior/dock_control)
+"vLI" = (
+/obj/structure/prop/rock/brown,
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"vLU" = (
/obj/structure/machinery/vending/security,
/turf/open/floor/shiva{
@@ -34259,6 +34380,21 @@
},
/turf/open/floor/carpet,
/area/varadero/interior/chapel)
+"vQF" = (
+/obj/structure/platform/kutjevo/smooth{
+ dir = 8;
+ climb_delay = 1;
+ layer = 2.99
+ },
+/obj/structure/platform/kutjevo/smooth{
+ climb_delay = 1;
+ layer = 2.99
+ },
+/turf/open/gm/river{
+ name = "shallow ocean";
+ default_name = "shallow ocean"
+ },
+/area/varadero/exterior/pontoon_beach/lz)
"vQK" = (
/obj/structure/platform/kutjevo/smooth{
dir = 8;
@@ -34440,7 +34576,7 @@
layer = 2.99
},
/turf/open/gm/coast/beachcorner/north_west,
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"vWG" = (
/obj/structure/bed/chair,
/obj/structure/machinery/storm_siren{
@@ -34602,7 +34738,7 @@
name = "deep ocean";
default_name = "deep ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"vZS" = (
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor/shiva{
@@ -37276,7 +37412,7 @@
name = "deep ocean";
default_name = "deep ocean"
},
-/area/varadero/exterior/pontoon_beach)
+/area/varadero/exterior/pontoon_beach/lz)
"xLE" = (
/obj/structure/noticeboard{
pixel_y = 32
@@ -49392,8 +49528,8 @@ mPk
mPk
wBp
fjv
-qwQ
-uYJ
+mfP
+ppU
bah
uZK
kME
@@ -49573,9 +49709,9 @@ mPk
mPk
wBp
wBp
-qwQ
-uYJ
-lTR
+mfP
+ppU
+ooP
kap
wMw
wMw
@@ -49754,10 +49890,10 @@ mPk
mPk
rYC
fjv
-uYJ
-qwQ
-pAX
-lTR
+ppU
+mfP
+sAW
+ooP
kap
wMw
wMw
@@ -49935,11 +50071,11 @@ mPk
mPk
wBp
wBp
-qwQ
-qwQ
-qwQ
-lTR
-qwQ
+mfP
+mfP
+mfP
+ooP
+mfP
kap
wMw
wMw
@@ -50116,12 +50252,12 @@ mPk
mPk
imk
wBp
-qwQ
-uYJ
-qwQ
-qwQ
-qwQ
-qwQ
+mfP
+ppU
+mfP
+mfP
+mfP
+mfP
kap
sSz
miT
@@ -50298,12 +50434,12 @@ mPk
mPk
mPk
fjv
-qwQ
-qwQ
-pAX
-qwQ
-qwQ
-qwQ
+mfP
+mfP
+sAW
+mfP
+mfP
+mfP
kap
cmU
wMw
@@ -50480,12 +50616,12 @@ mPk
mPk
mPk
wBp
-qwQ
-qwQ
-qwQ
-qwQ
-qwQ
-lTR
+mfP
+mfP
+mfP
+mfP
+mfP
+ooP
kap
rgZ
olD
@@ -50662,18 +50798,18 @@ mPk
mPk
mPk
rYC
-lTR
-pAX
-qwQ
-qwQ
-lTR
-lTR
-eDY
+ooP
+sAW
+mfP
+mfP
+ooP
+ooP
+tOB
tpV
asx
cfq
qAI
-bJV
+pEo
ohC
euS
vWn
@@ -50844,20 +50980,20 @@ mPk
mPk
mPk
wBp
-lTR
-qwQ
-qwQ
-qwQ
-lTR
-qwQ
-eDY
+ooP
+mfP
+mfP
+mfP
+ooP
+mfP
+tOB
lZR
aCo
lZR
-caD
-lTR
-aTY
-eGX
+aBY
+ooP
+vLI
+pYH
haR
kap
wMw
@@ -51028,19 +51164,19 @@ mPk
xVw
dXg
dXg
-qwQ
-qwQ
-qwQ
-qwQ
+mfP
+mfP
+mfP
+mfP
xLB
gnC
mYR
asx
-caD
-lTR
-dXg
-lTR
-lTR
+aBY
+ooP
+vzi
+ooP
+ooP
kap
wMw
ygY
@@ -51211,18 +51347,18 @@ wBp
qwQ
dXg
dXg
-qwQ
-lTR
-qwQ
-fHf
-wPl
+mfP
+ooP
+mfP
+ssw
+vQF
xOX
lId
-jLS
-lTR
-dXg
-dXg
-aTY
+tyV
+ooP
+vzi
+vzi
+vLI
kap
oLa
vUQ
@@ -51393,18 +51529,18 @@ wBp
uYJ
dXg
dXg
-qwQ
-qwQ
-qwQ
-qwQ
+mfP
+mfP
+mfP
+mfP
xLB
xOX
bCM
-rlI
-rlI
-rlI
-rlI
-rlI
+kMe
+kMe
+kMe
+kMe
+kMe
cEm
fZB
wMw
@@ -51577,9 +51713,9 @@ qwQ
dXg
dXg
dXg
-qwQ
-qwQ
-eDY
+mfP
+mfP
+tOB
xOX
tkV
asx
@@ -51761,7 +51897,7 @@ dXg
dXg
dXg
dXg
-eDY
+tOB
asx
asx
kzo
@@ -51945,7 +52081,7 @@ qwQ
dXg
xFS
vZR
-eha
+apt
dKy
qVD
fXu
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index f15298111bf2..aaeb160aeef1 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -11041,6 +11041,12 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"bjZ" = (
+/obj/structure/machinery/cm_vending/clothing/marine/snowflake,
+/turf/open/floor/almayer{
+ icon_state = "cargo"
+ },
+/area/almayer/living/gym)
"bkb" = (
/turf/open/floor/almayer{
dir = 4;
@@ -12003,12 +12009,6 @@
icon_state = "plate"
},
/area/almayer/hallways/lower/starboard_fore_hallway)
-"bqm" = (
-/obj/structure/closet/boxinggloves,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/living/gym)
"bqF" = (
/obj/structure/dropship_equipment/fuel/fuel_enhancer,
/turf/open/floor/almayer{
@@ -25272,6 +25272,19 @@
icon_state = "cargo"
},
/area/almayer/engineering/upper_engineering/starboard)
+"evC" = (
+/obj/structure/bed/chair{
+ dir = 4
+ },
+/obj/structure/machinery/door_control{
+ id = "civ_uniforms";
+ name = "Uniform Vendor Lockdown";
+ pixel_x = -24;
+ pixel_y = -7;
+ req_access_txt = "31"
+ },
+/turf/open/floor/almayer,
+/area/almayer/living/gym)
"evM" = (
/obj/structure/machinery/status_display{
pixel_y = 30
@@ -26713,8 +26726,7 @@
icon_state = "ramptop"
},
/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
+ icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
"eXD" = (
@@ -41904,6 +41916,16 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_f_p)
+"kox" = (
+/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors{
+ dir = 4;
+ id = "civ_uniforms"
+ },
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "cargo_arrow"
+ },
+/area/almayer/living/gym)
"koB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -44836,6 +44858,9 @@
icon_state = "silvercorner"
},
/area/almayer/shipboard/brig/cic_hallway)
+"lnu" = (
+/turf/closed/wall/almayer/reinforced/temphull,
+/area/almayer/living/gym)
"lnP" = (
/obj/structure/machinery/vending/cola,
/obj/structure/window/reinforced,
@@ -50514,8 +50539,7 @@
vector_y = -61
},
/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
+ icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
"nkX" = (
@@ -55845,8 +55869,7 @@
dir = 1
},
/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
+ icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
"oZp" = (
@@ -55967,8 +55990,7 @@
dir = 8
},
/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
+ icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
"paI" = (
@@ -69653,8 +69675,7 @@
dir = 8
},
/turf/open/floor/almayer/aicore/glowing/no_build{
- icon_state = "ai_floor3";
- light_range = 3
+ icon_state = "ai_floor3"
},
/area/almayer/command/airoom)
"tIF" = (
@@ -73736,10 +73757,6 @@
},
/turf/open/floor/plating,
/area/almayer/medical/lower_medical_medbay)
-"vhY" = (
-/obj/structure/sign/goldenplaque,
-/turf/closed/wall/almayer,
-/area/almayer/living/gym)
"vif" = (
/obj/structure/bed/chair/wood/normal{
dir = 1
@@ -108726,11 +108743,11 @@ sZc
abj
mUE
coo
-eWs
-aRu
-aRu
-aRu
-aRu
+lnu
+lnu
+lnu
+lnu
+lnu
aRu
aRu
bcm
@@ -108929,12 +108946,12 @@ iOX
kIl
jmz
hsK
-wfE
-wfE
-wfE
-wfE
-wfE
-wfE
+lnu
+bjZ
+bjZ
+bjZ
+lnu
+sGU
wfE
wfE
yap
@@ -109133,10 +109150,10 @@ wfE
wfE
wfE
wfE
-sGU
-vhY
+kox
+kox
+kox
wfE
-bqm
bsD
btr
wfE
@@ -109335,11 +109352,11 @@ jOo
wrC
mHx
pqX
-pqX
+evC
xbk
wFR
-bmF
wFR
+bmF
wFR
xbk
aWw
@@ -110344,7 +110361,7 @@ aad
sGw
xzB
dvD
-wfE
+sGU
iYx
opD
xbk
diff --git a/maps/tutorial/tutorial_reqs_line.dmm b/maps/tutorial/tutorial_reqs_line.dmm
new file mode 100644
index 000000000000..ca010dd68fca
--- /dev/null
+++ b/maps/tutorial/tutorial_reqs_line.dmm
@@ -0,0 +1,195 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/closed/wall/almayer/outer,
+/area/misc/tutorial)
+"c" = (
+/obj/structure/machinery/door/airlock/almayer/marine/requisitions{
+ dir = 2;
+ no_panel = 1;
+ not_weldable = 1;
+ req_one_access = null
+ },
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"l" = (
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "green"
+ },
+/area/misc/tutorial)
+"m" = (
+/obj/structure/surface/rack,
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "green"
+ },
+/area/misc/tutorial)
+"n" = (
+/obj/structure/surface/table/almayer{
+ breakable = 0;
+ throwpass = 0;
+ climbable = 0;
+ indestructible = 1;
+ density = 0
+ },
+/obj/structure/blocker/forcefield/human/bulletproof{
+ visible = 0
+ },
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"o" = (
+/turf/closed/wall/almayer/outer,
+/area/misc/tutorial)
+"w" = (
+/obj/structure/window/framed/almayer/hull,
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"x" = (
+/obj/structure/barricade/handrail{
+ dir = 8
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "green"
+ },
+/area/misc/tutorial)
+"y" = (
+/obj/structure/machinery/line_nexter,
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "green"
+ },
+/area/misc/tutorial)
+"E" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"J" = (
+/obj/item/toy/bikehorn/rubberducky{
+ name = "Quackers";
+ desc = "You feel as though this rubber duck has been here for a long time. It's Mr. Quackers! He loves you!"
+ },
+/obj/effect/landmark/tutorial/reqs_line_cleaner,
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"K" = (
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"N" = (
+/obj/effect/landmark/tutorial_bottom_left,
+/turf/open/floor/almayer,
+/area/misc/tutorial)
+"X" = (
+/obj/structure/sign/ROsign{
+ layer = 3
+ },
+/turf/closed/wall/almayer,
+/area/misc/tutorial)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+K
+K
+K
+K
+K
+K
+K
+a
+N
+a
+"}
+(3,1,1) = {"
+a
+J
+X
+y
+x
+x
+x
+x
+a
+K
+a
+"}
+(4,1,1) = {"
+a
+a
+K
+n
+w
+o
+a
+a
+a
+c
+a
+"}
+(5,1,1) = {"
+a
+a
+K
+E
+l
+l
+m
+m
+K
+K
+a
+"}
+(6,1,1) = {"
+a
+a
+K
+K
+K
+K
+K
+K
+K
+K
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+K
+K
+K
+K
+K
+K
+K
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/sound/weapons/gun_44mag_v4.ogg b/sound/weapons/gun_44mag_v4.ogg
new file mode 100644
index 000000000000..6c1ad1b32ef7
Binary files /dev/null and b/sound/weapons/gun_44mag_v4.ogg differ
diff --git a/tgui/packages/tgui/interfaces/BugReportForm.tsx b/tgui/packages/tgui/interfaces/BugReportForm.tsx
new file mode 100644
index 000000000000..fe0c26035fd6
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/BugReportForm.tsx
@@ -0,0 +1,217 @@
+import { BooleanLike } from 'common/react';
+import React, { useState } from 'react';
+
+import { useBackend } from '../backend';
+import { Flex, Section } from '../components';
+import { ButtonCheckbox } from '../components/Button';
+import { Window } from '../layouts';
+interface FormTypes {
+ awaiting_admin_approval: BooleanLike;
+ report_details: FormDetails;
+}
+
+// all the information necessary to pass into the github api
+type FormDetails = {
+ steps: string;
+ title: string;
+ description: string;
+ expected_behavior: string;
+ admin_note: string;
+ log: string;
+};
+
+const InputTitle = (props) => {
+ return (
+