Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
soundadd: Added a drag sound for footstep component
/:cl:
---
code/datums/components/footstep.dm | 9 +++++++--
sound/effects/alien_dragsound_large.ogg | Bin 0 -> 10332 bytes
2 files changed, 7 insertions(+), 2 deletions(-)
create mode 100644 sound/effects/alien_dragsound_large.ogg
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
index 0d218ba94da4..ef77aaf471dc 100644
--- a/code/datums/components/footstep.dm
+++ b/code/datums/components/footstep.dm
@@ -13,8 +13,9 @@
var/falloff
///This can be a list OR a soundfile OR null. Determines whatever sound gets played.
var/footstep_sounds
+ var/drag_sounds
-/datum/component/footstep/Initialize(steps_ = 2, volume_ = 50, range_ = null, falloff_ = 1, footstep_sounds_ = "alien_footstep_large")
+/datum/component/footstep/Initialize(steps_ = 2, volume_ = 50, range_ = null, falloff_ = 1, footstep_sounds_ = "alien_footstep_large", drag_sounds_ = 'sound/effects/alien_dragsound_large.ogg')
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
steps = steps_
@@ -22,6 +23,7 @@
range = range_
falloff = falloff_
footstep_sounds = footstep_sounds_
+ drag_sounds = drag_sounds_
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), PROC_REF(play_simplestep))
@@ -44,5 +46,8 @@
var/turf/open/T = prepare_step()
if(!T)
return
- if(isfile(footstep_sounds) || istext(footstep_sounds))
+ var/mob/living/parent_mob = parent
+ if(parent_mob.lying && (isfile(drag_sounds) || istext(drag_sounds)))
+ playsound(T, drag_sounds, volume, rand(20000, 25000), range, falloff = falloff)
+ else if(isfile(footstep_sounds) || istext(footstep_sounds))
playsound(T, footstep_sounds, volume, rand(20000, 25000), range, falloff = falloff)
diff --git a/sound/effects/alien_dragsound_large.ogg b/sound/effects/alien_dragsound_large.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..bacd14b0eb07655f60008f1eacea9951342623ce
GIT binary patch
literal 10332
zcmaia2Urx%((WudXAnMui;|WkOAwa0ASf)LvLpdPat6s502f%vB4H&biIOEt6hv~)
zIVe#ZzXLj*X2rfCv12x!<^Guq$*CKsX>?
z58ce|+|Rlo%0+(<@rIl?-a+o1&HVRuHuH=k=&U+OV{`g{U0wJWjKo3uJv$d$;X7_N
zP)9p+y>s?ZHK?eFsECN9h&YrFZDr|cVdrcERdM#Rb9?CQWaaDuJL7v9{8>3$JhZfO
zlhZKsvXGDzzAi2d7lEHKx?m3>y!Z=Kx}gUFNWckj4QLx?FiIByXaK;J3q}=dtp>}%
zz24$wD3+LR*TnFcV7&i%}0U-d|5UI-foB@4SnTK!&F@sewn_DMmUWywT|C@{e
zGSN
zvYPPnobd8BNO*4a&e!1GbEC=U#=oAMF$eu!e)}%`IxFX@Lm@!MRYcqpEc41=nV%7v
z_}HK#JizkIBv8_rE3lX>wOnia61(JT+rnz6o^rvSa*FdIp#KTZRs&?%CFTA<#o8dw
z>VGdt+fIG}3EHy5m94{-O9jo<;U-9YZsAS<^eGZ8*ybjF%U!&~T^202Je0d|8hv{j
z)c`f0U@uKp-F>DyL||%q?L?(hUAf!P@QDn+Wds%a}PT9vn+wWgmovj
zWh4$Jx%aD4B;{PR9@8Zg7v~RyeJpD!RP8Kg;5fVCB;x$3d*EDy!KBqUwG3b@6qn3f
zRjYHs?{8S-o22x&AU=UJLZ_1*YDta3)`4ZpRv+nE-+#jg3Hr@!lDR!K0O}h_WX`~u
z%Nfhz@scVw1KtVC=6Df#6O|u$7tO+(;}LMKITQe}H0LP(S9K2M3lwL^gz-qcpk^ugeK)DrhUoJB>S((u?@>h2+IozTMLQg3yrf2
zO)99(bnGtKsQX{bza!_C8y8r>$Wd|Q`bXq6!`W_t(Nr#|xqG3b+z@C`50y**bN~P}
zM^UJs?;~1hp)s_?7+OeINA7=)7?3(9t~nwO8uk?cumHeS(8*YuFt;crXSsVM@Kr9t
z*9fB5ADOXvG-4D8$}1jGio9~~Vi2tqyNhT(MrDn_7u=GOP|6Rv_tjRUNWg860MG&e
z47?Nmk=dqPM8#15;$gyNXRVBEQM7E38v!)jgGIA-;*)NDG7&|+{B
zKn(uKUk^qxLXZpqU`~N1gFVNg`(dk5=x+E58ybbkOVRE}kg#LB;Y6u{G_V{t?S5DX
z8@5+*B_(iBkq-c%%@FXX#3yd40?_aRi!NLPvEu3s-0Jiy0}NIZ^qLc|#QVf0v~+ZP
z=yk_*bZ3|}b*s5G=`}U?bad%ebQyI=;xu)uoCd_LrgU`Ym~_Xgt!9|~^y54i#54`S
z+i{TUIT7dkVBE<#;cr%&4Ckz_>rPZlXnE*r=~@}+=o)xg8T``KANN%UsoI)TjJmqj
zx>Ng3x^cdrJamoqt)_nI8Zh}8O+5ef)Atke8Rv;HPmpRhZe>>ExxiJa!5G*V&Iw}y{sD4vWSKM9x
zHo2s5qk5aXRdA!urJ$swuzd53T35W$?z&MY;*$&O$u0a^mtR-syiw=cTkXV_Rq(Zm
zzvsi-?(*%8x@(o5oLah`b2#HAeNYdl2i|E$zn+&n$-FN<>INAM|3(ZvWUB?IRXDSP
zeeJsf3T9G~IW|e)N(+jU3ko;NodsHpHk7n6ukZLE7;W#0KOH8}!}C*PH@)
z7%2!q#JR?xO~c;?^`Jq2g=Xu(i8$SFquSVTcTx77xKaLgs7|C>XG$y`$`*zjMialz
zxr=gmjT=Whl;w_^e}iT-q3nck!-n?x?W2Yfv=%g?YuT3lYNR=pX9SSdT1GaN5-KN~
zK^-Ne*9!tUYgkb=KbuZlEx!t6m6Oe+j)GS+7&*ho*}xgubVh2hb_Q)Hq4uP!?NE?a
z*O~Bh87m1mkX2$}3<_2JDhAz~5_`rfFcPH(tByfwfU82G%ATVQ9pU3CXh#WfRUoSv
zl%r6)p^-+FCygQb`KpSm^c?Jq+d<*nIn3&)vMMGAXZY%0D7)e_;rVS$Mvb^VRMjG
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
Kzv#g>9QZ$ib|k<6
literal 0
HcmV?d00001
From 545a16809dad87c4210a7eb3290047a4d679c67d Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 13:34:29 +0100
Subject: [PATCH 021/100] Automatic changelog for PR #3854 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3854.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3854.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3854.yml b/html/changelogs/AutoChangeLog-pr-3854.yml
new file mode 100644
index 000000000000..651976126290
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3854.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - soundadd: "Added a drag sound for footstep component"
\ No newline at end of file
From 18630c1416882cf5d787a4a742f95b3951066a9a Mon Sep 17 00:00:00 2001
From: Zonespace <41448081+Zonespace27@users.noreply.github.com>
Date: Fri, 14 Jul 2023 12:33:12 +0200
Subject: [PATCH 022/100] Removes MSay (#3851)
# About the pull request
Removes msay, gives all staff permission to use asay
# Explain why it's good for the game
Overall, having both msay + asay feels just plain redundant
There's very few situations where you need to obscure something from all
mods that can't be done just the same via discord
# Testing Photographs and Procedure
Screenshots & Videos
![image](https://github.com/cmss13-devs/cmss13/assets/41448081/c76392fa-6c13-4c7c-95c6-5b467aa11f27)
# Changelog
:cl:
admin: Removed msay. All staff now have access to asay
/:cl:
---------
Co-authored-by: John Doe
---
code/__DEFINES/speech_channels.dm | 1 -
code/datums/keybinding/communication.dm | 7 --
code/datums/redis/callbacks/msay.dm | 16 -----
code/modules/admin/admin_verbs.dm | 4 +-
code/modules/admin/tabs/admin_tab.dm | 84 ++++++++--------------
code/modules/client/client_procs.dm | 11 +--
code/modules/tgui/tgui-say/modal.dm | 2 +-
code/modules/tgui/tgui-say/speech.dm | 5 +-
colonialmarines.dme | 1 -
tgui/packages/tgui-panel/chat/constants.js | 10 +--
tgui/packages/tgui-say/helpers/index.tsx | 5 +-
tgui/packages/tgui-say/styles/colors.scss | 2 -
12 files changed, 39 insertions(+), 109 deletions(-)
delete mode 100644 code/datums/redis/callbacks/msay.dm
diff --git a/code/__DEFINES/speech_channels.dm b/code/__DEFINES/speech_channels.dm
index 405506678407..3f6e4720bde9 100644
--- a/code/__DEFINES/speech_channels.dm
+++ b/code/__DEFINES/speech_channels.dm
@@ -4,6 +4,5 @@
#define ME_CHANNEL "Me"
#define OOC_CHANNEL "OOC"
#define LOOC_CHANNEL "LOOC"
-#define MOD_CHANNEL "MSAY"
#define ADMIN_CHANNEL "ASAY"
#define MENTOR_CHANNEL "Mentor"
diff --git a/code/datums/keybinding/communication.dm b/code/datums/keybinding/communication.dm
index 9a438fc6dabd..4164198d4818 100644
--- a/code/datums/keybinding/communication.dm
+++ b/code/datums/keybinding/communication.dm
@@ -42,13 +42,6 @@
full_name = "IC Comms (;)"
keybind_signal = COMSIG_KG_CLIENT_RADIO_DOWN
-/datum/keybinding/client/communication/mod_say
- hotkey_keys = list("Unbound")
- classic_keys = list("Unbound")
- name = MOD_CHANNEL
- full_name = "Mod Say"
- keybind_signal = COMSIG_KB_ADMIN_ASAY_DOWN
-
/datum/keybinding/client/communication/asay
hotkey_keys = list("F3")
classic_keys = list("F5")
diff --git a/code/datums/redis/callbacks/msay.dm b/code/datums/redis/callbacks/msay.dm
deleted file mode 100644
index 3c0db7638a3a..000000000000
--- a/code/datums/redis/callbacks/msay.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/datum/redis_callback/msay
- channel = "byond.msay"
-
-/datum/redis_callback/msay/on_message(message)
- var/list/data = json_decode(message)
-
- if(data["source"] == SSredis.instance_name)
- return
-
- var/msg = "[data["rank"]]: [data["author"]]@[data["source"]]: [strip_html(data["message"])]"
-
- for(var/client/client in GLOB.admins)
- if(!(R_MOD & client.admin_holder.rights))
- continue
-
- to_chat(client, msg)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index ba5d52a23f97..6154bb4f8c32 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -27,7 +27,6 @@ var/list/admin_verbs_default = list(
/client/proc/invismin,
/client/proc/set_explosive_antigrief,
/client/proc/check_explosive_antigrief,
- /client/proc/cmd_mod_say,
/client/proc/dsay,
/client/proc/chem_panel, /*chem panel, allows viewing, editing and creation of reagent and chemical_reaction datums*/
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
@@ -68,6 +67,8 @@ var/list/admin_verbs_default = list(
/datum/admins/proc/alertall,
/datum/admins/proc/imaginary_friend,
/client/proc/toggle_ares_ping,
+ /client/proc/cmd_admin_say, /*staff-only ooc chat*/
+ /client/proc/cmd_mod_say, /* alternate way of typing asay, no different than cmd_admin_say */
)
var/list/admin_verbs_admin = list(
@@ -80,7 +81,6 @@ var/list/admin_verbs_admin = list(
/client/proc/toggleprayers, /*toggles prayers on/off*/
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
/client/proc/event_panel,
- /client/proc/cmd_admin_say, /*admin-only ooc chat*/
/client/proc/free_slot, /*frees slot for chosen job*/
/client/proc/modify_slot,
/client/proc/cmd_admin_rejuvenate,
diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm
index c0ffeada9883..5a98faa6ddaa 100644
--- a/code/modules/admin/tabs/admin_tab.dm
+++ b/code/modules/admin/tabs/admin_tab.dm
@@ -218,30 +218,52 @@
message_admins("[key_name(usr)] used Toggle Wake In View.")
+/client/proc/cmd_mod_say(msg as text)
+ set name = "Msay" // This exists for ease of admins who were used to using msay instead of asay
+ set category = "Admin"
+ set hidden = TRUE
+
+ cmd_admin_say(msg)
+
/client/proc/cmd_admin_say(msg as text)
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
set category = "Admin"
set hidden = TRUE
- if(!check_rights(R_ADMIN))
+ if(!check_rights(R_ADMIN|R_MOD))
return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
- if(!msg)
+
+ if (!msg)
return
- log_adminpm("ADMIN : [key_name(src)] : [msg]")
- REDIS_PUBLISH("byond.asay", "author" = src.key, "message" = strip_html(msg), "host" = ishost(src), "rank" = admin_holder.rank)
+ REDIS_PUBLISH("byond.asay", "author" = src.key, "message" = strip_html(msg), "admin" = CLIENT_HAS_RIGHTS(src, R_ADMIN), "rank" = admin_holder.rank)
+
+ if(findtext(msg, "@") || findtext(msg, "#"))
+ var/list/link_results = check_asay_links(msg)
+ if(length(link_results))
+ msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX]
+ link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null
+ var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX]
+ for(var/iter_ckey in pinged_admin_clients)
+ var/client/iter_admin_client = pinged_admin_clients[iter_ckey]
+ if(!iter_admin_client?.admin_holder)
+ continue
+ window_flash(iter_admin_client)
+ SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg'))
+
+ log_adminpm("ADMIN: [key_name(src)] : [msg]")
var/color = "adminsay"
if(ishost(usr))
color = "headminsay"
- if(check_rights(R_ADMIN,0))
- msg = "ADMIN: [key_name(usr, 1)] [ADMIN_JMP_USER(mob)]: [msg]"
- for(var/client/C in GLOB.admins)
- if(R_ADMIN & C.admin_holder.rights)
- to_chat(C, msg)
+ var/channel = "ADMIN:"
+ channel = "[admin_holder.rank]:"
+ for(var/client/client as anything in GLOB.admins)
+ if((R_ADMIN|R_MOD) & client.admin_holder.rights)
+ to_chat(client, "[channel] [key_name(src,1)] [ADMIN_JMP_USER(mob)]: [msg]")
/datum/admins/proc/alertall()
set name = "Alert All"
@@ -328,50 +350,6 @@
var/msg = input(src, null, "asay \"text\"") as text|null
cmd_admin_say(msg)
-/client/proc/cmd_mod_say(msg as text)
- set name = "Msay"
- set category = "Admin"
- set hidden = TRUE
-
- if(!check_rights(R_ADMIN|R_MOD))
- return
-
- msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
-
- if (!msg)
- return
-
- REDIS_PUBLISH("byond.msay", "author" = src.key, "message" = strip_html(msg), "admin" = CLIENT_HAS_RIGHTS(src, R_ADMIN), "rank" = admin_holder.rank)
-
- if(findtext(msg, "@") || findtext(msg, "#"))
- var/list/link_results = check_asay_links(msg)
- if(length(link_results))
- msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX]
- link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null
- var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX]
- for(var/iter_ckey in pinged_admin_clients)
- var/client/iter_admin_client = pinged_admin_clients[iter_ckey]
- if(!iter_admin_client?.admin_holder)
- continue
- window_flash(iter_admin_client)
- SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg'))
-
- log_adminpm("MOD: [key_name(src)] : [msg]")
-
- var/color = "mod"
- if (check_rights(R_ADMIN,0))
- color = "adminmod"
-
- var/channel = "MOD:"
- channel = "[admin_holder.rank]:"
- for(var/client/C in GLOB.admins)
- if((R_ADMIN|R_MOD) & C.admin_holder.rights)
- to_chat(C, "[channel] [key_name(src,1)] [ADMIN_JMP_USER(mob)]: [msg]")
-
-/client/proc/get_mod_say()
- var/msg = input(src, null, "msay \"text\"") as text|null
- cmd_mod_say(msg)
-
/client/proc/cmd_mentor_say(msg as text)
set name = "MentorSay"
set category = "OOC"
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 6926175c835a..c700a226295e 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -713,17 +713,8 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list(
winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[looc]")
else
winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=looc")
- if(MOD_CHANNEL)
- if(admin_holder?.check_for_rights(R_MOD))
- if(prefs.tgui_say)
- var/msay = tgui_say_create_open_command(MOD_CHANNEL)
- winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[msay]")
- else
- winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=msay")
- else
- winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=")
if(ADMIN_CHANNEL)
- if(admin_holder?.check_for_rights(R_ADMIN))
+ if(admin_holder?.check_for_rights(R_MOD))
if(prefs.tgui_say)
var/asay = tgui_say_create_open_command(ADMIN_CHANNEL)
winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[asay]")
diff --git a/code/modules/tgui/tgui-say/modal.dm b/code/modules/tgui/tgui-say/modal.dm
index b959019b894f..f1e87e001cef 100644
--- a/code/modules/tgui/tgui-say/modal.dm
+++ b/code/modules/tgui/tgui-say/modal.dm
@@ -83,7 +83,7 @@
if(!payload?["channel"])
CRASH("No channel provided to an open TGUI-Say")
window_open = TRUE
- if(payload["channel"] != OOC_CHANNEL && payload["channel"] != LOOC_CHANNEL && payload["channel"] != MOD_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != MENTOR_CHANNEL)
+ if(payload["channel"] != OOC_CHANNEL && payload["channel"] != LOOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != MENTOR_CHANNEL)
start_thinking()
return TRUE
diff --git a/code/modules/tgui/tgui-say/speech.dm b/code/modules/tgui/tgui-say/speech.dm
index f278361ac0d0..7bce349e1b7f 100644
--- a/code/modules/tgui/tgui-say/speech.dm
+++ b/code/modules/tgui/tgui-say/speech.dm
@@ -47,9 +47,6 @@
if(LOOC_CHANNEL)
client.looc(entry)
return TRUE
- if(MOD_CHANNEL)
- client.cmd_mod_say(entry)
- return TRUE
if(ADMIN_CHANNEL)
client.cmd_admin_say(entry)
return TRUE
@@ -94,7 +91,7 @@
return TRUE
if(type == "force")
var/target_channel = payload["channel"]
- if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL || target_channel == MOD_CHANNEL)
+ if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL || target_channel == ADMIN_CHANNEL)
target_channel = SAY_CHANNEL // No ooc leaks
delegate_speech(alter_entry(payload), target_channel)
return TRUE
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 304d5221ddd3..663f05b2c9de 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -558,7 +558,6 @@
#include "code\datums\redis\redis_message.dm"
#include "code\datums\redis\callbacks\_redis_callback.dm"
#include "code\datums\redis\callbacks\asay.dm"
-#include "code\datums\redis\callbacks\msay.dm"
#include "code\datums\stamina\_stamina.dm"
#include "code\datums\stamina\none.dm"
#include "code\datums\statistics\cause_data.dm"
diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js
index a73003e13267..ac9346d8d5f0 100644
--- a/tgui/packages/tgui-panel/chat/constants.js
+++ b/tgui/packages/tgui-panel/chat/constants.js
@@ -125,14 +125,8 @@ export const MESSAGE_TYPES = [
type: MESSAGE_TYPE_ADMINCHAT,
name: 'Admin Chat',
description: 'ASAY messages',
- selector: '.admin_channel, .adminsay, .headminsay',
- admin: true,
- },
- {
- type: MESSAGE_TYPE_MODCHAT,
- name: 'Mod Chat',
- description: 'MSAY messages',
- selector: '.mod_channel, .mod, .adminmod, .staffsay',
+ selector:
+ '.admin_channel, .adminsay, .headminsay, .mod_channel, .mod, .adminmod, .staffsay',
admin: true,
},
{
diff --git a/tgui/packages/tgui-say/helpers/index.tsx b/tgui/packages/tgui-say/helpers/index.tsx
index 44225cb876d3..c359c79a940f 100644
--- a/tgui/packages/tgui-say/helpers/index.tsx
+++ b/tgui/packages/tgui-say/helpers/index.tsx
@@ -166,13 +166,10 @@ export const getAvailableChannels = (
return availableChannels;
}
- if (roles.includes('Mod')) {
- availableChannels.push('MSAY');
- }
if (roles.includes('Mentor')) {
availableChannels.push('Mentor');
}
- if (roles.includes('Admin')) {
+ if (roles.includes('Mod')) {
availableChannels.push('ASAY');
}
diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss
index 509b3e17f5ef..e0abb717edf3 100644
--- a/tgui/packages/tgui-say/styles/colors.scss
+++ b/tgui/packages/tgui-say/styles/colors.scss
@@ -14,7 +14,6 @@ $comms: #b4b4b4;
$me: #5975da;
$ooc: #1c52f5;
$looc: #e362b4;
-$msay: #74471b;
$mentor: #b5850d;
$asay: #9611d4;
@@ -49,7 +48,6 @@ $_channel_map: (
'ooc': $ooc,
'looc': $looc,
'whisper': $say,
- 'msay': $msay,
'mentor': $mentor,
'asay': $asay,
'department': $comms,
From dcb04b85ce83188db53366d252d89a55e554512f Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 13:48:43 +0100
Subject: [PATCH 023/100] Automatic changelog for PR #3851 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3851.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3851.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3851.yml b/html/changelogs/AutoChangeLog-pr-3851.yml
new file mode 100644
index 000000000000..2066366eb549
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3851.yml
@@ -0,0 +1,4 @@
+author: "Zonespace27"
+delete-after: True
+changes:
+ - admin: "Removed msay. All staff now have access to asay"
\ No newline at end of file
From 615b9a68b3bea3a15736497ce363793610e07bd6 Mon Sep 17 00:00:00 2001
From: Drathek <76988376+Drulikar@users.noreply.github.com>
Date: Fri, 14 Jul 2023 03:33:44 -0700
Subject: [PATCH 024/100] Restore mouse_opacity for morpher ejected items
(#3841)
# About the pull request
This PR simply restores the mouse_opacity setting for any item ejected
by the egg morpher. Normally /obj/item/storage/proc/_item_removal
restores this change, but the morpher is simply force moving items and
doesn't restore that to initial like removing from storage would
normally.
# Explain why it's good for the game
Fixes #3703 or at least should greatly mitigate it.
# Testing Photographs and Procedure
Screenshots & Videos
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/ae816b0e-0a85-441b-ab6d-962e02eff97a)
# Changelog
:cl: Drathek
fix: Fix morpher ejected items and dumped objectives not restoring their
mouse_opacity setting.
/:cl:
---
code/game/objects/items/storage/storage.dm | 6 +++---
code/modules/cm_aliens/structures/special/egg_morpher.dm | 1 +
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index dd8f10a51559..36f946efdfdc 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -799,9 +799,9 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
storage_close(watcher)
/obj/item/storage/proc/dump_objectives()
- for(var/obj/item/I in src)
- if(I.is_objective)
- I.forceMove(loc)
+ for(var/obj/item/cur_item in src)
+ if(cur_item.is_objective)
+ remove_from_storage(cur_item, loc)
/obj/item/storage/Destroy()
diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm
index 2e79d6ef1d24..1fd154eb354c 100644
--- a/code/modules/cm_aliens/structures/special/egg_morpher.dm
+++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm
@@ -148,6 +148,7 @@
var/obj/item/item = A
if(item.is_objective && item.unacidable)
item.forceMove(get_step(loc, pick(alldirs)))
+ item.mouse_opacity = initial(item.mouse_opacity)
QDEL_NULL(captured_mob)
update_icon()
From 52b5b745fcc215224a4f4349ee15f26623f64a78 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 14:07:45 +0100
Subject: [PATCH 025/100] Automatic changelog for PR #3841 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3841.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3841.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3841.yml b/html/changelogs/AutoChangeLog-pr-3841.yml
new file mode 100644
index 000000000000..90292a845422
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3841.yml
@@ -0,0 +1,4 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - bugfix: "Fix morpher ejected items and dumped objectives not restoring their mouse_opacity setting."
\ No newline at end of file
From e90d8bcb6e4e0f7cd020b19238d6d8f162b1ed7c Mon Sep 17 00:00:00 2001
From: forest2001 <41653574+realforest2001@users.noreply.github.com>
Date: Fri, 14 Jul 2023 11:35:06 +0100
Subject: [PATCH 026/100] PMC Synth Survivor preset (#3849)
# About the pull request
Adds PMC survivor synth it's own preset to stop spawning with AA and
marine comms.
# Explain why it's good for the game
Consistency.
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
add: Added a PMC Synth Survivor preset, and stopped PMC Synth Survivor
using the ERT set.
/:cl:
---
.../effects/landmarks/survivor_spawner.dm | 4 +-
code/modules/gear_presets/synths.dm | 53 +++++++++++++++++++
2 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm
index fbd04babdf20..335d4e9f4774 100644
--- a/code/game/objects/effects/landmarks/survivor_spawner.dm
+++ b/code/game/objects/effects/landmarks/survivor_spawner.dm
@@ -67,7 +67,7 @@
/obj/effect/landmark/survivor_spawner/bigred_crashed_pmc
equipment = /datum/equipment_preset/survivor/pmc
- synth_equipment = /datum/equipment_preset/pmc/synth
+ synth_equipment = /datum/equipment_preset/synth/survivor/pmc
intro_text = list("You are a survivor of a crash landing!
",\
"You are NOT aware of the xenomorph threat.",\
"Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.")
@@ -80,7 +80,7 @@
/obj/effect/landmark/survivor_spawner/bigred_crashed_cl
equipment = /datum/equipment_preset/survivor/wy/manager
- synth_equipment = /datum/equipment_preset/pmc/synth
+ synth_equipment = /datum/equipment_preset/synth/survivor/pmc
intro_text = list("You are a survivor of a crash landing!
",\
"You are NOT aware of the xenomorph threat.",\
"Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.")
diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm
index 823cfb4d69d4..b7749f54c386 100644
--- a/code/modules/gear_presets/synths.dm
+++ b/code/modules/gear_presets/synths.dm
@@ -451,6 +451,59 @@
survivor_variant = ENGINEERING_SURVIVOR
+ faction = FACTION_SURVIVOR
+ faction_group = list(FACTION_SURVIVOR)
+ access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND)
+
+/datum/equipment_preset/synth/survivor/pmc
+ name = "Survivor - Synthetic - PMC Support Synth"
+
+ idtype = /obj/item/card/id/pmc
+ assignment = JOB_PMC_SYNTH
+ rank = JOB_PMC_SYNTH
+ role_comm_title = "WY Syn"
+
+/datum/equipment_preset/synth/survivor/pmc/load_race(mob/living/carbon/human/new_human)
+ new_human.set_species(SYNTH_GEN_THREE)
+
+/datum/equipment_preset/synth/survivor/pmc/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/surg_vest/equipped, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/experimental_mesons, WEAR_EYES)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/auto_cpr, WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE)
+
//*****************************************************************************************************/
/datum/equipment_preset/synth/working_joe
From f026c8f64fabee22917b1ca5f01c328a02acc809 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 14:22:37 +0100
Subject: [PATCH 027/100] Automatic changelog for PR #3849 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3849.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3849.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3849.yml b/html/changelogs/AutoChangeLog-pr-3849.yml
new file mode 100644
index 000000000000..bf5c9c9813f6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3849.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Added a PMC Synth Survivor preset, and stopped PMC Synth Survivor using the ERT set."
\ No newline at end of file
From 56eac98c1ede3ebcd935c323b4e222e1683ccabb Mon Sep 17 00:00:00 2001
From: spartanbobby <71467726+spartanbobby@users.noreply.github.com>
Date: Fri, 14 Jul 2023 11:37:11 +0100
Subject: [PATCH 028/100] Sneaks an extra tile into Almayer squad preps by
using fancy density and offsetting magic (#3847)
# About the pull request
Title basically explains it
Some "issues"
downwards-facing prep rooms have a bit of a weird perspective thing
going on but they already had those anyway so????
some items spawn on the floor below your sprite instead of on the vendor
(because of where the vendor actually is) I dont think this is much of
an issue to be honest it might be slightly confusing for all of 3
seconds
video to follow
https://streamable.com/mf2bs2
# Explain why it's good for the game
It allows players who are prepping in the main hall of squad prep to
indent themselves so that they're not pushed by people who're just
running down the hall
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl: SpartanBobby
maptweaks: edits Almayer squad preps to allow for more space
/:cl:
---
maps/map_files/USS_Almayer/USS_Almayer.dmm | 1134 ++++++++++----------
1 file changed, 566 insertions(+), 568 deletions(-)
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index b15ee29dd20a..7d9361919028 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -837,8 +837,8 @@
/area/almayer/living/basketball)
"acJ" = (
/mob/living/silicon/decoy/ship_ai{
- pixel_y = -16;
- layer = 2.98
+ layer = 2.98;
+ pixel_y = -16
},
/obj/structure/blocker/invisible_wall,
/obj/effect/decal/warning_stripes{
@@ -2464,22 +2464,22 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLock";
name = "ARES Exterior Lockdown Override";
- req_one_access_txt = "90;91;92";
+ pixel_x = 8;
pixel_y = -24;
- pixel_x = 8
+ req_one_access_txt = "90;91;92"
},
/obj/structure/machinery/door_control{
id = "ARES Emergency";
name = "ARES Emergency Lockdown Override";
- req_one_access_txt = "91;92";
- pixel_y = -24
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
},
/obj/structure/machinery/door_control{
id = "Brig Lockdown Shutters";
name = "Brig Lockdown Override";
- req_access_txt = "1;3";
pixel_x = -8;
- pixel_y = -24
+ pixel_y = -24;
+ req_access_txt = "1;3"
},
/turf/open/floor/wood/ship,
/area/almayer/living/commandbunks)
@@ -5816,9 +5816,9 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- req_one_access_txt = "1;200;90;91;92";
+ pixel_x = -24;
pixel_y = 24;
- pixel_x = -24
+ req_one_access_txt = "1;200;90;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -5840,9 +5840,9 @@
"asG" = (
/obj/structure/surface/table/reinforced/almayer_B{
climbable = 0;
+ indestructible = 1;
unacidable = 1;
- unslashable = 1;
- indestructible = 1
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -7084,34 +7084,34 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- req_one_access_txt = "91;92";
+ pixel_x = -10;
pixel_y = -24;
- pixel_x = -10
+ req_one_access_txt = "91;92"
},
/obj/structure/machinery/door_control{
id = "ARES StairsLock";
name = "ARES Exterior Lockdown";
- req_one_access_txt = "91;92";
- pixel_y = -24
+ pixel_y = -24;
+ req_one_access_txt = "91;92"
},
/obj/structure/surface/table/reinforced/almayer_B{
climbable = 0;
+ indestructible = 1;
unacidable = 1;
- unslashable = 1;
- indestructible = 1
+ unslashable = 1
},
/obj/structure/transmitter/rotary{
- phone_color = "blue";
- phone_id = "AI Reception";
+ name = "AI Reception Telephone";
phone_category = "ARES";
- name = "AI Reception Telephone"
+ phone_color = "blue";
+ phone_id = "AI Reception"
},
/obj/structure/machinery/door_control{
id = "ARES Emergency";
name = "ARES Emergency Lockdown";
- req_one_access_txt = "91;92";
+ pixel_x = 10;
pixel_y = -24;
- pixel_x = 10
+ req_one_access_txt = "91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -7125,9 +7125,9 @@
},
/obj/structure/surface/table/reinforced/almayer_B{
climbable = 0;
+ indestructible = 1;
unacidable = 1;
- unslashable = 1;
- indestructible = 1
+ unslashable = 1
},
/obj/item/paper_bin/uscm{
pixel_y = 6
@@ -10992,31 +10992,31 @@
},
/obj/structure/machinery/door_control{
id = "ARES Interior";
+ indestructible = 1;
name = "ARES Chamber Lockdown";
- req_one_access_txt = "1;200;90;91;92";
pixel_x = 24;
pixel_y = -8;
- indestructible = 1
+ req_one_access_txt = "1;200;90;91;92"
},
/obj/structure/machinery/door_control{
id = "ARES Railing";
+ indestructible = 1;
name = "ARES Chamber Railings";
- req_one_access_txt = "91;92";
- pixel_x = 24;
needs_power = 0;
- indestructible = 1
+ pixel_x = 24;
+ req_one_access_txt = "91;92"
},
/obj/structure/machinery/door/poddoor/railing{
+ closed_layer = 4.1;
+ density = 0;
dir = 2;
id = "ARES Railing";
- unslashable = 0;
- unacidable = 0;
- pixel_y = -1;
- pixel_x = -1;
+ layer = 2.1;
open_layer = 2.1;
- closed_layer = 4.1;
- density = 0;
- layer = 2.1
+ pixel_x = -1;
+ pixel_y = -1;
+ unacidable = 0;
+ unslashable = 0
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -11990,7 +11990,9 @@
/obj/structure/pipes/vents/pump{
dir = 4
},
-/turf/open/floor/almayer,
+/turf/open/floor/almayer{
+ icon_state = "red"
+ },
/area/almayer/squads/alpha)
"aPk" = (
/obj/structure/pipes/standard/simple/hidden/supply{
@@ -12002,10 +12004,14 @@
},
/area/almayer/command/lifeboat)
"aPl" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
+/obj/structure/machinery/cm_vending/clothing/marine/alpha{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
+ },
+/turf/open/floor/almayer{
+ icon_state = "plate"
},
-/turf/open/floor/almayer,
/area/almayer/squads/alpha)
"aPm" = (
/obj/structure/closet/firecloset,
@@ -12014,13 +12020,14 @@
},
/area/almayer/hallways/aft_hallway)
"aPn" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
+/obj/structure/machinery/cm_vending/clothing/marine/bravo{
+ density = 0;
+ pixel_y = 16
},
/turf/open/floor/almayer{
- icon_state = "redcorner"
+ icon_state = "plate"
},
-/area/almayer/squads/alpha)
+/area/almayer/squads/bravo)
"aPo" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -12110,19 +12117,6 @@
/obj/structure/sign/nosmoking_1,
/turf/closed/wall/almayer,
/area/almayer/squads/alpha)
-"aPM" = (
-/obj/structure/machinery/cm_vending/clothing/marine/alpha,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/alpha)
-"aPN" = (
-/obj/structure/machinery/light,
-/obj/structure/machinery/cm_vending/clothing/marine/alpha,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/alpha)
"aPX" = (
/obj/structure/largecrate/random/case/double,
/turf/open/floor/plating/plating_catwalk,
@@ -12292,69 +12286,16 @@
/obj/structure/sign/nosmoking_1,
/turf/closed/wall/almayer,
/area/almayer/squads/bravo)
-"aQP" = (
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
-"aQQ" = (
-/obj/structure/machinery/firealarm{
- pixel_y = 28
- },
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
-"aQR" = (
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_y = 28
- },
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
-"aQS" = (
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
"aQT" = (
-/obj/structure/machinery/cm_vending/clothing/marine/alpha,
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 1;
- name = "ship-grade camera"
+/obj/structure/machinery/cm_vending/clothing/marine/alpha{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ icon_state = "cargo_arrow"
},
/area/almayer/squads/alpha)
-"aQU" = (
-/obj/structure/machinery/alarm/almayer{
- dir = 1
- },
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
-"aQV" = (
-/obj/structure/machinery/status_display{
- pixel_y = 30
- },
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/bravo)
"aQW" = (
/obj/structure/machinery/vending/cola{
pixel_x = -6;
@@ -12596,7 +12537,10 @@
/area/almayer/squads/bravo)
"aRU" = (
/obj/structure/pipes/vents/pump/on,
-/turf/open/floor/almayer,
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
/area/almayer/squads/bravo)
"aRV" = (
/obj/structure/platform{
@@ -12610,7 +12554,10 @@
/obj/structure/pipes/vents/scrubber{
dir = 4
},
-/turf/open/floor/almayer,
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "orange"
+ },
/area/almayer/squads/bravo)
"aRZ" = (
/turf/open/floor/almayer{
@@ -12927,12 +12874,13 @@
},
/area/almayer/living/offices)
"aTv" = (
-/obj/structure/machinery/camera/autoname/almayer{
- name = "ship-grade camera"
+/obj/structure/machinery/cm_vending/clothing/marine/bravo{
+ density = 0;
+ pixel_y = 16
},
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
/turf/open/floor/almayer{
- icon_state = "plate"
+ dir = 1;
+ icon_state = "cargo_arrow"
},
/area/almayer/squads/bravo)
"aTw" = (
@@ -12942,12 +12890,7 @@
},
/area/almayer/squads/bravo)
"aTx" = (
-/obj/structure/machinery/light{
- dir = 4
- },
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer,
/obj/structure/surface/table/almayer,
/obj/item/tool/hand_labeler,
/turf/open/floor/almayer{
@@ -14290,9 +14233,9 @@
/obj/structure/machinery/door_control{
id = "ARES Mainframe Right";
name = "ARES Mainframe Lockdown";
- req_one_access_txt = "200;91;92";
pixel_x = -24;
- pixel_y = -24
+ pixel_y = -24;
+ req_one_access_txt = "200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -15367,14 +15310,14 @@
},
/area/almayer/squads/alpha)
"bfw" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/obj/item/device/radio/intercom{
freerange = 1;
name = "General Listening Channel";
pixel_y = 28
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/turf/open/floor/almayer{
dir = 1;
icon_state = "red"
@@ -15431,12 +15374,12 @@
},
/area/almayer/squads/alpha)
"bfD" = (
-/obj/structure/machinery/status_display{
- pixel_y = 30
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/machinery/light{
+ dir = 1
+ },
/turf/open/floor/almayer{
dir = 1;
icon_state = "red"
@@ -15713,19 +15656,16 @@
icon_state = "red"
},
/area/almayer/squads/alpha)
-"bgV" = (
-/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
- },
-/area/almayer/squads/alpha)
"bgW" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
+/obj/structure/machinery/cm_vending/clothing/marine/charlie{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
},
/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
+ icon_state = "plate"
},
-/area/almayer/squads/alpha)
+/area/almayer/squads/charlie)
"bgY" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -16418,7 +16358,7 @@
"blB" = (
/turf/open/floor/almayer{
dir = 1;
- icon_state = "cargo_arrow"
+ icon_state = "orange"
},
/area/almayer/squads/bravo)
"blZ" = (
@@ -17216,6 +17156,9 @@
/obj/structure/sign/poster{
pixel_y = 32
},
+/obj/structure/machinery/light{
+ dir = 8
+ },
/turf/open/floor/almayer{
dir = 8;
icon_state = "red"
@@ -20411,19 +20354,6 @@
icon_state = "orange"
},
/area/almayer/engineering/lower_engineering)
-"bFh" = (
-/obj/structure/machinery/cm_vending/clothing/marine/charlie,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/charlie)
-"bFi" = (
-/obj/structure/machinery/light,
-/obj/structure/machinery/cm_vending/clothing/marine/charlie,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/charlie)
"bFj" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -21071,12 +21001,12 @@
plane = -7
},
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/turf/open/floor/almayer/no_build{
@@ -21868,17 +21798,17 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLower";
name = "ARES Core Lockdown";
- req_one_access_txt = "19;200;90;91;92";
pixel_x = 24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "19;200;90;91;92"
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
dir = 8;
pixel_y = 2
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"bLw" = (
@@ -23072,20 +23002,8 @@
/obj/structure/pipes/vents/pump{
dir = 4
},
-/turf/open/floor/almayer,
-/area/almayer/squads/charlie)
-"bQB" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
-/turf/open/floor/almayer,
-/area/almayer/squads/charlie)
-"bQC" = (
-/obj/structure/pipes/standard/simple/hidden/supply{
- dir = 4
- },
/turf/open/floor/almayer{
- icon_state = "emeraldcorner"
+ icon_state = "emerald"
},
/area/almayer/squads/charlie)
"bQD" = (
@@ -23265,22 +23183,22 @@
plane = -7
},
/obj/effect/step_trigger/ares_alert/public{
+ alert_id = "AresStairs";
alert_message = "Caution: Movement detected in ARES Core.";
- cooldown_duration = 1200;
- alert_id = "AresStairs"
+ cooldown_duration = 1200
},
/obj/effect/step_trigger/ares_alert/public{
+ alert_id = "AresStairs";
alert_message = "Caution: Movement detected in ARES Core.";
- cooldown_duration = 1200;
- alert_id = "AresStairs"
+ cooldown_duration = 1200
},
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/turf/open/floor/almayer/no_build{
@@ -23736,7 +23654,10 @@
/obj/structure/pipes/vents/scrubber{
dir = 4
},
-/turf/open/floor/almayer,
+/turf/open/floor/almayer{
+ dir = 1;
+ icon_state = "blue"
+ },
/area/almayer/squads/delta)
"bTE" = (
/turf/open/floor/almayer{
@@ -26151,13 +26072,13 @@
/turf/open/floor/almayer,
/area/almayer/living/grunt_rnr)
"cdP" = (
-/obj/structure/machinery/cm_vending/clothing/marine/charlie,
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 1;
- name = "ship-grade camera"
+/obj/structure/machinery/cm_vending/clothing/marine/charlie{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ icon_state = "cargo_arrow"
},
/area/almayer/squads/charlie)
"cdT" = (
@@ -26664,6 +26585,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/machinery/camera/autoname/almayer,
/turf/open/floor/almayer{
dir = 1;
icon_state = "emerald"
@@ -26896,17 +26818,12 @@
icon_state = "emerald"
},
/area/almayer/squads/charlie)
-"cje" = (
-/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
- },
-/area/almayer/squads/charlie)
"cjf" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
+ icon_state = "emerald"
},
/area/almayer/squads/charlie)
"cjg" = (
@@ -27017,15 +26934,6 @@
icon_state = "emerald"
},
/area/almayer/squads/charlie)
-"cjF" = (
-/obj/structure/machinery/camera/autoname/almayer{
- name = "ship-grade camera"
- },
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
"cjK" = (
/obj/structure/machinery/door/airlock/almayer/maint,
/obj/structure/disposalpipe/segment{
@@ -27137,50 +27045,6 @@
icon_state = "plate"
},
/area/almayer/squads/delta)
-"cks" = (
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
-"cku" = (
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_y = 28
- },
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
-"ckv" = (
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
-"ckx" = (
-/obj/structure/machinery/alarm/almayer{
- dir = 1
- },
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
-"cky" = (
-/obj/structure/machinery/status_display{
- pixel_y = 30
- },
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/delta)
"ckB" = (
/obj/structure/machinery/door/airlock/almayer/maint{
dir = 1;
@@ -27234,9 +27098,12 @@
},
/area/almayer/squads/delta)
"ckR" = (
+/obj/structure/machinery/cm_vending/clothing/marine/delta{
+ density = 0;
+ pixel_y = 16
+ },
/turf/open/floor/almayer{
- dir = 1;
- icon_state = "cargo_arrow"
+ icon_state = "plate"
},
/area/almayer/squads/delta)
"ckS" = (
@@ -27323,6 +27190,11 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = -29
+ },
/turf/open/floor/almayer{
dir = 8;
icon_state = "bluecorner"
@@ -27355,6 +27227,10 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/machinery/alarm/almayer{
+ dir = 1;
+ pixel_y = -29
+ },
/turf/open/floor/almayer{
icon_state = "blue"
},
@@ -27404,9 +27280,9 @@
"clw" = (
/obj/structure/machinery/light{
dir = 8;
+ invisibility = 101;
unacidable = 1;
- unslashable = 1;
- invisibility = 101
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -28012,9 +27888,7 @@
},
/area/almayer/squads/charlie)
"coj" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer,
/obj/structure/surface/table/almayer,
/obj/item/tool/hand_labeler,
/turf/open/floor/almayer{
@@ -28152,8 +28026,8 @@
pixel_y = 6
},
/obj/item/folder/white{
- pixel_y = 6;
- pixel_x = 5
+ pixel_x = 5;
+ pixel_y = 6
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -28644,8 +28518,8 @@
icon_state = "ramptop"
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"cBs" = (
@@ -30460,12 +30334,13 @@
},
/area/almayer/hull/lower_hull/l_f_s)
"dpO" = (
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
-/obj/structure/sign/banners/maximumeffort{
- pixel_y = 30
+/obj/structure/machinery/cm_vending/clothing/marine/delta{
+ density = 0;
+ pixel_y = 16
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ dir = 1;
+ icon_state = "cargo_arrow"
},
/area/almayer/squads/delta)
"dpV" = (
@@ -31267,8 +31142,8 @@
dir = 1
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"dGr" = (
@@ -31619,8 +31494,8 @@
dir = 1
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"dQv" = (
@@ -33167,9 +33042,9 @@
/obj/structure/machinery/door_control{
id = "ARES Mainframe Left";
name = "ARES Mainframe Lockdown";
- req_one_access_txt = "200;91;92";
pixel_x = 24;
- pixel_y = 24
+ pixel_y = 24;
+ req_one_access_txt = "200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "tcomms"
@@ -33866,9 +33741,9 @@
},
/obj/structure/machinery/light{
dir = 4;
+ invisibility = 101;
unacidable = 1;
- unslashable = 1;
- invisibility = 101
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -34697,8 +34572,8 @@
dir = 1
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"fdj" = (
@@ -35097,6 +34972,18 @@
},
/turf/open/floor/almayer,
/area/almayer/command/lifeboat)
+"foL" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/almayer{
+ dir = 4;
+ icon_state = "emeraldcorner"
+ },
+/area/almayer/squads/charlie)
"fpd" = (
/obj/structure/sign/safety/hvac_old{
pixel_x = 8;
@@ -36195,13 +36082,13 @@
/obj/structure/machinery/door_control{
id = "ARES Operations Right";
name = "ARES Operations Shutter";
- req_one_access_txt = "1;200;91;92";
pixel_x = 24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "1;200;91;92"
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"fMt" = (
@@ -36212,12 +36099,12 @@
},
/obj/effect/step_trigger/ares_alert/core,
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/obj/structure/sign/safety/laser{
@@ -36225,8 +36112,8 @@
pixel_y = -8
},
/obj/structure/sign/safety/rewire{
- pixel_y = 6;
- pixel_x = 32
+ pixel_x = 32;
+ pixel_y = 6
},
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
@@ -36749,12 +36636,12 @@
pixel_y = 8
},
/obj/structure/transmitter/rotary{
- pixel_x = 8;
- pixel_y = -8;
+ name = "AI Core Telephone";
+ phone_category = "ARES";
phone_color = "blue";
phone_id = "AI Core";
- phone_category = "ARES";
- name = "AI Core Telephone"
+ pixel_x = 8;
+ pixel_y = -8
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -36762,8 +36649,8 @@
/area/almayer/command/airoom)
"gbg" = (
/obj/structure/sign/safety/terminal{
- pixel_y = 24;
- pixel_x = 14
+ pixel_x = 14;
+ pixel_y = 24
},
/obj/structure/sign/safety/laser{
pixel_y = 24
@@ -36778,9 +36665,9 @@
/obj/structure/machinery/door_control{
id = "ARES Operations Right";
name = "ARES Operations Shutter";
- req_one_access_txt = "1;200;91;92";
pixel_x = -24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "1;200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -37167,13 +37054,13 @@
/area/almayer/hull/lower_hull/l_f_s)
"gjw" = (
/obj/structure/machinery/faxmachine/uscm/command{
+ density = 0;
department = "AI Core";
- pixel_y = 32;
- density = 0
+ pixel_y = 32
},
/obj/structure/surface/rack{
- pixel_y = 16;
- density = 0
+ density = 0;
+ pixel_y = 16
},
/obj/structure/machinery/computer/working_joe{
dir = 8;
@@ -37830,9 +37717,9 @@
/area/almayer/hallways/starboard_hallway)
"gyN" = (
/obj/structure/machinery/prop{
+ desc = "It's a server box...";
icon_state = "comm_server";
- name = "server box";
- desc = "It's a server box..."
+ name = "server box"
},
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
@@ -38475,23 +38362,23 @@
},
/obj/structure/machinery/door_control{
id = "ARES Interior";
+ indestructible = 1;
name = "ARES Chamber Lockdown";
- req_one_access_txt = "1;200;90;91;92";
pixel_x = -24;
pixel_y = -8;
- indestructible = 1
+ req_one_access_txt = "1;200;90;91;92"
},
/obj/structure/machinery/door/poddoor/railing{
+ closed_layer = 4.1;
+ density = 0;
dir = 2;
id = "ARES Railing";
- unslashable = 0;
- unacidable = 0;
- pixel_y = -1;
- pixel_x = -1;
+ layer = 2.1;
open_layer = 2.1;
- density = 0;
- closed_layer = 4.1;
- layer = 2.1
+ pixel_x = -1;
+ pixel_y = -1;
+ unacidable = 0;
+ unslashable = 0
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -38538,24 +38425,24 @@
},
/obj/structure/machinery/door_control{
id = "ARES Interior";
+ indestructible = 1;
name = "ARES Chamber Lockdown";
- req_one_access_txt = "1;200;90;91;92";
pixel_x = 24;
pixel_y = 8;
- indestructible = 1
+ req_one_access_txt = "1;200;90;91;92"
},
/obj/structure/machinery/door/poddoor/railing{
- id = "ARES Railing";
- unslashable = 0;
- unacidable = 0;
- open_layer = 2.1;
+ closed_layer = 4;
density = 0;
+ id = "ARES Railing";
layer = 2.1;
- closed_layer = 4
+ open_layer = 2.1;
+ unacidable = 0;
+ unslashable = 0
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"gPc" = (
@@ -38858,9 +38745,9 @@
"gXs" = (
/obj/effect/step_trigger/ares_alert/terminals,
/obj/structure/machinery/door/poddoor/shutters/almayer{
+ dir = 4;
id = "ARES Operations Right";
- name = "\improper ARES Operations Shutters";
- dir = 4
+ name = "\improper ARES Operations Shutters"
},
/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
dir = 4
@@ -40132,6 +40019,18 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/lower_medical_medbay)
+"hAZ" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/light,
+/turf/open/floor/almayer{
+ icon_state = "blue"
+ },
+/area/almayer/squads/delta)
"hBc" = (
/obj/structure/pipes/vents/scrubber{
dir = 4
@@ -40790,12 +40689,12 @@
pixel_y = 24
},
/obj/structure/machinery/computer/crew/alt{
- pixel_x = -17;
- dir = 4
+ dir = 4;
+ pixel_x = -17
},
/obj/structure/sign/safety/terminal{
- pixel_y = 24;
- pixel_x = 14
+ pixel_x = 14;
+ pixel_y = 24
},
/obj/structure/sign/safety/fibre_optics{
pixel_x = 14;
@@ -40868,10 +40767,10 @@
/area/almayer/hull/lower_hull/l_a_p)
"hTl" = (
/obj/structure/prop/server_equipment/yutani_server{
- pixel_y = 16;
- name = "server tower";
+ density = 0;
desc = "A powerful server tower housing various AI functions.";
- density = 0
+ name = "server tower";
+ pixel_y = 16
},
/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
/turf/open/floor/almayer/no_build{
@@ -41454,7 +41353,10 @@
},
/area/almayer/medical/lower_medical_medbay)
"ihM" = (
-/obj/structure/machinery/cm_vending/clothing/marine/delta,
+/obj/structure/machinery/cm_vending/clothing/marine/delta{
+ density = 0;
+ pixel_y = 16
+ },
/obj/structure/sign/safety/cryo{
pixel_x = 32
},
@@ -41958,24 +41860,24 @@
},
/obj/structure/machinery/door_control{
id = "ARES Interior";
+ indestructible = 1;
name = "ARES Chamber Lockdown";
- req_one_access_txt = "1;200;90;91;92";
pixel_x = -24;
pixel_y = 8;
- indestructible = 1
+ req_one_access_txt = "1;200;90;91;92"
},
/obj/structure/machinery/door/poddoor/railing{
- id = "ARES Railing";
- unslashable = 0;
- unacidable = 0;
- open_layer = 2.1;
+ closed_layer = 4;
density = 0;
+ id = "ARES Railing";
layer = 2.1;
- closed_layer = 4
+ open_layer = 2.1;
+ unacidable = 0;
+ unslashable = 0
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"itR" = (
@@ -42210,10 +42112,10 @@
"iyH" = (
/obj/structure/surface/table/reinforced/almayer_B{
climbable = 0;
- unacidable = 1;
- unslashable = 1;
+ desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs. This one has a metal rail running above it, preventing something large passing over. Like you.";
indestructible = 1;
- desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs. This one has a metal rail running above it, preventing something large passing over. Like you."
+ unacidable = 1;
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -43288,8 +43190,8 @@
dir = 1
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"iZG" = (
@@ -44152,12 +44054,12 @@
},
/obj/effect/step_trigger/ares_alert/core,
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/turf/open/floor/almayer/no_build{
@@ -44521,8 +44423,8 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- req_one_access_txt = "19;200;90;91;92";
- pixel_x = 24
+ pixel_x = 24;
+ req_one_access_txt = "19;200;90;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -45231,7 +45133,11 @@
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/cells)
"jVr" = (
-/obj/structure/machinery/cm_vending/clothing/marine/alpha,
+/obj/structure/machinery/cm_vending/clothing/marine/alpha{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
+ },
/obj/structure/sign/safety/cryo{
pixel_x = 32
},
@@ -45815,6 +45721,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/machinery/light,
/turf/open/floor/almayer{
icon_state = "orange"
},
@@ -46574,13 +46481,13 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLower";
name = "ARES Core Lockdown";
- req_one_access_txt = "19;200;90;91;92";
pixel_x = -24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "19;200;90;91;92"
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"kAh" = (
@@ -46983,8 +46890,8 @@
icon_state = "ramptop"
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"kKG" = (
@@ -47339,9 +47246,9 @@
/obj/structure/machinery/door_control{
id = "ARES Mainframe Right";
name = "ARES Mainframe Lockdown";
- req_one_access_txt = "200;91;92";
pixel_x = -24;
- pixel_y = 24
+ pixel_y = 24;
+ req_one_access_txt = "200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "tcomms"
@@ -47537,7 +47444,10 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_f_p)
"kXa" = (
-/obj/structure/machinery/cm_vending/clothing/marine/bravo,
+/obj/structure/machinery/cm_vending/clothing/marine/bravo{
+ density = 0;
+ pixel_y = 16
+ },
/obj/structure/sign/safety/cryo{
pixel_x = 32
},
@@ -47557,8 +47467,8 @@
/area/almayer/command/computerlab)
"kXj" = (
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"kXu" = (
@@ -48229,22 +48139,26 @@
pixel_y = 24
},
/obj/structure/sign/safety/terminal{
- pixel_y = 24;
- pixel_x = 14
+ pixel_x = 14;
+ pixel_y = 24
},
/obj/structure/machinery/door_control{
id = "ARES Operations Left";
name = "ARES Operations Shutter";
- req_one_access_txt = "1;200;91;92";
pixel_x = 24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "1;200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
},
/area/almayer/command/airoom)
"lok" = (
-/obj/structure/machinery/cm_vending/clothing/marine/charlie,
+/obj/structure/machinery/cm_vending/clothing/marine/charlie{
+ density = 0;
+ layer = 4.1;
+ pixel_y = -29
+ },
/obj/structure/sign/safety/cryo{
pixel_x = 32
},
@@ -48266,6 +48180,23 @@
"loP" = (
/turf/closed/wall/almayer,
/area/almayer/engineering/laundry)
+"loS" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = -29
+ },
+/obj/structure/machinery/light,
+/turf/open/floor/almayer{
+ icon_state = "bluecorner"
+ },
+/area/almayer/squads/delta)
"loV" = (
/obj/structure/desertdam/decals/road_edge{
icon_state = "road_edge_decal3";
@@ -50606,6 +50537,20 @@
},
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/north1)
+"mtr" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/status_display{
+ pixel_y = -29
+ },
+/turf/open/floor/almayer{
+ icon_state = "orange"
+ },
+/area/almayer/squads/bravo)
"mtD" = (
/obj/structure/machinery/status_display{
pixel_x = 16;
@@ -50678,6 +50623,10 @@
dir = 4
},
/obj/structure/pipes/standard/manifold/hidden/supply,
+/obj/structure/machinery/camera/autoname/almayer{
+ dir = 1;
+ name = "ship-grade camera"
+ },
/turf/open/floor/almayer{
icon_state = "bluecorner"
},
@@ -50807,9 +50756,6 @@
},
/area/almayer/hull/lower_hull/l_f_s)
"mzg" = (
-/obj/structure/sign/poster{
- pixel_y = -32
- },
/turf/open/floor/almayer{
icon_state = "emerald"
},
@@ -51042,12 +50988,12 @@
plane = -7
},
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/turf/open/floor/almayer/no_build{
@@ -51131,8 +51077,8 @@
/area/almayer/medical/medical_science)
"mHE" = (
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"mHO" = (
@@ -51631,17 +51577,17 @@
},
/obj/effect/step_trigger/ares_alert/core,
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/obj/structure/sign/safety/terminal{
- pixel_y = -8;
- pixel_x = -18
+ pixel_x = -18;
+ pixel_y = -8
},
/obj/structure/sign/safety/fibre_optics{
pixel_x = -18;
@@ -51791,9 +51737,9 @@
"mUC" = (
/obj/structure/machinery/light{
dir = 4;
+ invisibility = 101;
unacidable = 1;
- unslashable = 1;
- invisibility = 101
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -51887,6 +51833,9 @@
name = "synthetic potted plant";
pixel_y = 8
},
+/obj/structure/sign/banners/maximumeffort{
+ pixel_y = 30
+ },
/turf/open/floor/almayer{
dir = 9;
icon_state = "blue"
@@ -52424,7 +52373,7 @@
"njd" = (
/obj/structure/pipes/standard/manifold/hidden/supply,
/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
+ icon_state = "red"
},
/area/almayer/squads/alpha)
"njD" = (
@@ -53222,6 +53171,22 @@
/obj/effect/landmark/late_join/charlie,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
+"nCp" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = -29
+ },
+/turf/open/floor/almayer{
+ icon_state = "orange"
+ },
+/area/almayer/squads/bravo)
"nDd" = (
/obj/structure/closet/secure_closet/guncabinet/red,
/obj/item/ammo_magazine/smg/m39,
@@ -54286,8 +54251,8 @@
layer = 3.3
},
/obj/structure/sign/safety/terminal{
- pixel_y = 24;
- pixel_x = 14
+ pixel_x = 14;
+ pixel_y = 24
},
/obj/structure/sign/safety/fibre_optics{
pixel_x = 14;
@@ -55013,8 +54978,8 @@
},
/obj/structure/platform_decoration,
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"osz" = (
@@ -55709,8 +55674,8 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- req_one_access_txt = "19;200;90;91;92";
- pixel_x = -24
+ pixel_x = -24;
+ req_one_access_txt = "19;200;90;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -55767,9 +55732,9 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLower";
name = "ARES Core Lockdown";
- req_one_access_txt = "19;200;90;91;92";
pixel_x = -24;
- pixel_y = 8
+ pixel_y = 8;
+ req_one_access_txt = "19;200;90;91;92"
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
dir = 4;
@@ -55777,8 +55742,8 @@
},
/obj/effect/step_trigger/clone_cleaner,
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"oLv" = (
@@ -56807,10 +56772,10 @@
/area/almayer/living/briefing)
"pmV" = (
/obj/structure/prop/server_equipment/yutani_server/broken{
- pixel_y = 16;
- name = "server tower";
+ density = 0;
desc = "A powerful server tower housing various AI functions.";
- density = 0
+ name = "server tower";
+ pixel_y = 16
},
/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
/turf/open/floor/almayer/no_build{
@@ -58434,8 +58399,8 @@
dir = 8
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"pYo" = (
@@ -59432,13 +59397,13 @@
/obj/structure/machinery/door_control{
id = "ARES Operations Left";
name = "ARES Operations Shutter";
- req_one_access_txt = "1;200;91;92";
pixel_x = -24;
- pixel_y = -8
+ pixel_y = -8;
+ req_one_access_txt = "1;200;91;92"
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"qxA" = (
@@ -60700,9 +60665,9 @@
/obj/structure/machinery/door_control{
id = "ARES Mainframe Left";
name = "ARES Mainframe Lockdown";
- req_one_access_txt = "200;91;92";
pixel_x = 24;
- pixel_y = -24
+ pixel_y = -24;
+ req_one_access_txt = "200;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -61227,8 +61192,8 @@
pixel_y = 1
},
/obj/structure/machinery/computer/crew/alt{
- pixel_x = 17;
- dir = 8
+ dir = 8;
+ pixel_x = 17
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -61276,9 +61241,9 @@
"roH" = (
/obj/effect/step_trigger/ares_alert/terminals,
/obj/structure/machinery/door/poddoor/shutters/almayer{
+ dir = 4;
id = "ARES Operations Left";
- name = "\improper ARES Operations Shutters";
- dir = 4
+ name = "\improper ARES Operations Shutters"
},
/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
dir = 4
@@ -61393,11 +61358,17 @@
/turf/open/floor/plating,
/area/almayer/living/offices/flight)
"rrq" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/status_display{
+ pixel_y = 30
+ },
/turf/open/floor/almayer{
- dir = 8;
- icon_state = "blue"
+ dir = 1;
+ icon_state = "red"
},
-/area/almayer/squads/delta)
+/area/almayer/squads/alpha)
"rrB" = (
/obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor/reinforced{
name = "\improper Cryogenics Bay"
@@ -61594,7 +61565,7 @@
"rvT" = (
/obj/structure/pipes/standard/manifold/hidden/supply,
/turf/open/floor/almayer{
- icon_state = "cargo_arrow"
+ icon_state = "emerald"
},
/area/almayer/squads/charlie)
"rwv" = (
@@ -62989,9 +62960,9 @@
},
/obj/structure/machinery/light{
dir = 8;
+ invisibility = 101;
unacidable = 1;
- unslashable = 1;
- invisibility = 101
+ unslashable = 1
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -62999,8 +62970,8 @@
/area/almayer/command/airoom)
"sdl" = (
/obj/structure/surface/rack{
- pixel_y = 16;
- density = 0
+ density = 0;
+ pixel_y = 16
},
/obj/item/tool/wet_sign,
/obj/item/tool/wet_sign,
@@ -64440,8 +64411,14 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/lifeboat_pumps/south1)
"sNb" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/light,
/turf/open/floor/almayer{
- dir = 8;
icon_state = "orange"
},
/area/almayer/squads/bravo)
@@ -65555,8 +65532,8 @@
"tmK" = (
/obj/structure/machinery/door/airlock/almayer/maint{
dir = 1;
- req_one_access_txt = "91;92";
- req_one_access = null
+ req_one_access = null;
+ req_one_access_txt = "91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "test_floor4"
@@ -69661,6 +69638,9 @@
name = "synthetic potted plant";
pixel_y = 8
},
+/obj/structure/machinery/alarm/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
dir = 9;
icon_state = "orange"
@@ -70002,10 +69982,10 @@
/area/almayer/hull/lower_hull/l_m_p)
"vhe" = (
/obj/structure/prop/server_equipment/yutani_server{
- pixel_y = 16;
- name = "server tower";
+ density = 0;
desc = "A powerful server tower housing various AI functions.";
- density = 0
+ name = "server tower";
+ pixel_y = 16
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -70902,8 +70882,8 @@
dir = 4
},
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 8
+ dir = 8;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"vBm" = (
@@ -71238,6 +71218,9 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
+/obj/structure/machinery/firealarm{
+ pixel_y = -29
+ },
/turf/open/floor/almayer{
icon_state = "orange"
},
@@ -72549,17 +72532,17 @@
plane = -7
},
/obj/effect/step_trigger/ares_alert/public{
+ alert_id = "AresStairs";
alert_message = "Caution: Movement detected in ARES Core.";
- cooldown_duration = 1200;
- alert_id = "AresStairs"
+ cooldown_duration = 1200
},
/obj/structure/machinery/door/poddoor/almayer/blended/white/open{
- open_layer = 1.9;
+ closed_layer = 3.2;
id = "ARES Emergency";
- needs_power = 0;
- name = "ARES Emergency Lockdown";
layer = 3.2;
- closed_layer = 3.2;
+ name = "ARES Emergency Lockdown";
+ needs_power = 0;
+ open_layer = 1.9;
plane = -7
},
/turf/open/floor/almayer/no_build{
@@ -73204,9 +73187,9 @@
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/door_control{
id = "ARES Emergency";
+ indestructible = 1;
name = "ARES Emergency Lockdown";
- req_one_access_txt = "91;92";
- indestructible = 1
+ req_one_access_txt = "91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "plating"
@@ -74530,8 +74513,8 @@
/area/almayer/living/gym)
"xbN" = (
/obj/structure/surface/rack{
- pixel_y = 16;
- density = 0
+ density = 0;
+ pixel_y = 16
},
/obj/structure/janitorialcart,
/obj/item/tool/mop,
@@ -75016,6 +74999,21 @@
/obj/structure/largecrate/random/barrel/yellow,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hull/lower_hull/l_m_s)
+"xoe" = (
+/obj/structure/pipes/standard/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/status_display{
+ pixel_y = -29
+ },
+/turf/open/floor/almayer{
+ dir = 8;
+ icon_state = "bluecorner"
+ },
+/area/almayer/squads/delta)
"xoh" = (
/obj/structure/disposalpipe/segment{
dir = 2;
@@ -75340,14 +75338,14 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLower";
name = "ARES Core Lockdown";
- req_one_access_txt = "19;200;90;91;92";
pixel_x = 24;
- pixel_y = 8
+ pixel_y = 8;
+ req_one_access_txt = "19;200;90;91;92"
},
/obj/effect/step_trigger/clone_cleaner,
/turf/open/floor/almayer/no_build{
- icon_state = "silver";
- dir = 4
+ dir = 4;
+ icon_state = "silver"
},
/area/almayer/command/airoom)
"xvX" = (
@@ -76583,9 +76581,9 @@
/obj/structure/machinery/door_control{
id = "ARES StairsUpper";
name = "ARES Core Access";
- req_one_access_txt = "1;200;90;91;92";
+ pixel_x = 24;
pixel_y = 24;
- pixel_x = 24
+ req_one_access_txt = "1;200;90;91;92"
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
@@ -117827,10 +117825,10 @@ aMC
aLT
avv
bfu
-bgV
-aPM
+rGj
+aQT
aLT
-aQP
+aTv
blB
bnp
aTx
@@ -117871,11 +117869,11 @@ bMy
bJC
cog
chN
-cje
-bFh
+mzg
+cdP
bJC
dpO
-ckR
+ckX
cli
coj
bSJ
@@ -118029,11 +118027,11 @@ aLT
aLT
aLT
aLT
-bfw
-bgV
-aPM
+bfx
+rGj
+aQT
aLT
-aQQ
+aTv
blB
kiU
aQL
@@ -118074,11 +118072,11 @@ bJC
bJC
bJC
chO
-cje
-bFh
+mzg
+cdP
bJC
-cks
-ckR
+dpO
+ckX
clj
bSJ
bSJ
@@ -118233,10 +118231,10 @@ aMB
bdA
aLT
ial
-aMz
-aPM
+rGj
+aPl
aLT
-aQP
+aPn
aRU
bnr
aQL
@@ -118277,11 +118275,11 @@ bMx
cgr
bJC
raK
-cje
-bFh
+mzg
+bgW
bJC
-cks
ckR
+ckX
iyS
bSJ
clJ
@@ -118435,11 +118433,11 @@ bco
bdr
bdA
aLT
-bfx
-bgV
-aPM
+bfw
+rGj
+aQT
aLT
-aQP
+aTv
blB
vJV
aQL
@@ -118480,11 +118478,11 @@ cfo
cgr
bJC
chQ
-cje
-bFh
+mzg
+cdP
bJC
-cks
-ckR
+dpO
+ckX
clk
bSJ
clJ
@@ -118639,10 +118637,10 @@ bdr
bdC
beR
bfy
-bgV
-aPM
+rGj
+aQT
aLT
-aQR
+aTv
blB
bnt
bpG
@@ -118683,11 +118681,11 @@ cfo
cgs
chk
chR
-cje
-bFh
+mzg
+cdP
bJC
-cku
-ckR
+dpO
+ckX
cll
clE
clK
@@ -118841,13 +118839,13 @@ bco
bdr
bdA
aLT
-bfx
+bfD
aPj
-aPN
+aPl
aLT
-aQS
-aRT
-bnu
+aPn
+blB
+sNb
aQL
brr
aRT
@@ -118885,13 +118883,13 @@ cdV
cfo
cgr
bJC
-chN
-bJD
-bFi
+foL
+mzg
+bgW
bJC
-ckv
-bTA
-clm
+ckR
+ckX
+loS
bSJ
clJ
clg
@@ -119045,12 +119043,12 @@ aMC
bdA
aLT
bfx
-bgW
-aPM
+bgY
+aQT
aLT
-aQP
+aTv
blB
-bnu
+nCp
aQL
brr
aUY
@@ -119089,11 +119087,11 @@ bMy
cgr
bJC
chP
-cje
-bFh
+mzg
+cdP
bJC
-cks
-ckR
+dpO
+ckX
cln
bSJ
clJ
@@ -119248,10 +119246,10 @@ aLT
aLT
aLT
hQW
-bgW
-aPM
+bgY
+aQT
aLT
-aQP
+aTv
blB
qhU
aQL
@@ -119292,11 +119290,11 @@ bJC
bJC
bJC
uUo
-cje
+mzg
cdP
bJC
-cjF
-ckR
+dpO
+ckX
sUO
bSJ
bSJ
@@ -119451,11 +119449,11 @@ aMB
bdD
aLT
bfz
+bgY
aPl
-aQT
aLT
-aTv
-aRT
+aPn
+blB
bnu
aQL
brt
@@ -119496,10 +119494,10 @@ cgt
bJC
chS
bQA
-bFh
+bgW
bJC
-cks
-bTA
+ckR
+ckX
meu
bSJ
clL
@@ -119653,13 +119651,13 @@ bcE
bdr
bdD
aLT
-bfx
-bgW
-aPM
+rrq
+bgY
+aQT
aLT
-aQP
+aTv
blB
-bnu
+mtr
aQL
brt
bpC
@@ -119699,11 +119697,11 @@ cgt
bJC
chQ
cjf
-bFh
+cdP
bJC
-cks
-ckR
-clo
+dpO
+ckX
+xoe
bSJ
clL
clg
@@ -119857,10 +119855,10 @@ bdr
bdC
beS
bfy
-bgW
-aPM
+bgY
+aQT
aLT
-aQP
+aTv
blB
bnt
bpH
@@ -119902,10 +119900,10 @@ cgs
chl
chR
cjf
-bFh
+cdP
bJC
-cks
-ckR
+dpO
+ckX
cll
clF
clK
@@ -120060,10 +120058,10 @@ aMC
bdD
aLT
bfC
+bgY
aPl
-aPM
aLT
-aQU
+aPn
aRX
cSQ
aQL
@@ -120104,10 +120102,10 @@ bMy
cgt
bJC
chV
-bQB
-bFh
+cjf
+bgW
bJC
-ckx
+ckR
bTC
mvl
bSJ
@@ -120262,13 +120260,13 @@ aLT
aLT
aLT
aLT
-bfD
-bgW
-aPM
+bfx
+bgY
+aQT
aLT
-aQV
+aTv
blB
-bnu
+sNb
aQL
aQL
aQL
@@ -120308,11 +120306,11 @@ bJC
bJC
chW
rvT
-bFh
+cdP
bJC
-cky
-ckR
-cln
+dpO
+ckX
+hAZ
bSJ
bSJ
bSJ
@@ -120467,12 +120465,12 @@ aLT
bpL
bfE
njd
-aPN
+aQT
aLT
-aQS
+aTv
blB
uvu
-sNb
+aUZ
aQL
bsS
mqK
@@ -120508,15 +120506,15 @@ bJC
cfp
cgu
bJC
-fcB
+bMx
chQ
cjf
-bFh
+cdP
bJC
-cks
-ckR
+dpO
+ckX
clo
-rrq
+bVn
bSJ
clM
clS
@@ -120669,11 +120667,11 @@ bdr
bkg
aMz
bfy
+bgY
aPl
-aPM
aLT
-aQP
-aRT
+aPn
+blB
bnt
aRT
ihY
@@ -120713,11 +120711,11 @@ cfo
chm
bJD
chR
-bQB
-bFi
+cjf
+bgW
bJC
-ckv
-bTA
+ckR
+ckX
cll
bTA
clG
@@ -120872,10 +120870,10 @@ aLT
aLT
brv
nuA
-bgW
-aPM
+bgY
+aQT
aLT
-aQP
+aTv
blB
oiQ
lml
@@ -120917,10 +120915,10 @@ bJC
cdf
jxx
cjf
-bFh
+cdP
bJC
-cks
-ckR
+dpO
+ckX
rXj
gfo
bSJ
@@ -121075,10 +121073,10 @@ bdr
bpK
aMz
bfy
-bgW
-aPM
+bgY
+aQT
aLT
-aQP
+aTv
blB
bnt
aRT
@@ -121120,10 +121118,10 @@ chn
bJD
chR
cjf
-bFh
+cdP
bJC
-cks
-ckR
+dpO
+ckX
cll
bTA
clH
@@ -121278,11 +121276,11 @@ bdv
aLT
bry
bfu
-aPn
+bgY
jVr
aLT
kXa
-aRZ
+blB
chL
lAl
aQL
@@ -121322,11 +121320,11 @@ cgv
bJC
wqc
chN
-bQC
+cjf
lok
bJC
ihM
-bTE
+ckX
clm
hXY
bSJ
From fde5725b9a066772df7a63dbded3f3d4ced4f86d Mon Sep 17 00:00:00 2001
From: Ben <91219575+Ben10083@users.noreply.github.com>
Date: Fri, 14 Jul 2023 06:39:07 -0400
Subject: [PATCH 029/100] CIC Reception Telephone and Medical Lower Telephone
Adjustment (#3831)
# About the pull request
Add a telephone labeled 'CIC Reception' to CIC Reception (area leading
into CIC proper). Medical Lower telephone shifted more to left to be
less inside the wall
# Explain why it's good for the game
Medical Lower telephone was shifted too far to the right, this makes it
so it appears more against the wall rather than inside it.
As for the new phone, this will allow someone working the CIC reception
area to call a person in, rather than having to enter and ask.
# Changelog
:cl:
mapadd: Combat Information Center Reception now has a telephone
maptweak: Medical Lower telephone shifted to the left
/:cl:
---
maps/map_files/USS_Almayer/USS_Almayer.dmm | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 7d9361919028..271eb7997fc6 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -37407,7 +37407,7 @@
name = "Medical Telephone";
phone_category = "Almayer";
phone_id = "Medical Lower";
- pixel_x = 23
+ pixel_x = 16
},
/turf/open/floor/almayer{
icon_state = "sterile_green"
@@ -39720,13 +39720,27 @@
/area/almayer/hallways/port_hallway)
"hvv" = (
/obj/structure/disposalpipe/segment,
-/obj/item/clipboard,
-/obj/item/paper,
-/obj/item/tool/pen/blue,
/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/blue{
+ pixel_x = 5
+ },
/obj/structure/surface/table/reinforced/black,
+/obj/structure/transmitter/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" = (
From 3e79bbb18c461a7a9c31ea4d4447c4dfe9fe2214 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 14:49:42 +0100
Subject: [PATCH 030/100] Automatic changelog for PR #3831 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3831.yml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3831.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3831.yml b/html/changelogs/AutoChangeLog-pr-3831.yml
new file mode 100644
index 000000000000..073d35899894
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3831.yml
@@ -0,0 +1,5 @@
+author: "Ben10083"
+delete-after: True
+changes:
+ - mapadd: "Combat Information Center Reception now has a telephone"
+ - maptweak: "Medical Lower telephone shifted to the left"
\ No newline at end of file
From 6ec37a0e9f868f7643b3522b8fa9e5ca06fc3dac Mon Sep 17 00:00:00 2001
From: forest2001 <41653574+realforest2001@users.noreply.github.com>
Date: Fri, 14 Jul 2023 11:49:22 +0100
Subject: [PATCH 031/100] Stops welding wood containers. (#3816)
# About the pull request
It doesn't make sense you can weld wood coffins and the like closed.
# Explain why it's good for the game
LOGIC
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
fix: You can no longer weld non metal containers closed.
/:cl:
---
.../objects/structures/crates_lockers/closets.dm | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index cf0374c09ab4..8c8d6b6920a8 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -245,19 +245,22 @@
else if(istype(W, /obj/item/packageWrap) || istype(W, /obj/item/explosive/plastic))
return
else if(iswelder(W))
+ if(material != MATERIAL_METAL && material != MATERIAL_PLASTEEL)
+ to_chat(user, SPAN_WARNING("You cannot weld [material]!"))
+ return FALSE//Can't weld wood/plastic.
if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
- return
+ return FALSE
var/obj/item/tool/weldingtool/WT = W
if(!WT.isOn())
to_chat(user, SPAN_WARNING("\The [WT] needs to be on!"))
- return
+ return FALSE
if(!WT.remove_fuel(0, user))
to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task."))
- return
+ return FALSE
playsound(src, 'sound/items/Welder.ogg', 25, 1)
if(!do_after(user, 10 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
- return
+ return FALSE
welded = !welded
update_icon()
for(var/mob/M as anything in viewers(src))
@@ -266,9 +269,9 @@
if(isxeno(user))
var/mob/living/carbon/xenomorph/opener = user
src.attack_alien(opener)
- return
+ return FALSE
src.attack_hand(user)
- return
+ return TRUE
/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/user)
if(!opened)
From 9d7da19e2df23d91da9498bbf3d477f58f4eb02d Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 15:09:39 +0100
Subject: [PATCH 032/100] Automatic changelog for PR #3816 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3816.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3816.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3816.yml b/html/changelogs/AutoChangeLog-pr-3816.yml
new file mode 100644
index 000000000000..94b1da5bec33
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3816.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - bugfix: "You can no longer weld non metal containers closed."
\ No newline at end of file
From 56ebd39ffbb13e1d0e49c4220d74896a6c972cf5 Mon Sep 17 00:00:00 2001
From: BeagleGaming1 <56142455+BeagleGaming1@users.noreply.github.com>
Date: Fri, 14 Jul 2023 14:30:51 -0400
Subject: [PATCH 033/100] Changes chem dispenser code (#3830)
# About the pull request
Shuffled a bunch of stuff around
# Explain why it's good for the game
Makes it easier to add or remove reagents that are restricted to hacking
the dispenser
# Changelog
:cl:
code: Messed with chem and drink dispenser code
/:cl:
---------
Co-authored-by: harryob
---
.../chemistry_machinery/chem_dispenser.dm | 203 ++++++++++--------
maps/interiors/fancylocker.dmm | 2 +-
maps/map_files/CORSAT/Corsat.dmm | 4 +-
.../map_files/Ice_Colony_v2/Ice_Colony_v2.dmm | 2 +-
.../Ice_Colony_v3/Shivas_Snowball.dmm | 2 +-
maps/map_files/Kutjevo/Kutjevo.dmm | 2 +-
maps/map_files/LV624/LV624.dmm | 2 +-
maps/map_files/New_Varadero/New_Varadero.dmm | 2 +-
.../Sorokyne_Strata/Sorokyne_Strata.dmm | 6 +-
maps/map_files/USS_Almayer/USS_Almayer.dmm | 2 +-
maps/map_files/generic/Admin_level.dmm | 2 +-
maps/templates/Chinook.dmm | 2 +-
maps/templates/clf_ert_station.dmm | 2 +-
maps/templates/weyland_ert_station.dmm | 2 +-
14 files changed, 132 insertions(+), 103 deletions(-)
diff --git a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
index 09d46aa8c053..98896013c6ec 100644
--- a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
@@ -1,3 +1,7 @@
+#define DISPENSER_UNHACKABLE -1
+#define DISPENSER_NOT_HACKED 0
+#define DISPENSER_HACKED 1
+
/obj/structure/machinery/chem_dispenser
name = "chemical dispenser"
desc = "A complex machine for mixing elements into chemicals. A Wey-Yu product."
@@ -6,6 +10,7 @@
icon = 'icons/obj/structures/machinery/science_machines.dmi'
icon_state = "dispenser"
use_power = USE_POWER_NONE
+ wrenchable = FALSE
idle_power_usage = 40
layer = BELOW_OBJ_LAYER //So beakers reliably appear above it
var/req_skill = SKILL_MEDICAL
@@ -14,13 +19,37 @@
var/obj/structure/machinery/chem_storage/chem_storage
var/network = "Ground"
var/amount = 30
- var/accept_glass = 0 //At 0 ONLY accepts glass containers. Kinda misleading varname.
+ var/accept_beaker_only = TRUE
var/obj/item/reagent_container/beaker = null
var/ui_check = 0
var/static/list/possible_transfer_amounts = list(5,10,20,30,40)
- var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
- "sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron",
- "copper","mercury","radium","water","ethanol","sugar","sulphuric acid")
+ var/list/dispensable_reagents = list(
+ "hydrogen",
+ "lithium",
+ "carbon",
+ "nitrogen",
+ "oxygen",
+ "fluorine",
+ "sodium",
+ "aluminum",
+ "silicon",
+ "phosphorus",
+ "sulfur",
+ "chlorine",
+ "potassium",
+ "iron",
+ "copper",
+ "mercury",
+ "radium",
+ "water",
+ "ethanol",
+ "sugar",
+ "sulphuric acid",
+ )
+ /// Has it been hacked
+ var/hacked_check = DISPENSER_UNHACKABLE
+ /// Additional reagents gotten when it is hacked
+ var/hacked_reagents = list()
/obj/structure/machinery/chem_dispenser/medbay
network = "Medbay"
@@ -112,9 +141,9 @@
var/list/beakerContents = list()
var/beakerCurrentVolume = 0
if(beaker && beaker.reagents && beaker.reagents.reagent_list.len)
- for(var/datum/reagent/R in beaker.reagents.reagent_list)
- beakerContents += list(list("name" = R.name, "volume" = R.volume)) // list in a list because Byond merges the first list...
- beakerCurrentVolume += R.volume
+ for(var/datum/reagent/current_reagent in beaker.reagents.reagent_list)
+ beakerContents += list(list("name" = current_reagent.name, "volume" = current_reagent.volume)) // list in a list because Byond merges the first list...
+ beakerCurrentVolume += current_reagent.volume
.["beakerContents"] = beakerContents
if (beaker)
@@ -150,11 +179,11 @@
return
var/reagent_name = params["reagent"]
if(beaker && dispensable_reagents.Find(reagent_name))
- var/obj/item/reagent_container/B = beaker
- var/datum/reagents/R = B.reagents
- var/space = R.maximum_volume - R.total_volume
+ var/obj/item/reagent_container/current_beaker = beaker
+ var/datum/reagents/current_reagent = current_beaker.reagents
+ var/space = current_reagent.maximum_volume - current_reagent.total_volume
- R.add_reagent(reagent_name, min(amount, chem_storage.energy * 10, space))
+ current_reagent.add_reagent(reagent_name, min(amount, chem_storage.energy * 10, space))
chem_storage.energy = max(chem_storage.energy - min(amount, chem_storage.energy * 10, space) / 10, 0)
. = TRUE
@@ -171,32 +200,64 @@
replace_beaker(usr)
. = TRUE
-/obj/structure/machinery/chem_dispenser/attackby(obj/item/reagent_container/B, mob/user)
+/obj/structure/machinery/chem_dispenser/attackby(obj/item/reagent_container/attacking_object, mob/user)
if(isrobot(user))
return
- if(istype(B, /obj/item/reagent_container/glass) || istype(B, /obj/item/reagent_container/food))
- if(!accept_glass && istype(B,/obj/item/reagent_container/food))
+
+ if(istype(attacking_object, /obj/item/reagent_container/glass) || istype(attacking_object, /obj/item/reagent_container/food))
+ if(accept_beaker_only && istype(attacking_object,/obj/item/reagent_container/food))
to_chat(user, SPAN_NOTICE("This machine only accepts beakers"))
- if(user.drop_inv_item_to_loc(B, src))
+ if(user.drop_inv_item_to_loc(attacking_object, src))
var/obj/item/old_beaker = beaker
- beaker = B
+ beaker = attacking_object
if(old_beaker)
- to_chat(user, SPAN_NOTICE("You swap out \the [old_beaker] for \the [B]."))
+ to_chat(user, SPAN_NOTICE("You swap out [old_beaker] for [attacking_object]."))
user.put_in_hands(old_beaker)
else
- to_chat(user, SPAN_NOTICE("You set \the [B] on the machine."))
+ to_chat(user, SPAN_NOTICE("You set [attacking_object] on the machine."))
SStgui.update_uis(src)
update_icon()
return
+ if(HAS_TRAIT(attacking_object, TRAIT_TOOL_MULTITOOL))
+ switch(hacked_check)
+ if(DISPENSER_UNHACKABLE)
+ to_chat(user, SPAN_NOTICE("[src] cannot be hacked."))
+ if(DISPENSER_NOT_HACKED)
+ user.visible_message("[user] modifies [src] with [attacking_object], turning a light on.", "You enable a light in [src].")
+ dispensable_reagents += hacked_reagents
+ hacked_check = DISPENSER_HACKED
+ if(DISPENSER_HACKED)
+ user.visible_message("[user] modifies [src] with [attacking_object], turning a light off.", "You disable a light in [src].")
+ dispensable_reagents -= hacked_reagents
+ hacked_check = DISPENSER_NOT_HACKED
+
+ if(HAS_TRAIT(attacking_object, TRAIT_TOOL_WRENCH))
+ if(!wrenchable)
+ to_chat(user, "[src] cannot be unwrenched.")
+
+ if(!do_after(user, 2 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
+ return
+ if(!src)
+ return
+
+ playsound(loc, 'sound/items/Ratchet.ogg', 25, 1)
+ anchored = !anchored
+ if(anchored)
+ user.visible_message("[user] tightens the bolts securing [src] to the surface.", "You tighten the bolts securing [src] to the surface.")
+ return
+
+ user.visible_message("[user] unfastens the bolts securing [src] to the surface.", "You unfasten the bolts securing [src] to the surface.")
+
/obj/structure/machinery/chem_dispenser/attack_remote(mob/user as mob)
return src.attack_hand(user)
/obj/structure/machinery/chem_dispenser/attack_hand(mob/user as mob)
if(stat & BROKEN)
+ to_chat(user, SPAN_WARNING("[src] is inoperative."))
return
if(req_skill && !skillcheck(user, req_skill, req_skill_level))
- to_chat(user, SPAN_WARNING("You don't have the training to use this."))
+ to_chat(user, SPAN_WARNING("You don't have the training to use [src]."))
return
tgui_interact(user)
@@ -207,9 +268,10 @@
ui_title = "Soda Dispens-o-matic"
req_skill = null
req_skill_level = null
- accept_glass = 1
+ accept_beaker_only = FALSE
wrenchable = TRUE
network = "Misc"
+ hacked_check = DISPENSER_NOT_HACKED
dispensable_reagents = list(
"water",
"ice",
@@ -234,76 +296,43 @@
"lemonjuice",
"banana",
)
- var/hackedcheck = 0
-
-/obj/structure/machinery/chem_dispenser/soda/attackby(obj/item/B as obj, mob/user as mob)
- ..()
- if(HAS_TRAIT(B, TRAIT_TOOL_MULTITOOL))
- if(hackedcheck == 0)
- to_chat(user, "You change the mode from 'Soda Magic' to 'Milking Time'.")
- dispensable_reagents += list("milk","soymilk")
- hackedcheck = 1
- return
-
- else
- to_chat(user, "You change the mode from 'Milking Time' to 'Soda Magic'.")
- dispensable_reagents -= list("milk","soymilk")
- hackedcheck = 0
- return
- else if(HAS_TRAIT(B, TRAIT_TOOL_WRENCH))
- if(!wrenchable) return
-
- if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
- if(!src) return
- playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1)
- switch (anchored)
- if (FALSE)
- anchored = TRUE
- user.visible_message("[user] tightens the bolts securing \the [src] to the surface.", "You tighten the bolts securing \the [src] to the surface.")
- if (TRUE)
- user.visible_message("[user] unfastens the bolts securing \the [src] to the surface.", "You unfasten the bolts securing \the [src] to the surface.")
- anchored = FALSE
- return
+ hacked_reagents = list(
+ "milk",
+ "soymilk",
+ )
-/obj/structure/machinery/chem_dispenser/beer
+/obj/structure/machinery/chem_dispenser/soda/beer
icon_state = "booze_dispenser"
name = "booze dispenser"
ui_title = "Booze Portal 9001"
- req_skill = null
- req_skill_level = null
- accept_glass = 1
- wrenchable = TRUE
- network = "Misc"
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
- dispensable_reagents = list("water","ice","sodawater","sugar","tonic","beer","kahlua","whiskey","sake","wine","vodka","gin","rum","vermouth","cognac","ale","mead","thirteenloko","tequila")
- var/hackedcheck = 0
-
-/obj/structure/machinery/chem_dispenser/beer/attackby(obj/item/B as obj, mob/user as mob)
- ..()
-
- if(HAS_TRAIT(B, TRAIT_TOOL_MULTITOOL))
- if(hackedcheck == 0)
- to_chat(user, "You disable the 'Weyland-Yutani-are-cheap-bastards' lock, enabling hidden and very expensive boozes.")
- dispensable_reagents += list("goldschlager","patron","absinthe")
- hackedcheck = 1
- return
+ dispensable_reagents = list(
+ "water",
+ "ice",
+ "sodawater",
+ "sugar",
+ "tonic",
+ "beer",
+ "kahlua",
+ "whiskey",
+ "sake",
+ "wine",
+ "vodka",
+ "gin",
+ "rum",
+ "vermouth",
+ "cognac",
+ "ale",
+ "mead",
+ "thirteenloko",
+ "tequila",
+ )
+ hacked_reagents = list(
+ "goldschlager",
+ "patron",
+ "absinthe",
+ )
- else
- to_chat(user, "You re-enable the 'Weyland-Yutani-are-cheap-bastards' lock, disabling hidden and very expensive boozes.")
- dispensable_reagents -= list("goldschlager","patron","absinthe")
- hackedcheck = 0
- return
- else if(HAS_TRAIT(B, TRAIT_TOOL_WRENCH))
- if(!wrenchable) return
-
- if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
- if(!src) return
- playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1)
- switch (anchored)
- if (FALSE)
- anchored = TRUE
- user.visible_message("[user] tightens the bolts securing \the [src] to the surface.", "You tighten the bolts securing \the [src] to the surface.")
- if (TRUE)
- user.visible_message("[user] unfastens the bolts securing \the [src] to the surface.", "You unfasten the bolts securing \the [src] to the surface.")
- anchored = FALSE
- return
+#undef DISPENSER_UNHACKABLE
+#undef DISPENSER_NOT_HACKED
+#undef DISPENSER_HACKED
diff --git a/maps/interiors/fancylocker.dmm b/maps/interiors/fancylocker.dmm
index b26879d705f8..a6ecb6155e72 100644
--- a/maps/interiors/fancylocker.dmm
+++ b/maps/interiors/fancylocker.dmm
@@ -88,7 +88,7 @@
/area/vehicle/apc)
"t" = (
/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/turf/open/floor/wood,
/area/vehicle/apc)
"u" = (
diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm
index bddc64a61ad2..3fefea9f08b0 100644
--- a/maps/map_files/CORSAT/Corsat.dmm
+++ b/maps/map_files/CORSAT/Corsat.dmm
@@ -22132,7 +22132,7 @@
/area/corsat/gamma/biodome/toxins)
"biR" = (
/obj/structure/surface/table/woodentable,
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
dir = 8;
pixel_x = 15
},
@@ -25197,7 +25197,7 @@
/area/corsat/sigma/south/offices)
"bsN" = (
/obj/structure/surface/table/woodentable,
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
dir = 8
},
/turf/open/floor/corsat{
diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
index 7ce999271a29..76257b973b43 100644
--- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
+++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
@@ -14261,7 +14261,7 @@
/area/ice_colony/surface/bar/bar)
"aPy" = (
/obj/structure/surface/table/woodentable,
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/obj/structure/machinery/alarm{
dir = 1;
pixel_y = -24
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index a431aa368702..d221090da880 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -6004,7 +6004,7 @@
/turf/open/floor/plating,
/area/shiva/interior/colony/s_admin)
"aRc" = (
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
pixel_y = 8
},
/obj/structure/surface/table/reinforced/prison,
diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm
index 3d626437679a..e5a6a43cf617 100644
--- a/maps/map_files/Kutjevo/Kutjevo.dmm
+++ b/maps/map_files/Kutjevo/Kutjevo.dmm
@@ -381,7 +381,7 @@
/turf/open/floor/kutjevo/grey/plate,
/area/kutjevo/interior/complex/med/cells)
"azb" = (
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
icon_state = "dispenser"
},
/turf/open/floor/kutjevo/tan/multi_tiles,
diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm
index de31b327c9a4..b84ed33ef0e4 100644
--- a/maps/map_files/LV624/LV624.dmm
+++ b/maps/map_files/LV624/LV624.dmm
@@ -12062,7 +12062,7 @@
/area/lv624/lazarus/comms)
"aZi" = (
/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
pixel_y = 26
},
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm
index 7969b1a120a0..139b956c9622 100644
--- a/maps/map_files/New_Varadero/New_Varadero.dmm
+++ b/maps/map_files/New_Varadero/New_Varadero.dmm
@@ -6101,7 +6101,7 @@
/area/varadero/interior/hall_SE)
"fvw" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
pixel_y = 8
},
/turf/open/floor/shiva{
diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
index 2da1f3f4295d..17f2e577a120 100644
--- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
+++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
@@ -9733,7 +9733,7 @@
},
/area/strata/ag/interior/outpost/canteen)
"aDr" = (
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/turf/open/floor/interior/plastic,
/area/strata/ag/interior/outpost/canteen)
"aDs" = (
@@ -10184,7 +10184,7 @@
},
/area/strata/ag/interior/dorms)
"aEK" = (
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/obj/structure/surface/table/reinforced/prison,
/turf/open/floor/strata{
icon_state = "orange_tile"
@@ -12088,7 +12088,7 @@
},
/area/strata/ag/interior/outpost/admin)
"aKQ" = (
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/obj/structure/surface/table/reinforced/prison,
/turf/open/floor/strata{
dir = 4;
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 271eb7997fc6..1eb738588f80 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -12663,7 +12663,7 @@
/area/almayer/hallways/starboard_hallway)
"aSt" = (
/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/turf/open/floor/prison{
icon_state = "kitchen"
},
diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm
index 727ae18b926a..8dd8e17e6507 100644
--- a/maps/map_files/generic/Admin_level.dmm
+++ b/maps/map_files/generic/Admin_level.dmm
@@ -1040,7 +1040,7 @@
},
/area/adminlevel/ert_station)
"zk" = (
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
density = 0;
pixel_y = 10
},
diff --git a/maps/templates/Chinook.dmm b/maps/templates/Chinook.dmm
index 0d9e64628b24..f2acbe320aeb 100644
--- a/maps/templates/Chinook.dmm
+++ b/maps/templates/Chinook.dmm
@@ -1875,7 +1875,7 @@
/area/adminlevel/chinook/engineering)
"gv" = (
/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/machinery/chem_dispenser/beer,
+/obj/structure/machinery/chem_dispenser/soda/beer,
/turf/open/floor/almayer{
icon_state = "plate"
},
diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm
index ec2a81bf6218..cf8bc8d46bf6 100644
--- a/maps/templates/clf_ert_station.dmm
+++ b/maps/templates/clf_ert_station.dmm
@@ -1828,7 +1828,7 @@
/turf/open/gm/river,
/area/adminlevel/ert_station/clf_station)
"RR" = (
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
density = 0;
pixel_y = 10
},
diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/weyland_ert_station.dmm
index 171bd8d9ac6e..854299a4efda 100644
--- a/maps/templates/weyland_ert_station.dmm
+++ b/maps/templates/weyland_ert_station.dmm
@@ -2509,7 +2509,7 @@
/area/adminlevel/ert_station/weyland_station)
"EW" = (
/obj/structure/surface/table/reinforced,
-/obj/structure/machinery/chem_dispenser/beer{
+/obj/structure/machinery/chem_dispenser/soda/beer{
density = 0;
pixel_y = 23
},
From f9b27e09d5edb248657a2b47502f5ddd733b8667 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 14 Jul 2023 19:42:41 +0100
Subject: [PATCH 034/100] Automatic changelog for PR #3830 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3830.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3830.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3830.yml b/html/changelogs/AutoChangeLog-pr-3830.yml
new file mode 100644
index 000000000000..89a5541d9ade
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3830.yml
@@ -0,0 +1,4 @@
+author: "BeagleGaming1"
+delete-after: True
+changes:
+ - code_imp: "Messed with chem and drink dispenser code"
\ No newline at end of file
From 2006c90513dc356e6ad0f41f85590a51b04c21a8 Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Sat, 15 Jul 2023 01:47:40 +0000
Subject: [PATCH 035/100] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-3816.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3830.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3831.yml | 5 ----
html/changelogs/AutoChangeLog-pr-3841.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3849.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3851.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3854.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3857.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3864.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3866.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3870.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3871.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3874.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3878.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3881.yml | 4 ----
html/changelogs/archive/2023-07.yml | 28 +++++++++++++++++++++++
16 files changed, 28 insertions(+), 61 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-3816.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3830.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3831.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3841.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3849.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3851.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3854.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3857.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3864.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3866.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3870.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3871.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3874.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3878.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3881.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3816.yml b/html/changelogs/AutoChangeLog-pr-3816.yml
deleted file mode 100644
index 94b1da5bec33..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3816.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - bugfix: "You can no longer weld non metal containers closed."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3830.yml b/html/changelogs/AutoChangeLog-pr-3830.yml
deleted file mode 100644
index 89a5541d9ade..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3830.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "BeagleGaming1"
-delete-after: True
-changes:
- - code_imp: "Messed with chem and drink dispenser code"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3831.yml b/html/changelogs/AutoChangeLog-pr-3831.yml
deleted file mode 100644
index 073d35899894..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3831.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Ben10083"
-delete-after: True
-changes:
- - mapadd: "Combat Information Center Reception now has a telephone"
- - maptweak: "Medical Lower telephone shifted to the left"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3841.yml b/html/changelogs/AutoChangeLog-pr-3841.yml
deleted file mode 100644
index 90292a845422..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3841.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Fix morpher ejected items and dumped objectives not restoring their mouse_opacity setting."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3849.yml b/html/changelogs/AutoChangeLog-pr-3849.yml
deleted file mode 100644
index bf5c9c9813f6..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3849.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - rscadd: "Added a PMC Synth Survivor preset, and stopped PMC Synth Survivor using the ERT set."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3851.yml b/html/changelogs/AutoChangeLog-pr-3851.yml
deleted file mode 100644
index 2066366eb549..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3851.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Zonespace27"
-delete-after: True
-changes:
- - admin: "Removed msay. All staff now have access to asay"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3854.yml b/html/changelogs/AutoChangeLog-pr-3854.yml
deleted file mode 100644
index 651976126290..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3854.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - soundadd: "Added a drag sound for footstep component"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3857.yml b/html/changelogs/AutoChangeLog-pr-3857.yml
deleted file mode 100644
index e9729283ea34..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3857.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Morrow"
-delete-after: True
-changes:
- - balance: "Lurkers now lose their invisibility when they run into a person"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3864.yml b/html/changelogs/AutoChangeLog-pr-3864.yml
deleted file mode 100644
index 01e5ed5e7c73..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3864.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "ondrej008"
-delete-after: True
-changes:
- - bugfix: "The HE OB now deals the correct amount of damage to xenos, before it dealt half damage caused by xenos being forced to rest before it hit."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3866.yml b/html/changelogs/AutoChangeLog-pr-3866.yml
deleted file mode 100644
index 49809e7e7dc3..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3866.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - bugfix: "Carbon copies can no longer infinitely breed."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3870.yml b/html/changelogs/AutoChangeLog-pr-3870.yml
deleted file mode 100644
index 34bba780f492..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3870.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - bugfix: "Fixes the icon on the alien blade on LV."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3871.yml b/html/changelogs/AutoChangeLog-pr-3871.yml
deleted file mode 100644
index 76cdd0ebb9ca..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3871.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ben10083"
-delete-after: True
-changes:
- - spellcheck: "Fixed typos relating to M74 airburst packets."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3874.yml b/html/changelogs/AutoChangeLog-pr-3874.yml
deleted file mode 100644
index 83311c453f97..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3874.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Morrow"
-delete-after: True
-changes:
- - admin: "VV Jump To Fix"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3878.yml b/html/changelogs/AutoChangeLog-pr-3878.yml
deleted file mode 100644
index bef90fd797f5..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3878.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - bugfix: "Fixes the toggle notification sound verb for Yautja bracers not working."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3881.yml b/html/changelogs/AutoChangeLog-pr-3881.yml
deleted file mode 100644
index e7228482ba13..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3881.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Steelpoint"
-delete-after: True
-changes:
- - ui: "Predator Ship is now called 'Yautja Ship\" for teleporting Predators"
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml
index 923af7d86a7b..2a02cb58f88c 100644
--- a/html/changelogs/archive/2023-07.yml
+++ b/html/changelogs/archive/2023-07.yml
@@ -166,3 +166,31 @@
- bugfix: Fixed burrowers being able to get slashed from enemy Xenos on the surface.
- bugfix: Fixed burrowers unburrow stun to now properly target and stun enemy Xenos.
- soundadd: Added sounds for the Burrower when they are burrowing and unburrowing.
+2023-07-15:
+ BeagleGaming1:
+ - code_imp: Messed with chem and drink dispenser code
+ Ben10083:
+ - spellcheck: Fixed typos relating to M74 airburst packets.
+ - mapadd: Combat Information Center Reception now has a telephone
+ - maptweak: Medical Lower telephone shifted to the left
+ Drathek:
+ - bugfix: Fix morpher ejected items and dumped objectives not restoring their mouse_opacity
+ setting.
+ Morrow:
+ - admin: VV Jump To Fix
+ - balance: Lurkers now lose their invisibility when they run into a person
+ Steelpoint:
+ - ui: Predator Ship is now called 'Yautja Ship" for teleporting Predators
+ Zonespace27:
+ - admin: Removed msay. All staff now have access to asay
+ ondrej008:
+ - bugfix: The HE OB now deals the correct amount of damage to xenos, before it dealt
+ half damage caused by xenos being forced to rest before it hit.
+ realforest2001:
+ - soundadd: Added a drag sound for footstep component
+ - bugfix: Fixes the icon on the alien blade on LV.
+ - bugfix: Carbon copies can no longer infinitely breed.
+ - rscadd: Added a PMC Synth Survivor preset, and stopped PMC Synth Survivor using
+ the ERT set.
+ - bugfix: You can no longer weld non metal containers closed.
+ - bugfix: Fixes the toggle notification sound verb for Yautja bracers not working.
From 7f5a984c7b2f0fcedfd337e4e8904f260974ea81 Mon Sep 17 00:00:00 2001
From: Drathek <76988376+Drulikar@users.noreply.github.com>
Date: Fri, 14 Jul 2023 21:28:35 -0700
Subject: [PATCH 036/100] Revive tableflip fixes (#3882)
# About the pull request
This PR revives #3740 and applies my suggested changes to that PR
preventing T and cross shaped table flips.
# Explain why it's good for the game
Fixes a game ending exploit, and also gives a bit more sanity to table
flipping.
# Testing Photographs and Procedure
Screenshots & Videos
Old testing:
This cannot be flipped now:
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/7d4c7535-167c-44fb-9473-f7c97bc95e8c)
But this can from the checkmark locations:
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/ef46cc98-b586-4a51-b389-5cc39a119324)
# Changelog
:cl: Drathek, Fira
fix: Fixed an issue with table flips that could make some tables
incorrectly unflippable, and cause infinite loops. It is no longer
possible to flip tables that t-shape or cross, or spans more than 5
tiles away from you.
/:cl:
---------
Co-authored-by: Fira
---
code/game/objects/structures/tables_racks.dm | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 730263ad7a3e..db3ce98339a3 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -326,11 +326,13 @@
/// Checks whether a table is a straight line along a given axis
/obj/structure/surface/table/proc/straight_table_check(direction)
var/obj/structure/surface/table/table = src
- while(table)
+ var/obj/structure/surface/table/side_table
+ var/tables_count = 7 // Lazy extra safety against infinite loops. If table big, can't flip, i guess.
+ while(--tables_count)
// Check whether there are connected tables perpendicular to the axis
for(var/angle in list(-90, 90))
- table = locate() in get_step(loc, turn(direction, angle))
- if(table && !table.flipped)
+ side_table = locate() in get_step(table, turn(direction, angle))
+ if(side_table && !side_table.flipped)
return FALSE
table = locate() in get_step(table, direction)
if(!table || table.flipped)
@@ -339,6 +341,8 @@
var/obj/structure/surface/table/reinforced/reinforced_table = table
if(reinforced_table.status == RTABLE_NORMAL)
return FALSE
+ if(!tables_count)
+ return FALSE
return TRUE
/obj/structure/surface/table/verb/do_flip()
@@ -421,7 +425,7 @@
to_chat(usr, SPAN_WARNING("You have moved a table too recently."))
return FALSE
- if(!skip_straight_check && (!straight_table_check(turn(direction, 90)) || !straight_table_check(turn(direction, -90))))
+ if(!skip_straight_check && !(straight_table_check(turn(direction, 90)) && straight_table_check(turn(direction, -90))))
to_chat(usr, SPAN_WARNING("[src] is too wide to be flipped."))
return FALSE
From a2e9e0535a9249ae21889f86bd66b15d9ecb5838 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 15 Jul 2023 05:37:32 +0100
Subject: [PATCH 037/100] Automatic changelog for PR #3882 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3882.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3882.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3882.yml b/html/changelogs/AutoChangeLog-pr-3882.yml
new file mode 100644
index 000000000000..9b512a62c3bc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3882.yml
@@ -0,0 +1,4 @@
+author: "Drathek, Fira"
+delete-after: True
+changes:
+ - bugfix: "Fixed an issue with table flips that could make some tables incorrectly unflippable, and cause infinite loops. It is no longer possible to flip tables that t-shape or cross, or spans more than 5 tiles away from you."
\ No newline at end of file
From 209708566d39308626f9bdf012ec9f252be3d612 Mon Sep 17 00:00:00 2001
From: Drathek <76988376+Drulikar@users.noreply.github.com>
Date: Fri, 14 Jul 2023 21:29:13 -0700
Subject: [PATCH 038/100] AFK Facehuggers Convert to Normal Huggers (#3886)
# About the pull request
This PR makes it so sentient huggers that have been AFK for 7 minutes,
aren't aghosted, and have no client will convert to normal huggers (and
subsequently die like normal unless they hug someone or get grabbed). I
was considering removing facehuggers from the join as xeno list, but
this way there's still a couple minutes they can be taken over before
they convert.
# Explain why it's good for the game
This can help cleanup the afk xeno list and possibly make a funny
situation if a marine happens to be nearby when one converts.
# Testing Photographs and Procedure
Screenshots & Videos
(Timer here was set to just 10 seconds for testing)
![facehugger](https://github.com/cmss13-devs/cmss13/assets/76988376/7b6f1ac9-3408-4c83-9e14-7ff73207a50d)
# Changelog
:cl: Drathek
add: Facehuggers now convert to their NPC version after 7 minutes of
inactivity and no client.
code: Cleanup join as xeno button code somewhat.
/:cl:
---------
Co-authored-by: harryob
---
code/__DEFINES/xeno.dm | 2 ++
code/game/gamemodes/cm_initialize.dm | 31 +++++++++++--------
.../carbon/xenomorph/castes/Facehugger.dm | 5 +++
3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm
index 4b45c660feab..ac783b6f426e 100644
--- a/code/__DEFINES/xeno.dm
+++ b/code/__DEFINES/xeno.dm
@@ -168,6 +168,8 @@
#define XENO_LEAVE_TIMER_LARVA 80 //80 seconds
/// The time against away_timer when an AFK xeno (not larva) can be replaced
#define XENO_LEAVE_TIMER 300 //300 seconds
+/// The time against away_timer when an AFK facehugger converts to a npc
+#define XENO_FACEHUGGER_LEAVE_TIMER 420 //420 seconds
/// The time against away_timer when an AFK xeno gets listed in the available list so ghosts can get ready
#define XENO_AVAILABLE_TIMER 60 //60 seconds
diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm
index 18b11dde030e..b95052de8824 100644
--- a/code/game/gamemodes/cm_initialize.dm
+++ b/code/game/gamemodes/cm_initialize.dm
@@ -333,23 +333,28 @@ Additional game mode variables.
/datum/game_mode/proc/check_xeno_late_join(mob/xeno_candidate)
if(jobban_isbanned(xeno_candidate, JOB_XENOMORPH)) // User is jobbanned
to_chat(xeno_candidate, SPAN_WARNING("You are banned from playing aliens and cannot spawn as a xenomorph."))
- return
- return 1
+ return FALSE
+ return TRUE
-/datum/game_mode/proc/attempt_to_join_as_xeno(mob/xeno_candidate, instant_join = 0)
+/datum/game_mode/proc/attempt_to_join_as_xeno(mob/xeno_candidate, instant_join = FALSE)
var/list/available_xenos = list()
var/list/available_xenos_non_ssd = list()
- for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list)
- var/area/A = get_area(X)
- if(is_admin_level(X.z) && (!A || !(A.flags_area & AREA_ALLOW_XENO_JOIN)) || X.aghosted)
- continue //xenos on admin z level and aghosted ones don't count
- if(istype(X) && ((!islarva(X) && (XENO_LEAVE_TIMER - X.away_timer < XENO_AVAILABLE_TIMER)) || (islarva(X) && (XENO_LEAVE_TIMER_LARVA - X.away_timer < XENO_AVAILABLE_TIMER))))
- if(!X.client)
- available_xenos += X
- else
- available_xenos_non_ssd += X
-
+ for(var/mob/living/carbon/xenomorph/cur_xeno as anything in GLOB.living_xeno_list)
+ if(cur_xeno.aghosted)
+ continue //aghosted xenos don't count
+ var/area/area = get_area(cur_xeno)
+ if(is_admin_level(cur_xeno.z) && (!area || !(area.flags_area & AREA_ALLOW_XENO_JOIN)))
+ continue //xenos on admin z level don't count
+ if(!istype(cur_xeno))
+ continue
+ var/required_time = islarva(cur_xeno) ? XENO_LEAVE_TIMER_LARVA - cur_xeno.away_timer : XENO_LEAVE_TIMER - cur_xeno.away_timer
+ if(required_time > XENO_AVAILABLE_TIMER)
+ continue
+ if(!cur_xeno.client)
+ available_xenos += cur_xeno
+ else
+ available_xenos_non_ssd += cur_xeno
var/datum/hive_status/hive
for(var/hivenumber in GLOB.hive_datum)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm
index 1ad171ec5c93..08566a6e9af3 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm
@@ -67,6 +67,11 @@
PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM
/mob/living/carbon/xenomorph/facehugger/Life(delta_time)
+ if(!client && !aghosted && away_timer > XENO_FACEHUGGER_LEAVE_TIMER)
+ // Become a npc once again
+ new /obj/item/clothing/mask/facehugger(loc, hivenumber)
+ qdel(src)
+ return
if(stat != DEAD && !lying && !(locate(/obj/effect/alien/weeds) in get_turf(src)))
adjustBruteLoss(1)
return ..()
From 8459e1244393802868d7b6bbb90ee53e2b79b573 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 15 Jul 2023 05:52:23 +0100
Subject: [PATCH 039/100] Automatic changelog for PR #3886 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3886.yml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3886.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3886.yml b/html/changelogs/AutoChangeLog-pr-3886.yml
new file mode 100644
index 000000000000..415fce788e9a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3886.yml
@@ -0,0 +1,5 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - rscadd: "Facehuggers now convert to their NPC version after 7 minutes of inactivity and no client."
+ - code_imp: "Cleanup join as xeno button code somewhat."
\ No newline at end of file
From 9b3452c47f35a7cdd3f819340cf0ee49c171a4a3 Mon Sep 17 00:00:00 2001
From: Drathek <76988376+Drulikar@users.noreply.github.com>
Date: Fri, 14 Jul 2023 21:38:08 -0700
Subject: [PATCH 040/100] Hard delete fixes for predator landmarks and van if
their area changes (#3883)
# About the pull request
This PR applies the fixes previously suggested for #3671. That PR was
originally replacing much of the colony in a nightmare insert and it
exposed how predator landmarks do not handle their area being changed
and an issue with the van being replaced. The description made for these
landmarks is based on some area information and that is used to index
them. This PR makes it so the description of the landmark is saved so it
can still be found in the list even if the area changes.
# Explain why it's good for the game
Less hard deletes and more futureproofing.
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl: Drathek, Steelpoint
fix: Fixed possible hardeletes for predator landmarks and vehicles.
Predator teleporation descriptions now do not change if the area is
altered at runtime so they can still be found correctly.
/:cl:
---
code/game/objects/effects/landmarks/landmarks.dm | 14 ++++++++------
code/modules/vehicles/interior/interior.dm | 1 +
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm
index 64a5025794e3..1cbe10c497f6 100644
--- a/code/game/objects/effects/landmarks/landmarks.dm
+++ b/code/game/objects/effects/landmarks/landmarks.dm
@@ -216,23 +216,25 @@
/obj/effect/landmark/yautja_teleport
name = "yautja_teleport"
+ /// The index we registered as in mainship_yautja_desc or yautja_teleport_descs
+ var/desc_index
/obj/effect/landmark/yautja_teleport/Initialize(mapload, ...)
. = ..()
- var/turf/T = get_turf(src)
+ var/turf/turf = get_turf(src)
+ desc_index = turf.loc.name + turf.loc_to_string()
if(is_mainship_level(z))
GLOB.mainship_yautja_teleports += src
- GLOB.mainship_yautja_desc[T.loc.name + T.loc_to_string()] = src
+ GLOB.mainship_yautja_desc[desc_index] = src
else
GLOB.yautja_teleports += src
- GLOB.yautja_teleport_descs[T.loc.name + T.loc_to_string()] = src
+ GLOB.yautja_teleport_descs[desc_index] = src
/obj/effect/landmark/yautja_teleport/Destroy()
- var/turf/T = get_turf(src)
GLOB.mainship_yautja_teleports -= src
GLOB.yautja_teleports -= src
- GLOB.mainship_yautja_desc -= T.loc.name + T.loc_to_string()
- GLOB.yautja_teleport_descs -= T.loc.name + T.loc_to_string()
+ GLOB.mainship_yautja_desc -= desc_index
+ GLOB.yautja_teleport_descs -= desc_index
return ..()
diff --git a/code/modules/vehicles/interior/interior.dm b/code/modules/vehicles/interior/interior.dm
index b56de4bfe16b..046b42495ac7 100644
--- a/code/modules/vehicles/interior/interior.dm
+++ b/code/modules/vehicles/interior/interior.dm
@@ -72,6 +72,7 @@
entrance_markers = null
QDEL_NULL(reservation)
+ SSinterior.interiors -= src
return ..()
From cdac633a82130a07a24cb74981026e299a497ca5 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 15 Jul 2023 06:10:32 +0100
Subject: [PATCH 041/100] Automatic changelog for PR #3883 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3883.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3883.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3883.yml b/html/changelogs/AutoChangeLog-pr-3883.yml
new file mode 100644
index 000000000000..aee6de94ea48
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3883.yml
@@ -0,0 +1,4 @@
+author: "Drathek, Steelpoint"
+delete-after: True
+changes:
+ - bugfix: "Fixed possible hardeletes for predator landmarks and vehicles. Predator teleporation descriptions now do not change if the area is altered at runtime so they can still be found correctly."
\ No newline at end of file
From 54acb6f9acb241be11f77e0a7456cc70652729e5 Mon Sep 17 00:00:00 2001
From: Cursor <102828457+theselfish@users.noreply.github.com>
Date: Sat, 15 Jul 2023 06:20:29 +0100
Subject: [PATCH 042/100] Adding Coats to the Staff Officer vendor (#3840)
# About the pull request
Title.
![image](https://github.com/cmss13-devs/cmss13/assets/102828457/3f83c54f-3cf0-4227-a1f0-8a1b9b10baf4)
I am willing to toss the Tanker Jacket, as much as I miss it.
I also added the uniform to their required gear for the sake of
consistency.
# Explain why it's good for the game
It gives the SO more options for clothing, as it's cold on the ship.
I've also removed the free helmet they could get, for some odd reason.
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
add: SOs may now get coats in their vendor.
/:cl:
---
.../vending/vendor_types/crew/staff_officer.dm | 10 ++++++++++
1 file changed, 10 insertions(+)
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 5b0324edc2a2..103efeedde61 100644
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
@@ -11,11 +11,21 @@
GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
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("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),
+
+ list("HAT (CHOOSE 1)", 0, null, null, null),
+ list("Beret, Green", 0, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("Beret, Tan", 0, /obj/item/clothing/head/beret/cm/tan, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+
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),
From 885b70b82679eeadfb96a6031a3b9d8248ee5d4c Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Sat, 15 Jul 2023 06:28:37 +0100
Subject: [PATCH 043/100] Automatic changelog for PR #3840 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3840.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3840.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3840.yml b/html/changelogs/AutoChangeLog-pr-3840.yml
new file mode 100644
index 000000000000..0154501c70b0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3840.yml
@@ -0,0 +1,4 @@
+author: "theselfish"
+delete-after: True
+changes:
+ - rscadd: "SOs may now get coats in their vendor."
\ No newline at end of file
From 37a95a4189794acfa18fee7dc7c3a59246f251cc Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Sun, 16 Jul 2023 02:00:47 +0000
Subject: [PATCH 044/100] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-3840.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3882.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3883.yml | 4 ----
html/changelogs/AutoChangeLog-pr-3886.yml | 5 -----
html/changelogs/archive/2023-07.yml | 15 +++++++++++++++
5 files changed, 15 insertions(+), 17 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-3840.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3882.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3883.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3886.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3840.yml b/html/changelogs/AutoChangeLog-pr-3840.yml
deleted file mode 100644
index 0154501c70b0..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3840.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "theselfish"
-delete-after: True
-changes:
- - rscadd: "SOs may now get coats in their vendor."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3882.yml b/html/changelogs/AutoChangeLog-pr-3882.yml
deleted file mode 100644
index 9b512a62c3bc..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3882.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek, Fira"
-delete-after: True
-changes:
- - bugfix: "Fixed an issue with table flips that could make some tables incorrectly unflippable, and cause infinite loops. It is no longer possible to flip tables that t-shape or cross, or spans more than 5 tiles away from you."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3883.yml b/html/changelogs/AutoChangeLog-pr-3883.yml
deleted file mode 100644
index aee6de94ea48..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3883.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek, Steelpoint"
-delete-after: True
-changes:
- - bugfix: "Fixed possible hardeletes for predator landmarks and vehicles. Predator teleporation descriptions now do not change if the area is altered at runtime so they can still be found correctly."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3886.yml b/html/changelogs/AutoChangeLog-pr-3886.yml
deleted file mode 100644
index 415fce788e9a..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3886.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - rscadd: "Facehuggers now convert to their NPC version after 7 minutes of inactivity and no client."
- - code_imp: "Cleanup join as xeno button code somewhat."
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml
index 2a02cb58f88c..fc14f1bc1c6e 100644
--- a/html/changelogs/archive/2023-07.yml
+++ b/html/changelogs/archive/2023-07.yml
@@ -194,3 +194,18 @@
the ERT set.
- bugfix: You can no longer weld non metal containers closed.
- bugfix: Fixes the toggle notification sound verb for Yautja bracers not working.
+2023-07-16:
+ Drathek:
+ - rscadd: Facehuggers now convert to their NPC version after 7 minutes of inactivity
+ and no client.
+ - code_imp: Cleanup join as xeno button code somewhat.
+ Drathek, Fira:
+ - bugfix: Fixed an issue with table flips that could make some tables incorrectly
+ unflippable, and cause infinite loops. It is no longer possible to flip tables
+ that t-shape or cross, or spans more than 5 tiles away from you.
+ Drathek, Steelpoint:
+ - bugfix: Fixed possible hardeletes for predator landmarks and vehicles. Predator
+ teleporation descriptions now do not change if the area is altered at runtime
+ so they can still be found correctly.
+ theselfish:
+ - rscadd: SOs may now get coats in their vendor.
From 09a5191fb11aab8ddffe3f9be94292b53e4d96f6 Mon Sep 17 00:00:00 2001
From: Puckaboo2
Date: Sun, 16 Jul 2023 05:26:18 -0700
Subject: [PATCH 045/100] Removes dozens of duplicate and empty icon states
from over 50 dmi files (#3895)
# About the pull request
Self-explanatory. Several .dmis have been excluded from icon state
purging, including some unnamed/unused turfs.
# Explain why it's good for the game
Reduces bloat. Duh.
# Changelog
:cl: Puckaboo2
spellcheck: Some duplicate icon states have been differentiated to
prevent future missing icon state errors.
imageadd: Added new icon states for chemical and virology dispensers.
del: Removed dozens of duplicate icon states from over 50 files to
reduce bloat.
del: Removed duplicate empty icon states.
/:cl:
---
icons/effects/genetics.dmi | Bin 75837 -> 75837 bytes
icons/mob/hud/alien_standard.dmi | Bin 153159 -> 156109 bytes
icons/mob/hud/hud.dmi | Bin 19035 -> 19038 bytes
icons/mob/hud/human_bronze.dmi | Bin 130266 -> 130274 bytes
icons/mob/hud/human_old.dmi | Bin 116782 -> 116791 bytes
icons/mob/hud/human_orange.dmi | Bin 145791 -> 142866 bytes
icons/mob/hud/screen1.dmi | Bin 160325 -> 160241 bytes
icons/mob/hud/screen1_robot.dmi | Bin 28694 -> 28700 bytes
icons/mob/hud/talk.dmi | Bin 1226 -> 1177 bytes
icons/mob/humans/green_armors.dmi | Bin 22289 -> 22095 bytes
icons/mob/humans/human.dmi | Bin 15941 -> 15404 bytes
icons/mob/humans/onmob/belt.dmi | Bin 35985 -> 35379 bytes
.../species/monkeys/onmob/suit_monkey_0.dmi | Bin 222461 -> 210851 bytes
.../monkeys/onmob/uniform_monkey_0.dmi | Bin 243454 -> 243457 bytes
icons/mob/xenonids/lurker.dmi | Bin 26428 -> 23244 bytes
icons/obj/bodybag.dmi | Bin 9448 -> 9239 bytes
icons/obj/items/black_goo_stuff.dmi | Bin 1459 -> 1495 bytes
.../obj/items/clothing/halloween_clothes.dmi | Bin 13414 -> 11006 bytes
icons/obj/items/food.dmi | Bin 108095 -> 105853 bytes
icons/obj/items/hunter/pred_gear.dmi | Bin 53706 -> 59301 bytes
.../items/weapons/guns/attachments/barrel.dmi | Bin 8832 -> 8348 bytes
.../items/weapons/guns/attachments/rail.dmi | Bin 7111 -> 6373 bytes
.../items/weapons/guns/attachments/stock.dmi | Bin 13180 -> 13375 bytes
.../items/weapons/guns/attachments/under.dmi | Bin 13459 -> 13402 bytes
.../items/weapons/guns/legacy/old_bayguns.dmi | Bin 51974 -> 49385 bytes
.../items/weapons/guns/legacy/old_cmguns.dmi | Bin 36902 -> 34401 bytes
icons/obj/structures/doors/mineral_doors.dmi | Bin 55234 -> 55233 bytes
.../doors/prison_FOP/prison_hatches.dmi | Bin 46959 -> 46796 bytes
icons/obj/structures/machinery/computer3.dmi | Bin 40501 -> 40522 bytes
icons/obj/structures/machinery/cryogenics.dmi | Bin 93889 -> 88106 bytes
.../structures/machinery/shuttle-parts.dmi | Bin 2762 -> 2770 bytes
icons/obj/structures/machinery/vending.dmi | Bin 141543 -> 141152 bytes
icons/obj/structures/props/dam.dmi | Bin 50855 -> 50640 bytes
icons/obj/structures/props/fence.dmi | Bin 8292 -> 8128 bytes
.../stairs/perspective_stairs_ice.dmi | Bin 2389 -> 2390 bytes
.../stairs/perspective_stairs_kutjevo.dmi | Bin 2459 -> 2460 bytes
icons/old_stuff/Seasonal/xmas.dmi | Bin 9888 -> 9908 bytes
icons/rebase_icons.dmi | Bin 89028 -> 83324 bytes
icons/turf/almayer.dmi | Bin 81437 -> 81058 bytes
icons/turf/area_strata.dmi | Bin 18044 -> 18046 bytes
icons/turf/floors/asphalt.dmi | Bin 20504 -> 20660 bytes
icons/turf/floors/concrete.dmi | Bin 2961 -> 2961 bytes
icons/turf/floors/floors.dmi | Bin 412638 -> 414123 bytes
icons/turf/walls/bunker.dmi | Bin 6491 -> 6516 bytes
icons/turf/walls/dev/dev.dmi | Bin 1627 -> 1687 bytes
icons/turf/walls/floodgate.dmi | Bin 4002 -> 4026 bytes
icons/turf/walls/kutjevo/kutjevo.dmi | Bin 7012 -> 7078 bytes
icons/turf/walls/solaris/solaris.dmi | Bin 7665 -> 7477 bytes
icons/turf/walls/solaris/solaris_old.dmi | Bin 2778 -> 2816 bytes
icons/turf/walls/strata_outpost.dmi | Bin 4132 -> 4141 bytes
icons/turf/walls/windows.dmi | Bin 131295 -> 131296 bytes
51 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi
index 8e31fea961352fadc8b5a58f920e72b08e3668e1..fa46a2d6c0943bff9700c46f429773c893faa60e 100644
GIT binary patch
delta 499
zcmVT6XOP4WS*_D@;al*RZ6WlEAb*JqO0t
zl!n?9$4Z}n|NiZC22al~t2HcNSNSJ7ue%m1SlmD4*+Hw&Kn0Iwo;9SmP5A!s0Ruq=
zcb@d=!;!^y{OB%i*MQSaBf^m1>kWDjp(x=(l?2X4fS6^_1
zg91qh;Si!*@kU!>&v1pA%94O0p6i^SO&=Gymo*S&j|wfeLAUG$^eWiChFwIyZkR=|
p^0?@Ri3H~|+ACQ$gXi@UmanV)3r}6WKI^HA5Q7;4w;2KfBqr5@`Mv-E
delta 499
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%0DrH5b=@g7N-9sD5V^`@d{)3r#
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