diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 49eda07616..5eb8f0219e 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -10,6 +10,12 @@ body:
placeholder: "#1, #2, #3, etc"
validations:
required: true
+ - type: input
+ id: round-id
+ attributes:
+ label: Round ID
+ description: If known, what was the Round ID this bug was found on? Can be left blank if unknown or occured across multiple rounds.
+ placeholder: "12345"
- type: textarea
id: what-happened
attributes:
diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index 97e9976244..978ede1e65 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -63,6 +63,34 @@ jobs:
with:
outputFile: output-annotations.txt
+
+ odlint:
+ name: Lint with OpenDream
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - name: Get OpenDream Version
+ run: |
+ source dependencies.sh
+ echo "OPENDREAM_VERSION=$OPENDREAM_VERSION" >> $GITHUB_ENV
+ - name: Restore OpenDream cache
+ uses: actions/cache@v3
+ id: cache-od
+ with:
+ path: ~/OpenDream
+ key: ${{ runner.os }}-opendream-${{ env.OPENDREAM_VERSION }}
+ - name: Download OpenDream
+ if: steps.cache-od.outputs.cache-hit != 'true'
+ run: |
+ bash tools/ci/download_od.sh
+ - name: Setup OpenDream
+ if: steps.cache-od.outputs.cache-hit != 'true'
+ run: |
+ bash tools/ci/setup_od.sh
+ - name: Run OpenDream
+ run: |
+ bash tools/ci/run_od.sh
+
compile_all_maps:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
name: Compile Maps
diff --git a/.gitignore b/.gitignore
index 210efc84d7..4d2b7e810d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,6 @@ test_environment.txt
# byond-tracy backend, not shipped with the codebase so it shouldn't be maintained
prof.dll
libprof.so
+
+# OpenDream compatibility stuff
+colonialmarines.json
diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm
index 113b78dbad..f1424f5560 100644
--- a/code/__DEFINES/__game.dm
+++ b/code/__DEFINES/__game.dm
@@ -283,7 +283,6 @@ block( \
/// Only use the CEILING_PROTECTION_TIER_X defines for `protection_level`
#define CEILING_IS_PROTECTED(ceiling, protection_level) (ceiling >= protection_level)
-
// Default font settings
#define FONT_SIZE "5pt"
#define DEFAULT_FONT_COLOR "#09f"
@@ -493,6 +492,18 @@ block( \
#define TURF_PROTECTION_CAS 2
#define TURF_PROTECTION_OB 3
+/// Convert a turf protection level to a ceiling protection level
+/proc/get_ceiling_protection_level(turf_protection_level)
+ switch(turf_protection_level)
+ if(TURF_PROTECTION_OB)
+ return CEILING_PROTECTION_TIER_4
+ if(TURF_PROTECTION_CAS)
+ return CEILING_PROTECTION_TIER_3
+ if(TURF_PROTECTION_MORTAR)
+ return CEILING_PROTECTION_TIER_2
+ else
+ return CEILING_NO_PROTECTION
+
// Anything above the deck boundary is the upper deck, anything below is the lower deck
// This is exclusive, so anything ON the boundary is an edge case that's neither on the upper nor the lower deck
#define ALMAYER_DECK_BOUNDARY 101
diff --git a/code/__DEFINES/bullet_traits.dm b/code/__DEFINES/bullet_traits.dm
index 0ca3bce2e6..40e250cd0d 100644
--- a/code/__DEFINES/bullet_traits.dm
+++ b/code/__DEFINES/bullet_traits.dm
@@ -3,7 +3,7 @@
// list of args if there are any args
/// An entry to a list for giving projectiles bullet traits
/// Must be placed inside of a list
-#define BULLET_TRAIT_ENTRY(trait, args...) trait = #args ? list(##args) : null
+#define BULLET_TRAIT_ENTRY(trait, args...) trait = list(##args)
/// An entry to a list for giving projectiles bullet traits with a unique ID
/// Must be placed inside of a list
#define BULLET_TRAIT_ENTRY_ID(id, trait, args...) id = list(trait, ##args)
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index 6187a67825..9825cd118b 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "6.5.3"
+#define TGS_DMAPI_VERSION "6.6.0"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -129,6 +129,13 @@
/// DreamDaemon Ultrasafe security level.
#define TGS_SECURITY_ULTRASAFE 2
+/// DreamDaemon public visibility level.
+#define TGS_VISIBILITY_PUBLIC 0
+/// DreamDaemon private visibility level.
+#define TGS_VISIBILITY_PRIVATE 1
+/// DreamDaemon invisible visibility level.
+#define TGS_VISIBILITY_INVISIBLE 2
+
//REQUIRED HOOKS
/**
@@ -458,6 +465,10 @@
/world/proc/TgsSecurityLevel()
return
+/// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
+/world/proc/TgsVisibility()
+ return
+
/// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsTestMerges()
return
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index edc711d25b..1116f1acb2 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -732,11 +732,12 @@ world
if (isnull(dir))
dir = thing.dir
- if (ishuman(thing)) // Shitty workaround for a BYOND issue.
+ // Commented out because this is seemingly our source of bad icon operations
+ /* if (ishuman(thing)) // Shitty workaround for a BYOND issue.
var/icon/temp = icon2collapse
icon2collapse = icon()
icon2collapse.Insert(temp, dir = SOUTH)
- dir = SOUTH
+ dir = SOUTH*/
else
if (isnull(dir))
dir = SOUTH
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 4e4a1b3ff3..5d0d113b0c 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -21,7 +21,7 @@
var/char = copytext(hex, i, i + 1)
switch(char)
if("0")
- //Apparently, switch works with empty statements, yay! If that doesn't work, blame me, though. -- Urist
+ pass()
if("9", "8", "7", "6", "5", "4", "3", "2", "1")
num += text2num(char) * 16 ** power
if("a", "A")
@@ -77,7 +77,6 @@
hex += "E"
if(15.0)
hex += "F"
- else
power--
while(length(hex) < placeholder)
hex = text("0[]", hex)
@@ -165,8 +164,6 @@
return 6
if("SOUTHWEST")
return 10
- else
- return
//Converts an angle (degrees) into an ss13 direction
/proc/angle2dir(degree)
diff --git a/code/__odlint.dm b/code/__odlint.dm
new file mode 100644
index 0000000000..f425171337
--- /dev/null
+++ b/code/__odlint.dm
@@ -0,0 +1,11 @@
+// This file is included right at the start of the DME.
+// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase
+// These are essentially nitpicks the DM compiler should pick up on but doesnt
+
+#ifndef SPACEMAN_DMM
+#ifdef OPENDREAM
+// These are in their own file as you need to do it with an include as a hack to avoid
+// SpacemanDMM evaluating the #pragma lines, even if its outside a block it cares about
+#include "__pragmas.dm"
+#endif
+#endif
diff --git a/code/__pragmas.dm b/code/__pragmas.dm
new file mode 100644
index 0000000000..39c14e1bbc
--- /dev/null
+++ b/code/__pragmas.dm
@@ -0,0 +1,27 @@
+//1000-1999
+#pragma FileAlreadyIncluded error
+#pragma MissingIncludedFile error
+#pragma MisplacedDirective error
+#pragma UndefineMissingDirective error
+#pragma DefinedMissingParen error
+#pragma ErrorDirective error
+#pragma WarningDirective error
+#pragma MiscapitalizedDirective error
+
+//2000-2999
+#pragma SoftReservedKeyword error
+#pragma DuplicateVariable error
+#pragma DuplicateProcDefinition error
+#pragma TooManyArguments error
+#pragma PointlessParentCall error
+#pragma PointlessBuiltinCall error
+#pragma SuspiciousMatrixCall error
+#pragma MalformedRange error
+#pragma InvalidRange error
+#pragma InvalidSetStatement error
+#pragma InvalidOverride error
+#pragma DanglingVarType error
+#pragma MissingInterpolatedExpression error
+
+//3000-3999
+#pragma EmptyBlock error
diff --git a/code/_byond_version_compat.dm b/code/_byond_version_compat.dm
index 719d85654b..26968f0f83 100644
--- a/code/_byond_version_compat.dm
+++ b/code/_byond_version_compat.dm
@@ -3,7 +3,7 @@
//Update this whenever you need to take advantage of more recent byond features
#define MIN_COMPILER_VERSION 514
#define MIN_COMPILER_BUILD 1588
-#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM)
+#if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) && !defined(OPENDREAM)
//Don't forget to update this part
#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
#error You need version 514.1588 or higher
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 0f81b0173a..20aa208131 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -30,7 +30,7 @@
#define CBT
#endif
-#if !defined(CBT) && !defined(SPACEMAN_DMM)
+#if !defined(CBT) && !defined(SPACEMAN_DMM) && !defined(OPENDREAM)
#warn Building with Dream Maker is no longer supported and will result in errors.
#warn In order to build, run BUILD.bat in the bin directory.
#warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build.
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index 23da8cc8c9..3d544dca13 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -131,7 +131,7 @@ SUBSYSTEM_DEF(atoms)
switch(result)
if (INITIALIZE_HINT_NORMAL)
- // pass
+ pass()
if(INITIALIZE_HINT_LATELOAD)
if(arguments[1]) //mapload
late_loaders += A
diff --git a/code/controllers/subsystem/init/law.dm b/code/controllers/subsystem/init/law.dm
index 52fbbbeadf..c7ade81597 100644
--- a/code/controllers/subsystem/init/law.dm
+++ b/code/controllers/subsystem/init/law.dm
@@ -8,20 +8,24 @@ SUBSYSTEM_DEF(law_init)
var/list/minor_law = list()
var/list/major_law = list()
var/list/capital_law = list()
+ var/list/precautionary_law = list()
/datum/controller/subsystem/law_init/Initialize()
- for(var/L in subtypesof(/datum/law/optional_law))
- optional_law += new L
+ for(var/law in subtypesof(/datum/law/optional_law))
+ optional_law += new law
- for(var/L in subtypesof(/datum/law/minor_law))
- minor_law += new L
+ for(var/law in subtypesof(/datum/law/minor_law))
+ minor_law += new law
- for(var/L in subtypesof(/datum/law/major_law))
- major_law += new L
+ for(var/law in subtypesof(/datum/law/major_law))
+ major_law += new law
- for(var/L in subtypesof(/datum/law/capital_law))
- capital_law += new L
+ for(var/law in subtypesof(/datum/law/capital_law))
+ capital_law += new law
- laws = optional_law + minor_law + major_law + capital_law
+ for(var/law in subtypesof(/datum/law/precautionary_charge))
+ precautionary_law += new law
+
+ laws = optional_law + minor_law + major_law + capital_law + precautionary_law
return SS_INIT_SUCCESS
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index afecabd74b..be69bdad1b 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -29,9 +29,7 @@ SUBSYSTEM_DEF(mapping)
/datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig()
if(!configs)
configs = load_map_configs(ALL_MAPTYPES, error_if_missing = FALSE)
- for(var/i in GLOB.clients)
- var/client/C = i
- winset(C, null, "mainwindow.title='[CONFIG_GET(string/title)] - [SSmapping.configs[SHIP_MAP].map_name]'")
+ world.name = "[CONFIG_GET(string/title)] - [SSmapping.configs[SHIP_MAP].map_name]"
/datum/controller/subsystem/mapping/Initialize(timeofday)
HACK_LoadMapConfig()
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index 3882228a5a..a56e10636a 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -273,7 +273,7 @@ SUBSYSTEM_DEF(vote)
question = "Gamemode vote"
randomize_entries = TRUE
for(var/mode_type in config.gamemode_cache)
- var/datum/game_mode/M = initial(mode_type)
+ var/datum/game_mode/M = mode_type
if(initial(M.config_tag))
var/vote_cycle_met = !initial(M.vote_cycle) || (text2num(SSperf_logging?.round?.id) % initial(M.vote_cycle) == 0)
if(initial(M.votable) && vote_cycle_met)
diff --git a/code/datums/_ndatabase/code/brsql_adapter.dm b/code/datums/_ndatabase/code/brsql_adapter.dm
index a424b3fd6f..251267a04f 100644
--- a/code/datums/_ndatabase/code/brsql_adapter.dm
+++ b/code/datums/_ndatabase/code/brsql_adapter.dm
@@ -101,8 +101,8 @@
SSdatabase.create_parametric_query(query_updatetable, qpars, CB)
/datum/db/adapter/brsql_adapter/insert_table(table_name, list/values, datum/callback/CB, sync = FALSE)
- if(!sync)
- set waitfor = 0
+ set waitfor = FALSE
+
var/length = values.len
var/list/qpars = list()
var/query_inserttable = getquery_insert_table(table_name, values, qpars)
diff --git a/code/datums/_ndatabase/code/native_adapter.dm b/code/datums/_ndatabase/code/native_adapter.dm
index a5e4d41fb6..1c23a6ceab 100644
--- a/code/datums/_ndatabase/code/native_adapter.dm
+++ b/code/datums/_ndatabase/code/native_adapter.dm
@@ -83,8 +83,7 @@
SSdatabase.create_query(query_gettable, CB)
/datum/db/adapter/native_adapter/update_table(table_name, list/values, datum/callback/CB, sync = FALSE)
- if(!sync)
- set waitfor = 0
+ set waitfor = FALSE
for(var/list/vals in values)
var/list/qpars = list()
diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm
index 638b487515..7957a8a994 100644
--- a/code/datums/ammo/ammo.dm
+++ b/code/datums/ammo/ammo.dm
@@ -174,6 +174,15 @@
else
living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
+/datum/ammo/proc/slowdown(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(iscarbonsizexeno(living_mob))
+ var/mob/living/carbon/xenomorph/target = living_mob
+ target.apply_effect(1, SUPERSLOW)
+ target.apply_effect(2, SLOW)
+ to_chat(target, SPAN_XENODANGER("You are slowed by the sudden impact!"))
+ else
+ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
+
/datum/ammo/proc/pushback(mob/target_mob, obj/projectile/fired_projectile, max_range = 2)
if(!target_mob || target_mob == fired_projectile.firer || fired_projectile.distance_travelled > max_range || target_mob.lying)
return
diff --git a/code/datums/ammo/bullet/revolver.dm b/code/datums/ammo/bullet/revolver.dm
index 339609f57b..633bf3e2f7 100644
--- a/code/datums/ammo/bullet/revolver.dm
+++ b/code/datums/ammo/bullet/revolver.dm
@@ -27,8 +27,9 @@
penetration = ARMOR_PENETRATION_TIER_4
accuracy = HIT_ACCURACY_TIER_3
-/datum/ammo/bullet/revolver/heavy/on_hit_mob(mob/M, obj/projectile/P)
- knockback(M, P, 4)
+/datum/ammo/bullet/revolver/heavy/on_hit_mob(mob/entity, obj/projectile/bullet)
+ slowdown(entity, bullet)
+ pushback(entity, bullet, 4)
/datum/ammo/bullet/revolver/incendiary
name = "incendiary revolver bullet"
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index 6533086d98..79ba9fff97 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -168,7 +168,7 @@
return
var/deathtime = world.time - usr.timeofdeath
- if(deathtime < 1 MINUTES) //Nice try, ghosting right after the announcement
+ if(deathtime < 30 SECONDS) //Nice try, ghosting right after the announcement
if(SSmapping.configs[GROUND_MAP].map_name != MAP_WHISKEY_OUTPOST) // people ghost so often on whiskey outpost.
to_chat(src, SPAN_WARNING("You ghosted too recently."))
return
diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm
index a5baf09a13..7522878822 100644
--- a/code/datums/keybinding/client.dm
+++ b/code/datums/keybinding/client.dm
@@ -4,8 +4,8 @@
/datum/keybinding/client/admin_help
- hotkey_keys = list("F1")
- classic_keys = list("F1")
+ hotkey_keys = list("Unbound")
+ classic_keys = list("Unbound")
name = "admin_help"
full_name = "Admin Help"
description = "Ask an admin for help."
diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm
index 3f00c26b6d..83b9be0ac0 100644
--- a/code/datums/langchat/langchat.dm
+++ b/code/datums/langchat/langchat.dm
@@ -47,6 +47,13 @@
M.client.images -= langchat_image
langchat_listeners = null
+/atom/proc/langchat_set_x_offset()
+ langchat_image.maptext_x = world.icon_size / 2 - langchat_image.maptext_width / 2
+/atom/movable/langchat_set_x_offset()
+ langchat_image.maptext_x = bound_width / 2 - langchat_image.maptext_width / 2
+/mob/langchat_set_x_offset()
+ langchat_image.maptext_x = icon_size / 2 - langchat_image.maptext_width / 2
+
///Creates the image if one does not exist, resets settings that are modified by speech procs.
/atom/proc/langchat_make_image(override_color = null)
if(!langchat_image)
@@ -56,8 +63,8 @@
langchat_image.appearance_flags = NO_CLIENT_COLOR|KEEP_APART|RESET_COLOR|RESET_TRANSFORM
langchat_image.maptext_y = langchat_height
langchat_image.maptext_height = 64
- langchat_image.maptext_x = - world.icon_size - get_pixel_position_x(src, TRUE)
langchat_image.maptext_y -= LANGCHAT_MESSAGE_POP_Y_SINK
+ langchat_set_x_offset()
langchat_image.pixel_y = 0
langchat_image.alpha = 0
@@ -102,7 +109,7 @@
langchat_image.maptext = text_to_display
langchat_image.maptext_width = LANGCHAT_WIDTH
- langchat_image.maptext_x = - world.icon_size - get_pixel_position_x(src, TRUE)
+ langchat_set_x_offset()
langchat_listeners = listeners
for(var/mob/M in langchat_listeners)
@@ -149,7 +156,7 @@
langchat_image.maptext = text_to_display
langchat_image.maptext_width = LANGCHAT_WIDTH * 2
- langchat_image.maptext_x = - world.icon_size - get_pixel_position_x(src, TRUE) - LANGCHAT_WIDTH / 2
+ langchat_set_x_offset()
langchat_listeners = listeners
for(var/mob/M in langchat_listeners)
diff --git a/code/datums/statistics/entities/death_stats.dm b/code/datums/statistics/entities/death_stats.dm
index 1753536026..f0055ed871 100644
--- a/code/datums/statistics/entities/death_stats.dm
+++ b/code/datums/statistics/entities/death_stats.dm
@@ -87,6 +87,10 @@
if(!mind || statistic_exempt)
return
+ var/area/area = get_area(death_loc)
+ handle_observer_message(cause_data, cause_mob, death_loc, area)
+
+ // Perform logging above before get_player_from_key to avoid delays
var/datum/entity/statistic/death/new_death = DB_ENTITY(/datum/entity/statistic/death)
var/datum/entity/player/player_entity = get_player_from_key(mind.ckey)
if(player_entity)
@@ -98,11 +102,8 @@
new_death.role_name = get_role_name()
new_death.mob_name = real_name
new_death.faction_name = faction
-
new_death.is_xeno = FALSE
-
- var/area/A = get_area(death_loc)
- new_death.area_name = A.name
+ new_death.area_name = area.name
new_death.cause_name = cause_data?.cause_name
var/datum/entity/player/cause_player = get_player_from_key(cause_data?.ckey)
@@ -132,8 +133,6 @@
new_death.total_damage_taken = life_damage_taken_total
new_death.total_revives_done = life_revives_total
- handle_observer_message(cause_data, cause_mob, death_loc, A)
-
if(round_statistics)
round_statistics.track_death(new_death)
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index 3c4104b6c2..c9092a750f 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -59,8 +59,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/structure/machinery/optable/get_examine_text(mob/user)
. = ..()
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index 16512a944b..e6fc0c8de7 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -431,8 +431,6 @@
var/wireIndex = AAlarmWireColorToIndex[wireColor] //not used in this function
AAlarmwires |= wireFlag
switch(wireIndex)
- if(AALARM_WIRE_IDSCAN)
-
if(AALARM_WIRE_POWER)
shorted = 0
shock(usr, 50)
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index b70829c708..d82591994e 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -551,7 +551,7 @@
var/speed = ((wires & WIRE_MOTOR1) ? 1:0) + ((wires & WIRE_MOTOR2) ? 2:0)
switch(speed)
if(0)
- // do nothing
+ pass()
if(1)
process_bot()
spawn(2)
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index adce72f7d8..304b24a14f 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -53,8 +53,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/structure/machinery/computer/bullet_act(obj/projectile/Proj)
if(exproof)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index b68ca41d6f..fe85599018 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -123,7 +123,6 @@
else
dat += "
[bdat]"
- else
else
dat += text("{Log In}", src)
show_browser(user, dat, "Medical Records", "med_rec")
@@ -365,8 +364,6 @@
for(var/datum/data/record/E in GLOB.data_core.medical)
if ((E.fields["ref"] == R.fields["ref"] || E.fields["id"] == R.fields["id"]))
M = E
- else
- //Foreach continue //goto(2540)
src.active1 = R
src.active2 = M
src.screen = 4
@@ -417,16 +414,12 @@
for(var/datum/data/record/R as anything in GLOB.data_core.medical)
if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"])))
src.active2 = R
- else
- //Foreach continue //goto(3229)
if (!active2)
temp = "Could not locate record [t1]."
else
for(var/datum/data/record/E in GLOB.data_core.general)
if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
src.active1 = E
- else
- //Foreach continue //goto(3334)
src.screen = 4
if (href_list["print_p"])
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 3858230a08..f6adaa8edd 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -20,7 +20,6 @@
for(var/obj/structure/machinery/mass_driver/M in machines)
if(M.id == id)
connected = M
- else
return
return
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 12f4faedc9..c5a13e2c3e 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -55,8 +55,7 @@
dat += " Locked Down |"
else
dat += " Operating Normally |"
- if (!R.canmove)
- else if(R.cell)
+ if(R.canmove && R.cell)
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
else
dat += " No Cell Installed |"
diff --git a/code/game/machinery/computer/sentencing.dm b/code/game/machinery/computer/sentencing.dm
index 52a4159a2a..3aa9b5a032 100644
--- a/code/game/machinery/computer/sentencing.dm
+++ b/code/game/machinery/computer/sentencing.dm
@@ -78,6 +78,7 @@
data["laws"] += list(create_law_data("Major Laws", SSlaw_init.major_law))
data["laws"] += list(create_law_data("Capital Laws", SSlaw_init.capital_law))
data["laws"] += list(create_law_data("Optional Laws", SSlaw_init.optional_law))
+ data["laws"] += list(create_law_data("Precautionary Laws", SSlaw_init.precautionary_law))
return data
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index f891d46bc3..a20d344b53 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -43,16 +43,16 @@
var/dat
if (temp)
- dat = text("[]
Clear Screen", temp, src)
+ dat = "[temp]
Clear Screen"
else
- dat = text("Confirm Identity: []
", src, (scan ? text("[]", scan.name) : "----------"))
+ dat = "Confirm Identity: [scan ? scan.name : "----------"]
"
if (authenticated)
switch(screen)
if(1.0)
dat += {"
"}
- dat += text("Search Records
", src)
- dat += text("New Record
", src)
+ dat += "Search Records
"
+ dat += "New Record
"
dat += {"
@@ -70,20 +70,19 @@
if(!isnull(GLOB.data_core.general))
for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order))
for(var/datum/data/record/E in GLOB.data_core.security)
- var/background
- dat += text("[] | ", background, src, R, R.fields["name"])
- dat += text("[] | ", R.fields["id"])
- dat += text("[] | ", R.fields["rank"])
+ dat += "
[R.fields["name"]] | "
+ dat += "[R.fields["id"]] | "
+ dat += "[R.fields["rank"]] | "
dat += "
"
- dat += text("Record Maintenance
", src)
- dat += text("{Log Out}",src)
+ dat += "Record Maintenance
"
+ dat += "{Log Out}"
if(2.0)
dat += "Records Maintenance
"
dat += "
Delete All Records
Back"
if(3.0)
dat += "Employment Record
"
if ((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))
- dat += text(" \
+ dat += "")
+ |
"
else
dat += "General Record Lost!
"
- dat += text("\nDelete Record (ALL)
\nPrint Record
\nBack
", src, src, src)
+ dat += "\nDelete Record (ALL)
\nPrint Record
\nBack
"
if(4.0)
if(!Perp.len)
- dat += text("ERROR. String could not be located.
Back", src)
+ dat += "ERROR. String could not be located.
Back"
else
dat += {"
"}
- dat += text("Search Results for '[]': | ", tempname)
+ dat += "Search Results for '[tempname]': | "
dat += {"
@@ -121,17 +120,14 @@
if(istype(Perp[i+1],/datum/data/record/))
var/datum/data/record/E = Perp[i+1]
crimstat = E.fields["criminal"]
- var/background
- background = "'background-color:#00FF7F;'"
- dat += text("[] | ", background, src, R, R.fields["name"])
- dat += text("[] | ", R.fields["id"])
- dat += text("[] | ", R.fields["rank"])
- dat += text("[] |
", crimstat)
+ dat += "[R.fields["name"]] | "
+ dat += "[R.fields["id"]] | "
+ dat += "[R.fields["rank"]] | "
+ dat += "[crimstat] |
"
dat += "
"
- dat += text("
Return to index.", src)
- else
+ dat += "
Return to index."
else
- dat += text("{Log In}", src)
+ dat += "{Log In}"
show_browser(user, dat, "Employment Records", "secure_rec", "size=600x400")
onclose(user, "secure_rec")
return
@@ -342,7 +338,6 @@ What a mess.*/
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
GLOB.data_core.medical -= R
qdel(R)
- else
QDEL_NULL(active1)
else
temp = "This function does not appear to be working at the moment. Our apologies."
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index e6df92d258..99996bea89 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -54,7 +54,6 @@
src.health -= W.force * 0.75
if("brute")
src.health -= W.force * 0.5
- else
if (src.health <= 0)
src.explode()
..()
diff --git a/code/game/machinery/medical_pod/bodyscanner.dm b/code/game/machinery/medical_pod/bodyscanner.dm
index 4756121e50..fdcd0ceb62 100644
--- a/code/game/machinery/medical_pod/bodyscanner.dm
+++ b/code/game/machinery/medical_pod/bodyscanner.dm
@@ -62,8 +62,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
#ifdef OBJECTS_PROXY_SPEECH
// Transfers speech to occupant
@@ -124,8 +122,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/structure/machinery/body_scanconsole/power_change()
..()
diff --git a/code/game/machinery/medical_pod/sleeper.dm b/code/game/machinery/medical_pod/sleeper.dm
index 805fedb292..35d9a44863 100644
--- a/code/game/machinery/medical_pod/sleeper.dm
+++ b/code/game/machinery/medical_pod/sleeper.dm
@@ -385,7 +385,6 @@
t1 = "Unconscious"
if(2)
t1 = "*dead*"
- else
to_chat(user, "[]\t Health %: [] ([])", (occupant.health > 50 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.health, t1)
to_chat(user, "[]\t -Core Temperature: []°C ([]°F)
", (occupant.bodytemperature > 50 ? "" : ""), occupant.bodytemperature-T0C, occupant.bodytemperature*1.8-459.67)
to_chat(user, "[]\t -Brute Damage %: []", (occupant.getBruteLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getBruteLoss())
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index bf7c4fffee..861f5b37eb 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -774,8 +774,8 @@ GLOBAL_LIST_EMPTY(vending_products)
desc = "An automated closet hooked up to a colossal storage of standard-issue uniform and armor."
icon_state = "clothing"
use_points = TRUE
+ show_points = TRUE
vendor_theme = VENDOR_THEME_USCM
- show_points = FALSE
vend_flags = VEND_CLUTTER_PROTECTION | VEND_UNIFORM_RANKS | VEND_UNIFORM_AUTOEQUIP | VEND_CATEGORY_CHECK
/obj/structure/machinery/cm_vending/clothing/ui_static_data(mob/user)
diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm
index a74dd923cb..414ab4a562 100644
--- a/code/game/machinery/vending/vending.dm
+++ b/code/game/machinery/vending/vending.dm
@@ -398,28 +398,25 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
/obj/structure/machinery/vending/proc/GetProductIndex(datum/data/vending_product/product)
var/list/plist
- switch(product.category)
- if(CAT_NORMAL)
- plist=product_records
- if(CAT_HIDDEN)
- plist=hidden_records
- if(CAT_COIN)
- plist=coin_records
- else
- warning("UNKNOWN CATEGORY [product.category] IN TYPE [product.product_path] INSIDE [type]!")
+ if(product.category == CAT_NORMAL)
+ plist = product_records
+ else if(product.category == CAT_HIDDEN)
+ plist = hidden_records
+ else if(product.category == CAT_COIN)
+ plist = coin_records
+ else
+ warning("UNKNOWN CATEGORY [product.category] IN TYPE [product.product_path] INSIDE [type]!")
return plist.Find(product)
/obj/structure/machinery/vending/proc/GetProductByID(pid, category)
- switch(category)
- if(CAT_NORMAL)
- return product_records[pid]
- if(CAT_HIDDEN)
- return hidden_records[pid]
- if(CAT_COIN)
- return coin_records[pid]
- else
- warning("UNKNOWN PRODUCT: PID: [pid], CAT: [category] INSIDE [type]!")
- return null
+ if(category == CAT_NORMAL)
+ return product_records[pid]
+ else if(category == CAT_HIDDEN)
+ return hidden_records[pid]
+ else if(category == CAT_COIN)
+ return coin_records[pid]
+ else
+ warning("UNKNOWN PRODUCT: PID: [pid], CAT: [category] INSIDE [type]!")
/obj/structure/machinery/vending/attack_hand(mob/user)
if(is_tipped_over)
diff --git a/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm b/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm
index 830511ad4b..d7d49a8ae0 100644
--- a/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm
@@ -1,9 +1,9 @@
//------------GEAR VENDOR---------------
GLOBAL_LIST_INIT(cm_vending_gear_commanding_officer, list(
- list("COMMANDING OFFICER'S PRIMARY (CHOOSE 1)", 0, null, null, null),
- list("M46C pulse rifle", 0, /obj/effect/essentials_set/co/riflepreset, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
- list("M56C Smartgun", 0, /obj/item/storage/box/m56c_system, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+ list("COMMANDER'S PRIMARY (CHOOSE 1)", 0, null, null, null),
+ list("M46C Pulse Rifle", 0, /obj/effect/essentials_set/co/riflepreset, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
+ list("M56C Smartgun", 0, /obj/item/storage/box/m56c_system, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("PRIMARY AMMUNITION", 0, null, null, null),
list("M41A MK1 Magazine", 30, /obj/item/ammo_magazine/rifle/m41aMK1, null, VENDOR_ITEM_RECOMMENDED),
@@ -28,11 +28,19 @@ GLOBAL_LIST_INIT(cm_vending_gear_commanding_officer, list(
list("M41A Rubber Shot Magazine", 10, /obj/item/ammo_magazine/rifle/rubber, null, VENDOR_ITEM_REGULAR),
list("Beanbag Slugs", 10, /obj/item/ammo_magazine/shotgun/beanbag, null, VENDOR_ITEM_REGULAR),
+ list("EXPLOSIVES", 0, null, null, null),
+ list("HEDP Grenade Pack", 15, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
+ list("HEFA Grenade Pack", 15, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR),
+ list("WP Grenade Pack", 15, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+
list("RAIL ATTACHMENTS", 0, null, null, null),
list("Red-Dot Sight", 15, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
list("Reflex Sight", 15, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
list("S4 2x Telescopic Mini-Scope", 15, /obj/item/attachable/scope/mini, null, VENDOR_ITEM_REGULAR),
+ list("Helmet Visors", 0, null, null, null),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_RECOMMENDED),
+
list("UNDERBARREL ATTACHMENTS", 0, null, null, null),
list("Laser Sight", 15, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -40,12 +48,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_commanding_officer, list(
list("Underbarrel Shotgun", 15, /obj/item/attachable/attached_gun/shotgun, null, VENDOR_ITEM_REGULAR),
list("Underbarrel Extinguisher", 15, /obj/item/attachable/attached_gun/extinguisher, null, VENDOR_ITEM_REGULAR),
list("Underbarrel Flamethrower", 15, /obj/item/attachable/attached_gun/flamer, null, VENDOR_ITEM_REGULAR),
+ list("Underbarrel Grenade Launcher", 5, /obj/item/attachable/attached_gun/grenade, null, VENDOR_ITEM_REGULAR),
list("BARREL ATTACHMENTS", 0, null, null, null),
- list("Suppressor", 15, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
list("Extended Barrel", 15, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Recoil Compensator", 15, /obj/item/attachable/compensator, null, VENDOR_ITEM_REGULAR),
- ))
+ list("Suppressor", 15, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ ))
/obj/structure/machinery/cm_vending/gear/commanding_officer
name = "\improper ColMarTech Commanding Officer Weapon Rack"
@@ -63,9 +72,15 @@ GLOBAL_LIST_INIT(cm_vending_gear_commanding_officer, list(
GLOBAL_LIST_INIT(cm_vending_clothing_commanding_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
- list("Satchel", 0, /obj/item/storage/backpack/satchel/lockable, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("COMMANDING OFFICER ESSENTIALS KIT (TAKE ALL)", 0, null, null, null),
+ list("Commanding Officer Essentials Kit", 0, /obj/effect/essentials_set/commanding_officer, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("BAGS (CHOOSE 1)", 0, null, null, null),
+ list("Commanding Officer Backpack", 0, /obj/item/storage/backpack/mcommander, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+ list("Secure Satchel", 0, /obj/item/storage/backpack/satchel/lockable, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Commanding Officer's M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/CO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Commanding Officer's M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/CO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
@@ -84,8 +99,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_commanding_officer, list(
list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
list("Security HUD Glasses", 0, /obj/item/clothing/glasses/sunglasses/sechud, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
- list("BELTS (TAKE ALL)", 0, null, null, null),
+ list("BELTS (CHOOSE 1)", 0, null, null, null),
list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Holster Toolrig", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -110,6 +130,15 @@ GLOBAL_LIST_INIT(cm_vending_clothing_commanding_officer, list(
/obj/structure/machinery/cm_vending/clothing/commanding_officer/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_commanding_officer
+/obj/effect/essentials_set/commanding_officer
+ spawned_gear_list = list(
+ /obj/item/device/binoculars/range/designator,
+ /obj/item/map/current_map,
+ /obj/item/device/whistle,
+ /obj/item/weapon/gun/energy/taser,
+ /obj/item/device/megaphone,
+ )
+
// This gets around the COs' weapon not spawning without incendiary mag.
/obj/effect/essentials_set/co/riflepreset
spawned_gear_list = list(
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
index 11c9341da0..50b83ccdc5 100644
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
@@ -13,13 +13,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
- list("Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
list("Operations Uniform", 0, /obj/item/clothing/under/marine/officer/boiler, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR),
list("JACKET (CHOOSE 1)", 0, null, null, null),
list("Service Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
@@ -33,65 +33,21 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
- list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("BACKPACK (CHOOSE 1)", 0, null, null, null),
list("Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
list("Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
- list("Radio Telephone Pack", 0, /obj/item/storage/backpack/marine/satchel/rto, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED),
- list("BELT (CHOOSE 1)", 0, null, null, null),
- list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
-
- list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
- list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
- list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("MASK (CHOOSE 1)", 0, null, null, null),
- list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("OTHER SUPPLIES", 0, null, null, null),
list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
- list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
- list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
- list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
- list("Machete Scabbard (Full)", 2, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR)
))
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
new file mode 100644
index 0000000000..ac7b22b4e0
--- /dev/null
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
@@ -0,0 +1,83 @@
+/obj/structure/machinery/cm_vending/clothing/staff_officer_armory
+ name = "\improper ColMarTech Staff Officer Armory Equipment Rack"
+ desc = "An automated combat equipment vendor for Staff Officers."
+ req_access = list(ACCESS_MARINE_COMMAND)
+ icon_state = "mar_rack"
+ vendor_role = list(JOB_SO)
+
+/obj/structure/machinery/cm_vending/clothing/staff_officer_armory/get_listed_products(mob/user)
+ return GLOB.cm_vending_clothing_staff_officer_armory
+
+//------------GEAR---------------
+
+GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer_armory, list(
+ list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+
+ list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
+ list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+ list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
+ list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+
+ list("OTHER SUPPLIES", 0, null, null, null),
+ list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_REGULAR),
+ list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
+ list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+ list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
+ list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
+ list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR),
+ list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR)
+ ))
diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index 2b46d0bead..9e19ee7a32 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -191,7 +191,7 @@
turf_to_vent_to = H.loc
return turf_to_vent_to
-/obj/structure/machinery/cm_vending/sorted/cargo_guns/blend
+/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend
icon_state = "req_guns_wall"
tiles_with = list(
/obj/structure/window/framed/almayer,
@@ -295,7 +295,7 @@
updateUsrDialog()
return //We found our item, no reason to go on.
-/obj/structure/machinery/cm_vending/sorted/cargo_ammo/blend
+/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend
icon_state = "req_ammo_wall"
tiles_with = list(
/obj/structure/window/framed/almayer,
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index bebe0ec8b2..56c6ae45cd 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -95,8 +95,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/effect/glowshroom/fire_act(exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm
index 1f52901c21..82566c8030 100644
--- a/code/game/objects/explosion_recursive.dm
+++ b/code/game/objects/explosion_recursive.dm
@@ -149,7 +149,7 @@ explosion resistance exactly as much as their health
switch(angle) //this reduces power when the explosion is going around corners
if (0)
- //no change
+ pass()
if (45)
if(spread_power >= 0)
spread_power *= 0.75
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 2d142789fd..9dbe33e051 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -268,7 +268,6 @@ cases. Override_icon_state should be a list.*/
size = "huge"
if(SIZE_MASSIVE)
size = "massive"
- else
. += "This is a [blood_color ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item."
if(desc)
. += desc
diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm
index 06a4d785e6..2892eb1113 100644
--- a/code/game/objects/items/reagent_containers/food/snacks.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks.dm
@@ -182,10 +182,9 @@
return 0
var/inaccurate = 0
- if(W.sharp == IS_SHARP_ITEM_ACCURATE)
- else if(W.sharp == IS_SHARP_ITEM_BIG)
+ if(W.sharp == IS_SHARP_ITEM_BIG)
inaccurate = 1
- else
+ else if(W.sharp != IS_SHARP_ITEM_ACCURATE)
return 1
if ( !istype(loc, /obj/structure/surface/table) && \
(!isturf(src.loc) || \
@@ -206,7 +205,7 @@
SPAN_NOTICE("[user] crudely slices \the [src] with [W]!"), \
SPAN_NOTICE("You crudely slice \the [src] with your [W]!") \
)
- slices_lost = rand(1,min(1,round(slices_num/2)))
+ slices_lost = rand(1,max(1,round(slices_num/2)))
var/reagents_per_slice = reagents.total_volume/slices_num
for(var/i=1 to (slices_num-slices_lost))
var/obj/slice = new slice_path (src.loc)
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 32e9a03046..754a36c601 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -40,7 +40,7 @@
H.pain.recalculate_pain()
H.updatehealth()
use(1)
- var/others_msg = "\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"] [S.display_name] with \the [src]." // Needs to create vars for these messages because macro doesn't work otherwise
+ var/others_msg = "\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " the"] [S.display_name] with \the [src]." // Needs to create vars for these messages because macro doesn't work otherwise
var/user_msg = "You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.display_name]."
user.visible_message(SPAN_NOTICE("[others_msg]"),\
SPAN_NOTICE("[user_msg]"))
diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm
index ef2bcfb721..b4a6c3a8c1 100644
--- a/code/game/objects/items/storage/large_holster.dm
+++ b/code/game/objects/items/storage/large_holster.dm
@@ -326,7 +326,7 @@
/obj/item/storage/large_holster/fuelpack/get_examine_text(mob/user)
. = ..()
if(contents.len)
- . += "It is storing \a M240-T incinerator unit."
+ . += "It is storing a M240-T incinerator unit."
if (get_dist(user, src) <= 1)
if(fuel)
. += "The [fuel.caliber] currently contains: [round(fuel.get_ammo_percent())]% fuel."
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 6d49db9950..f38f15cfef 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -168,7 +168,7 @@
name = "synth survival pouch"
desc = "An emergency pouch given to synthetics in the event of an emergency."
icon_state = "tools"
- storage_slots = 7
+ storage_slots = 6
max_w_class = SIZE_MEDIUM
can_hold = list(
/obj/item/device/flashlight,
@@ -181,7 +181,6 @@
)
/obj/item/storage/pouch/survival/synth/full/fill_preset_inventory()
- new /obj/item/device/flashlight(src)
new /obj/item/tool/crowbar/red(src)
new /obj/item/tool/weldingtool(src)
new /obj/item/stack/cable_coil(src)
diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm
index 0ca2ccb1dd..5a72ec33ea 100644
--- a/code/game/objects/structures/barricade/barricade.dm
+++ b/code/game/objects/structures/barricade/barricade.dm
@@ -78,7 +78,7 @@
switch(dir)
if(SOUTH)
layer = ABOVE_MOB_LAYER
- else if(NORTH)
+ if(NORTH)
layer = initial(layer) - 0.01
else
layer = initial(layer)
diff --git a/code/game/objects/structures/barricade/handrail.dm b/code/game/objects/structures/barricade/handrail.dm
index ea10dc7256..ae166dbbf9 100644
--- a/code/game/objects/structures/barricade/handrail.dm
+++ b/code/game/objects/structures/barricade/handrail.dm
@@ -24,7 +24,7 @@
switch(dir)
if(SOUTH)
layer = ABOVE_MOB_LAYER
- else if(NORTH)
+ if(NORTH)
layer = initial(layer) - 0.01
else
layer = initial(layer)
diff --git a/code/game/objects/structures/bookcase.dm b/code/game/objects/structures/bookcase.dm
index c71b2853ea..becb0906e3 100644
--- a/code/game/objects/structures/bookcase.dm
+++ b/code/game/objects/structures/bookcase.dm
@@ -58,8 +58,6 @@
contents_explosion(severity)
deconstruct(FALSE)
return
- else
- return
/obj/structure/bookcase/update_icon()
if(contents.len < 5)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 7848aaba48..b000fd5733 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -51,8 +51,6 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/storage/firstaid/o2(src)
- if ("nothing")
- // doot
// teehee - Ah, tg coders...
if ("delete")
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 7c9faaf1a0..9f0417ccb3 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -130,8 +130,6 @@
contents_explosion(severity)
deconstruct(FALSE)
return
- else
- return
/obj/structure/closet/crate/alpha
name = "alpha squad crate"
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 38201e052c..d2b3d36b59 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -43,8 +43,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
diff --git a/code/game/objects/structures/reagent_dispensers.dm b/code/game/objects/structures/reagent_dispensers.dm
index 7dc6d883a2..6471dfa215 100644
--- a/code/game/objects/structures/reagent_dispensers.dm
+++ b/code/game/objects/structures/reagent_dispensers.dm
@@ -119,8 +119,6 @@
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
deconstruct(FALSE)
return
- else
- return
/obj/structure/reagent_dispensers/attack_hand()
if(!reagents || reagents.locked)
diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm
index d968b8d72f..009eab0b6f 100644
--- a/code/game/turfs/walls/wall_types.dm
+++ b/code/game/turfs/walls/wall_types.dm
@@ -24,8 +24,8 @@
/obj/structure/girder,
/obj/structure/machinery/door,
/obj/structure/machinery/cm_vending/sorted/attachments/blend,
- /obj/structure/machinery/cm_vending/sorted/cargo_ammo/blend,
- /obj/structure/machinery/cm_vending/sorted/cargo_guns/blend,
+ /obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend,
+ /obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend,
)
/turf/closed/wall/almayer/update_icon()
diff --git a/code/game/verbs/records.dm b/code/game/verbs/records.dm
index f09de72da2..18ed35ee63 100644
--- a/code/game/verbs/records.dm
+++ b/code/game/verbs/records.dm
@@ -143,7 +143,7 @@
dat += ""
var/color = "#008800"
- var/add_dat = "Add Admin Note
Add Confidential Admin Note
"
+ var/add_dat = "Add Admin Note
Add Confidential Admin Note
"
switch(note_category)
if(NOTE_MERIT)
color = "#9e3dff"
diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm
index ca1072a95b..852c8b6b32 100644
--- a/code/modules/admin/tabs/event_tab.dm
+++ b/code/modules/admin/tabs/event_tab.dm
@@ -931,13 +931,8 @@
message_admins("[key_name(usr)] has fired \an [warhead.name] at ([target.x],[target.y],[target.z]).")
warhead.warhead_impact(target)
- if(istype(warhead, /obj/structure/ob_ammo/warhead/cluster))
- // so the user's screen can shake for the duration of the cluster, otherwise we get a runtime.
- QDEL_IN(warhead, OB_CLUSTER_DURATION)
- else
- QDEL_IN(warhead, OB_CRASHING_DOWN)
else
- warhead.loc = target
+ warhead.forceMove(target)
/client/proc/change_taskbar_icon()
set name = "Set Taskbar Icon"
diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm
index 8bbc999252..27e457be6d 100644
--- a/code/modules/admin/topic/topic.dm
+++ b/code/modules/admin/topic/topic.dm
@@ -336,86 +336,6 @@
/////////////////////////////////////new ban stuff
- else if(href_list["jobban2"])
-// if(!check_rights(R_BAN)) return
- /*
- var/mob/M = locate(href_list["jobban2"])
- if(!ismob(M))
- to_chat(usr, "This can only be used on instances of type /mob")
- return
-
- if(!M.ckey) //sanity
- to_chat(usr, "This mob has no ckey")
- return
- if(!RoleAuthority)
- to_chat(usr, "The Role Authority is not set up!")
- return
-
- var/datum/entity/player/P = get_player_from_key(M.ckey)
-
- var/dat = ""
- var/body
- var/jobs = ""
-
- /***********************************WARNING!************************************
- The jobban stuff looks mangled and disgusting
- But it looks beautiful in-game
- -Nodrak
- ************************************WARNING!***********************************/
-//Regular jobs
- //Command (Blue)
- jobs += generate_job_ban_list(M, ROLES_CIC, "CIC", "ddddff")
- jobs += "
"
- // SUPPORT
- jobs += generate_job_ban_list(M, ROLES_AUXIL_SUPPORT, "Support", "ccccff")
- jobs += "
"
- // MPs
- jobs += generate_job_ban_list(M, ROLES_POLICE, "Police", "ffdddd")
- jobs += "
"
- //Engineering (Yellow)
- jobs += generate_job_ban_list(M, ROLES_ENGINEERING, "Engineering", "fff5cc")
- jobs += "
"
- //Cargo (Yellow) //Copy paste, yada, yada. Hopefully Snail can rework this in the future.
- jobs += generate_job_ban_list(M, ROLES_REQUISITION, "Requisition", "fff5cc")
- jobs += "
"
- //Medical (White)
- jobs += generate_job_ban_list(M, ROLES_MEDICAL, "Medical", "ffeef0")
- jobs += "
"
- //Marines
- jobs += generate_job_ban_list(M, ROLES_MARINES, "Marines", "ffeeee")
- jobs += "
"
- // MISC
- jobs += generate_job_ban_list(M, ROLES_MISC, "Misc", "aaee55")
- jobs += "
"
- // Xenos (Orange)
- jobs += generate_job_ban_list(M, ROLES_XENO, "Xenos", "a268b1")
- jobs += "
"
- //Extra (Orange)
- var/isbanned_dept = jobban_isbanned(M, "Syndicate", P)
- jobs += ""
- jobs += "Extras |
---|
"
-
- //ERT
- if(jobban_isbanned(M, "Emergency Response Team", P) || isbanned_dept)
- jobs += "Emergency Response Team | "
- else
- jobs += "Emergency Response Team | "
-
- //Survivor
- if(jobban_isbanned(M, "Survivor", P) || isbanned_dept)
- jobs += "Survivor | "
- else
- jobs += "Survivor | "
-
- if(jobban_isbanned(M, "Agent", P) || isbanned_dept)
- jobs += "Agent | "
- else
- jobs += "Agent | "
-
- body = "[jobs]"
- dat = "[body]"
- show_browser(usr, dat, "Job-Ban Panel: [M.name]", "jobban2", "size=800x490")
- return*/ // DEPRECATED
//JOBBAN'S INNARDS
else if(href_list["jobban3"])
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return
@@ -697,7 +617,6 @@
to_world(SPAN_NOTICE("The mode is now: [GLOB.master_mode]!"))
Game() // updates the main game menu
SSticker.save_mode(GLOB.master_mode)
- .(href, list("c_mode"=1))
else if(href_list["f_secret2"])
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index d5d44a0479..d1e7f83dac 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -321,7 +321,7 @@
I = icon(icon_file, icon_state, SOUTH)
var/c = initial(item.color)
if (!isnull(c) && c != "#FFFFFF")
- I.Blend(initial(c), ICON_MULTIPLY)
+ I.Blend(c, ICON_MULTIPLY)
else
if (ispath(k, /obj/effect/essentials_set))
var/obj/effect/essentials_set/es_set = new k()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index b09589990e..2e1f8f33f2 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1414,11 +1414,8 @@ var/const/MAX_SAVE_SLOTS = 10
var/all_ok = TRUE
for(var/i=1, i<=length(new_xeno_prefix), i++)
var/ascii_char = text2ascii(new_xeno_prefix,i)
- switch(ascii_char)
- // A .. Z
- if(65 to 90) //Uppercase Letters will work
- else
- all_ok = FALSE //everything else - won't
+ if(ascii_char < 65 || ascii_char > 90)
+ all_ok = FALSE //everything else - won't
if(all_ok)
xeno_prefix = new_xeno_prefix
owner.load_xeno_name()
diff --git a/code/modules/clothing/glasses/night.dm b/code/modules/clothing/glasses/night.dm
index afb711c3ca..2a3780832e 100644
--- a/code/modules/clothing/glasses/night.dm
+++ b/code/modules/clothing/glasses/night.dm
@@ -187,7 +187,7 @@
if(target)
var/obj/item/clothing/glasses/night/m56_goggles/G = target
G.set_far_sight(owner, !G.far_sight)
- to_chat(owner, SPAN_NOTICE("You [G.far_sight ? "enable" : "disable"] \the [src]'s far sight system."))
+ to_chat(owner, SPAN_NOTICE("You [G.far_sight ? "enable" : "disable"] \the [G]'s far sight system."))
/datum/action/item_action/m56_goggles/far_sight/update_button_icon()
if(!target)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index d969587e32..cc7fee7724 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -423,7 +423,7 @@
return
var/obj/item/weapon/gun/W = usr.get_active_hand()
if (W.w_class > SIZE_MEDIUM)
- to_chat(usr, SPAN_DANGER("This gun won't fit in \the belt!"))
+ to_chat(usr, SPAN_DANGER("This gun won't fit in the belt!"))
return
holstered = usr.get_active_hand()
usr.drop_held_item()
diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index 8d80f80860..78bdfc3d77 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -217,15 +217,16 @@ var/list/ob_type_fuel_requirements
if(user)
tray.warhead.source_mob = user
- tray.warhead.warhead_impact(target)
+ var/obj/structure/ob_ammo/warhead/warhead = tray.warhead
+ tray.warhead = null
+ warhead.moveToNullspace()
+ warhead.warhead_impact(target)
sleep(OB_CRASHING_DOWN)
ob_cannon_busy = FALSE
-
chambered_tray = FALSE
tray.fuel_amt = 0
- QDEL_NULL(tray.warhead)
tray.update_icon()
update_icon()
@@ -357,6 +358,9 @@ var/list/ob_type_fuel_requirements
var/max_shake_factor
var/max_knockdown_time
+ // Note that the warhead should be cleared of location by the firing proc,
+ // then auto-delete at the end of the warhead_impact implementation
+
/obj/structure/ob_ammo/warhead/proc/warhead_impact(turf/target)
// make damn sure everyone hears it
playsound(target, 'sound/weapons/gun_orbital_travel.ogg', 100, 1, 75)
@@ -366,7 +370,7 @@ var/list/ob_type_fuel_requirements
message_admins(FONT_SIZE_XL("CLICK TO CANCEL THIS OB"))
var/relative_dir
- for(var/mob/M in range(30, target))
+ for(var/mob/M in urange(30, target))
if(get_turf(M) == target)
relative_dir = 0
else
@@ -377,7 +381,7 @@ var/list/ob_type_fuel_requirements
)
sleep(OB_TRAVEL_TIMING/3)
- for(var/mob/M in range(25, target))
+ for(var/mob/M in urange(25, target))
if(get_turf(M) == target)
relative_dir = 0
else
@@ -388,7 +392,7 @@ var/list/ob_type_fuel_requirements
)
sleep(OB_TRAVEL_TIMING/3)
- for(var/mob/M in range(15, target))
+ for(var/mob/M in urange(15, target))
M.show_message( \
SPAN_HIGHDANGER("OH GOD THE SKY WILL EXPLODE!!!"), SHOW_MESSAGE_VISIBLE, \
SPAN_HIGHDANGER("YOU SHOULDN'T BE HERE!"), SHOW_MESSAGE_AUDIBLE \
@@ -455,6 +459,7 @@ var/list/ob_type_fuel_requirements
handle_ob_shake(target)
sleep(double_explosion_delay)
cell_explosion(target, standard_power, standard_falloff, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, cause_data)
+ qdel(src)
return
// Checks turf around the target
@@ -464,8 +469,11 @@ var/list/ob_type_fuel_requirements
handle_ob_shake(target)
sleep(double_explosion_delay)
cell_explosion(target, standard_power, standard_falloff, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, cause_data)
+ qdel(src)
return
+ qdel(src)
+
/obj/structure/ob_ammo/warhead/incendiary
name = "\improper Incendiary orbital warhead"
warhead_kind = "incendiary"
@@ -497,6 +505,7 @@ var/list/ob_type_fuel_requirements
sleep(clear_delay)
fire_spread(target, cause_data, distance, fire_level, burn_level, fire_color, fire_type, TURF_PROTECTION_OB)
+ qdel(src)
/obj/structure/ob_ammo/warhead/cluster
name = "\improper Cluster orbital warhead"
@@ -529,12 +538,16 @@ var/list/ob_type_fuel_requirements
for(var/i = 1 to total_amount)
for(var/k = 1 to instant_amount)
- var/turf/U = pick(turf_list)
- if(protected_by_pylon(TURF_PROTECTION_OB, U)) //If the turf somehow gained OB protection while the cluster was firing
+ var/turf/selected_turf = pick(turf_list)
+ if(protected_by_pylon(TURF_PROTECTION_OB, selected_turf))
+ continue
+ var/area/selected_area = get_area(selected_turf)
+ if(CEILING_IS_PROTECTED(selected_area?.ceiling, CEILING_PROTECTION_TIER_4))
continue
- fire_in_a_hole(U)
+ fire_in_a_hole(selected_turf)
sleep(delay_between_clusters)
+ QDEL_IN(src, 5 SECONDS) // Leave time for last handle_ob_shake below
/obj/structure/ob_ammo/warhead/cluster/proc/fire_in_a_hole(turf/loc)
new /obj/effect/overlay/temp/blinking_laser (loc)
diff --git a/code/modules/desert_dam/filtration/consoles.dm b/code/modules/desert_dam/filtration/consoles.dm
index 038b96eb47..8c2814fafd 100644
--- a/code/modules/desert_dam/filtration/consoles.dm
+++ b/code/modules/desert_dam/filtration/consoles.dm
@@ -35,8 +35,6 @@ var/global/river_activated = FALSE
if (prob(10))
get_broken()
return
- else
- return
/obj/structure/machinery/filtration/console/proc/get_broken()
if(damaged)
diff --git a/code/modules/flufftext/Chinese.dm b/code/modules/flufftext/Chinese.dm
index 36da1d307a..6b19dd61fc 100644
--- a/code/modules/flufftext/Chinese.dm
+++ b/code/modules/flufftext/Chinese.dm
@@ -62,12 +62,12 @@
//remove complex/simple -u- glide final_syllables
if(initial.initial_sound_flags & SIMPLE_U_ONLY)
for(var/datum/chinese_sound/final_syllable/final_syllable as anything in possible_final_syllables)
- if(initial(initial(final_syllable.vowel_class)) == VOWEL_CLASS_BACK_CLOSE)
+ if(initial(final_syllable.vowel_class) == VOWEL_CLASS_BACK_CLOSE)
possible_final_syllables -= final_syllable
possible_final_syllables += /datum/chinese_sound/final_syllable/u
else if(initial.initial_sound_flags & HALF_U)
for(var/datum/chinese_sound/final_syllable/final_syllable as anything in possible_final_syllables)
- if(initial(initial(final_syllable.vowel_class)) == VOWEL_CLASS_BACK_CLOSE && initial(final_syllable.final_syllable_sound_flags) & U_GROUP_FULL)
+ if(initial(final_syllable.vowel_class) == VOWEL_CLASS_BACK_CLOSE && initial(final_syllable.final_syllable_sound_flags) & U_GROUP_FULL)
possible_final_syllables -= final_syllable
//check for if the sound is alveolo-palatal or sibilant/retroflex - then remove or keep front close vowels accordingly
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index a00e4f1889..fa947cfa01 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -417,7 +417,7 @@
dress_extra = list(/obj/item/storage/large_holster/ceremonial_sword/full)
dress_hat = list(/obj/item/clothing/head/marine/peaked/captain/white, /obj/item/clothing/head/marine/peaked/captain/black, /obj/item/clothing/head/marine/peaked)
dress_shoes = list(/obj/item/clothing/shoes/dress/commander)
- dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/officer/white, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/black, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/suit, /obj/item/clothing/suit/storage/jacket/marine/dress)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/officer/white, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/black, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/suit, /obj/item/clothing/suit/storage/jacket/marine/dress, /obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat_grey, )
/datum/equipment_preset/uscm_ship/commander/New()
. = ..()
@@ -458,7 +458,6 @@
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/pistol/command(new_human), WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_L_HAND)
if(kit)
new_human.equip_to_slot_or_del(new kit(new_human), WEAR_IN_BACK)
@@ -479,6 +478,8 @@
/obj/item/clothing/suit/storage/jacket/marine/dress/officer/black,
/obj/item/clothing/suit/storage/jacket/marine/dress/officer/suit,
/obj/item/clothing/suit/storage/jacket/marine/dress/officer/falcon,
+ /obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat_grey,
+ /obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat,
)
/datum/equipment_preset/uscm_ship/commander/council/load_gear(mob/living/carbon/human/new_human)
@@ -512,7 +513,7 @@
minimap_icon = list("cic" = MINIMAP_ICON_COLOR_HEAD)
minimap_background = MINIMAP_ICON_BACKGROUND_CIC
- dress_extra = list(/obj/item/storage/large_holster/ceremonial_sword/full)
+ dress_extra = list(/obj/item/storage/large_holster/ceremonial_sword/full, /obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat_grey,)
/datum/equipment_preset/uscm_ship/xo/New()
. = ..()
diff --git a/code/modules/law/law.dm b/code/modules/law/law.dm
index 7d59060470..20245beda3 100644
--- a/code/modules/law/law.dm
+++ b/code/modules/law/law.dm
@@ -13,13 +13,14 @@
var/special_punishment = "" //This is for special punishments
//These are bitflags to indicate the type of crime it is.
-#define OPTIONAL_CRIME 1
-#define MINOR_CRIME 2
-#define MAJOR_CRIME 4
-#define CAPITAL_CRIME 8
+#define OPTIONAL_CRIME (1<<0)
+#define MINOR_CRIME (1<<1)
+#define MAJOR_CRIME (1<<2)
+#define CAPITAL_CRIME (1<<3)
+#define PRECAUTIONARY_CHARGE (1<<4)
//These are bitflags for special punishments
-#define PERMABRIG 1
-#define DOUBLE_TIME 2
-#define SAME_AS_ACCUSED 4
-#define DEMOTION 8
+#define PERMABRIG (1<<0)
+#define DOUBLE_TIME (1<<1)
+#define SAME_AS_ACCUSED (1<<2)
+#define DEMOTION (1<<3)
diff --git a/code/modules/law/laws/capital_crime.dm b/code/modules/law/laws/capital_crime.dm
index 8329374e91..687c483c65 100644
--- a/code/modules/law/laws/capital_crime.dm
+++ b/code/modules/law/laws/capital_crime.dm
@@ -10,10 +10,6 @@
name = "Desertion"
desc = "Refusing to carry out the duties essential to one’s post or abandoning post unauthorized, without intent to return. (Retreating from the planet when the FOB is breached is not Desertion, refusing to return when ordered is)."
-/datum/law/capital_law/insanity
- name = "Insanity"
- desc = "Acting in such a manner which makes the offender not sound clear of mind. The CMO or Synthetic can declare insanity on a Marine if the Marine is believed to not be of sound mind. The Marine once cleared to be of sound mind may be released from this particular charge."
-
/datum/law/capital_law/jailbreak_escape
name = "Jailbreak/Escape"
desc = "To escape, assist in an escape, attempt escape, or be willfully and knowingly broken out."
@@ -30,7 +26,3 @@
/datum/law/capital_law/crimes_against_humanity
name = "Crimes against Humanity"
desc = "To engage in actions that violate human rights or otherwise are heinous acts against humans. Examples are torture, cannibalism and forced infection with Xenomorph larva."
-
-/datum/law/capital_law/prisoner_of_war
- name = "Prisoner of War"
- desc = "Being a member of a currently hostile faction to the USCM."
diff --git a/code/modules/law/laws/precautionary_charge.dm b/code/modules/law/laws/precautionary_charge.dm
new file mode 100644
index 0000000000..c06cd6ca52
--- /dev/null
+++ b/code/modules/law/laws/precautionary_charge.dm
@@ -0,0 +1,18 @@
+/datum/law/precautionary_charge
+ severity = PRECAUTIONARY_CHARGE
+ brig_time = PERMABRIG_SENTENCE
+ special_punishment = "Not inclusive for execution criteria."
+
+/datum/law/precautionary_charge/discretionary_arrest
+ name = "Discretionary Detainment"
+ desc = "A discretionary charge used by Commanding Officers to detain personnel for any reason, for the safety and benefit of the operation or security. The duration of this charge is variable and may be pardoned/lifted at any time by the Commanding Officer."
+ special_punishment = "Not inclusive for execution criteria. May only be appealed to the Acting Commander or Provost/USCM HC."
+
+/datum/law/precautionary_charge/insanity
+ name = "Insanity"
+ desc = "Acting in such a manner which makes the offender not sound clear of mind. The CMO or Synthetic can declare insanity on a Marine if the Marine is believed to not be of sound mind. The Marine once cleared to be of sound mind may be released from this particular charge."
+
+/datum/law/precautionary_charge/prisoner_of_war
+ name = "Prisoner of War"
+ desc = "Being a member of a legitimate and recognised faction currently hostile to the USCM."
+ special_punishment = "Execution is forbidden barring exceptional circumstances."
diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm
index 7746e90d96..695ec60463 100644
--- a/code/modules/mentor/mentorhelp.dm
+++ b/code/modules/mentor/mentorhelp.dm
@@ -169,10 +169,7 @@
if(sender == author)
message_title = "MentorHelp"
// If there's a mentor, let them mark it. If not, let them unmark it
- if(mentor)
- message_sender_options = " (Unmark"
- else
- message_sender_options = " (Mark"
+ message_sender_options = " (Mark/Unmark"
message_sender_options += " | Close | AutoResponse)"
var/message_header = SPAN_MENTORHELP("[message_title] from [message_sender_key]: [message_sender_options]
")
@@ -274,9 +271,10 @@
if("autorespond")
autoresponse(C)
if("mark")
- mark(C)
- if("unmark")
- unmark(C)
+ if(!mentor)
+ mark(C)
+ else
+ unmark(C)
if("close")
if(C == author || C == mentor || CLIENT_IS_STAFF(C))
close(C)
@@ -327,7 +325,7 @@
var/msg = SPAN_MENTORSAY("Autoresponse: [choice]")
switch(choice)
if("L: Discord")
- msg += "You can join our Discord server by using this link!"
+ msg += "You can join our Discord server by using this link!"
if("L: Xeno Quickstart Guide")
msg += "Your answer can be found on the Xeno Quickstart Guide on our wiki. Check it out here."
if("L: Marine Quickstart Guide")
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 4b86c827a0..28e45dcb2f 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -132,7 +132,6 @@
for(var/message_mode in parsed["modes"])
var/list/obj/item/used_radios = list()
switch(message_mode)
- if(MESSAGE_MODE_LOCAL)
if(RADIO_MODE_WHISPER)
whisper_say(message, speaking, alt_name)
return
@@ -142,9 +141,10 @@
used_radios += I
break // remove this if we EVER have two different intercomms with DIFFERENT frequencies IN ONE ROOM
else
- var/earpiece = get_type_in_ears(/obj/item/device/radio)
- if(earpiece)
- used_radios += earpiece
+ if(message_mode != MESSAGE_MODE_LOCAL)
+ var/earpiece = get_type_in_ears(/obj/item/device/radio)
+ if(earpiece)
+ used_radios += earpiece
var/sound/speech_sound
var/sound_vol
diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
index fa9036bd83..3fd8e53024 100644
--- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
@@ -357,8 +357,8 @@
/mob/living/carbon/xenomorph/proc/pounced_turf(turf/T)
if(!T.density)
- for(var/mob/M in T)
- pounced_mob(M)
+ for(var/mob/living/mob in T)
+ pounced_mob(mob)
break
else
turf_launch_collision(T)
diff --git a/code/modules/mob/new_player/sprite_accessories/hair.dm b/code/modules/mob/new_player/sprite_accessories/hair.dm
index 3f624b8d3b..3dfe8bebd5 100644
--- a/code/modules/mob/new_player/sprite_accessories/hair.dm
+++ b/code/modules/mob/new_player/sprite_accessories/hair.dm
@@ -738,3 +738,20 @@
/datum/sprite_accessory/hair/aviator
name = "Aviator"
icon_state = "hair_aviator"
+
+/datum/sprite_accessory/hair/gantleponytail
+ name = "Gentle Ponytail"
+ icon_state = "hair_gantleponytail"
+ gender = FEMALE
+
+/datum/sprite_accessory/hair/edgar
+ name = "Edgar"
+ icon_state = "hair_edgar"
+
+/datum/sprite_accessory/hair/emobun
+ name = "Emo Little Bun"
+ icon_state = "hair_emobun"
+
+/datum/sprite_accessory/hair/taper
+ name = "Taper"
+ icon_state = "hair_taper"
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 71d1090b20..bde60ef3a3 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -382,9 +382,6 @@
/obj/item/paper/attackby(obj/item/P, mob/user)
..()
- var/clown = 0
- if(user.mind && (user.job == "Clown"))
- clown = 1
if(istype(P, /obj/item/paper) || istype(P, /obj/item/photo))
if (istype(P, /obj/item/paper/carbon))
@@ -424,6 +421,7 @@
return
stamps += (stamps=="" ? "
" : "
") + "This paper has been stamped with the [P.name]."
+ playsound(src, 'sound/effects/alien_footstep_medium3.ogg', 20, TRUE, 6)
var/image/stampoverlay = image('icons/obj/items/paper.dmi')
var/x
@@ -439,11 +437,6 @@
stampoverlay.pixel_x = x
stampoverlay.pixel_y = y
- if(istype(P, /obj/item/tool/stamp/clown))
- if(!clown)
- to_chat(user, SPAN_NOTICE("You are totally unable to use the stamp. HONK!"))
- return
-
if(!ico)
ico = new
ico += "paper_[P.icon_state]"
diff --git a/code/modules/projectiles/guns/flamer/flamer.dm b/code/modules/projectiles/guns/flamer/flamer.dm
index 5e61f5daa0..2c842073d6 100644
--- a/code/modules/projectiles/guns/flamer/flamer.dm
+++ b/code/modules/projectiles/guns/flamer/flamer.dm
@@ -725,12 +725,12 @@ GLOBAL_LIST_EMPTY(flamer_particles)
var/direction_angle = dir2angle(direction)
var/obj/flamer_fire/foundflame = locate() in target
if(!foundflame)
- var/datum/reagent/R = new()
- R.intensityfire = burn_lvl
- R.durationfire = fire_lvl
- R.burn_sprite = burn_sprite
- R.burncolor = f_color
- new/obj/flamer_fire(target, cause_data, R)
+ var/datum/reagent/fire_reag = new()
+ fire_reag.intensityfire = burn_lvl
+ fire_reag.durationfire = fire_lvl
+ fire_reag.burn_sprite = burn_sprite
+ fire_reag.burncolor = f_color
+ new/obj/flamer_fire(target, cause_data, fire_reag)
if(target.density)
return
@@ -743,8 +743,6 @@ GLOBAL_LIST_EMPTY(flamer_particles)
var/angle = 180 - abs( abs( direction_angle - spread_direction_angle ) - 180 ) // the angle difference between the spread direction and initial direction
switch(angle) //this reduces power when the explosion is going around corners
- if (0)
- //no change
if (45)
spread_power *= 0.75
else //turns out angles greater than 90 degrees almost never happen. This bit also prevents trying to spread backwards
@@ -759,25 +757,29 @@ GLOBAL_LIST_EMPTY(flamer_particles)
if (spread_power < 1)
continue
- var/turf/T = get_step(target, spread_direction)
+ var/turf/picked_turf = get_step(target, spread_direction)
- if(!T) //prevents trying to spread into "null" (edge of the map?)
+ if(!picked_turf) //prevents trying to spread into "null" (edge of the map?)
continue
- if(aerial_flame_level && (T.get_pylon_protection_level() >= aerial_flame_level))
- break
+ if(aerial_flame_level)
+ if(picked_turf.get_pylon_protection_level() >= aerial_flame_level)
+ break
+ var/area/picked_area = get_area(picked_turf)
+ if(CEILING_IS_PROTECTED(picked_area?.ceiling, get_ceiling_protection_level(aerial_flame_level)))
+ break
spawn(0)
- fire_spread_recur(T, cause_data, spread_power, spread_direction, fire_lvl, burn_lvl, f_color, burn_sprite, aerial_flame_level)
+ fire_spread_recur(picked_turf, cause_data, spread_power, spread_direction, fire_lvl, burn_lvl, f_color, burn_sprite, aerial_flame_level)
/proc/fire_spread(turf/target, datum/cause_data/cause_data, range, fire_lvl, burn_lvl, f_color, burn_sprite = "dynamic", aerial_flame_level = TURF_PROTECTION_NONE)
- var/datum/reagent/R = new()
- R.intensityfire = burn_lvl
- R.durationfire = fire_lvl
- R.burn_sprite = burn_sprite
- R.burncolor = f_color
+ var/datum/reagent/fire_reag = new()
+ fire_reag.intensityfire = burn_lvl
+ fire_reag.durationfire = fire_lvl
+ fire_reag.burn_sprite = burn_sprite
+ fire_reag.burncolor = f_color
- new/obj/flamer_fire(target, cause_data, R)
+ new/obj/flamer_fire(target, cause_data, fire_reag)
for(var/direction in alldirs)
var/spread_power = range
switch(direction)
@@ -785,7 +787,11 @@ GLOBAL_LIST_EMPTY(flamer_particles)
spread_power--
else
spread_power -= 1.414 //diagonal spreading
- var/turf/T = get_step(target, direction)
- if(aerial_flame_level && (T.get_pylon_protection_level() >= aerial_flame_level))
- continue
- fire_spread_recur(T, cause_data, spread_power, direction, fire_lvl, burn_lvl, f_color, burn_sprite, aerial_flame_level)
+ var/turf/picked_turf = get_step(target, direction)
+ if(aerial_flame_level)
+ if(picked_turf.get_pylon_protection_level() >= aerial_flame_level)
+ continue
+ var/area/picked_area = get_area(picked_turf)
+ if(CEILING_IS_PROTECTED(picked_area?.ceiling, get_ceiling_protection_level(aerial_flame_level)))
+ continue
+ fire_spread_recur(picked_turf, cause_data, spread_power, direction, fire_lvl, burn_lvl, f_color, burn_sprite, aerial_flame_level)
diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm
index 89e6594c64..24eddf3159 100644
--- a/code/modules/projectiles/guns/smgs.dm
+++ b/code/modules/projectiles/guns/smgs.dm
@@ -11,7 +11,7 @@
aim_slowdown = SLOWDOWN_ADS_QUICK
wield_delay = WIELD_DELAY_VERY_FAST
attachable_allowed = list(
- /obj/item/attachable/suppressor,
+ /obj/item/attachable/suppressor,
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
/obj/item/attachable/flashlight,
@@ -50,7 +50,8 @@
/obj/item/attachable/suppressor,
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
- /obj/item/attachable/angledgrip,
+ /obj/item/attachable/angledgrip,
+ /obj/item/attachable/verticalgrip,
/obj/item/attachable/flashlight/grip,
/obj/item/attachable/stock/smg,
/obj/item/attachable/stock/smg/collapsible,
diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm
index 7f476cecf2..971051e9bf 100644
--- a/code/modules/reagents/chemistry_properties/prop_positive.dm
+++ b/code/modules/reagents/chemistry_properties/prop_positive.dm
@@ -548,7 +548,7 @@
rarity = PROPERTY_RARE
category = PROPERTY_TYPE_REACTANT
value = 3
- max_level = 1
+ COOLDOWN_DECLARE(ghost_notif)
/datum/chem_property/positive/defibrillating/on_delete(mob/living/M)
..()
@@ -574,19 +574,33 @@
/datum/chem_property/positive/defibrillating/process_dead(mob/living/M, potency = 1, delta_time)
if(!ishuman(M))
return
- var/mob/living/carbon/human/H = M
- H.apply_damage(-H.getOxyLoss(), OXY)
- if(H.check_tod() && H.is_revivable() && H.health > HEALTH_THRESHOLD_DEAD)
- to_chat(H, SPAN_NOTICE("You feel your heart struggling as you suddenly feel a spark, making it desperately try to continue pumping."))
- playsound_client(H.client, 'sound/effects/Heart Beat Short.ogg', 35)
- addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, handle_revive)), 50, TIMER_UNIQUE)
- else if (potency > POTENCY_MAX_TIER_1 && H.check_tod() && H.is_revivable() && H.health < HEALTH_THRESHOLD_DEAD) //Will heal if level is 7 or greater
- to_chat(H, SPAN_NOTICE("You feel a faint spark in your chest."))
- H.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, BRUTE)
- H.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, BURN)
- H.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, TOX)
- H.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, CLONE)
- H.apply_damage(-H.getOxyLoss(), OXY)
+ var/mob/living/carbon/human/dead = M
+ var/revivable = dead.check_tod() && dead.is_revivable()
+ if(revivable && (dead.health > HEALTH_THRESHOLD_DEAD))
+ addtimer(CALLBACK(dead, TYPE_PROC_REF(/mob/living/carbon/human, handle_revive)), 5 SECONDS)
+ to_chat(dead, SPAN_NOTICE("You feel your heart struggling as you suddenly feel a spark, making it desperately try to continue pumping."))
+ playsound_client(dead.client, 'sound/effects/heart_beat_short.ogg', 35)
+ else if ((potency >= 1) && revivable && dead.health <= HEALTH_THRESHOLD_DEAD) //heals on all level above 1. This is however, minimal.
+ to_chat(dead, SPAN_NOTICE("You feel a faint spark in your chest."))
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_VLOW, BRUTE)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_VLOW, BURN)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_VLOW, TOX)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_VLOW, CLONE)
+ dead.apply_damage(-dead.getOxyLoss(), OXY)
+ if(potency > CREATE_MAX_TIER_1) //heal more if higher levels
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, BRUTE)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, BURN)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, TOX)
+ dead.apply_damage(-potency * POTENCY_MULTIPLIER_LOW, CLONE)
+ if(dead.health < HEALTH_THRESHOLD_DEAD)
+ return
+ if(!COOLDOWN_FINISHED(src, ghost_notif))
+ return
+ var/mob/dead/observer/ghost = dead.get_ghost()
+ if(ghost?.client)
+ COOLDOWN_START(src, ghost_notif, 30 SECONDS)
+ playsound_client(ghost.client, 'sound/effects/adminhelp_new.ogg')
+ to_chat(ghost, SPAN_BOLDNOTICE("Your heart is struggling to pump! There is a chance you might get up!(Verbs -> Ghost -> Re-enter corpse, or click here!)"))
return TRUE
/datum/chem_property/positive/hyperdensificating
diff --git a/code/modules/reagents/chemistry_reagents/drink.dm b/code/modules/reagents/chemistry_reagents/drink.dm
index 468243a0cc..3bd7336c32 100644
--- a/code/modules/reagents/chemistry_reagents/drink.dm
+++ b/code/modules/reagents/chemistry_reagents/drink.dm
@@ -85,13 +85,13 @@
/datum/reagent/drink/carrotjuice/on_mob_life(mob/living/M)
. = ..()
- if(!.) return
+ if(!.)
+ return
M.ReduceEyeBlur(1)
M.ReduceEyeBlind(1)
- if(!data) data = 1
+ if(!data)
+ data = 1
switch(data)
- if(1 to 20)
- //nothing
if(21 to INFINITY)
if(prob(data-10))
M.disabilities &= ~NEARSIGHTED
diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm
index 41a0473394..b9a9f27a28 100644
--- a/code/modules/tgs/core/core.dm
+++ b/code/modules/tgs/core/core.dm
@@ -153,4 +153,9 @@
/world/TgsSecurityLevel()
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
if(api)
- api.SecurityLevel()
+ return api.SecurityLevel()
+
+/world/TgsVisibility()
+ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
+ if(api)
+ return api.Visibility()
diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm
index 68b0330fe8..93377079aa 100644
--- a/code/modules/tgs/core/datum.dm
+++ b/code/modules/tgs/core/datum.dm
@@ -57,3 +57,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api)
/datum/tgs_api/proc/SecurityLevel()
return TGS_UNIMPLEMENTED
+
+/datum/tgs_api/proc/Visibility()
+ return TGS_UNIMPLEMENTED
diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm
index 5d3d491a73..1b52b31d6a 100644
--- a/code/modules/tgs/v5/__interop_version.dm
+++ b/code/modules/tgs/v5/__interop_version.dm
@@ -1 +1 @@
-"5.6.1"
+"5.6.2"
diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm
index f973338daa..bdcd4e4dd5 100644
--- a/code/modules/tgs/v5/_defines.dm
+++ b/code/modules/tgs/v5/_defines.dm
@@ -48,6 +48,7 @@
#define DMAPI5_RUNTIME_INFORMATION_REVISION "revision"
#define DMAPI5_RUNTIME_INFORMATION_TEST_MERGES "testMerges"
#define DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL "securityLevel"
+#define DMAPI5_RUNTIME_INFORMATION_VISIBILITY "visibility"
#define DMAPI5_CHAT_UPDATE_CHANNELS "channels"
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 34cc43f876..45250efc46 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -4,6 +4,7 @@
var/instance_name
var/security_level
+ var/visibility
var/reboot_mode = TGS_REBOOT_MODE_NORMAL
@@ -54,6 +55,7 @@
version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION])
security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL]
+ visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY]
instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME]
var/list/revisionData = runtime_information[DMAPI5_RUNTIME_INFORMATION_REVISION]
@@ -252,3 +254,7 @@
/datum/tgs_api/v5/SecurityLevel()
RequireInitialBridgeResponse()
return security_level
+
+/datum/tgs_api/v5/Visibility()
+ RequireInitialBridgeResponse()
+ return visibility
diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm
index c679737dfc..f163adaaaf 100644
--- a/code/modules/tgs/v5/undefs.dm
+++ b/code/modules/tgs/v5/undefs.dm
@@ -48,6 +48,7 @@
#undef DMAPI5_RUNTIME_INFORMATION_REVISION
#undef DMAPI5_RUNTIME_INFORMATION_TEST_MERGES
#undef DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL
+#undef DMAPI5_RUNTIME_INFORMATION_VISIBILITY
#undef DMAPI5_CHAT_UPDATE_CHANNELS
diff --git a/colonialmarines.dme b/colonialmarines.dme
index dfab961be2..f964364243 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -1,4 +1,4 @@
-s// DM Environment file for colonialmarines.dme.
+// DM Environment file for colonialmarines.dme.
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// BEGIN_INTERNALS
@@ -11,6 +11,7 @@ s// DM Environment file for colonialmarines.dme.
#define DEBUG
// END_PREFERENCES
// BEGIN_INCLUDE
+#include "code\__odlint.dm"
#include "code\_byond_version_compat.dm"
#include "code\_compile_options.dm"
#include "code\_experiments.dm"
@@ -943,6 +944,7 @@ s// DM Environment file for colonialmarines.dme.
#include "code\game\machinery\vending\vendor_types\crew\sea.dm"
#include "code\game\machinery\vending\vendor_types\crew\senior_officers.dm"
#include "code\game\machinery\vending\vendor_types\crew\staff_officer.dm"
+#include "code\game\machinery\vending\vendor_types\crew\staff_officer_armory.dm"
#include "code\game\machinery\vending\vendor_types\crew\synthetic.dm"
#include "code\game\machinery\vending\vendor_types\crew\vehicle_crew.dm"
#include "code\game\machinery\vending\vendor_types\squad_prep\squad_engineer.dm"
@@ -1756,6 +1758,7 @@ s// DM Environment file for colonialmarines.dme.
#include "code\modules\law\laws\major_crime.dm"
#include "code\modules\law\laws\minor_crime.dm"
#include "code\modules\law\laws\optional.dm"
+#include "code\modules\law\laws\precautionary_charge.dm"
#include "code\modules\lighting\emissive_blocker.dm"
#include "code\modules\lighting\lighting_area.dm"
#include "code\modules\lighting\lighting_atom.dm"
diff --git a/dependencies.sh b/dependencies.sh
index 2889751d36..f88c2f9b0a 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -19,3 +19,5 @@ export SPACEMAN_DMM_VERSION=suite-1.7.2
# Python version for mapmerge and other tools
export PYTHON_VERSION=3.7.9
+
+export OPENDREAM_VERSION=0.2.0
diff --git a/html/changelogs/AutoChangeLog-pr-4657.yml b/html/changelogs/AutoChangeLog-pr-4657.yml
deleted file mode 100644
index 4641f99bb6..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4657.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "CapCamIII"
-delete-after: True
-changes:
- - balance: "Crawling now only takes 1 second to move and no longer has an overhead icon when doing it."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4693.yml b/html/changelogs/AutoChangeLog-pr-4693.yml
deleted file mode 100644
index e13e912459..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4693.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "fira"
-delete-after: True
-changes:
- - bugfix: "Fixed Rangefinders/Designators preventing you from lazing if you looked up/down them without moving."
- - bugfix: "Fixed Rangefinders/Designators forcing you to look up/down again if you had moved while using them."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4703.yml b/html/changelogs/AutoChangeLog-pr-4703.yml
deleted file mode 100644
index c140f3ea46..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4703.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "CapCamIII"
-delete-after: True
-changes:
- - spellcheck: "UPP Synth Survivor on the Trijent Dam nightmare is now called a Support Synthetic instead of a Combat Synthetic, as its not a combat synthetic"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4713.yml b/html/changelogs/AutoChangeLog-pr-4713.yml
deleted file mode 100644
index 71a3a8cfd0..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4713.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Steelpoint"
-delete-after: True
-changes:
- - rscadd: "UPP ERT's have a chance to be neutral to the USCM."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4721.yml b/html/changelogs/AutoChangeLog-pr-4721.yml
deleted file mode 100644
index 5c78dc4499..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4721.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "SpartanBobby"
-delete-after: True
-changes:
- - maptweak: "Fixes incorrect DIR on fireshutters in memorial"
- - maptweak: "Corrects lack of warning stripe tile under door in north brig maint"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4724.yml b/html/changelogs/AutoChangeLog-pr-4724.yml
deleted file mode 100644
index 326c78aea2..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4724.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "foxtrot1322"
-delete-after: True
-changes:
- - rscadd: "Added splints to the survival pouch"
- - rscadd: "Increased survival pouch storage space by 1"
- - spellcheck: "Updates the survival pouch's description"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4725.yml b/html/changelogs/AutoChangeLog-pr-4725.yml
deleted file mode 100644
index 4bd068d532..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4725.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "fira"
-delete-after: True
-changes:
- - bugfix: "Xeno and Megaphone abovehead chat speech should now properly be centered horizontally."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4727.yml b/html/changelogs/AutoChangeLog-pr-4727.yml
deleted file mode 100644
index e8bed292d8..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4727.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Birdtalon"
-delete-after: True
-changes:
- - rscadd: "USCM Service Jacket to SEA Vendor"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4730.yml b/html/changelogs/AutoChangeLog-pr-4730.yml
deleted file mode 100644
index b275429f33..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4730.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Fixed imaginary friends not initializing correctly and throwing a runtime"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4731.yml b/html/changelogs/AutoChangeLog-pr-4731.yml
deleted file mode 100644
index 44d62ec78b..0000000000
--- a/html/changelogs/AutoChangeLog-pr-4731.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - ui: "Tweaked the position of some ghost alerts"
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-10.yml b/html/changelogs/archive/2023-10.yml
index dda0958c93..fb4ed664fd 100644
--- a/html/changelogs/archive/2023-10.yml
+++ b/html/changelogs/archive/2023-10.yml
@@ -286,3 +286,97 @@
VileBeggar:
- rscadd: Dartboards are now functional and can be crafted with cardboard.
- bugfix: Fixed an issue with some deconstructed signs losing their icon.
+2023-10-21:
+ Birdtalon:
+ - rscadd: USCM Service Jacket to SEA Vendor
+ CapCamIII:
+ - balance: Crawling now only takes 1 second to move and no longer has an overhead
+ icon when doing it.
+ - balance: Timer on attempting to join ERT after death is now 30 seconds down from
+ 1 minute
+ - spellcheck: UPP Synth Survivor on the Trijent Dam nightmare is now called a Support
+ Synthetic instead of a Combat Synthetic, as its not a combat synthetic
+ Drathek:
+ - bugfix: Fixed imaginary friends not initializing correctly and throwing a runtime
+ - ui: Tweaked the position of some ghost alerts
+ SpartanBobby:
+ - maptweak: Fixes incorrect DIR on fireshutters in memorial
+ - maptweak: Corrects lack of warning stripe tile under door in north brig maint
+ Steelpoint:
+ - rscadd: UPP ERT's have a chance to be neutral to the USCM.
+ fira:
+ - bugfix: Xeno and Megaphone abovehead chat speech should now properly be centered
+ horizontally.
+ - bugfix: Fixed Rangefinders/Designators preventing you from lazing if you looked
+ up/down them without moving.
+ - bugfix: Fixed Rangefinders/Designators forcing you to look up/down again if you
+ had moved while using them.
+ foxtrot1322:
+ - rscadd: Added splints to the survival pouch
+ - rscadd: Increased survival pouch storage space by 1
+ - spellcheck: Updates the survival pouch's description
+2023-10-22:
+ Drathek:
+ - bugfix: Fix incend and cluster OBs not respecting ceiling OB protections.
+ - bugfix: Disabled code in icon2html that is causing bad icon operations
+ Morrow:
+ - server: the rustg mysql driver is now properly compatible with mariadb
+ Zonespace27:
+ - rscadd: Mentors can now unmark mhelps
+ fira:
+ - bugfix: Removed redundant double binding for F1 to AdminHelp from default keybinds.
+ This does not affect existing users or their settings.
+ - rscadd: Stamping papers now makes a noise.
+ - bugfix: Fixed incorrect Reqs vendors visuals on the Almayer. They now blend in
+ with the walls again.
+ - bugfix: Re-fixed Megaphone above-head-chat drifting to the left.
+ harryob:
+ - admin: no more href token errors when changing the game mode via game panel
+ - bugfix: mentorhelp response no longer gives a dead discord link
+ - admin: view-target-records now allows you to note people properly
+ kiVts:
+ - rscadd: Ghosts get notified when they are being revived by DFB property
+ - balance: DFB property healing threshold lowered, You can create DFB property higher
+ than one.
+ realforest2001:
+ - rscadd: Added Discretionary Arrest to JAS.
+ - rscadd: Added a new category to JAS, Precautionary Charges. Moves Insanity and
+ POW to this category.
+2023-10-23:
+ QuickLode:
+ - balance: Nerfs synth surv pouch by removing 1 storage slot.
+ SpypigDev:
+ - rscadd: CIC Armory SO vendor
+ - balance: Moved most combat-themed gear from SO spawn vendors, to CIC Armory vendor
+ - balance: Made RTO pack a point-buy item in CIC Armory vendor for SOs
+ Steelpoint:
+ - balance: Revolver Heavy ammo no longer stuns targets it strikes, it will instead
+ knock them back and slow them down for a short time.
+ harryob:
+ - server: the server now respects /string/title for late joiners
+ stalkerino:
+ - balance: m39 is able to use vertigrip
+2023-10-24:
+ Segrain:
+ - bugfix: Slicing food once again works as intended.
+2023-10-25:
+ fira:
+ - bugfix: Fixed Ghosts and Queen Eye occasionally "eating" pounces in place of a
+ mob on the same turf.
+ - bugfix: Re-Re-Fixed Xeno Above Head Chat offsets, for real this time
+ - bugfix: Fixed people talking in radios all the time. Finally some quiet.
+ - bugfix: deadchat death messages should now display immediately rather than being
+ delayed a couple seconds.
+2023-10-26:
+ 4hands44:
+ - rscadd: Added more attachments, and belts to the CO arsenal.
+ - rscadd: CO now has an Essentials Kit like other roles, containing his Designator,
+ and other useful tools.
+ - rscadd: Re-Adds Bridgecoat to some Officer Dress vendors. (Limited to CO(+) and
+ XO currently.)
+ - rscdel: Removed Laser Designator from CO spawn Preset.
+ - balance: CO can now vend welding Helmet visors.
+ - balance: Adds grenade packets to CO Vendor.
+ XDinka:
+ - rscadd: 'Added four new haircuts: gentle ponytail, edgar haircut, emo bun, taper
+ haircut.'
diff --git a/icons/mob/humans/human_hair.dmi b/icons/mob/humans/human_hair.dmi
index ca4a20bcaf..9634a2543a 100644
Binary files a/icons/mob/humans/human_hair.dmi and b/icons/mob/humans/human_hair.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index 538bf6ed00..2ea40d924d 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -43,7 +43,7 @@
if(tgui_alert(src, "This will open the discord in your browser. Are you sure?", "Confirm", list("Yes", "No")) != "Yes")
return
- src << link("https://discord.gg/pve-cmss13")
+ src << link("[CONFIG_GET(string/discordurl)]")
return
/client/verb/github()
diff --git a/interface/skin.dmf b/interface/skin.dmf
index b3a762081a..dfd279983e 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -164,7 +164,6 @@ window "mainwindow"
anchor2 = -1,-1
is-default = true
saved-params = "pos;size;is-minimized;is-maximized"
- title = "CM-SS13 - USS Almayer"
is-maximized = true
statusbar = false
icon = 'icons\\taskbar\\gml_distress.png'
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index c1cd06182d..aef7fc155d 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -529,19 +529,6 @@
icon_state = "red"
},
/area/almayer/hallways/aft_hallway)
-"abQ" = (
-/obj/structure/surface/rack,
-/obj/item/clothing/suit/storage/marine/light/vest,
-/obj/item/clothing/suit/storage/marine/light/vest,
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_y = 28
- },
-/turf/open/floor/almayer{
- icon_state = "redfull"
- },
-/area/almayer/command/cic)
"abR" = (
/obj/item/tank/phoron,
/turf/open/floor/almayer{
@@ -1574,20 +1561,6 @@
icon_state = "plating"
},
/area/almayer/shipboard/starboard_missiles)
-"afb" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/phone_base{
- dir = 4;
- name = "Starboard Railgun Control Telephone";
- phone_category = "Command";
- phone_id = "Starboard Railgun Control";
- pixel_x = -26
- },
-/obj/item/device/binoculars,
-/turf/open/floor/almayer{
- icon_state = "redfull"
- },
-/area/almayer/shipboard/starboard_missiles)
"afc" = (
/obj/structure/reagent_dispensers/water_cooler/stacks{
density = 0;
@@ -5557,23 +5530,6 @@
icon_state = "dark_sterile"
},
/area/almayer/living/pilotbunks)
-"asi" = (
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 4
- },
-/obj/structure/phone_base{
- dir = 8;
- name = "OT Telephone";
- phone_category = "Almayer";
- phone_id = "Ordnance Tech";
- pixel_x = 14
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "orange"
- },
-/area/almayer/engineering/engineering_workshop/hangar)
"asj" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -6963,43 +6919,6 @@
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
-"avL" = (
-/obj/structure/machinery/door_control{
- id = "ARES StairsUpper";
- name = "ARES Core Access";
- pixel_x = -10;
- pixel_y = -24;
- req_one_access_txt = "91;92"
- },
-/obj/structure/machinery/door_control{
- id = "ARES StairsLock";
- name = "ARES Exterior Lockdown";
- pixel_y = -24;
- req_one_access_txt = "91;92"
- },
-/obj/structure/surface/table/reinforced/almayer_B{
- climbable = 0;
- indestructible = 1;
- unacidable = 1;
- unslashable = 1
- },
-/obj/structure/phone_base/rotary{
- name = "AI Reception Telephone";
- phone_category = "ARES";
- phone_color = "blue";
- phone_id = "AI Reception"
- },
-/obj/structure/machinery/door_control{
- id = "ARES Emergency";
- name = "ARES Emergency Lockdown";
- pixel_x = 10;
- pixel_y = -24;
- req_one_access_txt = "91;92"
- },
-/turf/open/floor/almayer/no_build{
- icon_state = "ai_floors"
- },
-/area/almayer/command/airoom)
"avM" = (
/obj/structure/machinery/computer/cameras/almayer/ares{
dir = 8;
@@ -10368,28 +10287,6 @@
/obj/structure/flora/bush/ausbushes/var3/fullgrass,
/turf/open/floor/grass,
/area/almayer/living/starboard_garden)
-"aIC" = (
-/obj/structure/surface/table/almayer,
-/obj/effect/decal/warning_stripes{
- icon_state = "S"
- },
-/obj/structure/phone_base/rotary{
- name = "Researcher Office Telephone";
- phone_category = "Almayer";
- phone_id = "Research";
- pixel_y = 6
- },
-/obj/item/reagent_container/glass/beaker{
- pixel_x = 6;
- pixel_y = -1
- },
-/obj/item/reagent_container/glass/beaker/large{
- pixel_x = -6
- },
-/turf/open/floor/almayer{
- icon_state = "sterile_green_side"
- },
-/area/almayer/medical/medical_science)
"aID" = (
/obj/structure/machinery/light{
dir = 1
@@ -12000,19 +11897,6 @@
"aQv" = (
/turf/closed/wall/almayer,
/area/almayer/hallways/starboard_umbilical)
-"aQy" = (
-/obj/structure/phone_base{
- dir = 8;
- name = "RO Office Telephone";
- phone_category = "Offices";
- phone_id = "RO Office";
- pixel_x = 16
- },
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "green"
- },
-/area/almayer/squads/req)
"aQz" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -12126,6 +12010,16 @@
icon_state = "test_floor4"
},
/area/almayer/medical/medical_science)
+"aRf" = (
+/obj/structure/surface/table/woodentable/fancy,
+/obj/structure/phone_base/rotary{
+ name = "Captain's Office";
+ phone_category = "Offices";
+ phone_id = "Captain's Office";
+ pixel_y = 6
+ },
+/turf/open/floor/carpet,
+/area/almayer/living/commandbunks)
"aRi" = (
/obj/structure/bed/chair/office/dark{
dir = 1
@@ -16332,6 +16226,18 @@
icon_state = "green"
},
/area/almayer/living/offices)
+"bmZ" = (
+/obj/structure/phone_base/no_dnd{
+ name = "Requisition Telephone";
+ phone_category = "Almayer";
+ phone_id = "Requisition";
+ pixel_y = 30
+ },
+/turf/open/floor/almayer{
+ dir = 5;
+ icon_state = "plating"
+ },
+/area/almayer/squads/req)
"bnc" = (
/obj/structure/machinery/power/fusion_engine{
name = "\improper S-52 fusion reactor 9"
@@ -17514,13 +17420,6 @@
icon_state = "redfull"
},
/area/almayer/squads/alpha)
-"bti" = (
-/obj/structure/surface/table/almayer,
-/turf/open/floor/almayer{
- dir = 10;
- icon_state = "silver"
- },
-/area/almayer/command/computerlab)
"btk" = (
/obj/structure/sign/poster/pinup{
pixel_x = -30
@@ -19154,32 +19053,6 @@
},
/turf/open/floor/grass,
/area/almayer/living/starboard_garden)
-"bBD" = (
-/obj/structure/machinery/firealarm{
- pixel_y = 28
- },
-/obj/structure/sign/safety/maint{
- pixel_x = -17
- },
-/obj/structure/surface/table/almayer,
-/obj/structure/phone_base/rotary{
- name = "Telephone";
- phone_category = "Almayer";
- phone_id = "Auxiliary Support Office Second Line";
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/structure/phone_base/rotary{
- name = "Telephone";
- phone_category = "Almayer";
- phone_id = "Auxiliary Support Office";
- pixel_x = 8;
- pixel_y = 8
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/living/auxiliary_officer_office)
"bBN" = (
/obj/structure/machinery/light,
/turf/open/floor/plating/plating_catwalk,
@@ -22745,14 +22618,6 @@
},
/turf/closed/wall/almayer,
/area/almayer/squads/req)
-"bQS" = (
-/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo{
- icon_state = "req_ammo_wall"
- },
-/turf/open/floor/almayer{
- icon_state = "green"
- },
-/area/almayer/squads/req)
"bQU" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 8
@@ -24362,15 +24227,6 @@
/obj/structure/machinery/light,
/turf/open/floor/almayer,
/area/almayer/hallways/vehiclehangar)
-"bYa" = (
-/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo{
- icon_state = "req_guns_wall"
- },
-/turf/open/floor/almayer{
- dir = 10;
- icon_state = "green"
- },
-/area/almayer/squads/req)
"bYc" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
@@ -25691,30 +25547,6 @@
/obj/structure/window/framed/almayer,
/turf/open/floor/plating,
/area/almayer/hallways/hangar)
-"cdE" = (
-/obj/structure/surface/table/almayer,
-/obj/item/reagent_container/food/drinks/cans/waterbottle{
- pixel_x = 9;
- pixel_y = 3
- },
-/obj/item/prop/helmetgarb/flair_io{
- pixel_x = -10;
- pixel_y = 6
- },
-/obj/item/prop/magazine/boots/n160{
- pixel_x = -6;
- pixel_y = -5
- },
-/obj/structure/phone_base/rotary{
- name = "Flight Deck Telephone";
- phone_category = "Almayer";
- phone_id = "Flight Deck";
- pixel_y = 8
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/hallways/repair_bay)
"cdF" = (
/obj/structure/bed/chair/office/dark{
dir = 8
@@ -28243,6 +28075,12 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/commandbunks)
+"cCj" = (
+/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend,
+/turf/open/floor/almayer{
+ icon_state = "green"
+ },
+/area/almayer/squads/req)
"cCD" = (
/obj/structure/platform{
dir = 8;
@@ -28313,6 +28151,15 @@
icon_state = "test_floor4"
},
/area/almayer/living/grunt_rnr)
+"cDU" = (
+/obj/structure/phone_base/rotary{
+ name = "CL Office Telephone";
+ phone_category = "Almayer";
+ phone_id = "CL Office"
+ },
+/obj/structure/surface/table/woodentable/fancy,
+/turf/open/floor/carpet,
+/area/almayer/command/corporateliason)
"cDW" = (
/obj/structure/largecrate/supply/supplies/flares,
/turf/open/floor/almayer{
@@ -29285,6 +29132,27 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/upper_hull/u_f_s)
+"cYn" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/computer/emails{
+ pixel_x = 2;
+ pixel_y = 5
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_x = 7;
+ pixel_y = 29
+ },
+/obj/structure/phone_base/rotary{
+ name = "Reporter Telephone";
+ phone_category = "Almayer";
+ phone_id = "Reporter";
+ pixel_x = -17;
+ pixel_y = 2
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/combat_correspondent)
"cYu" = (
/obj/structure/pipes/vents/pump{
dir = 1
@@ -30012,14 +29880,6 @@
icon_state = "plate"
},
/area/almayer/hull/upper_hull/u_a_p)
-"dnm" = (
-/obj/structure/machinery/light{
- dir = 8
- },
-/turf/open/floor/almayer{
- icon_state = "silverfull"
- },
-/area/almayer/command/computerlab)
"dnC" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 6
@@ -30119,24 +29979,6 @@
icon_state = "cargo"
},
/area/almayer/squads/req)
-"dpn" = (
-/obj/structure/closet/secure_closet/freezer/fridge/full,
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/item/reagent_container/food/condiment/enzyme,
-/obj/item/reagent_container/food/condiment/enzyme,
-/obj/structure/phone_base{
- name = "Kitchen Telephone";
- phone_category = "Almayer";
- phone_id = "Kitchen";
- pixel_x = -8;
- pixel_y = 29
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/living/grunt_rnr)
"dpo" = (
/obj/structure/machinery/light{
dir = 1
@@ -30863,6 +30705,16 @@
icon_state = "orange"
},
/area/almayer/engineering/engine_core)
+"dDe" = (
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "silver"
+ },
+/area/almayer/command/computerlab)
"dDp" = (
/obj/effect/decal/warning_stripes{
icon_state = "W";
@@ -34008,16 +33860,6 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/medical_science)
-"eSJ" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/phone_base/rotary{
- name = "Captain's Office";
- phone_category = "Offices";
- phone_id = "Captain's Office";
- pixel_y = 6
- },
-/turf/open/floor/carpet,
-/area/almayer/living/commandbunks)
"eSU" = (
/obj/structure/prop/almayer/name_stencil{
icon_state = "almayer1"
@@ -34623,17 +34465,6 @@
icon_state = "plating"
},
/area/almayer/command/airoom)
-"ffV" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/crew/alt,
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Brig Cells Telephone";
- phone_category = "Almayer";
- phone_id = "Brig Cells";
- pixel_x = 15
- },
-/turf/open/floor/almayer,
-/area/almayer/shipboard/brig/processing)
"fgh" = (
/obj/structure/machinery/light/small{
dir = 8
@@ -34763,6 +34594,27 @@
icon_state = "orange"
},
/area/almayer/engineering/engine_core)
+"fjM" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/overwatch/almayer{
+ dir = 8;
+ layer = 3.2;
+ pixel_x = -17;
+ pixel_y = -17
+ },
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Delta Overwatch Telephone";
+ phone_category = "Command";
+ phone_id = "Delta Overwatch"
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_x = -17;
+ pixel_y = 7
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/cic)
"fjO" = (
/obj/item/tool/wet_sign,
/obj/effect/decal/cleanable/blood,
@@ -34931,6 +34783,17 @@
icon_state = "cargo"
},
/area/almayer/hull/upper_hull/u_a_s)
+"fox" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/computer/crew/alt,
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Brig Cells Telephone";
+ phone_category = "Almayer";
+ phone_id = "Brig Cells";
+ pixel_x = 15
+ },
+/turf/open/floor/almayer,
+/area/almayer/shipboard/brig/processing)
"foL" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -35368,6 +35231,32 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/port_point_defense)
+"fwb" = (
+/obj/structure/machinery/firealarm{
+ pixel_y = 28
+ },
+/obj/structure/sign/safety/maint{
+ pixel_x = -17
+ },
+/obj/structure/surface/table/almayer,
+/obj/structure/phone_base/rotary{
+ name = "Telephone";
+ phone_category = "Almayer";
+ phone_id = "Auxiliary Support Office Second Line";
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/structure/phone_base/rotary{
+ name = "Telephone";
+ phone_category = "Almayer";
+ phone_id = "Auxiliary Support Office";
+ pixel_x = 8;
+ pixel_y = 8
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/living/auxiliary_officer_office)
"fwD" = (
/obj/item/reagent_container/food/snacks/grown/poppy{
pixel_x = 4;
@@ -35581,6 +35470,24 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/command/lifeboat)
+"fCq" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/computer/cameras/almayer_network{
+ dir = 1
+ },
+/obj/structure/machinery/light{
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/structure/phone_base{
+ dir = 1;
+ name = "Brig Warden's Office Telephone";
+ phone_category = "Offices";
+ phone_id = "Brig Warden's Office";
+ pixel_x = -16
+ },
+/turf/open/floor/almayer,
+/area/almayer/shipboard/brig/main_office)
"fCL" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -36284,6 +36191,30 @@
/obj/effect/step_trigger/clone_cleaner,
/turf/closed/wall/almayer,
/area/almayer/hull/upper_hull/u_m_p)
+"fRb" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/overwatch/almayer{
+ dir = 8;
+ layer = 3.2;
+ pixel_x = -17;
+ pixel_y = -17
+ },
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Charlie Overwatch Telephone";
+ phone_category = "Command";
+ phone_id = "Charlie Overwatch"
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_x = -17;
+ pixel_y = 7
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/cic)
"fRr" = (
/obj/structure/machinery/light{
dir = 1
@@ -36306,6 +36237,14 @@
},
/turf/open/floor/almayer,
/area/almayer/hull/upper_hull/u_f_s)
+"fSc" = (
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/computerlab)
"fSl" = (
/obj/structure/machinery/line_nexter{
id = "line2";
@@ -36486,6 +36425,47 @@
icon_state = "plate"
},
/area/almayer/command/combat_correspondent)
+"fXF" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/door_control{
+ id = "CIC Lockdown";
+ name = "CIC Lockdown";
+ pixel_x = -7;
+ pixel_y = 9;
+ req_access_txt = "1"
+ },
+/obj/structure/machinery/door_control{
+ id = "Hangar Lockdown";
+ name = "Hangar Lockdown";
+ pixel_x = -7;
+ pixel_y = 2;
+ req_access_txt = "1"
+ },
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4;
+ icon_state = "exposed01-supply"
+ },
+/obj/structure/machinery/door_control{
+ id = "bot_armory";
+ name = "Armory Lockdown";
+ pixel_x = -7;
+ pixel_y = -5;
+ req_one_access_txt = "1;4"
+ },
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Combat Information Center Telephone";
+ phone_category = "Command";
+ phone_id = "Combat Information Center";
+ pixel_x = 5;
+ pixel_y = 4
+ },
+/obj/structure/machinery/door/window/westright{
+ dir = 4
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/cic)
"fXN" = (
/obj/effect/landmark/start/marine/delta,
/obj/effect/landmark/late_join/delta,
@@ -36621,24 +36601,6 @@
icon_state = "silver"
},
/area/almayer/command/cichallway)
-"gba" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/faxmachine/uscm/command{
- department = "AI Core";
- pixel_y = 8
- },
-/obj/structure/phone_base/rotary{
- name = "AI Core Telephone";
- phone_category = "ARES";
- phone_color = "blue";
- phone_id = "AI Core";
- pixel_x = 8;
- pixel_y = -8
- },
-/turf/open/floor/almayer/no_build{
- icon_state = "ai_floors"
- },
-/area/almayer/command/airoom)
"gbg" = (
/obj/structure/sign/safety/terminal{
pixel_x = 14;
@@ -37477,19 +37439,6 @@
icon_state = "silvercorner"
},
/area/almayer/command/cichallway)
-"gtA" = (
-/obj/structure/surface/table/reinforced/prison,
-/obj/structure/phone_base{
- dir = 8;
- name = "Medical Telephone";
- phone_category = "Almayer";
- phone_id = "Medical Lower";
- pixel_x = 16
- },
-/turf/open/floor/almayer{
- icon_state = "sterile_green"
- },
-/area/almayer/medical/lockerroom)
"guc" = (
/obj/structure/pipes/vents/scrubber{
dir = 1
@@ -38240,6 +38189,18 @@
icon_state = "green"
},
/area/almayer/living/offices)
+"gJW" = (
+/obj/structure/surface/table/almayer,
+/obj/effect/landmark/map_item,
+/obj/item/folder/red,
+/obj/structure/phone_base/rotary{
+ name = "Brig CMP's Office Telephone";
+ phone_category = "Offices";
+ phone_id = "Brig CMP's Office";
+ pixel_x = 15
+ },
+/turf/open/floor/almayer,
+/area/almayer/shipboard/brig/chief_mp_office)
"gKB" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/obj/structure/machinery/firealarm{
@@ -38380,6 +38341,11 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/perma)
+"gMr" = (
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/securestorage)
"gMx" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating/plating_catwalk,
@@ -39344,13 +39310,6 @@
},
/turf/open/floor/almayer,
/area/almayer/engineering/engine_core)
-"hgB" = (
-/obj/structure/surface/table/almayer,
-/turf/open/floor/almayer{
- dir = 8;
- icon_state = "silvercorner"
- },
-/area/almayer/command/computerlab)
"hgF" = (
/obj/effect/decal/warning_stripes{
icon_state = "E";
@@ -39936,31 +39895,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/almayer,
/area/almayer/hallways/port_hallway)
-"hvv" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/pipes/standard/manifold/hidden/supply{
- dir = 8
- },
-/obj/item/clipboard{
- base_pixel_x = 20;
- pixel_x = 5
- },
-/obj/item/paper{
- pixel_x = 5
- },
-/obj/item/tool/pen{
- pixel_x = 5
- },
-/obj/structure/surface/table/reinforced/black,
-/obj/structure/phone_base/rotary{
- name = "CIC Reception Telephone";
- phone_category = "Command";
- phone_id = "CIC Reception";
- pixel_x = -7;
- pixel_y = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/command/cic)
"hvw" = (
/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
/turf/open/floor/plating,
@@ -41306,18 +41240,6 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lower_medical_medbay)
-"hZU" = (
-/obj/structure/phone_base{
- name = "Brig Offices Telephone";
- phone_category = "Almayer";
- phone_id = "Brig Main Offices";
- pixel_y = 32
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "red"
- },
-/area/almayer/shipboard/brig/main_office)
"iag" = (
/obj/structure/surface/table/almayer,
/obj/item/tool/hand_labeler,
@@ -41368,6 +41290,11 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/upper_engineering/port)
+"iax" = (
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/computerlab)
"iaF" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 4
@@ -41753,25 +41680,6 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_s)
-"ijQ" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/door_control{
- id = "SEA Office Shutters";
- name = "SEA Office Shutters";
- pixel_y = 12
- },
-/obj/item/ashtray/plastic{
- pixel_x = 8;
- pixel_y = -4
- },
-/obj/structure/phone_base/rotary{
- name = "Senior Enlisted Advisor Office Telephone";
- phone_category = "Almayer";
- phone_id = "Senior Enlisted Advisor's Office";
- pixel_x = -3
- },
-/turf/open/floor/wood/ship,
-/area/almayer/shipboard/sea_office)
"ijU" = (
/obj/item/tool/wet_sign,
/turf/open/floor/plating/plating_catwalk,
@@ -42922,6 +42830,19 @@
},
/turf/open/floor/almayer,
/area/almayer/command/computerlab)
+"iKp" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/phone_base{
+ dir = 4;
+ name = "Port Railgun Control Telephone";
+ phone_category = "Command";
+ phone_id = "Port Railgun Control";
+ pixel_x = -26
+ },
+/turf/open/floor/almayer{
+ icon_state = "redfull"
+ },
+/area/almayer/shipboard/port_missiles)
"iKw" = (
/obj/structure/machinery/cryopod/right,
/obj/structure/machinery/light{
@@ -42986,10 +42907,6 @@
},
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/south1)
-"iLf" = (
-/obj/structure/surface/table/almayer,
-/turf/open/floor/almayer,
-/area/almayer/command/computerlab)
"iLh" = (
/obj/structure/bed/chair/comfy/bravo{
dir = 4
@@ -43984,18 +43901,6 @@
icon_state = "orange"
},
/area/almayer/engineering/engine_core)
-"jfY" = (
-/obj/structure/surface/table/almayer,
-/obj/effect/landmark/map_item,
-/obj/item/folder/red,
-/obj/structure/phone_base/rotary{
- name = "Brig CMP's Office Telephone";
- phone_category = "Offices";
- phone_id = "Brig CMP's Office";
- pixel_x = 15
- },
-/turf/open/floor/almayer,
-/area/almayer/shipboard/brig/chief_mp_office)
"jfZ" = (
/obj/structure/target{
name = "punching bag"
@@ -44991,6 +44896,23 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lower_medical_lobby)
+"jDi" = (
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/phone_base{
+ dir = 8;
+ name = "OT Telephone";
+ phone_category = "Almayer";
+ phone_id = "Ordnance Tech";
+ pixel_x = 14
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/engineering_workshop/hangar)
"jDV" = (
/obj/effect/projector{
name = "Almayer_AresDown";
@@ -45981,24 +45903,6 @@
icon_state = "emerald"
},
/area/almayer/squads/charlie)
-"jZL" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/cameras/almayer_network{
- dir = 1
- },
-/obj/structure/machinery/light{
- unacidable = 1;
- unslashable = 1
- },
-/obj/structure/phone_base{
- dir = 1;
- name = "Brig Warden's Office Telephone";
- phone_category = "Offices";
- phone_id = "Brig Warden's Office";
- pixel_x = -16
- },
-/turf/open/floor/almayer,
-/area/almayer/shipboard/brig/main_office)
"jZO" = (
/obj/structure/largecrate/random/barrel/blue,
/turf/open/floor/almayer{
@@ -46233,6 +46137,24 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/lower_medical_lobby)
+"keM" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/faxmachine/uscm/command{
+ department = "AI Core";
+ pixel_y = 8
+ },
+/obj/structure/phone_base/rotary{
+ name = "AI Core Telephone";
+ phone_category = "ARES";
+ phone_color = "blue";
+ phone_id = "AI Core";
+ pixel_x = 8;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"keR" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer,
@@ -46295,25 +46217,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/processing)
-"kgp" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 10
- },
-/obj/structure/phone_base{
- name = "CMO Office Telephone";
- phone_category = "Offices";
- phone_id = "CMO Office";
- pixel_y = 29
- },
-/obj/structure/sign/safety/commline_connection{
- pixel_x = 23;
- pixel_y = 32
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "sterile_green_side"
- },
-/area/almayer/medical/upper_medical)
"kgr" = (
/obj/structure/machinery/camera/autoname/almayer{
name = "ship-grade camera"
@@ -47259,6 +47162,17 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/medical_science)
+"kBt" = (
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = 28
+ },
+/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
+/turf/open/floor/almayer{
+ icon_state = "redfull"
+ },
+/area/almayer/command/cic)
"kBy" = (
/obj/structure/machinery/ares/processor,
/turf/open/floor/almayer/no_build{
@@ -48044,6 +47958,24 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_p)
+"kRH" = (
+/obj/structure/closet/secure_closet/freezer/fridge/full,
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/obj/item/reagent_container/food/condiment/enzyme,
+/obj/item/reagent_container/food/condiment/enzyme,
+/obj/structure/phone_base{
+ name = "Kitchen Telephone";
+ phone_category = "Almayer";
+ phone_id = "Kitchen";
+ pixel_x = -8;
+ pixel_y = 29
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/living/grunt_rnr)
"kRP" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/item/prop/magazine/dirty/torn,
@@ -48100,18 +48032,6 @@
icon_state = "red"
},
/area/almayer/hallways/aft_hallway)
-"kSU" = (
-/obj/structure/phone_base/no_dnd{
- name = "Requisition Telephone";
- phone_category = "Almayer";
- phone_id = "Requisition";
- pixel_y = 30
- },
-/turf/open/floor/almayer{
- dir = 5;
- icon_state = "plating"
- },
-/area/almayer/squads/req)
"kTc" = (
/obj/structure/closet/secure_closet/guncabinet/red,
/obj/item/ammo_magazine/shotgun,
@@ -48419,6 +48339,31 @@
icon_state = "plate"
},
/area/almayer/living/offices)
+"kZm" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/pipes/standard/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/item/clipboard{
+ base_pixel_x = 20;
+ pixel_x = 5
+ },
+/obj/item/paper{
+ pixel_x = 5
+ },
+/obj/item/tool/pen{
+ pixel_x = 5
+ },
+/obj/structure/surface/table/reinforced/black,
+/obj/structure/phone_base/rotary{
+ name = "CIC Reception Telephone";
+ phone_category = "Command";
+ phone_id = "CIC Reception";
+ pixel_x = -7;
+ pixel_y = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/command/cic)
"kZA" = (
/turf/open/floor/almayer{
dir = 4;
@@ -50669,27 +50614,6 @@
icon_state = "redfull"
},
/area/almayer/living/briefing)
-"lVX" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/overwatch/almayer{
- dir = 8;
- layer = 3.2;
- pixel_x = -17;
- pixel_y = 16
- },
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Alpha Overwatch Telephone";
- phone_category = "Command";
- phone_id = "Alpha Overwatch"
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = -17;
- pixel_y = -8
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/cic)
"lWh" = (
/obj/structure/machinery/pipedispenser/orderable,
/turf/open/floor/almayer{
@@ -51938,6 +51862,15 @@
},
/turf/open/floor/plating/almayer,
/area/almayer/shipboard/brig/armory)
+"mAw" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/ares_console{
+ pixel_x = 9
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "plating"
+ },
+/area/almayer/command/airoom)
"mAT" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 8;
@@ -52175,6 +52108,25 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_s)
+"mGP" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/door_control{
+ id = "SEA Office Shutters";
+ name = "SEA Office Shutters";
+ pixel_y = 12
+ },
+/obj/item/ashtray/plastic{
+ pixel_x = 8;
+ pixel_y = -4
+ },
+/obj/structure/phone_base/rotary{
+ name = "Senior Enlisted Advisor Office Telephone";
+ phone_category = "Almayer";
+ phone_id = "Senior Enlisted Advisor's Office";
+ pixel_x = -3
+ },
+/turf/open/floor/wood/ship,
+/area/almayer/shipboard/sea_office)
"mHm" = (
/obj/structure/sign/safety/distribution_pipes{
pixel_y = -32
@@ -54502,15 +54454,6 @@
icon_state = "redfull"
},
/area/almayer/hull/lower_hull/l_f_s)
-"nDh" = (
-/obj/structure/phone_base/rotary{
- name = "CL Office Telephone";
- phone_category = "Almayer";
- phone_id = "CL Office"
- },
-/obj/structure/surface/table/woodentable/fancy,
-/turf/open/floor/carpet,
-/area/almayer/command/corporateliason)
"nDo" = (
/obj/structure/closet/l3closet/general,
/obj/structure/window/reinforced{
@@ -55446,11 +55389,6 @@
},
/turf/open/floor/wood/ship,
/area/almayer/shipboard/brig/cells)
-"nYf" = (
-/turf/open/floor/almayer{
- icon_state = "silverfull"
- },
-/area/almayer/command/securestorage)
"nYh" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/turf/open/floor/almayer{
@@ -55504,6 +55442,19 @@
icon_state = "orange"
},
/area/almayer/hull/upper_hull/u_a_s)
+"nZY" = (
+/obj/structure/surface/table/reinforced/prison,
+/obj/structure/phone_base{
+ dir = 8;
+ name = "Medical Telephone";
+ phone_category = "Almayer";
+ phone_id = "Medical Lower";
+ pixel_x = 16
+ },
+/turf/open/floor/almayer{
+ icon_state = "sterile_green"
+ },
+/area/almayer/medical/lockerroom)
"oap" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer{
@@ -57007,6 +56958,15 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cells)
+"oEG" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/securestorage)
"oER" = (
/obj/structure/machinery/light{
dir = 8
@@ -58289,6 +58249,13 @@
},
/turf/open/floor/almayer,
/area/almayer/engineering/engineering_workshop/hangar)
+"pkl" = (
+/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend,
+/turf/open/floor/almayer{
+ dir = 10;
+ icon_state = "green"
+ },
+/area/almayer/squads/req)
"pky" = (
/obj/structure/largecrate/random/secure,
/turf/open/floor/almayer{
@@ -58695,31 +58662,6 @@
icon_state = "test_floor4"
},
/area/almayer/squads/charlie)
-"pvK" = (
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_x = -6;
- pixel_y = 28
- },
-/obj/structure/machinery/firealarm{
- pixel_x = 8;
- pixel_y = 28
- },
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/phone_base/rotary{
- name = "Intelligence Center Telephone";
- phone_category = "Almayer";
- phone_id = "Intelligence Center Telephone"
- },
-/obj/structure/machinery/computer/cameras/almayer/vehicle{
- dir = 4;
- pixel_x = -17
- },
-/turf/open/floor/almayer{
- icon_state = "silverfull"
- },
-/area/almayer/command/securestorage)
"pvP" = (
/turf/open/floor/almayer{
dir = 1;
@@ -61379,15 +61321,6 @@
icon_state = "emeraldfull"
},
/area/almayer/squads/charlie_delta_shared)
-"qyZ" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/light{
- dir = 1
- },
-/turf/open/floor/almayer{
- icon_state = "silverfull"
- },
-/area/almayer/command/securestorage)
"qzc" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -61543,6 +61476,13 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/operating_room_four)
+"qDX" = (
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "silvercorner"
+ },
+/area/almayer/command/computerlab)
"qEk" = (
/obj/effect/decal/warning_stripes{
icon_state = "S"
@@ -61966,13 +61906,6 @@
dir = 4
},
/area/almayer/command/airoom)
-"qLV" = (
-/obj/structure/surface/table/almayer,
-/turf/open/floor/almayer{
- dir = 4;
- icon_state = "silver"
- },
-/area/almayer/command/computerlab)
"qMe" = (
/obj/structure/machinery/portable_atmospherics/hydroponics,
/obj/item/tool/minihoe{
@@ -62381,6 +62314,27 @@
icon_state = "plate"
},
/area/almayer/squads/delta)
+"qWC" = (
+/obj/structure/machinery/firealarm{
+ pixel_x = 6;
+ pixel_y = 28
+ },
+/obj/structure/bed/chair/office/dark{
+ dir = 4;
+ layer = 3.25
+ },
+/obj/structure/phone_base{
+ name = "CE Office Telephone";
+ phone_category = "Offices";
+ phone_id = "CE Office";
+ pixel_x = -8;
+ pixel_y = 29
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
+/area/almayer/engineering/ce_room)
"qWI" = (
/obj/structure/machinery/status_display{
pixel_y = -30
@@ -63632,6 +63586,12 @@
icon_state = "plate"
},
/area/almayer/hull/lower_hull/l_f_s)
+"rxq" = (
+/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
+/turf/open/floor/almayer{
+ icon_state = "redfull"
+ },
+/area/almayer/command/cic)
"rxG" = (
/obj/structure/sign/safety/medical{
pixel_x = 8;
@@ -63662,14 +63622,6 @@
icon_state = "mono"
},
/area/almayer/lifeboat_pumps/north1)
-"ryR" = (
-/obj/structure/machinery/cm_vending/sorted/uniform_supply/squad_prep{
- req_access = list(1)
- },
-/turf/open/floor/almayer{
- icon_state = "redfull"
- },
-/area/almayer/command/cic)
"rzf" = (
/obj/effect/landmark/late_join/working_joe,
/obj/effect/landmark/start/working_joe,
@@ -63888,6 +63840,31 @@
icon_state = "red"
},
/area/almayer/shipboard/brig/processing)
+"rCN" = (
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_x = -6;
+ pixel_y = 28
+ },
+/obj/structure/machinery/firealarm{
+ pixel_x = 8;
+ pixel_y = 28
+ },
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/phone_base/rotary{
+ name = "Intelligence Center Telephone";
+ phone_category = "Almayer";
+ phone_id = "Intelligence Center Telephone"
+ },
+/obj/structure/machinery/computer/cameras/almayer/vehicle{
+ dir = 4;
+ pixel_x = -17
+ },
+/turf/open/floor/almayer{
+ icon_state = "silverfull"
+ },
+/area/almayer/command/securestorage)
"rCO" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/plating/plating_catwalk,
@@ -64035,11 +64012,6 @@
icon_state = "plate"
},
/area/almayer/squads/delta)
-"rEL" = (
-/turf/open/floor/almayer{
- icon_state = "silverfull"
- },
-/area/almayer/command/computerlab)
"rEY" = (
/obj/structure/surface/table/almayer,
/obj/item/toy/deck,
@@ -64715,6 +64687,13 @@
icon_state = "test_floor4"
},
/area/almayer/hull/lower_hull/l_f_s)
+"rUY" = (
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "silver"
+ },
+/area/almayer/command/computerlab)
"rVo" = (
/obj/structure/machinery/light/small{
dir = 1
@@ -65432,27 +65411,6 @@
icon_state = "cargo"
},
/area/almayer/engineering/upper_engineering/port)
-"snI" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/overwatch/almayer{
- dir = 8;
- layer = 3.2;
- pixel_x = -17;
- pixel_y = -17
- },
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Delta Overwatch Telephone";
- phone_category = "Command";
- phone_id = "Delta Overwatch"
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = -17;
- pixel_y = 7
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/cic)
"snM" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -65706,6 +65664,20 @@
icon_state = "greencorner"
},
/area/almayer/hallways/port_hallway)
+"ssL" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/phone_base{
+ dir = 4;
+ name = "Starboard Railgun Control Telephone";
+ phone_category = "Command";
+ phone_id = "Starboard Railgun Control";
+ pixel_x = -26
+ },
+/obj/item/device/binoculars,
+/turf/open/floor/almayer{
+ icon_state = "redfull"
+ },
+/area/almayer/shipboard/starboard_missiles)
"ssU" = (
/obj/structure/machinery/constructable_frame,
/turf/open/floor/almayer{
@@ -65782,6 +65754,13 @@
},
/turf/open/floor/almayer,
/area/almayer/command/computerlab)
+"suM" = (
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer{
+ dir = 10;
+ icon_state = "silver"
+ },
+/area/almayer/command/computerlab)
"suT" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -66130,6 +66109,28 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/upper_hull/u_f_p)
+"sDB" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/overwatch/almayer{
+ dir = 8;
+ layer = 3.2;
+ pixel_x = -17;
+ pixel_y = 15
+ },
+/obj/structure/machinery/light,
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Bravo Overwatch Telephone";
+ phone_category = "Command";
+ phone_id = "Bravo Overwatch"
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_x = -17;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/cic)
"sDC" = (
/obj/structure/sign/safety/analysis_lab{
pixel_y = 26
@@ -66679,6 +66680,25 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lower_medical_medbay)
+"sQx" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/phone_base{
+ name = "CMO Office Telephone";
+ phone_category = "Offices";
+ phone_id = "CMO Office";
+ pixel_y = 29
+ },
+/obj/structure/sign/safety/commline_connection{
+ pixel_x = 23;
+ pixel_y = 32
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "sterile_green_side"
+ },
+/area/almayer/medical/upper_medical)
"sQF" = (
/turf/open/floor/almayer{
icon_state = "red"
@@ -66781,30 +66801,6 @@
icon_state = "blue"
},
/area/almayer/squads/delta)
-"sSG" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/overwatch/almayer{
- dir = 8;
- layer = 3.2;
- pixel_x = -17;
- pixel_y = -17
- },
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Charlie Overwatch Telephone";
- phone_category = "Command";
- phone_id = "Charlie Overwatch"
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = -17;
- pixel_y = 7
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/cic)
"sSR" = (
/obj/effect/decal/warning_stripes{
icon_state = "SW-out";
@@ -67018,6 +67014,18 @@
icon_state = "plate"
},
/area/almayer/hallways/hangar)
+"sXD" = (
+/obj/structure/phone_base{
+ name = "Brig Offices Telephone";
+ phone_category = "Almayer";
+ phone_id = "Brig Main Offices";
+ pixel_y = 32
+ },
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "red"
+ },
+/area/almayer/shipboard/brig/main_office)
"sXE" = (
/obj/structure/machinery/door/airlock/almayer/generic{
name = "\improper Auxiliary Support Officer's Room"
@@ -67578,27 +67586,6 @@
},
/turf/open/floor/almayer,
/area/almayer/squads/alpha)
-"tii" = (
-/obj/structure/machinery/firealarm{
- pixel_x = 6;
- pixel_y = 28
- },
-/obj/structure/bed/chair/office/dark{
- dir = 4;
- layer = 3.25
- },
-/obj/structure/phone_base{
- name = "CE Office Telephone";
- phone_category = "Offices";
- phone_id = "CE Office";
- pixel_x = -8;
- pixel_y = 29
- },
-/turf/open/floor/almayer{
- dir = 1;
- icon_state = "orange"
- },
-/area/almayer/engineering/ce_room)
"tim" = (
/obj/structure/machinery/light/small{
dir = 4
@@ -69478,6 +69465,27 @@
icon_state = "dark_sterile"
},
/area/almayer/medical/lower_medical_lobby)
+"tYr" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/machinery/computer/overwatch/almayer{
+ dir = 8;
+ layer = 3.2;
+ pixel_x = -17;
+ pixel_y = 16
+ },
+/obj/structure/phone_base/rotary/no_dnd{
+ name = "Alpha Overwatch Telephone";
+ phone_category = "Command";
+ phone_id = "Alpha Overwatch"
+ },
+/obj/structure/sign/safety/terminal{
+ pixel_x = -17;
+ pixel_y = -8
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/command/cic)
"tYw" = (
/obj/effect/decal/medical_decals{
icon_state = "triagedecalbottomleft";
@@ -69687,28 +69695,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/lifeboat_pumps/south2)
-"ucz" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/overwatch/almayer{
- dir = 8;
- layer = 3.2;
- pixel_x = -17;
- pixel_y = 15
- },
-/obj/structure/machinery/light,
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Bravo Overwatch Telephone";
- phone_category = "Command";
- phone_id = "Bravo Overwatch"
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = -17;
- pixel_y = -8
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/cic)
"udi" = (
/turf/open/floor/almayer{
icon_state = "red"
@@ -70150,6 +70136,19 @@
icon_state = "mono"
},
/area/almayer/medical/upper_medical)
+"umG" = (
+/obj/structure/phone_base{
+ dir = 8;
+ name = "RO Office Telephone";
+ phone_category = "Offices";
+ phone_id = "RO Office";
+ pixel_x = 16
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "green"
+ },
+/area/almayer/squads/req)
"umR" = (
/obj/structure/machinery/power/apc/almayer/hardened{
cell_type = /obj/item/cell/hyper;
@@ -70801,6 +70800,10 @@
"uys" = (
/turf/closed/wall/almayer/reinforced,
/area/almayer/squads/req)
+"uyu" = (
+/obj/structure/surface/table/almayer,
+/turf/open/floor/almayer,
+/area/almayer/command/computerlab)
"uyC" = (
/obj/structure/window/framed/almayer/hull,
/turf/open/floor/plating,
@@ -72653,6 +72656,43 @@
icon_state = "plating"
},
/area/almayer/shipboard/port_missiles)
+"vjm" = (
+/obj/structure/machinery/door_control{
+ id = "ARES StairsUpper";
+ name = "ARES Core Access";
+ pixel_x = -10;
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES StairsLock";
+ name = "ARES Exterior Lockdown";
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
+ },
+/obj/structure/surface/table/reinforced/almayer_B{
+ climbable = 0;
+ indestructible = 1;
+ unacidable = 1;
+ unslashable = 1
+ },
+/obj/structure/phone_base/rotary{
+ name = "AI Reception Telephone";
+ phone_category = "ARES";
+ phone_color = "blue";
+ phone_id = "AI Reception"
+ },
+/obj/structure/machinery/door_control{
+ id = "ARES Emergency";
+ name = "ARES Emergency Lockdown";
+ pixel_x = 10;
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
+ },
+/turf/open/floor/almayer/no_build{
+ icon_state = "ai_floors"
+ },
+/area/almayer/command/airoom)
"vjx" = (
/obj/structure/largecrate/random/barrel/yellow,
/turf/open/floor/almayer{
@@ -73802,15 +73842,6 @@
icon_state = "dark_sterile"
},
/area/almayer/living/numbertwobunks)
-"vHa" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/computer/ares_console{
- pixel_x = 9
- },
-/turf/open/floor/almayer/no_build{
- icon_state = "plating"
- },
-/area/almayer/command/airoom)
"vHh" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/item/tool/warning_cone{
@@ -73845,47 +73876,6 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/starboard_hallway)
-"vHt" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/door_control{
- id = "CIC Lockdown";
- name = "CIC Lockdown";
- pixel_x = -7;
- pixel_y = 9;
- req_access_txt = "1"
- },
-/obj/structure/machinery/door_control{
- id = "Hangar Lockdown";
- name = "Hangar Lockdown";
- pixel_x = -7;
- pixel_y = 2;
- req_access_txt = "1"
- },
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4;
- icon_state = "exposed01-supply"
- },
-/obj/structure/machinery/door_control{
- id = "bot_armory";
- name = "Armory Lockdown";
- pixel_x = -7;
- pixel_y = -5;
- req_one_access_txt = "1;4"
- },
-/obj/structure/phone_base/rotary/no_dnd{
- name = "Combat Information Center Telephone";
- phone_category = "Command";
- phone_id = "Combat Information Center";
- pixel_x = 5;
- pixel_y = 4
- },
-/obj/structure/machinery/door/window/westright{
- dir = 4
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/cic)
"vHO" = (
/obj/effect/decal/warning_stripes{
icon_state = "N";
@@ -75717,27 +75707,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/stern_hallway)
-"wqr" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/emails{
- pixel_x = 2;
- pixel_y = 5
- },
-/obj/structure/sign/safety/terminal{
- pixel_x = 7;
- pixel_y = 29
- },
-/obj/structure/phone_base/rotary{
- name = "Reporter Telephone";
- phone_category = "Almayer";
- phone_id = "Reporter";
- pixel_x = -17;
- pixel_y = 2
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/command/combat_correspondent)
"wqu" = (
/obj/structure/window/framed/almayer,
/turf/open/floor/plating,
@@ -77200,6 +77169,28 @@
"wVW" = (
/turf/closed/wall/almayer/reinforced,
/area/almayer/command/cic)
+"wVX" = (
+/obj/structure/surface/table/almayer,
+/obj/effect/decal/warning_stripes{
+ icon_state = "S"
+ },
+/obj/structure/phone_base/rotary{
+ name = "Researcher Office Telephone";
+ phone_category = "Almayer";
+ phone_id = "Research";
+ pixel_y = 6
+ },
+/obj/item/reagent_container/glass/beaker{
+ pixel_x = 6;
+ pixel_y = -1
+ },
+/obj/item/reagent_container/glass/beaker/large{
+ pixel_x = -6
+ },
+/turf/open/floor/almayer{
+ icon_state = "sterile_green_side"
+ },
+/area/almayer/medical/medical_science)
"wVY" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -78743,6 +78734,30 @@
icon_state = "test_floor4"
},
/area/almayer/engineering/upper_engineering/port)
+"xBu" = (
+/obj/structure/surface/table/almayer,
+/obj/item/reagent_container/food/drinks/cans/waterbottle{
+ pixel_x = 9;
+ pixel_y = 3
+ },
+/obj/item/prop/helmetgarb/flair_io{
+ pixel_x = -10;
+ pixel_y = 6
+ },
+/obj/item/prop/magazine/boots/n160{
+ pixel_x = -6;
+ pixel_y = -5
+ },
+/obj/structure/phone_base/rotary{
+ name = "Flight Deck Telephone";
+ phone_category = "Almayer";
+ phone_id = "Flight Deck";
+ pixel_y = 8
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
+ },
+/area/almayer/hallways/repair_bay)
"xBQ" = (
/obj/structure/disposalpipe/segment{
dir = 4;
@@ -79463,16 +79478,6 @@
icon_state = "emeraldcorner"
},
/area/almayer/squads/charlie)
-"xRk" = (
-/obj/structure/machinery/light{
- dir = 8
- },
-/obj/structure/surface/table/almayer,
-/turf/open/floor/almayer{
- dir = 8;
- icon_state = "silver"
- },
-/area/almayer/command/computerlab)
"xRw" = (
/turf/open/floor/almayer/uscm/directional{
dir = 1
@@ -80025,19 +80030,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_a_s)
-"ybZ" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/phone_base{
- dir = 4;
- name = "Port Railgun Control Telephone";
- phone_category = "Command";
- phone_id = "Port Railgun Control";
- pixel_x = -26
- },
-/turf/open/floor/almayer{
- icon_state = "redfull"
- },
-/area/almayer/shipboard/port_missiles)
"ycd" = (
/obj/structure/bed/chair{
dir = 8;
@@ -88075,7 +88067,7 @@ aTg
pdG
vAG
dOL
-jfY
+gJW
hwS
wly
wIC
@@ -90501,7 +90493,7 @@ vBm
vBm
vBm
vBm
-hZU
+sXD
mLJ
fkn
gaJ
@@ -91526,13 +91518,13 @@ gaJ
gaJ
tRA
lMc
-ffV
+fox
cMl
oeB
rkL
ldu
eRL
-jZL
+fCq
vBm
qJZ
ohJ
@@ -93850,7 +93842,7 @@ dqd
uNL
hJp
kcp
-bBD
+fwb
bTS
bTS
lxo
@@ -96374,7 +96366,7 @@ aaa
aaa
aad
aeE
-afb
+ssL
ayq
cfE
cfE
@@ -96422,7 +96414,7 @@ btD
rVN
rVN
vly
-ybZ
+iKp
pun
ajZ
aaa
@@ -99036,9 +99028,9 @@ wVW
wVW
wVW
swH
-ucz
+sDB
wVW
-sSG
+fRb
sEM
wVW
wVW
@@ -99237,13 +99229,13 @@ apo
fHh
wVW
lZs
-lVX
+tYr
sni
ayz
dAX
aQg
vpV
-snI
+fjM
aGp
wVW
aDv
@@ -100848,7 +100840,7 @@ agj
eYC
agc
fNb
-eSJ
+aRf
agc
agc
hvH
@@ -100864,7 +100856,7 @@ wVW
rOC
soX
azX
-vHt
+fXF
aCb
aDv
aEC
@@ -101263,7 +101255,7 @@ sBF
amY
vtT
wVW
-abQ
+kBt
atN
cEl
sOi
@@ -101757,7 +101749,7 @@ nXP
mNf
hJp
uNL
-cdE
+xBu
xSI
uZQ
aoH
@@ -102087,7 +102079,7 @@ alX
aIf
aED
wVW
-ryR
+rxq
jvX
auR
wVW
@@ -102692,7 +102684,7 @@ aCj
ayK
aAd
aAP
-hvv
+kZm
ayu
aCj
bYY
@@ -106453,7 +106445,7 @@ qyD
omo
blZ
bqN
-gtA
+nZY
bqN
bwR
gfW
@@ -107682,7 +107674,7 @@ mWw
apT
apA
arC
-asi
+jDi
cSN
asy
atw
@@ -109392,7 +109384,7 @@ ajl
vtx
ajl
ajl
-kgp
+sQx
fbB
cyU
bho
@@ -111424,7 +111416,7 @@ lMv
dVu
eSo
qmD
-aIC
+wVX
lJv
aCt
kXw
@@ -112355,7 +112347,7 @@ vzP
bJt
hjB
bJt
-dpn
+kRH
bDs
gSk
bDs
@@ -112454,7 +112446,7 @@ bqy
bYj
eUR
bsd
-nDh
+cDU
bYj
xne
cNH
@@ -118530,8 +118522,8 @@ avK
aqU
aCZ
dgg
-xRk
-bti
+dDe
+suM
aHq
sDC
ajt
@@ -119338,7 +119330,7 @@ mLE
tmK
avK
aug
-avL
+vjm
aqU
lyE
rsO
@@ -119940,18 +119932,18 @@ uLu
anC
aiC
ioU
-pvK
+rCN
qPE
xqD
-nYf
-rEL
-dnm
-rEL
-rEL
+gMr
+iax
+fSc
+iax
+iax
aHq
cnE
liJ
-hgB
+qDX
cbn
aHq
uLu
@@ -120143,7 +120135,7 @@ aSz
anG
aiC
ioU
-qyZ
+oEG
wTd
cmK
lFm
@@ -120859,7 +120851,7 @@ rbY
gwD
bOK
bPD
-bYa
+pkl
bPD
jOk
bNB
@@ -120964,7 +120956,7 @@ oeM
eed
oeM
eed
-iLf
+uyu
aRi
aGN
qrv
@@ -121062,7 +121054,7 @@ rbY
bEc
bKA
bCA
-bQS
+cCj
bCA
bKA
bEc
@@ -121167,7 +121159,7 @@ fXx
kXf
huO
iLO
-qLV
+rUY
xNv
iLO
bUa
@@ -121465,7 +121457,7 @@ bdj
bri
bLX
bdl
-kSU
+bmZ
bNP
bmD
bNP
@@ -123409,7 +123401,7 @@ sUF
anG
apd
oIB
-wqr
+cYn
hzb
xUV
oIB
@@ -124912,7 +124904,7 @@ sou
bAX
bdl
wIr
-aQy
+umG
jAB
iYt
bMa
@@ -125935,7 +125927,7 @@ qlz
xYf
skn
bQX
-ijQ
+mGP
cLl
qlz
tez
@@ -128661,7 +128653,7 @@ bNM
iEr
owg
eNi
-tii
+qWC
eJX
sAC
wYY
@@ -138463,7 +138455,7 @@ lmz
daz
cwS
ffE
-vHa
+mAw
wpw
ffE
ffE
@@ -139690,7 +139682,7 @@ wyv
pTt
gAe
rCi
-gba
+keM
mUz
our
rna
diff --git a/sound/effects/Heart Beat Short.ogg b/sound/effects/heart_beat_short.ogg
similarity index 100%
rename from sound/effects/Heart Beat Short.ogg
rename to sound/effects/heart_beat_short.ogg
diff --git a/tools/ci/download_od.sh b/tools/ci/download_od.sh
new file mode 100644
index 0000000000..024f93f928
--- /dev/null
+++ b/tools/ci/download_od.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -eo pipefail
+
+if [ -z "${OPENDREAM_VERSION+x}" ]; then
+ source dependencies.sh
+fi
+
+git clone https://github.com/OpenDreamProject/OpenDream.git ~/OpenDream
+cd ~/OpenDream
+git checkout tags/v${OPENDREAM_VERSION}
+git submodule update --init --recursive
diff --git a/tools/ci/run_od.sh b/tools/ci/run_od.sh
new file mode 100644
index 0000000000..3eeac59073
--- /dev/null
+++ b/tools/ci/run_od.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+set -eo pipefail
+
+dotnet ~/OpenDream/DMCompiler/bin/Release/net7.0/DMCompiler.dll --suppress-unimplemented colonialmarines.dme
diff --git a/tools/ci/setup_od.sh b/tools/ci/setup_od.sh
new file mode 100644
index 0000000000..6d2ec17068
--- /dev/null
+++ b/tools/ci/setup_od.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -eo pipefail
+
+cd ~/OpenDream
+
+dotnet restore
+dotnet build -c Release
diff --git a/tools/ci/validate_dme.py b/tools/ci/validate_dme.py
index 33066f72e7..5566648042 100644
--- a/tools/ci/validate_dme.py
+++ b/tools/ci/validate_dme.py
@@ -17,6 +17,9 @@
# Included by BSQL/includes.dm
r'code/__HELPERS/BSQL/**/*.dm',
+
+ # Included as part of OD lints
+ r'code/__pragmas.dm'
]
lines = []