From 7f385648381af7313848eba031fdf49071738d98 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 19:55:53 +0100 Subject: [PATCH 01/84] i can't believe kevin made me code im taking severe offense to this --- code/__DEFINES/admin.dm | 4 + code/__DEFINES/cooldowns.dm | 7 + code/__DEFINES/say.dm | 3 + code/__HELPERS/_lists.dm | 3 + code/__HELPERS/roundend.dm | 5 + .../configuration/entries/general.dm | 5 + code/datums/datum.dm | 13 + code/datums/mind.dm | 245 +++++++++++++++++- code/modules/admin/antag_panel.dm | 32 ++- .../antagonists/_common/antag_datum.dm | 9 +- .../antagonists/changeling/powers/absorb.dm | 4 +- code/modules/mob/living/login.dm | 5 +- code/modules/mob/mob.dm | 6 +- 13 files changed, 318 insertions(+), 23 deletions(-) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index f6293454ee..c75adfa49e 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -56,6 +56,10 @@ #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" #define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" +//ambition port start +#define ADMIN_TPMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_JMP(user)] [ADMIN_FLW(user)]" +#define ADMIN_TPMONTY(user) "[key_name_admin(user)] [ADMIN_TPMONTY_NONAME(user)]" +//ambition port end #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 29c7a25dad..13a7633409 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -27,6 +27,7 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" +#define COOLDOWN_AMBITION "ambition" //TIMER COOLDOWN MACROS @@ -40,6 +41,12 @@ #define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) +#define COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time)) + +#define COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) + +#define COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) + /* * Stoppable timer cooldowns. * Use indexes the same as the regular tiemr cooldowns. diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 9403eca2da..a9e23bb67c 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -86,6 +86,9 @@ #define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam +//ambition port start +#define MAX_AMBITION_LEN 1024 +//ambition port end #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? #define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index a554397c41..608da83dd9 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -13,6 +13,9 @@ #define UNSETEMPTY(L) if (L && !length(L)) L = null #define LAZYCOPY(L) (L ? L.Copy() : list() ) #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } +//ambition port start +#define LAZYCUT(L, S, E) if((length(L) >= S) && (E == 0 || length(L) >= (E - 1))) { L.Cut(S, E); if(!length(L)) { L = null; } } +//ambition port end #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; #define LAZYFIND(L, V) L ? L.Find(V) : 0 diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index cd59dfd9cf..ad57ce42ac 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -491,6 +491,11 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() +//ambition port start + for(var/count in 1 to LAZYLEN(A.owner.ambitions)) + result += "
Ambition #[count]: [A.owner.ambitions[count]]" +//ambition port end + result += "

" CHECK_TICK diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 63da60d7b5..a65e9ddb81 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -441,3 +441,8 @@ config_entry_value = TRUE /datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API + +//ambition port start +/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. + config_entry_value = 5 +//amibiton port end diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 42580425ce..74dfbbddd9 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -49,6 +49,11 @@ /// A weak reference to another datum var/datum/weakref/weak_reference +//ambition port start + ///Lazy associative list of currently active cooldowns. + var/list/cooldowns +//ambition port end + /* * Lazy associative list of currently active cooldowns. * @@ -261,3 +266,11 @@ return SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index)) TIMER_COOLDOWN_END(source, index) + +//ambition port start +///Callback called by a timer to end an associative-list-indexed cooldown. +/proc/end_cooldown(datum/source, index) + if(QDELETED(source)) + return + COOLDOWN_END(source, index) +//ambition port end diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 897e2e7d71..e6414f1d9f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -28,6 +28,10 @@ yourself. */ +//ambition port start +#define AMBITION_COOLDOWN_TIME (5 SECONDS) +//ambition port end + /datum/mind var/key @@ -68,6 +72,11 @@ /// Our skill holder. var/datum/skill_holder/skill_holder +//ambition port start + /// Lazy list for antagonists to set goals they wish to achieve, to be shown at the round-end report. + var/list/ambitions +//ambition port end + ///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not var/mob/original_character @@ -173,7 +182,10 @@ qdel(A) return A.owner = src - LAZYADD(antag_datums, A) +//ambitions port start + do_add_antag_datum(A) +//ambitions port end + A.create_team(team) var/datum/team/antag_team = A.get_team() if(antag_team) @@ -181,6 +193,14 @@ A.on_gain() return A +//ambitions port start +/datum/mind/proc/do_add_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYADD(antag_datums, instanced_datum) + if(!.) + current.verbs += /mob/proc/edit_ambitions +//ambitions port end + /datum/mind/proc/remove_antag_datum(datum_type) if(!datum_type) return @@ -195,6 +215,15 @@ var/datum/antagonist/A = a A.on_removal() +//ambitions port start +/datum/mind/proc/do_remove_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYREMOVE(antag_datums, instanced_datum) + if(. && !LAZYLEN(antag_datums)) + current.verbs -= /mob/proc/edit_ambitions + ambitions = null +//ambitions port end + /datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE) if(!datum_type) return @@ -374,10 +403,10 @@ message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.") -/datum/mind/proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
" +//ambitions port start +/datum/mind/proc/show_memory() + var/list/output = list("[current.real_name]'s Memories:
") +//ambitions port end output += memory @@ -398,17 +427,211 @@ output += "
  • Conspirator: [M.name]
  • " output += "" - if(window) - recipient << browse(output,"window=memory") - else if(all_objectives.len || memory) - to_chat(recipient, "[output]") +//ambition port start + if(LAZYLEN(ambitions)) + for(var/count in 1 to LAZYLEN(ambitions)) + output += "
    Ambition #[count]: [ambitions[count]]" + + if(!memory && !length(all_objectives) && !LAZYLEN(ambitions)) + output += "" + + return output.Join() + + +/datum/mind/proc/show_editable_ambitions() + var/list/output = list("[current.real_name]'s Ambitions:
    " + return output.Join() + + +/mob/proc/edit_ambitions() + set name = "Ambitions" + set category = "IC" + set desc = "View and edit your character's ambitions." + mind.do_edit_ambitions() + + +/datum/mind/proc/do_edit_ambitions() + var/datum/browser/popup = new(usr, "ambitions", "Ambitions") + popup.set_content(show_editable_ambitions()) + popup.open() +//ambition port end /datum/mind/Topic(href, href_list) +//ambition port start + if (href_list["refresh_ambitions"]) + do_edit_ambitions() + return + + else if (href_list["add_ambition"]) + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/max_ambitions = CONFIG_GET(number/max_ambitions) + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_ambitions() + return + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_ambitions() + return + COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYADD(ambitions, new_ambition) + if(usr == current) + log_game("[key_name(usr)] has created their ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") + do_edit_ambitions() + return + + else if (href_list["edit_ambition"]) + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["edit_ambition"]) + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + if(ambition_index > LAZYLEN(ambitions)) + return + var/old_ambition = ambitions[ambition_index] + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") + do_edit_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") + do_edit_ambitions() + return + COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + ambitions[ambition_index] = new_ambition + if(usr == current) + log_game("[key_name(usr)] has edited their ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_ambitions() + return + + else if (href_list["remove_ambition"]) + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["remove_ambition"]) + if(ambition_index > LAZYLEN(ambitions)) + do_edit_ambitions() + return + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + var/old_ambition = ambitions[ambition_index] + if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist. The ambition we were deleting should no longer exist already.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") + do_edit_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") + do_edit_ambitions() + return + COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYCUT(ambitions, ambition_index, ambition_index + 1) + if(usr == current) + log_game("[key_name(usr)] has deleted their ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + else + log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_ambitions() + return if(!check_rights(R_ADMIN)) return var/self_antagging = usr == current + if(href_list["edit_ambitions_panel"]) + do_edit_ambitions() + return + else if(href_list["refresh_antag_panel"]) + traitor_panel() + return +//ambition port end if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) if(href_list["remove_antag"]) @@ -814,3 +1037,7 @@ ..() mind.assigned_role = ROLE_PAI mind.special_role = "" + +//ambition port start +#undef AMBITION_COOLDOWN_TIME +//ambition port end diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 88aab2c4ce..502ee116c1 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -97,10 +97,14 @@ GLOBAL_VAR(antag_prototypes) alert("This mind doesn't have a mob, or is deleted! For some reason!", "Edit Memory") return - var/out = "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    " - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " - out += "Assigned role: [assigned_role]. Edit
    " - out += "Faction and special role: [special_role]
    " +//ambition port start + var/list/out = list( + "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    \ + Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    \ + Assigned role: [assigned_role]. Edit
    \ + Faction and special role: [special_role]
    " + ) +//ambition port end var/special_statuses = get_special_statuses() if(length(special_statuses)) @@ -191,6 +195,16 @@ GLOBAL_VAR(antag_prototypes) //Uplink if(ishuman(current)) var/uplink_info = "Uplink:" +//ambition port start + //Ambitions + out += "[current.real_name]'s Ambitions: Edit Ambitions
    " + var/datum/component/uplink/U = find_syndicate_uplink() if(U) uplink_info += "take" @@ -204,14 +218,16 @@ GLOBAL_VAR(antag_prototypes) out += uplink_info + "
    " //Common Memory - var/common_memory = "Common Memory:" - common_memory += memory - common_memory += "Edit Memory" - out += common_memory + "
    " + out += "
    Common Memory:" + out += memory + out += "Edit Memory
    " //Other stuff out += get_common_admin_commands() + out += "
    Refresh" var/datum/browser/panel = new(usr, "traitorpanel", "", 600, 600) + panel.set_content(out.Join()) +//ambition port end panel.set_content(out) panel.open() return diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 14f7b34309..df9a8bff2e 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -35,8 +35,9 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/Destroy() GLOB.antagonists -= src - if(owner) - LAZYREMOVE(owner.antag_datums, src) +//ambition port start + owner?.do_remove_antag_datum(src) +//ambition port end owner = null return ..() @@ -133,7 +134,9 @@ GLOBAL_LIST_EMPTY(antagonists) remove_innate_effects() clear_antag_moodies() if(owner) - LAZYREMOVE(owner.antag_datums, src) +//ambition port start + owner.do_remove_antag_datum(src) +//ambition port end for(var/A in skill_modifiers) owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type)) if(!silent && owner.current) diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 208fefee70..a3c47c10a5 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -65,7 +65,9 @@ user.copy_languages(target, LANGUAGE_ABSORB) if(target.mind && user.mind)//if the victim and user have minds - target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. +//ambition port start + to_chat(user, "[target.mind.show_memory()]") //I can read your mind. Output all their notes. +//ambition port end //Some of target's recent speech, so the changeling can attempt to imitate them better. //Recent as opposed to all because rounds tend to have a LOT of text. diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 2b1c2de17a..000436ab29 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -2,7 +2,10 @@ ..() //Mind updates sync_mind() - mind.show_memory(src, 0) +//ambition port start + if(mind.memory || mind.antag_datums) + to_chat(src, "[mind.show_memory()]") +//ambition port end //Round specific stuff if(SSticker.mode) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 824e262ae1..a29cd8c24a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -441,7 +441,11 @@ set category = "IC" set desc = "View your character's notes memory." if(mind) - mind.show_memory(src) +//ambition port start + var/datum/browser/popup = new(src, "memory", "Memory and Notes") + popup.set_content(mind.show_memory()) + popup.open() +//ambition port else to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.") From dbabbb10625dc353e3567c41e73cee1a81e23b13 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 20:31:57 +0100 Subject: [PATCH 02/84] objectives hrnrghghgh --- code/__DEFINES/cooldowns.dm | 2 +- code/datums/mind.dm | 521 +++++++++++++++--- code/modules/admin/admin.dm | 14 +- code/modules/admin/topic.dm | 11 + .../antagonists/_common/antag_datum.dm | 5 + 5 files changed, 483 insertions(+), 70 deletions(-) diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 13a7633409..947f3202e6 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -28,7 +28,7 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" #define COOLDOWN_AMBITION "ambition" - +#define COOLDOWN_OBJECTIVES "objectives" //TIMER COOLDOWN MACROS diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e6414f1d9f..a612938965 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -30,6 +30,7 @@ */ //ambition port start #define AMBITION_COOLDOWN_TIME (5 SECONDS) +#define OBJECTIVES_COOLDOWN_TIME (10 MINUTES) //ambition port end @@ -198,7 +199,7 @@ . = LAZYLEN(antag_datums) LAZYADD(antag_datums, instanced_datum) if(!.) - current.verbs += /mob/proc/edit_ambitions + current.verbs += /mob/proc/edit_objectives_and_ambitions //ambitions port end /datum/mind/proc/remove_antag_datum(datum_type) @@ -220,8 +221,8 @@ . = LAZYLEN(antag_datums) LAZYREMOVE(antag_datums, instanced_datum) if(. && !LAZYLEN(antag_datums)) - current.verbs -= /mob/proc/edit_ambitions ambitions = null + current.verbs += /mob/proc/edit_objectives_and_ambitions //ambitions port end /datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE) @@ -438,18 +439,56 @@ return output.Join() -/datum/mind/proc/show_editable_ambitions() - var/list/output = list("[current.real_name]'s Ambitions:

    (Refresh)" return output.Join() @@ -460,24 +499,53 @@ mind.do_edit_ambitions() -/datum/mind/proc/do_edit_ambitions() - var/datum/browser/popup = new(usr, "ambitions", "Ambitions") - popup.set_content(show_editable_ambitions()) +/datum/mind/proc/do_edit_objectives_ambitions() + var/datum/browser/popup = new(usr, "objectives and ambitions", "Objectives and Ambitions") + popup.set_content(show_editable_objectives_and_ambitions()) popup.open() + +GLOBAL_VAR_INIT(requested_objective_uid, 0) +GLOBAL_LIST(objective_choices) + +/proc/populate_objective_choices() + GLOB.objective_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate, + /datum/objective/assassinate/once, + /datum/objective/maroon, + /datum/objective/debrain, + /datum/objective/protect, + /datum/objective/destroy, + /datum/objective/hijack, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + /datum/objective/nuclear, + /datum/objective/absorb, + /datum/objective/blackmail_implant //SKYRAT ADDITION + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_choices[initial(type_cast.name)] = t //ambition port end /datum/mind/Topic(href, href_list) //ambition port start - if (href_list["refresh_ambitions"]) - do_edit_ambitions() + if (href_list["refresh_obj_amb"]) + do_edit_objectives_ambitions() + return else if (href_list["add_ambition"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) return @@ -486,16 +554,16 @@ var/max_ambitions = CONFIG_GET(number/max_ambitions) if(LAZYLEN(ambitions) >= max_ambitions) to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_ambitions() + do_edit_objectives_ambitions() return var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) if(isnull(new_ambition)) return - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature.") @@ -505,7 +573,7 @@ return if(LAZYLEN(ambitions) >= max_ambitions) to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_ambitions() + do_edit_objectives_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) LAZYADD(ambitions, new_ambition) @@ -514,15 +582,15 @@ else log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") - do_edit_ambitions() + do_edit_objectives_ambitions() return else if (href_list["edit_ambition"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) return @@ -539,11 +607,11 @@ var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) if(isnull(new_ambition)) return - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature.") @@ -553,11 +621,11 @@ return if(ambition_index > LAZYLEN(ambitions)) to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") - do_edit_ambitions() + do_edit_objectives_ambitions() return if(old_ambition != ambitions[ambition_index]) to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") - do_edit_ambitions() + do_edit_objectives_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) ambitions[ambition_index] = new_ambition @@ -566,15 +634,15 @@ else log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_ambitions() + do_edit_objectives_ambitions() return else if (href_list["remove_ambition"]) - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) return @@ -582,7 +650,7 @@ return var/ambition_index = text2num(href_list["remove_ambition"]) if(ambition_index > LAZYLEN(ambitions)) - do_edit_ambitions() + do_edit_objectives_ambitions() return if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") @@ -591,11 +659,11 @@ var/old_ambition = ambitions[ambition_index] if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") return - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN, FALSE)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") @@ -605,11 +673,11 @@ return if(ambition_index > LAZYLEN(ambitions)) to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") - do_edit_ambitions() + do_edit_objectives_ambitions() return if(old_ambition != ambitions[ambition_index]) to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") - do_edit_ambitions() + do_edit_objectives_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) LAZYCUT(ambitions, ambition_index, ambition_index + 1) @@ -618,7 +686,113 @@ else log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_ambitions() + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_add"]) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(!istype(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + if(!GLOB.objective_choices) + populate_objective_choices() + var/choe = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_choices + var/selected_type = GLOB.objective_choices[choe] + if(!selected_type) + return + var/new_objective = stripped_multiline_input(usr,\ + selected_type == /datum/objective/custom\ + ? "Write the custom objective you'd like to request the admins to grant you.\ + Remember they can edit or deny your request. There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown."\ + : "Justify your request for a new objective to the admins. Add the required clarifations, if you have a specific targets in mind or the likes.\ + Remember they can edit or deny your request. There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.",\ + "New Objective", max_length = MAX_MESSAGE_LEN) + if(isnull(new_objective)) + return + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + if(QDELETED(target_antag)) + return + COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + LAZYADD(target_antag.requested_objectives, uid) + target_antag.requested_objectives[uid] = list("type" = selected_type, "text" = new_objective) + log_admin("[key_name(usr)] has requested a [choe] objective: [new_objective]") + message_admins("[ADMIN_TPMONTY(usr)] has requested a [choe] objective. (RPLY)") + to_chat(usr, "The admins have been notified of your request!") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_delete"]) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + var/datum/objective/objective_to_delete = locate(href_list["req_obj_delete"]) + if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + var/justifation = stripped_multiline_input(usr, + "Justify your request for a deleting this objective to the admins.\ + There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", + "Objective Deletion", max_length = MAX_MESSAGE_LEN) + if(isnull(justifation)) + return + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + if(QDELETED(objective_to_delete)) + do_edit_objectives_ambitions() + return + COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + log_admin("[key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]") + message_admins("[ADMIN_TPMONTY(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") + to_chat(usr, "The admins have been notified of your request!") + do_edit_objectives_ambitions() + return + else if (href_list["req_obj_completed"]) + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + var/datum/objective/objective_to_complete = locate(href_list["req_obj_completed"]) + if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + var/justifation = stripped_multiline_input(usr, + "Justify your request for the [objective_to_complete.completed ? "completion" : "incompletion"] of this objective to the admins.\ + There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", + "Objective [objective_to_complete.completed ? "Completion" : "Incompletion"]", max_length = MAX_MESSAGE_LEN) + if(isnull(justifation)) + return + if(usr != current) + return + if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") + return + if(QDELETED(objective_to_complete)) + do_edit_objectives_ambitions() + return + COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + log_admin("[key_name(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]") + message_admins("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") + to_chat(usr, "The admins have been notified of your request!") + do_edit_objectives_ambitions() return if(!check_rights(R_ADMIN)) return @@ -626,12 +800,236 @@ var/self_antagging = usr == current if(href_list["edit_ambitions_panel"]) - do_edit_ambitions() + do_edit_objectives_ambitions() return + else if(href_list["refresh_antag_panel"]) traitor_panel() return + + else if (href_list["req_obj_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + + switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) + if("Type") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_objective["type"] + var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] + if(!selected_type) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") + message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") + requested_objective["type"] = selected_type + if("Text") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_objective["text"], MAX_MESSAGE_LEN) + if (isnull(new_text)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") + message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") + requested_objective["text"] = new_text + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_accept"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + if(alert(usr, "Are you sure you want to approve this objective?", "Approve objective", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + var/objective_path = requested_objective["type"] + var/datum/objective/new_objective = new objective_path + new_objective.owner = src + if(istype(new_objective, /datum/objective/custom)) + new_objective.explanation_text = requested_objective["text"] + else + new_objective.admin_edit(usr) + antag_datum.objectives += new_objective + LAZYREMOVE(antag_datum.requested_objectives, uid) + message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") + log_admin("[key_name(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") + to_chat(current, "Your objective request has been approved.") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_deny"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + var/justifation = stripped_multiline_input(usr, "Justify why you are denying this objective request.", "Deny", memory, MAX_MESSAGE_LEN) + if(isnull(justifation)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_objective["type"] + var/objective_name = initial(type_cast.name) + message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") + log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") + to_chat(current, "Your objective request has been denied for the following reason: [justifation]") + LAZYREMOVE(antag_datum.requested_objectives, uid) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_complete_toggle"]) + var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) + if(!istype(objective_to_toggle) || QDELETED(objective_to_toggle)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_toggle.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + objective_to_toggle.completed = !objective_to_toggle.completed + message_admins("[key_name_admin(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + if(alert(usr, "Would you like to alert the player of the change?", "Deny objective", "Yes", "No") == "Yes") + to_chat(current, "[objective_to_toggle.completed ? "" : ""]Your objective status has changed!") + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_delete"]) + var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) + if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_delete.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + if(alert(usr, "Are you sure you want to delete this objective?", "Delete objective", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(objective_to_delete)) + return + message_admins("[key_name_admin(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + log_admin("[key_name(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + qdel(objective_to_delete) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_edit"]) + var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) + if(!istype(objective_to_edit) || QDELETED(objective_to_edit)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_edit.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + var/explanation_before = objective_to_edit.explanation_text + objective_to_edit.admin_edit(usr) + if(QDELETED(objective_to_edit)) + return + message_admins("[key_name_admin(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + log_admin("[key_name(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + do_edit_objectives_ambitions() + return + //ambition port end + if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) if(href_list["remove_antag"]) @@ -691,38 +1089,16 @@ else target_antag = target - var/static/list/choices - if(!choices) - choices = list() +//ambition port start + if(!GLOB.objective_choices) + populate_objective_choices() - var/list/allowed_types = list( - /datum/objective/assassinate, - /datum/objective/assassinate/once, - /datum/objective/maroon, - /datum/objective/debrain, - /datum/objective/protect, - /datum/objective/destroy, - /datum/objective/hijack, - /datum/objective/escape, - /datum/objective/survive, - /datum/objective/martyr, - /datum/objective/steal, - /datum/objective/download, - /datum/objective/nuclear, - /datum/objective/absorb, - /datum/objective/custom - ) + if(old_objective && GLOB.objective_choices[old_objective.name]) + def_value = old_objective.name - for(var/T in allowed_types) - var/datum/objective/X = T - choices[initial(X.name)] = T - - if(old_objective) - if(old_objective.name in choices) - def_value = old_objective.name - - var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in choices - selected_type = choices[selected_type] + var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] +//ambition port end if (!selected_type) return @@ -749,6 +1125,11 @@ target_antag.objectives.Insert(objective_pos, new_objective) message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") +//ambition port start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition port end else if(href_list["traitor_class"]) var/static/list/choices @@ -834,6 +1215,12 @@ else if (href_list["obj_announce"]) announce_objectives() +//ambition port start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition port end + //Something in here might have changed your mob if(self_antagging && (!usr || !usr.client) && current.client) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d4afc3dbb4..6a2bc83db7 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -25,7 +25,9 @@ to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.", confidential = TRUE) return - var/body = "Options for [M.key]" +//ambition port start + var/list/body = list("Options for [M.key]") +//ambition port end body += "Options panel for [M]" if(M.client) body += " played by [M.client] " @@ -125,6 +127,10 @@ body += "Subtle message | " // body += "Play sound to | " body += "Language Menu" +//ambition port start + if(M.mind) + body += " | Objective-Ambition Menu" +//ambition port end if (M.client) if(!isnewplayer(M)) @@ -206,7 +212,11 @@ body += "
    " body += "" - usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515") +//ambition port start + var/datum/browser/popup = new(usr, "adminplayeropts-[REF(M)]", "Player Panel", nwidth = 550, nheight = 515) + popup.set_content(body.Join()) + popup.open() +//ambition port end SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 05e791984a..9cd4fd203c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2251,6 +2251,17 @@ var/mob/M = locate(href_list["HeadsetMessage"]) usr.client.admin_headset_message(M) +//ambition port start + else if(href_list["ObjectiveRequest"]) + if(!check_rights(R_ADMIN)) + return + var/datum/mind/requesting_mind = locate(href_list["ObjectiveRequest"]) + if(!istype(requesting_mind) || QDELETED(requesting_mind)) + to_chat(usr, "This mind reference is no longer valid. It has probably since been destroyed.") + return + requesting_mind.do_edit_objectives_ambitions() + return +//ambition port end else if(href_list["reject_custom_name"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index df9a8bff2e..fbe40f80b8 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -25,6 +25,11 @@ GLOBAL_LIST_EMPTY(antagonists) var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default. var/threat = 0 // Amount of threat this antag poses, for dynamic mode +//ambition port start + /// Lazy list for antagonists to request the admins objectives. + var/list/requested_objectives +//ambition port end + var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors var/list/skill_modifiers From aa6402427b1f903d4e6ab864218441e5eb28d731 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:11:09 +0100 Subject: [PATCH 03/84] god why am i doing it this way instead of just looking at end changes im going through every single commit im retarded --- code/__DEFINES/antagonists.dm | 6 + code/datums/mind.dm | 332 +++++++++++++----- .../antagonists/_common/antag_datum.dm | 43 ++- 3 files changed, 287 insertions(+), 94 deletions(-) diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index e71243994d..f80652523e 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -110,3 +110,9 @@ GLOBAL_LIST_EMPTY(living_heart_cache) //A list of all living hearts in existance #define BLOB_SPREAD_COST 4 #define BLOB_ATTACK_REFUND 2 //blob refunds this much if it attacks and doesn't spread #define BLOB_REFLECTOR_COST 15 + +//Objectives-Ambitions Panel +#define REQUEST_NEW_OBJECTIVE "new_objective" +#define REQUEST_DEL_OBJECTIVE "del_objective" +#define REQUEST_WIN_OBJECTIVE "win_objective" +#define REQUEST_LOSE_OBJECTIVE "lose_objective" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a612938965..fa40b8c70d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -454,21 +454,45 @@ if(!length(antag_datum.objectives)) output += "
  • NONE" else - for(var/count in 1 to length(antag_datum.objectives)) - var/datum/objective/objective = antag_datum.objectives[count] - output += "
  • [count]: [objective.explanation_text]" - if(self_mind) - output += " Request Remove [objective.completed ? "Request incompletion" : "Request completion"]
    " - if(is_admin) - output += " Edit Remove [objective.completed ? "Mark as incomplete" : "Mark as complete"]
    " + for(var/uid in antag_datum.requested_objective_changes) + var/list/objectives_info = antag_datum.requested_objective_changes[uid] + var/obj_request = objectives_info["request"] + switch(obj_request) + if(REQUEST_NEW_OBJECTIVE) + var/datum/objective/type_cast_objective = objectives_info["target"] + var/objective_text = objectives_info["text"] + output += "
  • Request #[uid]: ADD [initial(type_cast_objective.name)] - [objective_text]" + if(is_admin) + output += " Accept Edit Deny" + if(REQUEST_DEL_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: DEL [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(is_admin) + output += " Accept Deny" + if(REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: [obj_request == REQUEST_WIN_OBJECTIVE ? "WIN" : "LOSE"] [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(is_admin) + output += " Accept Deny" + else + stack_trace("Objective request found with no request index. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + continue output += "" if(is_admin) output += "Announce objectives
    " - output += "
    Requested Objectives:" + output += "
    Requested Objective Changes:" if(self_mind) output += " Request objective" output += "
      " - if(!length(antag_datum.requested_objectives)) + if(!length(antag_datum.requested_objective_changes)) output += "
    • NONE" else for(var/uid in antag_datum.requested_objectives) @@ -493,7 +517,7 @@ /mob/proc/edit_ambitions() - set name = "Ambitions" + set name = "Objectives and Ambitions" set category = "IC" set desc = "View and edit your character's ambitions." mind.do_edit_ambitions() @@ -505,6 +529,28 @@ popup.open() GLOBAL_VAR_INIT(requested_objective_uid, 0) + + +GLOBAL_LIST(objective_player_choices) + +/proc/populate_objective_player_choices() + GLOB.objective_player_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate/once, + /datum/objective/protect, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_player_choices[initial(type_cast.name)] = t + + GLOBAL_LIST(objective_choices) /proc/populate_objective_choices() @@ -696,14 +742,14 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums - if(!istype(target_antag)) + if(QDELETED(target_antag)) to_chat(usr, "No antagonist found for this objective.") do_edit_objectives_ambitions() return - if(!GLOB.objective_choices) - populate_objective_choices() - var/choe = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_choices - var/selected_type = GLOB.objective_choices[choe] + if(!GLOB.objective_player_choices) + populate_objective_player_choices() + var/choice = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_player_choices + var/selected_type = GLOB.objective_player_choices[choice] if(!selected_type) return var/new_objective = stripped_multiline_input(usr,\ @@ -724,11 +770,10 @@ GLOBAL_LIST(objective_choices) return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) var/uid = "[GLOB.requested_objective_uid++]" - LAZYADD(target_antag.requested_objectives, uid) - target_antag.requested_objectives[uid] = list("type" = selected_type, "text" = new_objective) - log_admin("[key_name(usr)] has requested a [choe] objective: [new_objective]") - message_admins("[ADMIN_TPMONTY(usr)] has requested a [choe] objective. (RPLY)") - to_chat(usr, "The admins have been notified of your request!") + target_antag.add_objective_change(uid, list("request" = REQUEST_NEW_OBJECTIVE, "target" = selected_type, "text" = new_objective)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested a [choice] objective: [new_objective]") + target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested a [choice] objective. (RPLY)") + to_chat(usr do_edit_objectives_ambitions() return @@ -738,12 +783,18 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - var/datum/objective/objective_to_delete = locate(href_list["req_obj_delete"]) + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_delete"] + var/datum/objective/objective_to_delete = locate(objective_reference) in target_antag.objectives if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return - var/justifation = stripped_multiline_input(usr, + var/justification = stripped_multiline_input(usr, "Justify your request for a deleting this objective to the admins.\ There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", "Objective Deletion", max_length = MAX_MESSAGE_LEN) @@ -754,13 +805,21 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - if(QDELETED(objective_to_delete)) + if(QDELETED(objective_to_delete) || QDELETED(target_antag)) do_edit_objectives_ambitions() return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + to_chat(usr, "There is already a change request tied to this objective waiting to be processed. Ahelp or wait for it to be resolved before adding a new one.") + return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - log_admin("[key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]") - message_admins("[ADMIN_TPMONTY(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") - to_chat(usr, "The admins have been notified of your request!") + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = REQUEST_DEL_OBJECTIVE, "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justification is as follows: [justification]") + target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested the deletion of an objective: (RPLY)") + to_chat(usr, "The admins have been notified of your request!") do_edit_objectives_ambitions() return else if (href_list["req_obj_completed"]) @@ -769,29 +828,43 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - var/datum/objective/objective_to_complete = locate(href_list["req_obj_completed"]) + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_completed"] + var/datum/objective/objective_to_complete = locate(objective_reference) in target_antag.objectives if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return - var/justifation = stripped_multiline_input(usr, - "Justify your request for the [objective_to_complete.completed ? "completion" : "incompletion"] of this objective to the admins.\ + var/justification = stripped_multiline_input(usr, + "Justify to the admins your request to mark this objective as [objective_to_complete.completed ? "incomplete" : "completed"].\ There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", - "Objective [objective_to_complete.completed ? "Completion" : "Incompletion"]", max_length = MAX_MESSAGE_LEN) - if(isnull(justifation)) + "Objective [objective_to_complete.completed ? "Incompletion" : "Completion"]", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) return if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - if(QDELETED(objective_to_complete)) + if(QDELETED(objective_to_complete) || QDELETED(target_antag)) do_edit_objectives_ambitions() return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + to_chat(usr, "There is already a change request tied to this objective waiting to be processed. Ahelp or wait for it to be resolved before adding a new one.") + return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - log_admin("[key_name(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]") - message_admins("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") - to_chat(usr, "The admins have been notified of your request!") + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = (objective_to_complete.completed ? REQUEST_LOSE_OBJECTIVE : REQUEST_WIN_OBJECTIVE), "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justification is as follows: [justification]") + target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of an objective: (RPLY)") + to_chat(usr, "The admins have been notified of your request!") do_edit_objectives_ambitions() return if(!check_rights(R_ADMIN)) @@ -808,7 +881,7 @@ GLOBAL_LIST(objective_choices) return else if (href_list["req_obj_edit"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) in antag_datums if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -818,12 +891,15 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) do_edit_objectives_ambitions() to_chat(usr, "Invalid requested objective reference.") return - + if(requested_obj_change["request"] != REQUEST_NEW_OBJECTIVE) + do_edit_objectives_ambitions() + to_chat(usr, "This is not an editable request. How did you even got here?") + return switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) if("Type") if(!check_rights(R_ADMIN)) @@ -832,11 +908,11 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - var/datum/objective/type_cast = requested_objective["type"] + var/datum/objective/type_cast = requested_obj_change["target"] var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices selected_type = GLOB.objective_choices[selected_type] if(!selected_type) @@ -847,13 +923,13 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") - message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") - requested_objective["type"] = selected_type + log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + requested_obj_change["target"] = selected_type if("Text") if(!check_rights(R_ADMIN)) return @@ -861,11 +937,11 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_objective["text"], MAX_MESSAGE_LEN) + var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_obj_change["text"], MAX_MESSAGE_LEN) if (isnull(new_text)) return if(!check_rights(R_ADMIN)) @@ -874,18 +950,18 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") - message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") - requested_objective["text"] = new_text + log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + requested_obj_change["text"] = new_text do_edit_objectives_ambitions() return else if (href_list["req_obj_accept"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) in antag_datums if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -895,12 +971,29 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) do_edit_objectives_ambitions() to_chat(usr, "Invalid requested objective reference.") return - if(alert(usr, "Are you sure you want to approve this objective?", "Approve objective", "Yes", "No") != "Yes") + + var/datum/objective/request_target + var/request_type = requested_obj_change["request"] + switch(request_type) + if(REQUEST_NEW_OBJECTIVE) + request_target = requested_obj_change["target"] + if(!ispath(request_target, /datum/objective)) + to_chat(usr, "Invalid requested objective target path.") + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + request_target = locate(requested_obj_change["target"]) in antag_datum.objectives + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + if(alert(usr, "Are you sure you want to approve this objective change?", "Approve objective change", "Yes", "No") != "Yes") return if(!check_rights(R_ADMIN)) return @@ -908,27 +1001,53 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - var/objective_path = requested_objective["type"] - var/datum/objective/new_objective = new objective_path - new_objective.owner = src - if(istype(new_objective, /datum/objective/custom)) - new_objective.explanation_text = requested_objective["text"] - else - new_objective.admin_edit(usr) - antag_datum.objectives += new_objective - LAZYREMOVE(antag_datum.requested_objectives, uid) - message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") - log_admin("[key_name(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") - to_chat(current, "Your objective request has been approved.") + switch(request_type) //Last checks + if(REQUEST_NEW_OBJECTIVE) + if(!ispath(request_target, /datum/objective)) + stack_trace("Invalid target on objective change request: [request_target]") + do_edit_objectives_ambitions() + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + antag_datum.remove_objective_change(uid) + switch(request_type) //All is clear, let get things done. + if(REQUEST_NEW_OBJECTIVE) + request_target = new request_target() + request_target.owner = src + if(istype(request_target, /datum/objective/custom)) + request_target.explanation_text = requested_obj_change["text"] + else + request_target.admin_edit(usr) + antag_datum.objectives += request_target + message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + if(REQUEST_DEL_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + qdel(request_target) + if(REQUEST_WIN_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = TRUE + if(REQUEST_LOSE_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = FALSE + to_chat(current, "Your objective change request has been approved.") do_edit_objectives_ambitions() return else if (href_list["req_obj_deny"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) in antag_datums if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -938,13 +1057,13 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) do_edit_objectives_ambitions() - to_chat(usr, "Invalid requested objective reference.") + to_chat(usr, "Invalid requested objective change reference.") return - var/justifation = stripped_multiline_input(usr, "Justify why you are denying this objective request.", "Deny", memory, MAX_MESSAGE_LEN) - if(isnull(justifation)) + var/justification = stripped_multiline_input(usr, "Justify why you are denying this objective request change.", "Deny", memory, MAX_MESSAGE_LEN) + if(isnull(justification)) return if(!check_rights(R_ADMIN)) return @@ -952,22 +1071,31 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") do_edit_objectives_ambitions() return - var/datum/objective/type_cast = requested_objective["type"] + var/datum/objective/type_cast = requested_obj_change["target"] var/objective_name = initial(type_cast.name) - message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") - log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") - to_chat(current, "Your objective request has been denied for the following reason: [justifation]") - LAZYREMOVE(antag_datum.requested_objectives, uid) + message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + to_chat(current, "Your objective request has been denied for the following reason: [justification]") + antag_datum.remove_objective_change(uid) do_edit_objectives_ambitions() return else if (href_list["obj_panel_complete_toggle"]) - var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) - if(!istype(objective_to_toggle) || QDELETED(objective_to_toggle)) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) in antag_datum.objectives + if(QDELETED(objective_to_toggle)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -984,8 +1112,17 @@ GLOBAL_LIST(objective_choices) return else if (href_list["obj_panel_delete"]) - var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) - if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) in antag_datum.objectives + if(QDELETED(objective_to_delete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -1006,8 +1143,17 @@ GLOBAL_LIST(objective_choices) return else if (href_list["obj_panel_edit"]) - var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) - if(!istype(objective_to_edit) || QDELETED(objective_to_edit)) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) in antag_datum.objectives + if(QDELETED(objective_to_edit)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -1219,7 +1365,7 @@ GLOBAL_LIST(objective_choices) if(href_list["ambition_panel"]) do_edit_objectives_ambitions() return -//ambition port end +//ambition port //Something in here might have changed your mob diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index fbe40f80b8..6b1c4933f4 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/threat = 0 // Amount of threat this antag poses, for dynamic mode //ambition port start /// Lazy list for antagonists to request the admins objectives. - var/list/requested_objectives + var/list/requested_objective_changes //ambition port end var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors @@ -302,3 +302,44 @@ GLOBAL_LIST_EMPTY(antagonists) else return ..() + +///Sends a message to the admins notifying them of a change request. Is a bit more insistent if there's pending requests. +/datum/antagonist/proc/notify_admins_of_request(notification_message) + if(LAZYLEN(requested_objective_changes) > 1) //Not the first unprocessed request, be a bit more insistent. + for(var/a in GLOB.admins) + var/client/admin_client = a + if(admin_client.prefs.toggles & SOUND_ADMINHELP) + SEND_SOUND(admin_client, sound('sound/effects/adminhelp.ogg')) + window_flash(admin_client) + message_admins(notification_message) + + +///Clears change requests from deleted objectives to avoid broken references. +/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force) + var/objective_reference = REF(source) + for(var/uid in requested_objective_changes) + var/list/change_request = requested_objective_changes[uid] + if(change_request["target"] != objective_reference) + continue + LAZYREMOVE(requested_objective_changes, uid) + + +/datum/antagonist/proc/add_objective_change(uid, list/additions) + LAZYADD(requested_objective_changes, uid) + var/datum/objective/request_target = additions["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective) + requested_objective_changes[uid] = additions + + +/datum/antagonist/proc/remove_objective_change(uid) + if(!LAZYACCESS(requested_objective_changes, uid)) + return + var/datum/objective/request_target = requested_objective_changes[uid]["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + UnregisterSignal(request_target, COMSIG_PARENT_QDELETING) + LAZYREMOVE(requested_objective_changes, uid) From b99b9f65d6462ef740eabdb5cf2799d905ba53eb Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:19:53 +0100 Subject: [PATCH 04/84] Revert "god why am i doing it this way instead of just looking at end changes" This reverts commit aa6402427b1f903d4e6ab864218441e5eb28d731. --- code/__DEFINES/antagonists.dm | 6 - code/datums/mind.dm | 332 +++++------------- .../antagonists/_common/antag_datum.dm | 43 +-- 3 files changed, 94 insertions(+), 287 deletions(-) diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index f80652523e..e71243994d 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -110,9 +110,3 @@ GLOBAL_LIST_EMPTY(living_heart_cache) //A list of all living hearts in existance #define BLOB_SPREAD_COST 4 #define BLOB_ATTACK_REFUND 2 //blob refunds this much if it attacks and doesn't spread #define BLOB_REFLECTOR_COST 15 - -//Objectives-Ambitions Panel -#define REQUEST_NEW_OBJECTIVE "new_objective" -#define REQUEST_DEL_OBJECTIVE "del_objective" -#define REQUEST_WIN_OBJECTIVE "win_objective" -#define REQUEST_LOSE_OBJECTIVE "lose_objective" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index fa40b8c70d..a612938965 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -454,45 +454,21 @@ if(!length(antag_datum.objectives)) output += "
    • NONE" else - for(var/uid in antag_datum.requested_objective_changes) - var/list/objectives_info = antag_datum.requested_objective_changes[uid] - var/obj_request = objectives_info["request"] - switch(obj_request) - if(REQUEST_NEW_OBJECTIVE) - var/datum/objective/type_cast_objective = objectives_info["target"] - var/objective_text = objectives_info["text"] - output += "
    • Request #[uid]: ADD [initial(type_cast_objective.name)] - [objective_text]" - if(is_admin) - output += " Accept Edit Deny" - if(REQUEST_DEL_OBJECTIVE) - var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives - if(QDELETED(objective_ref)) - stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") - antag_datum.remove_objective_change(uid) - continue - output += "
    • Request #[uid]: DEL [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" - if(is_admin) - output += " Accept Deny" - if(REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) - var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives - if(QDELETED(objective_ref)) - stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") - antag_datum.remove_objective_change(uid) - continue - output += "
    • Request #[uid]: [obj_request == REQUEST_WIN_OBJECTIVE ? "WIN" : "LOSE"] [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" - if(is_admin) - output += " Accept Deny" - else - stack_trace("Objective request found with no request index. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") - continue + for(var/count in 1 to length(antag_datum.objectives)) + var/datum/objective/objective = antag_datum.objectives[count] + output += "
    • [count]: [objective.explanation_text]" + if(self_mind) + output += " Request Remove [objective.completed ? "Request incompletion" : "Request completion"]
      " + if(is_admin) + output += " Edit Remove [objective.completed ? "Mark as incomplete" : "Mark as complete"]
      " output += "
    " if(is_admin) output += "Announce objectives
    " - output += "
    Requested Objective Changes:" + output += "
    Requested Objectives:" if(self_mind) output += " Request objective" output += "
      " - if(!length(antag_datum.requested_objective_changes)) + if(!length(antag_datum.requested_objectives)) output += "
    • NONE" else for(var/uid in antag_datum.requested_objectives) @@ -517,7 +493,7 @@ /mob/proc/edit_ambitions() - set name = "Objectives and Ambitions" + set name = "Ambitions" set category = "IC" set desc = "View and edit your character's ambitions." mind.do_edit_ambitions() @@ -529,28 +505,6 @@ popup.open() GLOBAL_VAR_INIT(requested_objective_uid, 0) - - -GLOBAL_LIST(objective_player_choices) - -/proc/populate_objective_player_choices() - GLOB.objective_player_choices = list() - var/list/allowed_types = list( - /datum/objective/custom, - /datum/objective/assassinate/once, - /datum/objective/protect, - /datum/objective/escape, - /datum/objective/survive, - /datum/objective/martyr, - /datum/objective/steal, - /datum/objective/download, - ) - - for(var/t in allowed_types) - var/datum/objective/type_cast = t - GLOB.objective_player_choices[initial(type_cast.name)] = t - - GLOBAL_LIST(objective_choices) /proc/populate_objective_choices() @@ -742,14 +696,14 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(target_antag)) + if(!istype(target_antag)) to_chat(usr, "No antagonist found for this objective.") do_edit_objectives_ambitions() return - if(!GLOB.objective_player_choices) - populate_objective_player_choices() - var/choice = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_player_choices - var/selected_type = GLOB.objective_player_choices[choice] + if(!GLOB.objective_choices) + populate_objective_choices() + var/choe = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_choices + var/selected_type = GLOB.objective_choices[choe] if(!selected_type) return var/new_objective = stripped_multiline_input(usr,\ @@ -770,10 +724,11 @@ GLOBAL_LIST(objective_choices) return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) var/uid = "[GLOB.requested_objective_uid++]" - target_antag.add_objective_change(uid, list("request" = REQUEST_NEW_OBJECTIVE, "target" = selected_type, "text" = new_objective)) - log_admin("Objectives request [uid] - [key_name(usr)] has requested a [choice] objective: [new_objective]") - target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested a [choice] objective. (RPLY)") - to_chat(usr + LAZYADD(target_antag.requested_objectives, uid) + target_antag.requested_objectives[uid] = list("type" = selected_type, "text" = new_objective) + log_admin("[key_name(usr)] has requested a [choe] objective: [new_objective]") + message_admins("[ADMIN_TPMONTY(usr)] has requested a [choe] objective. (RPLY)") + to_chat(usr, "The admins have been notified of your request!") do_edit_objectives_ambitions() return @@ -783,18 +738,12 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(target_antag)) - to_chat(usr, "No antagonist found for this objective.") - do_edit_objectives_ambitions() - return - var/objective_reference = href_list["req_obj_delete"] - var/datum/objective/objective_to_delete = locate(objective_reference) in target_antag.objectives + var/datum/objective/objective_to_delete = locate(href_list["req_obj_delete"]) if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return - var/justification = stripped_multiline_input(usr, + var/justifation = stripped_multiline_input(usr, "Justify your request for a deleting this objective to the admins.\ There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", "Objective Deletion", max_length = MAX_MESSAGE_LEN) @@ -805,21 +754,13 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - if(QDELETED(objective_to_delete) || QDELETED(target_antag)) + if(QDELETED(objective_to_delete)) do_edit_objectives_ambitions() return - for(var/index in target_antag.requested_objective_changes) - var/list/change_request = target_antag.requested_objective_changes[index] - if(change_request["target"] != objective_reference) - continue - to_chat(usr, "There is already a change request tied to this objective waiting to be processed. Ahelp or wait for it to be resolved before adding a new one.") - return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - var/uid = "[GLOB.requested_objective_uid++]" - target_antag.add_objective_change(uid, list("request" = REQUEST_DEL_OBJECTIVE, "target" = objective_reference, "text" = justification)) - log_admin("Objectives request [uid] - [key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justification is as follows: [justification]") - target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested the deletion of an objective: (RPLY)") - to_chat(usr, "The admins have been notified of your request!") + log_admin("[key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]") + message_admins("[ADMIN_TPMONTY(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") + to_chat(usr, "The admins have been notified of your request!") do_edit_objectives_ambitions() return else if (href_list["req_obj_completed"]) @@ -828,43 +769,29 @@ GLOBAL_LIST(objective_choices) if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(target_antag)) - to_chat(usr, "No antagonist found for this objective.") - do_edit_objectives_ambitions() - return - var/objective_reference = href_list["req_obj_completed"] - var/datum/objective/objective_to_complete = locate(objective_reference) in target_antag.objectives + var/datum/objective/objective_to_complete = locate(href_list["req_obj_completed"]) if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return - var/justification = stripped_multiline_input(usr, - "Justify to the admins your request to mark this objective as [objective_to_complete.completed ? "incomplete" : "completed"].\ + var/justifation = stripped_multiline_input(usr, + "Justify your request for the [objective_to_complete.completed ? "completion" : "incompletion"] of this objective to the admins.\ There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", - "Objective [objective_to_complete.completed ? "Incompletion" : "Completion"]", max_length = MAX_MESSAGE_LEN) - if(isnull(justification)) + "Objective [objective_to_complete.completed ? "Completion" : "Incompletion"]", max_length = MAX_MESSAGE_LEN) + if(isnull(justifation)) return if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") return - if(QDELETED(objective_to_complete) || QDELETED(target_antag)) + if(QDELETED(objective_to_complete)) do_edit_objectives_ambitions() return - for(var/index in target_antag.requested_objective_changes) - var/list/change_request = target_antag.requested_objective_changes[index] - if(change_request["target"] != objective_reference) - continue - to_chat(usr, "There is already a change request tied to this objective waiting to be processed. Ahelp or wait for it to be resolved before adding a new one.") - return COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - var/uid = "[GLOB.requested_objective_uid++]" - target_antag.add_objective_change(uid, list("request" = (objective_to_complete.completed ? REQUEST_LOSE_OBJECTIVE : REQUEST_WIN_OBJECTIVE), "target" = objective_reference, "text" = justification)) - log_admin("Objectives request [uid] - [key_name(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justification is as follows: [justification]") - target_antag.notify_admins_of_request("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of an objective: (RPLY)") - to_chat(usr, "The admins have been notified of your request!") + log_admin("[key_name(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]") + message_admins("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") + to_chat(usr, "The admins have been notified of your request!") do_edit_objectives_ambitions() return if(!check_rights(R_ADMIN)) @@ -881,7 +808,7 @@ GLOBAL_LIST(objective_choices) return else if (href_list["req_obj_edit"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) in antag_datums + var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -891,15 +818,12 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) - if(!requested_obj_change) + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) do_edit_objectives_ambitions() to_chat(usr, "Invalid requested objective reference.") return - if(requested_obj_change["request"] != REQUEST_NEW_OBJECTIVE) - do_edit_objectives_ambitions() - to_chat(usr, "This is not an editable request. How did you even got here?") - return + switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) if("Type") if(!check_rights(R_ADMIN)) @@ -908,11 +832,11 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - var/datum/objective/type_cast = requested_obj_change["target"] + var/datum/objective/type_cast = requested_objective["type"] var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices selected_type = GLOB.objective_choices[selected_type] if(!selected_type) @@ -923,13 +847,13 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") - message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") - requested_obj_change["target"] = selected_type + log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") + message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") + requested_objective["type"] = selected_type if("Text") if(!check_rights(R_ADMIN)) return @@ -937,11 +861,11 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_obj_change["text"], MAX_MESSAGE_LEN) + var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_objective["text"], MAX_MESSAGE_LEN) if (isnull(new_text)) return if(!check_rights(R_ADMIN)) @@ -950,18 +874,18 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") - message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") - requested_obj_change["text"] = new_text + log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") + message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") + requested_objective["text"] = new_text do_edit_objectives_ambitions() return else if (href_list["req_obj_accept"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) in antag_datums + var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -971,29 +895,12 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) - if(!requested_obj_change) + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) do_edit_objectives_ambitions() to_chat(usr, "Invalid requested objective reference.") return - - var/datum/objective/request_target - var/request_type = requested_obj_change["request"] - switch(request_type) - if(REQUEST_NEW_OBJECTIVE) - request_target = requested_obj_change["target"] - if(!ispath(request_target, /datum/objective)) - to_chat(usr, "Invalid requested objective target path.") - return - if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) - request_target = locate(requested_obj_change["target"]) in antag_datum.objectives - if(QDELETED(request_target)) - to_chat(usr, "Invalid requested objective target reference.") - return - else - to_chat(usr, "Invalid request type.") - return - if(alert(usr, "Are you sure you want to approve this objective change?", "Approve objective change", "Yes", "No") != "Yes") + if(alert(usr, "Are you sure you want to approve this objective?", "Approve objective", "Yes", "No") != "Yes") return if(!check_rights(R_ADMIN)) return @@ -1001,53 +908,27 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - switch(request_type) //Last checks - if(REQUEST_NEW_OBJECTIVE) - if(!ispath(request_target, /datum/objective)) - stack_trace("Invalid target on objective change request: [request_target]") - do_edit_objectives_ambitions() - return - if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) - if(QDELETED(request_target)) - to_chat(usr, "Invalid requested objective target reference.") - return - else - to_chat(usr, "Invalid request type.") - return - antag_datum.remove_objective_change(uid) - switch(request_type) //All is clear, let get things done. - if(REQUEST_NEW_OBJECTIVE) - request_target = new request_target() - request_target.owner = src - if(istype(request_target, /datum/objective/custom)) - request_target.explanation_text = requested_obj_change["text"] - else - request_target.admin_edit(usr) - antag_datum.objectives += request_target - message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [request_target.explanation_text]") - log_admin("[key_name(usr)] approved a requested objective from [current]: [request_target.explanation_text]") - if(REQUEST_DEL_OBJECTIVE) - message_admins("[key_name_admin(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") - log_admin("[key_name(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") - qdel(request_target) - if(REQUEST_WIN_OBJECTIVE) - message_admins("[key_name_admin(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") - log_admin("[key_name(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") - request_target.completed = TRUE - if(REQUEST_LOSE_OBJECTIVE) - message_admins("[key_name_admin(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") - log_admin("[key_name(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") - request_target.completed = FALSE - to_chat(current, "Your objective change request has been approved.") + var/objective_path = requested_objective["type"] + var/datum/objective/new_objective = new objective_path + new_objective.owner = src + if(istype(new_objective, /datum/objective/custom)) + new_objective.explanation_text = requested_objective["text"] + else + new_objective.admin_edit(usr) + antag_datum.objectives += new_objective + LAZYREMOVE(antag_datum.requested_objectives, uid) + message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") + log_admin("[key_name(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") + to_chat(current, "Your objective request has been approved.") do_edit_objectives_ambitions() return else if (href_list["req_obj_deny"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) in antag_datums + var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) if(QDELETED(antag_datum)) do_edit_objectives_ambitions() to_chat(usr, "No antag found.") @@ -1057,13 +938,13 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "Invalid antag reference.") return var/uid = href_list["req_obj_id"] - var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) - if(!requested_obj_change) + var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) + if(!requested_objective) do_edit_objectives_ambitions() - to_chat(usr, "Invalid requested objective change reference.") + to_chat(usr, "Invalid requested objective reference.") return - var/justification = stripped_multiline_input(usr, "Justify why you are denying this objective request change.", "Deny", memory, MAX_MESSAGE_LEN) - if(isnull(justification)) + var/justifation = stripped_multiline_input(usr, "Justify why you are denying this objective request.", "Deny", memory, MAX_MESSAGE_LEN) + if(isnull(justifation)) return if(!check_rights(R_ADMIN)) return @@ -1071,31 +952,22 @@ GLOBAL_LIST(objective_choices) to_chat(usr, "No antag found.") do_edit_objectives_ambitions() return - if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) - to_chat(usr, "Invalid requested objective change reference.") + if(!LAZYACCESS(antag_datum.requested_objectives, uid)) + to_chat(usr, "Invalid requested objective reference.") do_edit_objectives_ambitions() return - var/datum/objective/type_cast = requested_obj_change["target"] + var/datum/objective/type_cast = requested_objective["type"] var/objective_name = initial(type_cast.name) - message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") - log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") - to_chat(current, "Your objective request has been denied for the following reason: [justification]") - antag_datum.remove_objective_change(uid) + message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") + log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") + to_chat(current, "Your objective request has been denied for the following reason: [justifation]") + LAZYREMOVE(antag_datum.requested_objectives, uid) do_edit_objectives_ambitions() return else if (href_list["obj_panel_complete_toggle"]) - var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) in antag_datum.objectives - if(QDELETED(objective_to_toggle)) + var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) + if(!istype(objective_to_toggle) || QDELETED(objective_to_toggle)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -1112,17 +984,8 @@ GLOBAL_LIST(objective_choices) return else if (href_list["obj_panel_delete"]) - var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) in antag_datum.objectives - if(QDELETED(objective_to_delete)) + var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) + if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -1143,17 +1006,8 @@ GLOBAL_LIST(objective_choices) return else if (href_list["obj_panel_edit"]) - var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) in antag_datum.objectives - if(QDELETED(objective_to_edit)) + var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) + if(!istype(objective_to_edit) || QDELETED(objective_to_edit)) to_chat(usr, "No objective found. Perhaps it was already deleted?") do_edit_objectives_ambitions() return @@ -1365,7 +1219,7 @@ GLOBAL_LIST(objective_choices) if(href_list["ambition_panel"]) do_edit_objectives_ambitions() return -//ambition port +//ambition port end //Something in here might have changed your mob diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 6b1c4933f4..fbe40f80b8 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/threat = 0 // Amount of threat this antag poses, for dynamic mode //ambition port start /// Lazy list for antagonists to request the admins objectives. - var/list/requested_objective_changes + var/list/requested_objectives //ambition port end var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors @@ -302,44 +302,3 @@ GLOBAL_LIST_EMPTY(antagonists) else return ..() - -///Sends a message to the admins notifying them of a change request. Is a bit more insistent if there's pending requests. -/datum/antagonist/proc/notify_admins_of_request(notification_message) - if(LAZYLEN(requested_objective_changes) > 1) //Not the first unprocessed request, be a bit more insistent. - for(var/a in GLOB.admins) - var/client/admin_client = a - if(admin_client.prefs.toggles & SOUND_ADMINHELP) - SEND_SOUND(admin_client, sound('sound/effects/adminhelp.ogg')) - window_flash(admin_client) - message_admins(notification_message) - - -///Clears change requests from deleted objectives to avoid broken references. -/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force) - var/objective_reference = REF(source) - for(var/uid in requested_objective_changes) - var/list/change_request = requested_objective_changes[uid] - if(change_request["target"] != objective_reference) - continue - LAZYREMOVE(requested_objective_changes, uid) - - -/datum/antagonist/proc/add_objective_change(uid, list/additions) - LAZYADD(requested_objective_changes, uid) - var/datum/objective/request_target = additions["target"] - if(!ispath(request_target)) - request_target = locate(request_target) in objectives - if(istype(request_target)) - RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective) - requested_objective_changes[uid] = additions - - -/datum/antagonist/proc/remove_objective_change(uid) - if(!LAZYACCESS(requested_objective_changes, uid)) - return - var/datum/objective/request_target = requested_objective_changes[uid]["target"] - if(!ispath(request_target)) - request_target = locate(request_target) in objectives - if(istype(request_target)) - UnregisterSignal(request_target, COMSIG_PARENT_QDELETING) - LAZYREMOVE(requested_objective_changes, uid) From a061f02b5b5e60a04c3f48a83083f5c8902c9857 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:19:56 +0100 Subject: [PATCH 05/84] Revert "objectives" This reverts commit dbabbb10625dc353e3567c41e73cee1a81e23b13. --- code/__DEFINES/cooldowns.dm | 2 +- code/datums/mind.dm | 521 +++--------------- code/modules/admin/admin.dm | 14 +- code/modules/admin/topic.dm | 11 - .../antagonists/_common/antag_datum.dm | 5 - 5 files changed, 70 insertions(+), 483 deletions(-) diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 947f3202e6..13a7633409 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -28,7 +28,7 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" #define COOLDOWN_AMBITION "ambition" -#define COOLDOWN_OBJECTIVES "objectives" + //TIMER COOLDOWN MACROS diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a612938965..e6414f1d9f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -30,7 +30,6 @@ */ //ambition port start #define AMBITION_COOLDOWN_TIME (5 SECONDS) -#define OBJECTIVES_COOLDOWN_TIME (10 MINUTES) //ambition port end @@ -199,7 +198,7 @@ . = LAZYLEN(antag_datums) LAZYADD(antag_datums, instanced_datum) if(!.) - current.verbs += /mob/proc/edit_objectives_and_ambitions + current.verbs += /mob/proc/edit_ambitions //ambitions port end /datum/mind/proc/remove_antag_datum(datum_type) @@ -221,8 +220,8 @@ . = LAZYLEN(antag_datums) LAZYREMOVE(antag_datums, instanced_datum) if(. && !LAZYLEN(antag_datums)) + current.verbs -= /mob/proc/edit_ambitions ambitions = null - current.verbs += /mob/proc/edit_objectives_and_ambitions //ambitions port end /datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE) @@ -439,56 +438,18 @@ return output.Join() -/datum/mind/proc/show_editable_objectives_and_ambitions() - var/is_admin = check_rights(R_ADMIN, FALSE) - var/self_mind = usr == current - if(!is_admin && !self_mind) - return "" - var/list/output = list() - for(var/a in antag_datums) - var/datum/antagonist/antag_datum = a - output += "Objectives:" - if(is_admin) - output += " Add Objective" - output += "" - if(is_admin) - output += "Announce objectives
      " - output += "
      Requested Objectives:" - if(self_mind) - output += " Request objective" - output += "
        " - if(!length(antag_datum.requested_objectives)) - output += "
      • NONE" - else - for(var/uid in antag_datum.requested_objectives) - var/list/objectives_info = antag_datum.requested_objectives[uid] - var/datum/objective/type_cast_objective = objectives_info["type"] - var/objective_text = objectives_info["text"] - output += "
      • Request #[uid]: [initial(type_cast_objective.name)] - [objective_text]" - if(is_admin) - output += " Accept Edit Deny" - output += "

      " - output += "[current.real_name]'s Ambitions:" - if(LAZYLEN(ambitions) < CONFIG_GET(number/max_ambitions)) - output += " Add Ambition" - output += "
        " +/datum/mind/proc/show_editable_ambitions() + var/list/output = list("[current.real_name]'s Ambitions:
          ") if(!LAZYLEN(ambitions)) output += "
        • NONE" + if(LAZYLEN(antag_datums)) + output +="
        • (Add Ambition)" else for(var/count in 1 to LAZYLEN(ambitions)) output += "
        • Ambition #[count] (Edit) (Remove):
          [ambitions[count]]" - output += "

        (Refresh)" + if(LAZYLEN(ambitions) < 5) + output += "
      • (Add Ambition)" + output += "
      • (Refresh)
      " return output.Join() @@ -499,53 +460,24 @@ mind.do_edit_ambitions() -/datum/mind/proc/do_edit_objectives_ambitions() - var/datum/browser/popup = new(usr, "objectives and ambitions", "Objectives and Ambitions") - popup.set_content(show_editable_objectives_and_ambitions()) +/datum/mind/proc/do_edit_ambitions() + var/datum/browser/popup = new(usr, "ambitions", "Ambitions") + popup.set_content(show_editable_ambitions()) popup.open() - -GLOBAL_VAR_INIT(requested_objective_uid, 0) -GLOBAL_LIST(objective_choices) - -/proc/populate_objective_choices() - GLOB.objective_choices = list() - var/list/allowed_types = list( - /datum/objective/custom, - /datum/objective/assassinate, - /datum/objective/assassinate/once, - /datum/objective/maroon, - /datum/objective/debrain, - /datum/objective/protect, - /datum/objective/destroy, - /datum/objective/hijack, - /datum/objective/escape, - /datum/objective/survive, - /datum/objective/martyr, - /datum/objective/steal, - /datum/objective/download, - /datum/objective/nuclear, - /datum/objective/absorb, - /datum/objective/blackmail_implant //SKYRAT ADDITION - ) - - for(var/t in allowed_types) - var/datum/objective/type_cast = t - GLOB.objective_choices[initial(type_cast.name)] = t //ambition port end /datum/mind/Topic(href, href_list) //ambition port start - if (href_list["refresh_obj_amb"]) - do_edit_objectives_ambitions() - + if (href_list["refresh_ambitions"]) + do_edit_ambitions() return else if (href_list["add_ambition"]) - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) return @@ -554,16 +486,16 @@ GLOBAL_LIST(objective_choices) var/max_ambitions = CONFIG_GET(number/max_ambitions) if(LAZYLEN(ambitions) >= max_ambitions) to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_objectives_ambitions() + do_edit_ambitions() return var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) if(isnull(new_ambition)) return - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature.") @@ -573,7 +505,7 @@ GLOBAL_LIST(objective_choices) return if(LAZYLEN(ambitions) >= max_ambitions) to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_objectives_ambitions() + do_edit_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) LAZYADD(ambitions, new_ambition) @@ -582,15 +514,15 @@ GLOBAL_LIST(objective_choices) else log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") - do_edit_objectives_ambitions() + do_edit_ambitions() return else if (href_list["edit_ambition"]) - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) return @@ -607,11 +539,11 @@ GLOBAL_LIST(objective_choices) var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) if(isnull(new_ambition)) return - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature.") @@ -621,11 +553,11 @@ GLOBAL_LIST(objective_choices) return if(ambition_index > LAZYLEN(ambitions)) to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") - do_edit_objectives_ambitions() + do_edit_ambitions() return if(old_ambition != ambitions[ambition_index]) to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") - do_edit_objectives_ambitions() + do_edit_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) ambitions[ambition_index] = new_ambition @@ -634,15 +566,15 @@ GLOBAL_LIST(objective_choices) else log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_objectives_ambitions() + do_edit_ambitions() return else if (href_list["remove_ambition"]) - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) return @@ -650,7 +582,7 @@ GLOBAL_LIST(objective_choices) return var/ambition_index = text2num(href_list["remove_ambition"]) if(ambition_index > LAZYLEN(ambitions)) - do_edit_objectives_ambitions() + do_edit_ambitions() return if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") @@ -659,11 +591,11 @@ GLOBAL_LIST(objective_choices) var/old_ambition = ambitions[ambition_index] if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") return - if(!check_rights(R_ADMIN, FALSE)) + if(!check_rights(R_ADMIN)) if(usr != current) return if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") return if(!isliving(current)) to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") @@ -673,11 +605,11 @@ GLOBAL_LIST(objective_choices) return if(ambition_index > LAZYLEN(ambitions)) to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") - do_edit_objectives_ambitions() + do_edit_ambitions() return if(old_ambition != ambitions[ambition_index]) to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") - do_edit_objectives_ambitions() + do_edit_ambitions() return COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) LAZYCUT(ambitions, ambition_index, ambition_index + 1) @@ -686,113 +618,7 @@ GLOBAL_LIST(objective_choices) else log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_objectives_ambitions() - return - - else if (href_list["req_obj_add"]) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums - if(!istype(target_antag)) - to_chat(usr, "No antagonist found for this objective.") - do_edit_objectives_ambitions() - return - if(!GLOB.objective_choices) - populate_objective_choices() - var/choe = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_choices - var/selected_type = GLOB.objective_choices[choe] - if(!selected_type) - return - var/new_objective = stripped_multiline_input(usr,\ - selected_type == /datum/objective/custom\ - ? "Write the custom objective you'd like to request the admins to grant you.\ - Remember they can edit or deny your request. There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown."\ - : "Justify your request for a new objective to the admins. Add the required clarifations, if you have a specific targets in mind or the likes.\ - Remember they can edit or deny your request. There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.",\ - "New Objective", max_length = MAX_MESSAGE_LEN) - if(isnull(new_objective)) - return - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - if(QDELETED(target_antag)) - return - COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - var/uid = "[GLOB.requested_objective_uid++]" - LAZYADD(target_antag.requested_objectives, uid) - target_antag.requested_objectives[uid] = list("type" = selected_type, "text" = new_objective) - log_admin("[key_name(usr)] has requested a [choe] objective: [new_objective]") - message_admins("[ADMIN_TPMONTY(usr)] has requested a [choe] objective. (RPLY)") - to_chat(usr, "The admins have been notified of your request!") - do_edit_objectives_ambitions() - return - - else if (href_list["req_obj_delete"]) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - var/datum/objective/objective_to_delete = locate(href_list["req_obj_delete"]) - if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) - to_chat(usr, "No objective found. Perhaps it was already deleted?") - do_edit_objectives_ambitions() - return - var/justifation = stripped_multiline_input(usr, - "Justify your request for a deleting this objective to the admins.\ - There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", - "Objective Deletion", max_length = MAX_MESSAGE_LEN) - if(isnull(justifation)) - return - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - if(QDELETED(objective_to_delete)) - do_edit_objectives_ambitions() - return - COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - log_admin("[key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]") - message_admins("[ADMIN_TPMONTY(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") - to_chat(usr, "The admins have been notified of your request!") - do_edit_objectives_ambitions() - return - else if (href_list["req_obj_completed"]) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - var/datum/objective/objective_to_complete = locate(href_list["req_obj_completed"]) - if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) - to_chat(usr, "No objective found. Perhaps it was already deleted?") - do_edit_objectives_ambitions() - return - var/justifation = stripped_multiline_input(usr, - "Justify your request for the [objective_to_complete.completed ? "completion" : "incompletion"] of this objective to the admins.\ - There's a 10 minutes cooldown between requests, so try to think it through before sending it. Cancelling does not trigger the cooldown.", - "Objective [objective_to_complete.completed ? "Completion" : "Incompletion"]", max_length = MAX_MESSAGE_LEN) - if(isnull(justifation)) - return - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) - to_chat(usr, "You must wait [round(OBJECTIVES_COOLDOWN_TIME / 600, 0.1)] minutes between requests.") - return - if(QDELETED(objective_to_complete)) - do_edit_objectives_ambitions() - return - COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) - log_admin("[key_name(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]") - message_admins("[ADMIN_TPMONTY(usr)] has requested the [objective_to_complete.completed ? "completion" : "incompletion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justifation is as follows: [justifation]\n(RPLY)") - to_chat(usr, "The admins have been notified of your request!") - do_edit_objectives_ambitions() + do_edit_ambitions() return if(!check_rights(R_ADMIN)) return @@ -800,236 +626,12 @@ GLOBAL_LIST(objective_choices) var/self_antagging = usr == current if(href_list["edit_ambitions_panel"]) - do_edit_objectives_ambitions() + do_edit_ambitions() return - else if(href_list["refresh_antag_panel"]) traitor_panel() return - - else if (href_list["req_obj_edit"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid requested objective reference.") - return - - switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) - if("Type") - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - var/datum/objective/type_cast = requested_objective["type"] - var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices - selected_type = GLOB.objective_choices[selected_type] - if(!selected_type) - return - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") - message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_objective["type"]] to [selected_type]") - requested_objective["type"] = selected_type - if("Text") - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_objective["text"], MAX_MESSAGE_LEN) - if (isnull(new_text)) - return - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") - message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_objective["text"]] to [new_text]") - requested_objective["text"] = new_text - do_edit_objectives_ambitions() - return - - else if (href_list["req_obj_accept"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid requested objective reference.") - return - if(alert(usr, "Are you sure you want to approve this objective?", "Approve objective", "Yes", "No") != "Yes") - return - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - var/objective_path = requested_objective["type"] - var/datum/objective/new_objective = new objective_path - new_objective.owner = src - if(istype(new_objective, /datum/objective/custom)) - new_objective.explanation_text = requested_objective["text"] - else - new_objective.admin_edit(usr) - antag_datum.objectives += new_objective - LAZYREMOVE(antag_datum.requested_objectives, uid) - message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") - log_admin("[key_name(usr)] approved a requested objective from [current]: [new_objective.explanation_text]") - to_chat(current, "Your objective request has been approved.") - do_edit_objectives_ambitions() - return - - else if (href_list["req_obj_deny"]) - var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) - if(QDELETED(antag_datum)) - do_edit_objectives_ambitions() - to_chat(usr, "No antag found.") - return - if(antag_datum.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid antag reference.") - return - var/uid = href_list["req_obj_id"] - var/list/requested_objective = LAZYACCESS(antag_datum.requested_objectives, uid) - if(!requested_objective) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid requested objective reference.") - return - var/justifation = stripped_multiline_input(usr, "Justify why you are denying this objective request.", "Deny", memory, MAX_MESSAGE_LEN) - if(isnull(justifation)) - return - if(!check_rights(R_ADMIN)) - return - if(QDELETED(antag_datum)) - to_chat(usr, "No antag found.") - do_edit_objectives_ambitions() - return - if(!LAZYACCESS(antag_datum.requested_objectives, uid)) - to_chat(usr, "Invalid requested objective reference.") - do_edit_objectives_ambitions() - return - var/datum/objective/type_cast = requested_objective["type"] - var/objective_name = initial(type_cast.name) - message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") - log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_objective["text"]]") - to_chat(current, "Your objective request has been denied for the following reason: [justifation]") - LAZYREMOVE(antag_datum.requested_objectives, uid) - do_edit_objectives_ambitions() - return - - else if (href_list["obj_panel_complete_toggle"]) - var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) - if(!istype(objective_to_toggle) || QDELETED(objective_to_toggle)) - to_chat(usr, "No objective found. Perhaps it was already deleted?") - do_edit_objectives_ambitions() - return - if(objective_to_toggle.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid objective reference.") - return - objective_to_toggle.completed = !objective_to_toggle.completed - message_admins("[key_name_admin(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") - log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") - if(alert(usr, "Would you like to alert the player of the change?", "Deny objective", "Yes", "No") == "Yes") - to_chat(current, "[objective_to_toggle.completed ? "" : ""]Your objective status has changed!") - do_edit_objectives_ambitions() - return - - else if (href_list["obj_panel_delete"]) - var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) - if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) - to_chat(usr, "No objective found. Perhaps it was already deleted?") - do_edit_objectives_ambitions() - return - if(objective_to_delete.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid objective reference.") - return - if(alert(usr, "Are you sure you want to delete this objective?", "Delete objective", "Yes", "No") != "Yes") - return - if(!check_rights(R_ADMIN)) - return - if(QDELETED(objective_to_delete)) - return - message_admins("[key_name_admin(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") - log_admin("[key_name(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") - qdel(objective_to_delete) - do_edit_objectives_ambitions() - return - - else if (href_list["obj_panel_edit"]) - var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) - if(!istype(objective_to_edit) || QDELETED(objective_to_edit)) - to_chat(usr, "No objective found. Perhaps it was already deleted?") - do_edit_objectives_ambitions() - return - if(objective_to_edit.owner != src) - do_edit_objectives_ambitions() - to_chat(usr, "Invalid objective reference.") - return - var/explanation_before = objective_to_edit.explanation_text - objective_to_edit.admin_edit(usr) - if(QDELETED(objective_to_edit)) - return - message_admins("[key_name_admin(usr)] edited an objective from [current]:\ - Before: [explanation_before]\ - After: [objective_to_edit.explanation_text]") - log_admin("[key_name(usr)] edited an objective from [current]:\ - Before: [explanation_before]\ - After: [objective_to_edit.explanation_text]") - do_edit_objectives_ambitions() - return - //ambition port end - if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) if(href_list["remove_antag"]) @@ -1089,16 +691,38 @@ GLOBAL_LIST(objective_choices) else target_antag = target -//ambition port start - if(!GLOB.objective_choices) - populate_objective_choices() + var/static/list/choices + if(!choices) + choices = list() - if(old_objective && GLOB.objective_choices[old_objective.name]) - def_value = old_objective.name + var/list/allowed_types = list( + /datum/objective/assassinate, + /datum/objective/assassinate/once, + /datum/objective/maroon, + /datum/objective/debrain, + /datum/objective/protect, + /datum/objective/destroy, + /datum/objective/hijack, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + /datum/objective/nuclear, + /datum/objective/absorb, + /datum/objective/custom + ) - var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in GLOB.objective_choices - selected_type = GLOB.objective_choices[selected_type] -//ambition port end + for(var/T in allowed_types) + var/datum/objective/X = T + choices[initial(X.name)] = T + + if(old_objective) + if(old_objective.name in choices) + def_value = old_objective.name + + var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in choices + selected_type = choices[selected_type] if (!selected_type) return @@ -1125,11 +749,6 @@ GLOBAL_LIST(objective_choices) target_antag.objectives.Insert(objective_pos, new_objective) message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") -//ambition port start - if(href_list["ambition_panel"]) - do_edit_objectives_ambitions() - return -//ambition port end else if(href_list["traitor_class"]) var/static/list/choices @@ -1215,12 +834,6 @@ GLOBAL_LIST(objective_choices) else if (href_list["obj_announce"]) announce_objectives() -//ambition port start - if(href_list["ambition_panel"]) - do_edit_objectives_ambitions() - return -//ambition port end - //Something in here might have changed your mob if(self_antagging && (!usr || !usr.client) && current.client) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6a2bc83db7..d4afc3dbb4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -25,9 +25,7 @@ to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.", confidential = TRUE) return -//ambition port start - var/list/body = list("Options for [M.key]") -//ambition port end + var/body = "Options for [M.key]" body += "Options panel for [M]" if(M.client) body += " played by [M.client] " @@ -127,10 +125,6 @@ body += "Subtle message | " // body += "Play sound to | " body += "Language Menu" -//ambition port start - if(M.mind) - body += " | Objective-Ambition Menu" -//ambition port end if (M.client) if(!isnewplayer(M)) @@ -212,11 +206,7 @@ body += "
      " body += "" -//ambition port start - var/datum/browser/popup = new(usr, "adminplayeropts-[REF(M)]", "Player Panel", nwidth = 550, nheight = 515) - popup.set_content(body.Join()) - popup.open() -//ambition port end + usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515") SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9cd4fd203c..05e791984a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2251,17 +2251,6 @@ var/mob/M = locate(href_list["HeadsetMessage"]) usr.client.admin_headset_message(M) -//ambition port start - else if(href_list["ObjectiveRequest"]) - if(!check_rights(R_ADMIN)) - return - var/datum/mind/requesting_mind = locate(href_list["ObjectiveRequest"]) - if(!istype(requesting_mind) || QDELETED(requesting_mind)) - to_chat(usr, "This mind reference is no longer valid. It has probably since been destroyed.") - return - requesting_mind.do_edit_objectives_ambitions() - return -//ambition port end else if(href_list["reject_custom_name"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index fbe40f80b8..df9a8bff2e 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -25,11 +25,6 @@ GLOBAL_LIST_EMPTY(antagonists) var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default. var/threat = 0 // Amount of threat this antag poses, for dynamic mode -//ambition port start - /// Lazy list for antagonists to request the admins objectives. - var/list/requested_objectives -//ambition port end - var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors var/list/skill_modifiers From 2f1aba4f800ffd155f11130c08d4bea5d07a0f74 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:19:59 +0100 Subject: [PATCH 06/84] Revert "i can't believe kevin made me code" This reverts commit 7f385648381af7313848eba031fdf49071738d98. --- code/__DEFINES/admin.dm | 4 - code/__DEFINES/cooldowns.dm | 7 - code/__DEFINES/say.dm | 3 - code/__HELPERS/_lists.dm | 3 - code/__HELPERS/roundend.dm | 5 - .../configuration/entries/general.dm | 5 - code/datums/datum.dm | 13 - code/datums/mind.dm | 245 +----------------- code/modules/admin/antag_panel.dm | 32 +-- .../antagonists/_common/antag_datum.dm | 9 +- .../antagonists/changeling/powers/absorb.dm | 4 +- code/modules/mob/living/login.dm | 5 +- code/modules/mob/mob.dm | 6 +- 13 files changed, 23 insertions(+), 318 deletions(-) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index c75adfa49e..f6293454ee 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -56,10 +56,6 @@ #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" #define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" -//ambition port start -#define ADMIN_TPMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_JMP(user)] [ADMIN_FLW(user)]" -#define ADMIN_TPMONTY(user) "[key_name_admin(user)] [ADMIN_TPMONTY_NONAME(user)]" -//ambition port end #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 13a7633409..29c7a25dad 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -27,7 +27,6 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" -#define COOLDOWN_AMBITION "ambition" //TIMER COOLDOWN MACROS @@ -41,12 +40,6 @@ #define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) -#define COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time)) - -#define COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) - -#define COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) - /* * Stoppable timer cooldowns. * Use indexes the same as the regular tiemr cooldowns. diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index a9e23bb67c..9403eca2da 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -86,9 +86,6 @@ #define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam -//ambition port start -#define MAX_AMBITION_LEN 1024 -//ambition port end #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? #define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 608da83dd9..a554397c41 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -13,9 +13,6 @@ #define UNSETEMPTY(L) if (L && !length(L)) L = null #define LAZYCOPY(L) (L ? L.Copy() : list() ) #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } -//ambition port start -#define LAZYCUT(L, S, E) if((length(L) >= S) && (E == 0 || length(L) >= (E - 1))) { L.Cut(S, E); if(!length(L)) { L = null; } } -//ambition port end #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; #define LAZYFIND(L, V) L ? L.Find(V) : 0 diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index ad57ce42ac..cd59dfd9cf 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -491,11 +491,6 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() -//ambition port start - for(var/count in 1 to LAZYLEN(A.owner.ambitions)) - result += "
      Ambition #[count]: [A.owner.ambitions[count]]" -//ambition port end - result += "

      " CHECK_TICK diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index a65e9ddb81..63da60d7b5 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -441,8 +441,3 @@ config_entry_value = TRUE /datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API - -//ambition port start -/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. - config_entry_value = 5 -//amibiton port end diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 74dfbbddd9..42580425ce 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -49,11 +49,6 @@ /// A weak reference to another datum var/datum/weakref/weak_reference -//ambition port start - ///Lazy associative list of currently active cooldowns. - var/list/cooldowns -//ambition port end - /* * Lazy associative list of currently active cooldowns. * @@ -266,11 +261,3 @@ return SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index)) TIMER_COOLDOWN_END(source, index) - -//ambition port start -///Callback called by a timer to end an associative-list-indexed cooldown. -/proc/end_cooldown(datum/source, index) - if(QDELETED(source)) - return - COOLDOWN_END(source, index) -//ambition port end diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e6414f1d9f..897e2e7d71 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -28,10 +28,6 @@ yourself. */ -//ambition port start -#define AMBITION_COOLDOWN_TIME (5 SECONDS) -//ambition port end - /datum/mind var/key @@ -72,11 +68,6 @@ /// Our skill holder. var/datum/skill_holder/skill_holder -//ambition port start - /// Lazy list for antagonists to set goals they wish to achieve, to be shown at the round-end report. - var/list/ambitions -//ambition port end - ///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not var/mob/original_character @@ -182,10 +173,7 @@ qdel(A) return A.owner = src -//ambitions port start - do_add_antag_datum(A) -//ambitions port end - + LAZYADD(antag_datums, A) A.create_team(team) var/datum/team/antag_team = A.get_team() if(antag_team) @@ -193,14 +181,6 @@ A.on_gain() return A -//ambitions port start -/datum/mind/proc/do_add_antag_datum(instanced_datum) - . = LAZYLEN(antag_datums) - LAZYADD(antag_datums, instanced_datum) - if(!.) - current.verbs += /mob/proc/edit_ambitions -//ambitions port end - /datum/mind/proc/remove_antag_datum(datum_type) if(!datum_type) return @@ -215,15 +195,6 @@ var/datum/antagonist/A = a A.on_removal() -//ambitions port start -/datum/mind/proc/do_remove_antag_datum(instanced_datum) - . = LAZYLEN(antag_datums) - LAZYREMOVE(antag_datums, instanced_datum) - if(. && !LAZYLEN(antag_datums)) - current.verbs -= /mob/proc/edit_ambitions - ambitions = null -//ambitions port end - /datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE) if(!datum_type) return @@ -403,10 +374,10 @@ message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.") -//ambitions port start -/datum/mind/proc/show_memory() - var/list/output = list("[current.real_name]'s Memories:
      ") -//ambitions port end +/datum/mind/proc/show_memory(mob/recipient, window=1) + if(!recipient) + recipient = current + var/output = "[current.real_name]'s Memories:
      " output += memory @@ -427,211 +398,17 @@ output += "
    • Conspirator: [M.name]
    • " output += "
    " -//ambition port start - if(LAZYLEN(ambitions)) - for(var/count in 1 to LAZYLEN(ambitions)) - output += "
    Ambition #[count]: [ambitions[count]]" - - if(!memory && !length(all_objectives) && !LAZYLEN(ambitions)) - output += "
    • NONE
    " - - return output.Join() - - -/datum/mind/proc/show_editable_ambitions() - var/list/output = list("[current.real_name]'s Ambitions:
      ") - if(!LAZYLEN(ambitions)) - output += "
    • NONE" - if(LAZYLEN(antag_datums)) - output +="
    • (Add Ambition)" - else - for(var/count in 1 to LAZYLEN(ambitions)) - output += "
    • Ambition #[count] (Edit) (Remove):
      [ambitions[count]]" - if(LAZYLEN(ambitions) < 5) - output += "
    • (Add Ambition)" - output += "
    • (Refresh)
    " - return output.Join() - - -/mob/proc/edit_ambitions() - set name = "Ambitions" - set category = "IC" - set desc = "View and edit your character's ambitions." - mind.do_edit_ambitions() - - -/datum/mind/proc/do_edit_ambitions() - var/datum/browser/popup = new(usr, "ambitions", "Ambitions") - popup.set_content(show_editable_ambitions()) - popup.open() -//ambition port end + if(window) + recipient << browse(output,"window=memory") + else if(all_objectives.len || memory) + to_chat(recipient, "[output]") /datum/mind/Topic(href, href_list) -//ambition port start - if (href_list["refresh_ambitions"]) - do_edit_ambitions() - return - - else if (href_list["add_ambition"]) - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - return - if(!antag_datums) - return - var/max_ambitions = CONFIG_GET(number/max_ambitions) - if(LAZYLEN(ambitions) >= max_ambitions) - to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_ambitions() - return - var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) - if(isnull(new_ambition)) - return - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - to_chat(usr, "The mind holder is no longer a living creature.") - return - if(!antag_datums) - to_chat(usr, "The mind holder is no longer an antagonist.") - return - if(LAZYLEN(ambitions) >= max_ambitions) - to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") - do_edit_ambitions() - return - COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) - LAZYADD(ambitions, new_ambition) - if(usr == current) - log_game("[key_name(usr)] has created their ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") - else - log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") - message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") - do_edit_ambitions() - return - - else if (href_list["edit_ambition"]) - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - return - if(!antag_datums) - return - var/ambition_index = text2num(href_list["edit_ambition"]) - if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) - log_admin_private("[key_name(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") - message_admins("[ADMIN_TPMONTY(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") - return - if(ambition_index > LAZYLEN(ambitions)) - return - var/old_ambition = ambitions[ambition_index] - var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) - if(isnull(new_ambition)) - return - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - to_chat(usr, "The mind holder is no longer a living creature.") - return - if(!antag_datums) - to_chat(usr, "The mind holder is no longer an antagonist.") - return - if(ambition_index > LAZYLEN(ambitions)) - to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") - do_edit_ambitions() - return - if(old_ambition != ambitions[ambition_index]) - to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") - do_edit_ambitions() - return - COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) - ambitions[ambition_index] = new_ambition - if(usr == current) - log_game("[key_name(usr)] has edited their ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") - else - log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") - message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_ambitions() - return - - else if (href_list["remove_ambition"]) - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - return - if(!antag_datums) - return - var/ambition_index = text2num(href_list["remove_ambition"]) - if(ambition_index > LAZYLEN(ambitions)) - do_edit_ambitions() - return - if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) - log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") - message_admins("[ADMIN_TPMONTY(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") - return - var/old_ambition = ambitions[ambition_index] - if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") - return - if(!check_rights(R_ADMIN)) - if(usr != current) - return - if(COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) - to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 10] seconds between changes.") - return - if(!isliving(current)) - to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") - return - if(!antag_datums) - to_chat(usr, "The mind holder is no longer an antagonist. The ambition we were deleting should no longer exist already.") - return - if(ambition_index > LAZYLEN(ambitions)) - to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") - do_edit_ambitions() - return - if(old_ambition != ambitions[ambition_index]) - to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") - do_edit_ambitions() - return - COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) - LAZYCUT(ambitions, ambition_index, ambition_index + 1) - if(usr == current) - log_game("[key_name(usr)] has deleted their ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") - else - log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") - message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") - do_edit_ambitions() - return if(!check_rights(R_ADMIN)) return var/self_antagging = usr == current - if(href_list["edit_ambitions_panel"]) - do_edit_ambitions() - return - else if(href_list["refresh_antag_panel"]) - traitor_panel() - return -//ambition port end if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) if(href_list["remove_antag"]) @@ -1037,7 +814,3 @@ ..() mind.assigned_role = ROLE_PAI mind.special_role = "" - -//ambition port start -#undef AMBITION_COOLDOWN_TIME -//ambition port end diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 502ee116c1..88aab2c4ce 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -97,14 +97,10 @@ GLOBAL_VAR(antag_prototypes) alert("This mind doesn't have a mob, or is deleted! For some reason!", "Edit Memory") return -//ambition port start - var/list/out = list( - "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    \ - Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    \ - Assigned role: [assigned_role]. Edit
    \ - Faction and special role: [special_role]
    " - ) -//ambition port end + var/out = "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    " + out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " + out += "Assigned role: [assigned_role]. Edit
    " + out += "Faction and special role: [special_role]
    " var/special_statuses = get_special_statuses() if(length(special_statuses)) @@ -195,16 +191,6 @@ GLOBAL_VAR(antag_prototypes) //Uplink if(ishuman(current)) var/uplink_info = "Uplink:" -//ambition port start - //Ambitions - out += "[current.real_name]'s Ambitions: Edit Ambitions
      " - if(!LAZYLEN(ambitions)) - out += "
    • NONE
    • " - else - for(var/count in 1 to LAZYLEN(ambitions)) - out += "
    • Ambition #[count]:
      [ambitions[count]]" - out += "
    " - var/datum/component/uplink/U = find_syndicate_uplink() if(U) uplink_info += "take" @@ -218,16 +204,14 @@ GLOBAL_VAR(antag_prototypes) out += uplink_info + "
    " //Common Memory - out += "
    Common Memory:" - out += memory - out += "Edit Memory
    " + var/common_memory = "Common Memory:" + common_memory += memory + common_memory += "Edit Memory" + out += common_memory + "
    " //Other stuff out += get_common_admin_commands() - out += "
    Refresh" var/datum/browser/panel = new(usr, "traitorpanel", "", 600, 600) - panel.set_content(out.Join()) -//ambition port end panel.set_content(out) panel.open() return diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index df9a8bff2e..14f7b34309 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -35,9 +35,8 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/Destroy() GLOB.antagonists -= src -//ambition port start - owner?.do_remove_antag_datum(src) -//ambition port end + if(owner) + LAZYREMOVE(owner.antag_datums, src) owner = null return ..() @@ -134,9 +133,7 @@ GLOBAL_LIST_EMPTY(antagonists) remove_innate_effects() clear_antag_moodies() if(owner) -//ambition port start - owner.do_remove_antag_datum(src) -//ambition port end + LAZYREMOVE(owner.antag_datums, src) for(var/A in skill_modifiers) owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type)) if(!silent && owner.current) diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index a3c47c10a5..208fefee70 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -65,9 +65,7 @@ user.copy_languages(target, LANGUAGE_ABSORB) if(target.mind && user.mind)//if the victim and user have minds -//ambition port start - to_chat(user, "[target.mind.show_memory()]") //I can read your mind. Output all their notes. -//ambition port end + target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. //Some of target's recent speech, so the changeling can attempt to imitate them better. //Recent as opposed to all because rounds tend to have a LOT of text. diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 000436ab29..2b1c2de17a 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -2,10 +2,7 @@ ..() //Mind updates sync_mind() -//ambition port start - if(mind.memory || mind.antag_datums) - to_chat(src, "[mind.show_memory()]") -//ambition port end + mind.show_memory(src, 0) //Round specific stuff if(SSticker.mode) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a29cd8c24a..824e262ae1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -441,11 +441,7 @@ set category = "IC" set desc = "View your character's notes memory." if(mind) -//ambition port start - var/datum/browser/popup = new(src, "memory", "Memory and Notes") - popup.set_content(mind.show_memory()) - popup.open() -//ambition port + mind.show_memory(src) else to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.") From 8178b7073ad208ca0696ae7278c97ba32769f907 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:50:29 +0100 Subject: [PATCH 07/84] It's done, atleast the code is --- code/__DEFINES/admin.dm | 4 + code/__DEFINES/antagonists.dm | 6 + code/__DEFINES/cooldowns.dm | 6 +- code/__DEFINES/say.dm | 3 + code/__HELPERS/_lists.dm | 3 + code/__HELPERS/roundend.dm | 4 + .../configuration/entries/general.dm | 5 + code/datums/datum.dm | 38 + code/datums/mind.dm | 996 +++++++++++++++++- code/modules/admin/admin.dm | 14 +- code/modules/admin/antag_panel.dm | 32 +- code/modules/admin/topic.dm | 12 + .../antagonists/_common/antag_datum.dm | 43 +- .../antagonists/changeling/powers/absorb.dm | 4 +- code/modules/antagonists/cult/cult.dm | 5 +- code/modules/mob/living/login.dm | 5 +- code/modules/mob/mob.dm | 6 +- 17 files changed, 1128 insertions(+), 58 deletions(-) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index f6293454ee..d7fe3c76a1 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -57,6 +57,10 @@ #define ADMIN_SET_SD_CODE "(SETCODE)" #define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" +//ambition start +#define ADMIN_TPMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_JMP(user)] [ADMIN_FLW(user)]" +#define ADMIN_TPMONTY(user) "[key_name_admin(user)] [ADMIN_TPMONTY_NONAME(user)]" +//ambition end #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define AREACOORD(src) "[src ? "[get_area_name(src, TRUE)] ([src.x], [src.y], [src.z])" : "nonexistent location"]" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index e71243994d..f80652523e 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -110,3 +110,9 @@ GLOBAL_LIST_EMPTY(living_heart_cache) //A list of all living hearts in existance #define BLOB_SPREAD_COST 4 #define BLOB_ATTACK_REFUND 2 //blob refunds this much if it attacks and doesn't spread #define BLOB_REFLECTOR_COST 15 + +//Objectives-Ambitions Panel +#define REQUEST_NEW_OBJECTIVE "new_objective" +#define REQUEST_DEL_OBJECTIVE "del_objective" +#define REQUEST_WIN_OBJECTIVE "win_objective" +#define REQUEST_LOSE_OBJECTIVE "lose_objective" diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 29c7a25dad..df644c0fd6 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -27,7 +27,9 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" - +#define COOLDOWN_AMBITION "ambition" +#define COOLDOWN_OBJECTIVES "objectives" +#define COOLDOWN_OBJ_ADMIN_PING "obj_admin_ping" //TIMER COOLDOWN MACROS @@ -63,6 +65,8 @@ #define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time) +#define COOLDOWN_CHECK(cd_source, cd_index) (cd_source.cd_index < world.time) + //Returns true if the cooldown has run its course, false otherwise #define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time) diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 9403eca2da..90307c7f85 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -86,6 +86,9 @@ #define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam +//ambition start +#define MAX_AMBITION_LEN 1024 +//ambition end #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? #define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index a554397c41..04db6cec78 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -13,6 +13,9 @@ #define UNSETEMPTY(L) if (L && !length(L)) L = null #define LAZYCOPY(L) (L ? L.Copy() : list() ) #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } +//ambition start +#define LAZYCUT(L, S, E) if((length(L) >= S) && (E == 0 || length(L) >= (E - 1))) { L.Cut(S, E); if(!length(L)) { L = null; } } +//ambition end #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; #define LAZYFIND(L, V) L ? L.Find(V) : 0 diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index cd59dfd9cf..8e139175dd 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -491,6 +491,10 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() +//ambition start + for(var/count in 1 to LAZYLEN(A.owner.ambitions)) + result += "
    Ambition #[count]: [A.owner.ambitions[count]]" +//ambition end result += "

    " CHECK_TICK diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 63da60d7b5..4353d028f1 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -441,3 +441,8 @@ config_entry_value = TRUE /datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API + +//ambition start +/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. + config_entry_value = 5 +//ambition end diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 42580425ce..cb87734376 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -49,6 +49,11 @@ /// A weak reference to another datum var/datum/weakref/weak_reference +//ambition start + ///Lazy associative list of currently active cooldowns. + var/list/cooldowns +//ambition end + /* * Lazy associative list of currently active cooldowns. * @@ -231,6 +236,39 @@ else return returned +//ambition start +/** + * Callback called by a timer to end an associative-list-indexed cooldown. + * + * Arguments: + * * source - datum storing the cooldown + * * index - string index storing the cooldown on the cooldowns associative list + * + * This sends a signal reporting the cooldown end. + */ +/proc/end_cooldown(datum/source, index) + if(QDELETED(source)) + return + SEND_SIGNAL(source, COMSIG_CD_STOP(index)) + TIMER_COOLDOWN_END(source, index) + + +/** + * Proc used by stoppable timers to end a cooldown before the time has ran out. + * + * Arguments: + * * source - datum storing the cooldown + * * index - string index storing the cooldown on the cooldowns associative list + * + * This sends a signal reporting the cooldown end, passing the time left as an argument. + */ +/proc/reset_cooldown(datum/source, index) + if(QDELETED(source)) + return + SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index)) + TIMER_COOLDOWN_END(source, index) +//ambition end + /** * Callback called by a timer to end an associative-list-indexed cooldown. * diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 897e2e7d71..eb1c47e0aa 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -29,6 +29,12 @@ */ +//ambition start +#define AMBITION_COOLDOWN_TIME (5 SECONDS) +#define OBJECTIVES_COOLDOWN_TIME (2 SECONDS) +#define ADMIN_PING_COOLDOWN_TIME (10 MINUTES) +//ambition end + /datum/mind var/key var/name //replaces mob/var/original_name @@ -68,6 +74,11 @@ /// Our skill holder. var/datum/skill_holder/skill_holder +//ambition start + /// Lazy list for antagonists to set goals they wish to achieve, to be shown at the round-end report. + var/list/ambitions +//ambition end + ///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not var/mob/original_character @@ -173,7 +184,9 @@ qdel(A) return A.owner = src - LAZYADD(antag_datums, A) +//ambition start + do_add_antag_datum(A) +//ambition end A.create_team(team) var/datum/team/antag_team = A.get_team() if(antag_team) @@ -181,6 +194,14 @@ A.on_gain() return A +//ambition start +/datum/mind/proc/do_add_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYADD(antag_datums, instanced_datum) + if(!.) + current.verbs += /mob/proc/edit_objectives_and_ambitions +//ambition end + /datum/mind/proc/remove_antag_datum(datum_type) if(!datum_type) return @@ -189,6 +210,14 @@ A.on_removal() return TRUE +//ambition start +/datum/mind/proc/do_remove_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYREMOVE(antag_datums, instanced_datum) + if(. && !LAZYLEN(antag_datums)) + ambitions = null + current.verbs -= /mob/proc/edit_objectives_and_ambitions +//ambition end /datum/mind/proc/remove_all_antag_datums() //For the Lazy amongst us. for(var/a in antag_datums) @@ -374,10 +403,10 @@ message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.") -/datum/mind/proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
    " +//ambition start +/datum/mind/proc/show_memory() + var/list/output = list("[current.real_name]'s Memories:
    ") +//ambition end output += memory @@ -398,16 +427,912 @@ output += "
  • Conspirator: [M.name]
  • " output += "" - if(window) - recipient << browse(output,"window=memory") - else if(all_objectives.len || memory) - to_chat(recipient, "[output]") +//ambition port start + if(LAZYLEN(ambitions)) + for(var/count in 1 to LAZYLEN(ambitions)) + output += "
    Ambition #[count]: [ambitions[count]]" + + if(!memory && !length(all_objectives) && !LAZYLEN(ambitions)) + output += "
    • NONE
    " + + return output.Join() + + +/datum/mind/proc/show_editable_objectives_and_ambitions() + var/is_admin = check_rights(R_ADMIN, FALSE) + var/self_mind = usr == current + if(!is_admin && !self_mind) + return "" + var/list/output = list() + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + output += "Objectives:" + if(is_admin) + output += " Add Objective" + output += "" + if(is_admin) + output += "Announce objectives
    " + output += "
    Requested Objective Changes:" + if(self_mind) + output += " Request objective" + output += "
      " + if(!LAZYLEN(antag_datum.requested_objective_changes)) + output += "
    • NONE

    " + else + for(var/uid in antag_datum.requested_objective_changes) + var/list/objectives_info = antag_datum.requested_objective_changes[uid] + var/obj_request = objectives_info["request"] + switch(obj_request) + if(REQUEST_NEW_OBJECTIVE) + var/datum/objective/type_cast_objective = objectives_info["target"] + var/objective_text = objectives_info["text"] + output += "
  • Request #[uid]: ADD [initial(type_cast_objective.name)] - [objective_text]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Edit Deny" + if(REQUEST_DEL_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: DEL [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Deny" + if(REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: [obj_request == REQUEST_WIN_OBJECTIVE ? "WIN" : "LOSE"] [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Deny" + else + stack_trace("Objective request found with no request index. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + continue + output += "
    " + if(self_mind) + output += "Ping the admins
    " + if(is_admin) + output += "Clear ping cooldown
    " + output += "
    [current.real_name]'s Ambitions:" + if(LAZYLEN(ambitions) < CONFIG_GET(number/max_ambitions)) + output += " Add Ambition" + output += "
      " + if(!LAZYLEN(ambitions)) + output += "
    • NONE" + else + for(var/count in 1 to LAZYLEN(ambitions)) + output += "
    • Ambition #[count] (Edit) (Remove):
      [ambitions[count]]" + output += "

    (Refresh)" + return output.Join() + + +/mob/proc/edit_objectives_and_ambitions() + set name = "Objectives and Ambitions" + set category = "IC" + set desc = "View and edit your character's objectives and ambitions." + mind.do_edit_objectives_ambitions() + + +/datum/mind/proc/do_edit_objectives_ambitions() + var/datum/browser/popup = new(usr, "objectives and ambitions", "Objectives and Ambitions") + popup.set_content(show_editable_objectives_and_ambitions()) + popup.open() + + +GLOBAL_VAR_INIT(requested_objective_uid, 0) + + +GLOBAL_LIST(objective_player_choices) + +/proc/populate_objective_player_choices() + GLOB.objective_player_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate/once, + /datum/objective/protect, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + /datum/objective/blackmail_implant //SKYRAT ADDITION + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_player_choices[initial(type_cast.name)] = t + + +GLOBAL_LIST(objective_choices) + +/proc/populate_objective_choices() + GLOB.objective_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate, + /datum/objective/assassinate/once, + /datum/objective/maroon, + /datum/objective/debrain, + /datum/objective/protect, + /datum/objective/destroy, + /datum/objective/hijack, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + /datum/objective/nuclear, + /datum/objective/absorb, + /datum/objective/blackmail_implant //SKYRAT ADDITION + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_choices[initial(type_cast.name)] = t + + +/datum/mind/proc/on_objectives_request_cd_end(datum/source) + UnregisterSignal(src, list(COMSIG_CD_STOP(COOLDOWN_OBJ_ADMIN_PING), COMSIG_CD_RESET(COOLDOWN_OBJ_ADMIN_PING))) + if(!antag_datums) + return + to_chat(current, "You are now again able to ping the admins objective changes review requests.") + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(!antag_datum.requested_objective_changes) + continue + to_chat(current, "You seem to have unanswered change requests. If there are online admins another gentle reminder might be in order.") + break +//ambition port end /datum/mind/Topic(href, href_list) +//ambition start + + if (href_list["refresh_obj_amb"]) + do_edit_objectives_ambitions() + return + + else if (href_list["add_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/max_ambitions = CONFIG_GET(number/max_ambitions) + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_objectives_ambitions() + return + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYADD(ambitions, new_ambition) + if(usr == current) + log_game("[key_name(usr)] has created their ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") + do_edit_objectives_ambitions() + return + + else if (href_list["edit_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["edit_ambition"]) + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + if(ambition_index > LAZYLEN(ambitions)) + return + var/old_ambition = ambitions[ambition_index] + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") + do_edit_objectives_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + ambitions[ambition_index] = new_ambition + if(usr == current) + log_game("[key_name(usr)] has edited their ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_objectives_ambitions() + return + + else if (href_list["remove_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["remove_ambition"]) + if(ambition_index > LAZYLEN(ambitions)) + do_edit_objectives_ambitions() + return + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + var/old_ambition = ambitions[ambition_index] + if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist. The ambition we were deleting should no longer exist already.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") + do_edit_objectives_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYCUT(ambitions, ambition_index, ambition_index + 1) + if(usr == current) + log_game("[key_name(usr)] has deleted their ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + else + log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_ping"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "You must wait [S_TIMER_COOLDOWN_TIMELEFT(src, COOLDOWN_OBJ_ADMIN_PING) * 0.1] seconds before your next admin ping.") + do_edit_objectives_ambitions() + return + if(!antag_datums) + return + var/pending_request = FALSE + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(antag_datum.requested_objective_changes) + pending_request = TRUE + break + if(!pending_request) + to_chat(usr, "You have no pending requests to warn the admins about. Request changes for them to review before poking them.") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Send a message to the admins requesting a review of your objective change requests.\ + There's a [ADMIN_PING_COOLDOWN_TIME * 0.1] seconds cooldown between requests, so try to think it through before sending it. Cancelling this does not trigger the cooldown.", + "Request Admin Review", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "You must wait [S_TIMER_COOLDOWN_TIMELEFT(src, COOLDOWN_OBJ_ADMIN_PING) * 0.1] seconds before your next admin ping.") + do_edit_objectives_ambitions() + return + if(!antag_datums) + return + pending_request = FALSE + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(antag_datum.requested_objective_changes) + pending_request = TRUE + break + if(!pending_request) + return + if(!length(GLOB.admins)) + to_chat(usr, "No admins currently connected, failed to notify them. Wait for one to connect before trying to ping them again.") + do_edit_objectives_ambitions() + return + S_TIMER_COOLDOWN_START(src, COOLDOWN_OBJ_ADMIN_PING, ADMIN_PING_COOLDOWN_TIME) + RegisterSignal(src, list(COMSIG_CD_STOP(COOLDOWN_OBJ_ADMIN_PING), COMSIG_CD_RESET(COOLDOWN_OBJ_ADMIN_PING)), .proc/on_objectives_request_cd_end) + log_admin("Objectives review request - [key_name(usr)] has requested a review of their objective changes, pinging the admins.") + for(var/a in GLOB.admins) + var/client/admin_client = a + if(admin_client.prefs.toggles & SOUND_ADMINHELP) + SEND_SOUND(admin_client, sound('sound/effects/adminhelp.ogg')) + window_flash(admin_client) + message_admins("[ADMIN_TPMONTY(usr)] has requested a review of their objective changes. (RPLY)") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_add"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + do_edit_objectives_ambitions() + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + if(!GLOB.objective_player_choices) + populate_objective_player_choices() + var/choice = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_player_choices + var/selected_type = GLOB.objective_player_choices[choice] + if(!selected_type) + return + var/new_objective = stripped_multiline_input(usr,\ + selected_type == /datum/objective/custom\ + ? "Write the custom objective you'd like to request the admins to grant you. Remember they can edit or deny your request at their own discretion."\ + : "Justify your request for a new objective to the admins. Add the required clarifations, if you have a specific targets in mind and the likes.",\ + "New Objective", max_length = MAX_MESSAGE_LEN) + if(isnull(new_objective)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME] minutes between request changes.") + return + if(QDELETED(target_antag)) + return + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = REQUEST_NEW_OBJECTIVE, "target" = selected_type, "text" = new_objective)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested a [choice] objective: [new_objective]") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_cancel"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/uid = href_list["req_obj_cancel"] + if(!LAZYACCESS(target_antag.requested_objective_changes, uid)) + to_chat(usr, "No requested objective change found. Perhaps it was deleted already?") + do_edit_objectives_ambitions() + return + if(alert(usr, "Are you sure you want to delete this change request?", "Delete change request", "Yes", "No") != "Yes") + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(target_antag.requested_objective_changes, uid)) + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + log_admin("Objectives request deletion - [key_name(usr)] has deleted the objective change request of UID [uid].") + target_antag.remove_objective_change(uid) + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_delete"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_delete"] + var/datum/objective/objective_to_delete = locate(objective_reference) in target_antag.objectives + if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Justify your request for a deleting this objective to the admins.", + "Objective Deletion", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_delete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + var/matching_request = FALSE + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + matching_request = TRUE + break + if(matching_request) + if(alert(usr, "There is already a change request tied to this objective waiting to be processed. Adding this request will delete the old ones.", "Delete matching objective requests?", "Yes", "No") != "Yes") + do_edit_objectives_ambitions() + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_delete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + target_antag.remove_objective_change(index) + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = REQUEST_DEL_OBJECTIVE, "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justification is as follows: [justification]") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_completed"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_completed"] + var/datum/objective/objective_to_complete = locate(objective_reference) in target_antag.objectives + if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) + to_chat(usr, "No objective found. Perhaps it was deleted?") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Justify to the admins your request to mark this objective as [objective_to_complete.completed ? "incomplete" : "completed"].", + "Objective [objective_to_complete.completed ? "Incompletion" : "Completion"]", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_complete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + var/matching_request = FALSE + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + matching_request = TRUE + break + if(matching_request) + if(alert(usr, "There is already a change request tied to this objective waiting to be processed. Adding this request will delete the old ones.", "Delete matching objective requests?", "Yes", "No") != "Yes") + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_complete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + target_antag.remove_objective_change(index) + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = (objective_to_complete.completed ? REQUEST_LOSE_OBJECTIVE : REQUEST_WIN_OBJECTIVE), "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justification is as follows: [justification]") + do_edit_objectives_ambitions() + return if(!check_rights(R_ADMIN)) return var/self_antagging = usr == current + if(href_list["edit_ambitions_panel"]) + do_edit_objectives_ambitions() + return + + else if(href_list["req_obj_ping_cd_clear"]) + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "Mind is not under a cooldown.") + do_edit_objectives_ambitions() + return + if(alert(usr, "Are you sure you want reset this cooldown, letting the user ping the admins again?", "Clear ping cooldown", "Yes", "No") != "Yes") + do_edit_objectives_ambitions() + return + if(!check_rights(R_ADMIN)) + return + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + do_edit_objectives_ambitions() + return + S_TIMER_COOLDOWN_RESET(src, COOLDOWN_OBJ_ADMIN_PING) + do_edit_objectives_ambitions() + return + + else if(href_list["refresh_antag_panel"]) + traitor_panel() + return + + else if (href_list["req_obj_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + if(requested_obj_change["request"] != REQUEST_NEW_OBJECTIVE) + do_edit_objectives_ambitions() + to_chat(usr, "This is not an editable request. How did you even got here?") + return + switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) + if("Type") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_obj_change["target"] + var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] + if(!selected_type) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + requested_obj_change["target"] = selected_type + if("Text") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_obj_change["text"], MAX_MESSAGE_LEN) + if (isnull(new_text)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + requested_obj_change["text"] = new_text + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_accept"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + + var/datum/objective/request_target + var/request_type = requested_obj_change["request"] + switch(request_type) + if(REQUEST_NEW_OBJECTIVE) + request_target = requested_obj_change["target"] + if(!ispath(request_target, /datum/objective)) + to_chat(usr, "Invalid requested objective target path.") + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + request_target = locate(requested_obj_change["target"]) in antag_datum.objectives + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + if(alert(usr, "Are you sure you want to approve this objective change?", "Approve objective change", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + switch(request_type) //Last checks + if(REQUEST_NEW_OBJECTIVE) + if(!ispath(request_target, /datum/objective)) + stack_trace("Invalid target on objective change request: [request_target]") + do_edit_objectives_ambitions() + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + antag_datum.remove_objective_change(uid) + switch(request_type) //All is clear, let get things done. + if(REQUEST_NEW_OBJECTIVE) + request_target = new request_target() + request_target.owner = src + if(istype(request_target, /datum/objective/custom)) + request_target.explanation_text = requested_obj_change["text"] + else + request_target.admin_edit(usr) + antag_datum.objectives += request_target + message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + if(REQUEST_DEL_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + qdel(request_target) + if(REQUEST_WIN_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = TRUE + if(REQUEST_LOSE_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = FALSE + to_chat(current, "Your objective change request has been approved.") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_deny"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective change reference.") + return + var/justification = stripped_multiline_input(usr, "Justify why you are denying this objective request change.", "Deny", memory, MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_obj_change["target"] + var/objective_name = initial(type_cast.name) + message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + to_chat(current, "Your objective request has been denied for the following reason: [justification]") + antag_datum.remove_objective_change(uid) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_complete_toggle"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) in antag_datum.objectives + if(QDELETED(objective_to_toggle)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_toggle.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + objective_to_toggle.completed = !objective_to_toggle.completed + message_admins("[key_name_admin(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + if(alert(usr, "Would you like to alert the player of the change?", "Deny objective", "Yes", "No") == "Yes") + to_chat(current, "[objective_to_toggle.completed ? "" : ""]Your objective status has changed!") + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_delete"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) in antag_datum.objectives + if(QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_delete.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + if(alert(usr, "Are you sure you want to delete this objective?", "Delete objective", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(objective_to_delete)) + return + message_admins("[key_name_admin(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + log_admin("[key_name(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + qdel(objective_to_delete) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) in antag_datum.objectives + if(QDELETED(objective_to_edit)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_edit.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + var/explanation_before = objective_to_edit.explanation_text + objective_to_edit.admin_edit(usr) + if(QDELETED(objective_to_edit)) + return + message_admins("[key_name_admin(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + log_admin("[key_name(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + do_edit_objectives_ambitions() + return +//ambition end if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) @@ -468,38 +1393,16 @@ else target_antag = target - var/static/list/choices - if(!choices) - choices = list() +//ambition start + if(!GLOB.objective_choices) + populate_objective_choices() - var/list/allowed_types = list( - /datum/objective/assassinate, - /datum/objective/assassinate/once, - /datum/objective/maroon, - /datum/objective/debrain, - /datum/objective/protect, - /datum/objective/destroy, - /datum/objective/hijack, - /datum/objective/escape, - /datum/objective/survive, - /datum/objective/martyr, - /datum/objective/steal, - /datum/objective/download, - /datum/objective/nuclear, - /datum/objective/absorb, - /datum/objective/custom - ) + if(old_objective && GLOB.objective_choices[old_objective.name]) + def_value = old_objective.name - for(var/T in allowed_types) - var/datum/objective/X = T - choices[initial(X.name)] = T - - if(old_objective) - if(old_objective.name in choices) - def_value = old_objective.name - - var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in choices - selected_type = choices[selected_type] + var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] +//ambition end if (!selected_type) return @@ -527,6 +1430,12 @@ message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") +//ambition start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition end + else if(href_list["traitor_class"]) var/static/list/choices if(!choices) @@ -611,6 +1520,11 @@ else if (href_list["obj_announce"]) announce_objectives() +//ambition start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition end //Something in here might have changed your mob if(self_antagging && (!usr || !usr.client) && current.client) @@ -814,3 +1728,7 @@ ..() mind.assigned_role = ROLE_PAI mind.special_role = "" + +//ambition start +#undef AMBITION_COOLDOWN_TIME +//ambition end diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d4afc3dbb4..35a3827766 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -25,7 +25,9 @@ to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.", confidential = TRUE) return - var/body = "Options for [M.key]" +//ambition start + var/list/body = list("Options for [M.key]") +//ambition end body += "Options panel for [M]" if(M.client) body += " played by [M.client] " @@ -125,6 +127,10 @@ body += "Subtle message | " // body += "Play sound to | " body += "Language Menu" +//ambition start + if(M.mind) + body += " | Objective-Ambition Menu" +//ambition end if (M.client) if(!isnewplayer(M)) @@ -206,7 +212,11 @@ body += "
    " body += "" - usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515") +//ambition start + var/datum/browser/popup = new(usr, "adminplayeropts-[REF(M)]", "Player Panel", nwidth = 550, nheight = 515) + popup.set_content(body.Join()) + popup.open() +//ambition end SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 88aab2c4ce..f5f3f1c9b3 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -97,10 +97,14 @@ GLOBAL_VAR(antag_prototypes) alert("This mind doesn't have a mob, or is deleted! For some reason!", "Edit Memory") return - var/out = "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    " - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    " - out += "Assigned role: [assigned_role]. Edit
    " - out += "Faction and special role: [special_role]
    " +//ambition start + var/list/out = list( + "[name][(current && (current.real_name!=name))?" (as [current.real_name])":""]
    \ + Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
    \ + Assigned role: [assigned_role]. Edit
    \ + Faction and special role: [special_role]
    " + ) +//ambition end var/special_statuses = get_special_statuses() if(length(special_statuses)) @@ -203,15 +207,25 @@ GLOBAL_VAR(antag_prototypes) uplink_info += "." //hiel grammar out += uplink_info + "
    " +//ambition start + //Ambitions + out += "[current.real_name]'s Ambitions: Edit Ambitions
      " + if(!LAZYLEN(ambitions)) + out += "
    • NONE
    • " + else + for(var/count in 1 to LAZYLEN(ambitions)) + out += "
    • Ambition #[count]:
      [ambitions[count]]" + out += "
    " //Common Memory - var/common_memory = "Common Memory:" - common_memory += memory - common_memory += "Edit Memory" - out += common_memory + "
    " + out += "
    Common Memory:" + out += memory + out += "Edit Memory
    " //Other stuff out += get_common_admin_commands() + out += "
    Refresh" var/datum/browser/panel = new(usr, "traitorpanel", "", 600, 600) - panel.set_content(out) + panel.set_content(out.Join()) +//ambition end panel.open() return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 05e791984a..5021e94bc3 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2251,6 +2251,18 @@ var/mob/M = locate(href_list["HeadsetMessage"]) usr.client.admin_headset_message(M) +//ambition start + else if(href_list["ObjectiveRequest"]) + if(!check_rights(R_ADMIN)) + return + var/datum/mind/requesting_mind = locate(href_list["ObjectiveRequest"]) + if(!istype(requesting_mind) || QDELETED(requesting_mind)) + to_chat(usr, "This mind reference is no longer valid. It has probably since been destroyed.") + return + requesting_mind.do_edit_objectives_ambitions() + return +//ambition end + else if(href_list["reject_custom_name"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 14f7b34309..e16c5a1912 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -25,6 +25,10 @@ GLOBAL_LIST_EMPTY(antagonists) var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default. var/threat = 0 // Amount of threat this antag poses, for dynamic mode +//ambition start + /// Lazy list for antagonists to request the admins objectives. + var/list/requested_objective_changes +//ambition end var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors var/list/skill_modifiers @@ -35,8 +39,9 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/Destroy() GLOB.antagonists -= src - if(owner) - LAZYREMOVE(owner.antag_datums, src) +//ambition start + owner?.do_remove_antag_datum(src) +//ambition end owner = null return ..() @@ -133,7 +138,9 @@ GLOBAL_LIST_EMPTY(antagonists) remove_innate_effects() clear_antag_moodies() if(owner) - LAZYREMOVE(owner.antag_datums, src) +//ambition start + owner.do_remove_antag_datum(src) +//ambition end for(var/A in skill_modifiers) owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type)) if(!silent && owner.current) @@ -294,3 +301,33 @@ GLOBAL_LIST_EMPTY(antagonists) else return ..() + +///Clears change requests from deleted objectives to avoid broken references. +/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force) + var/objective_reference = REF(source) + for(var/uid in requested_objective_changes) + var/list/change_request = requested_objective_changes[uid] + if(change_request["target"] != objective_reference) + continue + LAZYREMOVE(requested_objective_changes, uid) + + +/datum/antagonist/proc/add_objective_change(uid, list/additions) + LAZYADD(requested_objective_changes, uid) + var/datum/objective/request_target = additions["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective) + requested_objective_changes[uid] = additions + + +/datum/antagonist/proc/remove_objective_change(uid) + if(!LAZYACCESS(requested_objective_changes, uid)) + return + var/datum/objective/request_target = requested_objective_changes[uid]["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + UnregisterSignal(request_target, COMSIG_PARENT_QDELETING) + LAZYREMOVE(requested_objective_changes, uid) diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 208fefee70..4e68e27583 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -65,7 +65,9 @@ user.copy_languages(target, LANGUAGE_ABSORB) if(target.mind && user.mind)//if the victim and user have minds - target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. +//ambition start + to_chat(user, "[target.mind.show_memory()]") //I can read your mind, kekeke. Output all their notes. +//ambition end //Some of target's recent speech, so the changeling can attempt to imitate them better. //Recent as opposed to all because rounds tend to have a LOT of text. diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 09d8771a62..fb5cd7af93 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -49,7 +49,10 @@ cult_team = new_team /datum/antagonist/cult/proc/add_objectives() - objectives |= cult_team?.objectives +//ambition start + if(cult_team) + objectives |= cult_team.objectives +//ambition end /datum/antagonist/cult/Destroy() QDEL_NULL(communion) diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 2b1c2de17a..e9bf3c5d49 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -2,7 +2,10 @@ ..() //Mind updates sync_mind() - mind.show_memory(src, 0) +//ambition start + if(mind.memory || mind.antag_datums) + to_chat(src, "[mind.show_memory()]") +//ambition end //Round specific stuff if(SSticker.mode) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 824e262ae1..b736e8b409 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -441,7 +441,11 @@ set category = "IC" set desc = "View your character's notes memory." if(mind) - mind.show_memory(src) +//ambition start + var/datum/browser/popup = new(src, "memory", "Memory and Notes") + popup.set_content(mind.show_memory()) + popup.open() +//ambition end else to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.") From 03bd073cb53887282c3b2580228b096a26fb4a19 Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 5 Mar 2021 21:59:00 +0100 Subject: [PATCH 08/84] fixes compile errors --- code/datums/datum.dm | 37 ------------------------------------- code/datums/mind.dm | 2 -- 2 files changed, 39 deletions(-) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index cb87734376..7d054ad64c 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -49,11 +49,6 @@ /// A weak reference to another datum var/datum/weakref/weak_reference -//ambition start - ///Lazy associative list of currently active cooldowns. - var/list/cooldowns -//ambition end - /* * Lazy associative list of currently active cooldowns. * @@ -236,38 +231,6 @@ else return returned -//ambition start -/** - * Callback called by a timer to end an associative-list-indexed cooldown. - * - * Arguments: - * * source - datum storing the cooldown - * * index - string index storing the cooldown on the cooldowns associative list - * - * This sends a signal reporting the cooldown end. - */ -/proc/end_cooldown(datum/source, index) - if(QDELETED(source)) - return - SEND_SIGNAL(source, COMSIG_CD_STOP(index)) - TIMER_COOLDOWN_END(source, index) - - -/** - * Proc used by stoppable timers to end a cooldown before the time has ran out. - * - * Arguments: - * * source - datum storing the cooldown - * * index - string index storing the cooldown on the cooldowns associative list - * - * This sends a signal reporting the cooldown end, passing the time left as an argument. - */ -/proc/reset_cooldown(datum/source, index) - if(QDELETED(source)) - return - SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index)) - TIMER_COOLDOWN_END(source, index) -//ambition end /** * Callback called by a timer to end an associative-list-indexed cooldown. diff --git a/code/datums/mind.dm b/code/datums/mind.dm index eb1c47e0aa..87bd5b4dfd 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -554,7 +554,6 @@ GLOBAL_LIST(objective_player_choices) /datum/objective/martyr, /datum/objective/steal, /datum/objective/download, - /datum/objective/blackmail_implant //SKYRAT ADDITION ) for(var/t in allowed_types) @@ -582,7 +581,6 @@ GLOBAL_LIST(objective_choices) /datum/objective/download, /datum/objective/nuclear, /datum/objective/absorb, - /datum/objective/blackmail_implant //SKYRAT ADDITION ) for(var/t in allowed_types) From 54611bb04a5a62dfed265baa6b311e9cddfa905c Mon Sep 17 00:00:00 2001 From: Fabian Date: Mon, 15 Mar 2021 14:30:10 +0100 Subject: [PATCH 09/84] Update cooldowns.dm --- code/__DEFINES/cooldowns.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index df644c0fd6..bcd91e2e47 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -65,8 +65,6 @@ #define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time) -#define COOLDOWN_CHECK(cd_source, cd_index) (cd_source.cd_index < world.time) - //Returns true if the cooldown has run its course, false otherwise #define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time) From 9750580fb5b71bab6e080dfd3bfc3fbdae463f28 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 24 Mar 2021 00:02:11 +0000 Subject: [PATCH 10/84] Automatic changelog compile [ci skip] --- html/changelog.html | 42 +++++++++++++--------- html/changelogs/.all_changelog.yml | 25 +++++++++++++ html/changelogs/AutoChangeLog-pr-14447.yml | 5 --- html/changelogs/AutoChangeLog-pr-14473.yml | 14 -------- html/changelogs/AutoChangeLog-pr-14475.yml | 6 ---- html/changelogs/AutoChangeLog-pr-14491.yml | 4 --- 6 files changed, 51 insertions(+), 45 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14447.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14473.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14475.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14491.yml diff --git a/html/changelog.html b/html/changelog.html index b240141879..28d851b295 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,27 +50,37 @@ -->
    -

    11 March 2021

    -

    Putnam3145 updated:

    +

    24 March 2021

    +

    Hatterhat updated:

      -
    • Supernova event
    • -
    • Bloodsucker day/night cycle now processes on a subsystem instead of using while and sleep (!!)
    • +
    • The NOGUNS trait now takes precedence over the triggerguard checks.
    -

    Sneakyrat updated:

    +

    ItzGabby updated:

      -
    • Fixes precise insertion ui(when it asks you how many sheets you want to put in the mat container) so you can actually choose how much to put in and it will still work if your stack is bigger than the remaining space
    • -
    • Fixes precise insertion not working for remote mat containers
    • -
    • Fixes Protolathe/mechfab insert material animations not working
    • -
    • Fixes the material insertion animation for protolathes occurring on the circuit printer
    • -
    • Fixes the material insertion animation not actually playing when it was started
    • -
    • Fixes the material insertion animation for iron not being made
    • -
    • Fixes the material insertion animation sometimes not picking the right material for sheets that have multiple different materials in them
    • +
    • Fluff Items with polychromic support
    • +
    • A new vendor called Bark box
    • +
    • A new form of snack with it's own box
    • +
    • Two harness, one of them being lewd
    • +
    • One new collar, with a ribbon. Classy.
    • +
    • More locked forms of collars
    • +
    • Purged old balls
    • +
    • Removed the funny buffs each colored tennis ball had, down with the powergame!
    • +
    • Added polychromic fluff icons, vendor icons, suit icons, snack icons, fancy box icons, and a polychromic version of Izzy's ball.
    • +
    • Deleted old balls, Izzy's Ball, except the rainbow one since it's special and as I did not go out of my way to get permission to touch.
    • +
    • Walked into vending.dm and glared for a moment at hydroponics' grammar.
    -

    necromanceranne updated:

    +

    LetterN updated:

      -
    • Properly segments all the augment sprites so that they correctly display.
    • -
    • Properly labels the augment limb icon sprites.
    • -
    • Fixes going over the defined limit of roundstart prosthetics
    • +
    • fixed laptops pickability
    • +
    • fixed closets being unweldable
    • +
    +

    qweq12yt updated:

    +
      +
    • added the black market uplink
    • +
    • added blackmarket.dmi
    • +
    • increased the black market interface's width, now the delivery options will show properly when the LTSRBT is built
    • +
    +

    23 March 2021

    LetterN updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ae22fdc466..e114e7c3fa 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -28815,3 +28815,28 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. LetterN: - bugfix: NIRM departamental purchases now work. Have fun spending the entire R&D Budget! +2021-03-24: + Hatterhat: + - bugfix: The NOGUNS trait now takes precedence over the triggerguard checks. + ItzGabby: + - rscadd: Fluff Items with polychromic support + - rscadd: A new vendor called Bark box + - rscadd: A new form of snack with it's own box + - rscadd: Two harness, one of them being lewd + - rscadd: One new collar, with a ribbon. Classy. + - rscadd: More locked forms of collars + - rscdel: Purged old balls + - balance: Removed the funny buffs each colored tennis ball had, down with the powergame! + - imageadd: Added polychromic fluff icons, vendor icons, suit icons, snack icons, + fancy box icons, and a polychromic version of Izzy's ball. + - imagedel: Deleted old balls, Izzy's Ball, except the rainbow one since it's special + and as I did not go out of my way to get permission to touch. + - spellcheck: Walked into vending.dm and glared for a moment at hydroponics' grammar. + LetterN: + - bugfix: fixed laptops pickability + - bugfix: fixed closets being unweldable + qweq12yt: + - rscadd: added the black market uplink + - imageadd: added blackmarket.dmi + - bugfix: increased the black market interface's width, now the delivery options + will show properly when the LTSRBT is built diff --git a/html/changelogs/AutoChangeLog-pr-14447.yml b/html/changelogs/AutoChangeLog-pr-14447.yml deleted file mode 100644 index 1ed321f6b9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14447.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "LetterN" -delete-after: True -changes: - - bugfix: "fixed laptops pickability" - - bugfix: "fixed closets being unweldable" diff --git a/html/changelogs/AutoChangeLog-pr-14473.yml b/html/changelogs/AutoChangeLog-pr-14473.yml deleted file mode 100644 index 1d7db07abe..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14473.yml +++ /dev/null @@ -1,14 +0,0 @@ -author: "ItzGabby" -delete-after: True -changes: - - rscadd: "Fluff Items with polychromic support" - - rscadd: "A new vendor called Bark box" - - rscadd: "A new form of snack with it's own box" - - rscadd: "Two harness, one of them being lewd" - - rscadd: "One new collar, with a ribbon. Classy." - - rscadd: "More locked forms of collars" - - rscdel: "Purged old balls" - - balance: "Removed the funny buffs each colored tennis ball had, down with the powergame!" - - imageadd: "Added polychromic fluff icons, vendor icons, suit icons, snack icons, fancy box icons, and a polychromic version of Izzy's ball." - - imagedel: "Deleted old balls, Izzy's Ball, except the rainbow one since it's special and as I did not go out of my way to get permission to touch." - - spellcheck: "Walked into vending.dm and glared for a moment at hydroponics' grammar." diff --git a/html/changelogs/AutoChangeLog-pr-14475.yml b/html/changelogs/AutoChangeLog-pr-14475.yml deleted file mode 100644 index 5c26ac3970..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14475.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "qweq12yt" -delete-after: True -changes: - - rscadd: "added the black market uplink" - - imageadd: "added blackmarket.dmi" - - bugfix: "increased the black market interface's width, now the delivery options will show properly when the LTSRBT is built" diff --git a/html/changelogs/AutoChangeLog-pr-14491.yml b/html/changelogs/AutoChangeLog-pr-14491.yml deleted file mode 100644 index a40970617c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14491.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Hatterhat" -delete-after: True -changes: - - bugfix: "The NOGUNS trait now takes precedence over the triggerguard checks." From aafd1ca6bcb044e5bc8a9afaa0e21bbc698e1bdb Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 25 Mar 2021 00:36:12 +0000 Subject: [PATCH 11/84] Automatic changelog compile [ci skip] --- html/changelog.html | 663 -------------------------------------------- 1 file changed, 663 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 28d851b295..bbf1a17862 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -889,669 +889,6 @@
      • Adds a way to give items to people, you can combat mode rightclick to offer it to one person, right click on people without mode and click the give verb, or use the hotkey CTRL G to offer it to everyone around you
      - -

      21 January 2021

      -

      Acer202 updated:

      -
        -
      • Main mining shuttle should no longer look at the public mining shuttle and attempt to dock ontop of it. Monastery shuttle should now function again.
      • -
      -

      Acer202, with minor help from The0bserver updated:

      -
        -
      • After internal deliberation, CentCom has decided to run a limited reinstatement of public mining shuttles for use in more tried and true station classes. CentCom would like to remind you that this privilege is easily revoked, and that abuse may result in immediate detonation.
      • -
      • Restores the mining shuttle on Pubby, Box, Delta, Meta, and Lambda Station.
      • -
      -

      ArcaneMusic, The0bserver-sys updated:

      -
        -
      • New from Hydrowear LLC: The Botanical Belt! This handy yellow belt lets you hold most of your botany gear, and a few beakers for reduced bag and floor clutter!
      • -
      • Gives Hydrotrays plumbing pipes automatically, allowing you to make a self sustaining tray via plumbing.
      • -
      • Gives Service access to Bluespace Beakers, at last, gives Cargo, Science, and Medical the ability to construct reinforced plungers for use on lavaland.
      • -
      -

      ArchieBeepBoop updated:

      -
        -
      • Upgraded Advanced RTG Machine Preset
      • -
      • Outlet Injector Mapping Asset Layer Fix
      • -
      • Jacqueen and the Christmas tree should no longer spawn abstract things that can cause shittons of runtimes.
      • -
      -

      Arturlang updated:

      -
        -
      • You can't tackle in nograv anymore
      • -
      • You cannot spam drink from blood bags anymore
      • -
      • Blood bag drinking inefficiency is now the right way, so you loose some of the blood drinking it straight
      • -
      • Handles more edge cases with construct soul returning
      • -
      • Being sacrificed by the cult no longer removes all hope of rescue.
      • -
      • Makes construct mind returning more robust
      • -
      • Prayers to admins now do a wee ding sound for all prayers, instead of just chaplains
      • -
      • Fixes the mint machine's UI
      • -
      • Hopefully fixes whitescreen issues for TGUI UI's by giving assets more time to get to the client
      • -
      • Fixes hijack implant APC UI, again
      • -
      • Comments out spaceman dmm do not sleeps for mob/proc/CommonClickOn, atom/proc/attack_hand, datum/proc/keyLoop and mob/living/proc/Life
      • -
      • Bloodsuckers tresspass ability can no longer work while they are not awake.
      • -
      • The cursed heart now only takes away half as much blood every loop, and can be used as long as you are alive, instead if only you are awake/able to use your hands
      • -
      -

      Bhijn updated:

      -
        -
      • Changeling loudness is now determined as an average of all their abilities, rather than the sum
      • -
      • To compensate for this, blood tests now require a loudness value of 1 or higher to detect ling blood. Additionally, blood test explosions are now triggered only when the loudness value is higher than 2.
      • -
      -

      BlackMajor updated:

      -
        -
      • Cyborg hypospray no longer injects if it means OD'ing while on help intent.
      • -
      -

      BlueWildrose updated:

      -
        -
      • Nyctophobia quirk now has some light lag compensation.
      • -
      • Fixes cloning computer UI not updating when pressing certain buttons - also adds extra check for names to update a message
      • -
      • Removes oversized genitalia analysis from medical scanners, since huge dick and titty are no longer a problem anymore thanks to advancements in that kind of technology when it comes to chemical fun times growth.
      • -
      • Fixed species-specific drinks not giving a mood boost if you are that species.
      • -
      • You will now only unbuckle fireman-carried/piggybacked people on disarm or harm intent.
      • -
      • The traitor AI can no longer activate the doomsday device while carded.
      • -
      • Fixes noodle size appearance for 12+ inch members.
      • -
      • Fixed the subtle hotkey being weird with its input prompts.
      • -
      • Adds a subtler anti-ghost hotkey. Default key is 6.
      • -
      • No more straining when your cock or breasts are growing via incubus draft or succubus milk.
      • -
      • PubbyStation now has two Christmas Tree spawners.
      • -
      • You can now have a max-roundstart-dicksize-config inch long johnson before you start suffering blood loss and slowdowns instead of a 20 inch one.
      • -
      • Color Mates have been added to all stations (except Snaxi). Enjoy coloring your attire without having to bug science!
      • -
      • Polychromic hoodies that were obtained from the loadout have functional colorable hoods now.
      • -
      • Adds in timid woman/man costumes. Available at your autodrobe! Also adds in garters as some new socks.
      • -
      • Corrected the capitalization in gasmask concealment examine text
      • -
      -

      Chiirno updated:

      -
        -
      • Added the paramedics EVA suit as a purchase from the cargo console.
      • -
      • Paramedics office and Surgery Storage Room
      • -
      • Remodeled the surgery room, as well as shrunk Morgue and Starboard Emergency Storage. Fiddled with some areas for better map edit clarity and fixed one runtime in Vacant Office A.
      • -
      • Added the paramedic closet sprite, a paramedic colored medical3 closet.
      • -
      • Added a paramedic closet, which is the standard medical3 closet with their suit, a pinpointer, and a crew monitor added.
      • -
      • Nightmare now deals additional damage to most light sources.
      • -
      • Nightmare now one-shots miners beacons and glowshrooms
      • -
      • Portable Chem Mixer now researchable from biotech node.
      • -
      • Chem masters can now dispense 20 instances of its outputs instead of 10.
      • -
      -

      Delams-The-SM updated:

      -
        -
      • Added 3 new emotes *hiss *purr *meow
      • -
      • ported sounds from Citadel RP for *purr and *meow
      • -
      • fixed randomization of colors for things like mulligan and Stabilized green slime extract for matrixed body parts
      • -
      -

      DeltaFire15 updated:

      -
        -
      • Biomechanical (hybrid) bodyparts now have access to wound-fixing surgeries.
      • -
      • A wound being fixed no longer just qdel()s surgeries connected to it.
      • -
      • Some robotic surgery steps are now a bit more clear.
      • -
      • Organs no longer get fed to people after successfully being inserted into them.
      • -
      • Not completing the do_after of a surgery no longer causes you to attack the target with whatever you were holding.
      • -
      • IPC cells & power cords are now printable after they are researched.
      • -
      • A new surgery, allowing revival of synths without a defib at hand.
      • -
      • Semi-permanent damage of Synth limbs caused by passing the damage threshold: 10 <- 15.
      • -
      • The embed removal surgery now has a version for Synths.
      • -
      • EMPs no longer hardstun Synths.
      • -
      • Portals no longer runtime because of incorrect args.
      • -
      • Abductors now can use experimental organ replacement surgery on robots / synthetics.
      • -
      • Fixes a minor incorrectness in ratvarian borg slabs (ratvar_act -> ui_act)
      • -
      • Changelings no longer double-deathgasp when activating the regen stasis ability while not dead.
      • -
      • People installing KA modkits in miner borgs is no longer broken.
      • -
      • Fixes the tail entwine messages displaying incorrectly.
      • -
      • Antagging / Deantagging Heretics now properly sets their special role.
      • -
      • The borg VTEC ability now actually gets removed when the upgrade is removed.
      • -
      • Supplypods shouldn't cause runtimes anymore, and shrapnel (pelletclouds) should work for them.
      • -
      • Robots (anyone with the robotic_organism trait) have toxins damage replaced with system corruption. See the PR for details.
      • -
      • Clockwork rites now support hiding specific rites from neutered servants.
      • -
      • AIs now only have to kill people once instead of permanently.
      • -
      • Scripture no longer sometimes eats part of its invocation.
      • -
      • APCs and silicons are now more susceptible to powerdrains (by the power_drain() proc, which is rare)
      • -
      • Void Volt has been modified from a chant to a singular pulse.
      • -
      • Robotpeople are now fully immune to the effects of alcohol (drunkness etc.)
      • -
      • Renames the alcohol intolerance trait in the code to make what it does more clear.
      • -
      • Self-fueling weldingtools recharge fuel properly again.
      • -
      • Brass welders now actually recharge faster than experimental ones.
      • -
      • Repeatable surgery steps can no longer cause an infinite loop if not completing the do_after
      • -
      • The Revenant self-revive ability is no longer broken.
      • -
      • Loot items mobs drop are no longer always failing to initialize.
      • -
      • Instant summons can no longer do wacky stuff with disposals (and nukes).
      • -
      • Objectives are no longer very broken.
      • -
      • Bloodcult stunhands now work against clockies like they were supposed to instead of hardstunning.
      • -
      • zeolites are now actual fermichems instead of being incredibly easy to make.
      • -
      • Using syringes / droppers on chem heaters with beakers in them works again.
      • -
      • Some edge cases causing issues with system corruption shouldn't be able to occur anymore.
      • -
      • Cyborg B.o.r.i.s. installation now checks for if the chest has a cell, just like how it does with MMIs.
      • -
      • The 'Your body is in a cloner' notification works again
      • -
      • Hijack implants should work properly again (or, at least better)
      • -
      • Liches are now good skeletons again instead of weak ones
      • -
      • The piratepad control cannot be destroyed again.
      • -
      • Pirates have received new supplies of jetpacks instead of useless oxygen tanks
      • -
      • Ratvarian AIs are once again able to show their linked borgs Ratvar's light
      • -
      • Hijackers are once again unable to detonate borgs without being adjacent to the console
      • -
      • Automated annoucement systems and gulag ore consoles no longer waste emag charges
      • -
      • Automated announcement systems once again can be remote controlled by non-AIs with silicon access
      • -
      • APCs being hijacked multiple times at once is no longer possible, preventing some issues
      • -
      • Recharging APCs no longer use 0.2% of the power they should be using.
      • -
      • APCs no longer always use as much power as they can for their cell, even if it is full.
      • -
      • Vampire shapeshifting should now behave as intended
      • -
      • Some synth damage stuff has been a bit rebalanced, see the PR for details.
      • -
      • Nanogel, available at medical and robotics, which fixes internal damage in sufficiently repaired robotic limbs.
      • -
      • Robotic Limbs now each have their own damage threshhold values
      • -
      • Robotic Limb damage threshholds are now seperated into threshhold itself and mindamage when passed balance; Hybrid limbs can now be injected with hypos, but not sprayed (Still not healed by chems)
      • -
      • Brain surgery has been tweaked back to allowing robotic limbs, blacklisting IPC brains instead.
      • -
      • Robot brain surgery can now be used on organic heads, if there is a IPC brain in them somehow.
      • -
      • The robot limb heal surgery can now be used even if the target's torso is not robotic, as long as they have robotic limbs
      • -
      • BODYPART_ROBOTIC / BODYPART_ORGANIC checks replaced with helper-procs whereever possible.
      • -
      • Added a BODYPART_HYBRID define for robotic bodyparts that behave organic in some regards.
      • -
      • The transmission sigil power drain works now
      • -
      • A certain lizard (totally not me) being stupid is no longer going to break regenerate_bodyparts
      • -
      • Combat mode now will not stay permanently disabled due to status effects not working as intended.
      • -
      • Attacking some certain objects no longer has no clickdelay.
      • -
      • the blacksmithing skill now works properly
      • -
      • Anvils cannot be interacted with with hammers whilst they are already being used
      • -
      • If someone has no gloves when interacting with heated ingots, they no longer ignore their effects.
      • -
      • A runtime caused by hallucinations is gone.
      • -
      • Cargo packs marked as 'no private buying' now actually register as such.
      • -
      • Fleshmend, Anatomic Panacea and bloodsucker healing now work for Synths / IPCs.
      • -
      • Medibots now ignore people they cannot help due to their biology.
      • -
      • get_damaged_bodyparts() is no longer broken.
      • -
      • Your target cryoing will no longer give you a free greentext.
      • -
      • Sleeper UI interactiveness now behaves correctly.
      • -
      -

      Detective-Google updated:

      -
        -
      • arcade carpet
      • -
      • explosions now get broadcasted to deadchat.
      • -
      • Lick radial
      • -
      • Hilbert's jukebox works
      • -
      • arcade carpets now actually work
      • -
      • the snow taxi is no longer the slow taxi
      • -
      -

      ERP mains updated:

      -
        -
      • Subtler Around Table is now a verb
      • -
      -

      EdgeLordExe, MoonFalcon updated:

      -
        -
      • Ported a bunch of heretic-related tweaks and changes from tg
      • -
      -

      EmeraldSundisk updated:

      -
        -
      • Adds a few new area designations primarily for CogStation, incorporates them into said map
      • -
      • Reorganizes some area designations for ease of use, along with renaming the central "Router" to "Routing Depot"
      • -
      • Fixes an incorrectly designated area in CogStation
      • -
      • Changes the area designations to be not varedited since the code didn't like that anymore
      • -
      • The cargo bay conveyor belts not only work with the shuttle now but go in the right direction to boot
      • -
      • Slight visual adjustments to cargo in light of this
      • -
      • The arcade's got RAD carpet now
      • -
      • Fixes the conveyor belt issues in Delta Station's cargo wing
      • -
      • Removes some of the dirt around the affected area (presumably they would have cleaned it up while working on it)
      • -
      • Adds a floor light to fix the "dark spot" cargo had
      • -
      • Adds a new "Computer Core" area designation for CogStation
      • -
      • Fixes some missing area strings
      • -
      • Replaces some firelocks with directional ones as to ensure desks/counters can still be accessed
      • -
      • The "Skelter ruin" now has stechkins as opposed to M1911s
      • -
      • Skelter's decorative bullet casings replaced to factor in the change in caliber
      • -
      • Skelter now has a combat knife and fluff note
      • -
      -

      Ghommie updated:

      -
        -
      • You can access the mime / clown mask skins radial menu once again.
      • -
      • Dice bags no longer act like cardboard boxes.
      • -
      • Abductors should be no longer mute.
      • -
      • Item action buttons should now properly show the item current overlays, most times.
      • -
      • The blackbox should now go into your hand slot when pried out, rather than tumbling on the ground everytime.
      • -
      • The Quick Equip hotkey is now usable by all living mobs (so long they have hands and equipment slots)
      • -
      -

      Ghommie, porting PRs by MMMiracles and pireamaineach, credits to BlueWildrose too. updated:

      -
        -
      • You can now draw on plasmaman helmets with a crayon to turn their frown upside-down.
      • -
      • Plasmaman helmets no longer hide your identity when worn by themselves.
      • -
      • Plasmaman helmets now have welding visors, which can't stack with their torches in the helmet and are visible.
      • -
      -

      Hatterhat updated:

      -
        -
      • Energy sabre reskin for the energy sword - access via alt-click.
      • -
      • Alt-click reskins are fixed.
      • -
      • Defibrillators and their many, many overlays were moved to another .dmi.
      • -
      • You can now change the color of an energy sword via multitool. Not deswords. Yet.
      • -
      • The Syndicate appear to be issuing new revolver variants.
      • -
      • Basic sticky technology is now a roundstart tech. Advanced sticky technology is BEPIS-locked, though. Theoretically.
      • -
      • Non-smithed katanas (including the temporal katana) can now fit in the twin sheath.
      • -
      • Cotton and durathread processing by hand now acts like grass. Stand on a pile of cotton (or durathread) and use a single bundle from it.
      • -
      • Utility uniforms now comply with the "nonproper equipment names" thing.
      • -
      • The CapDrobe now allows the captain to get his own clothes for free. Probably.
      • -
      • All captains' clothes now offer 15 woundarmor, up from the 5. Because apparently only the suit and tie and its suitskirt subtype have this wound armor, which is dumb.
      • -
      • The nature interaction shuttle with the monkeys now has tiny fans on the airlocks in, because that's apparently a feature that was missing.
      • -
      • More bags have been added to department vendors.
      • -
      • Every roundstart species (and also ash walkers) now has flesh and bone that can be wounded.
      • -
      • Recipes for sutures, regen mesh, and sterilized gauze have been adjusted to be easier, mostly.
      • -
      • Sterilized gauze is better at absorbing blood and being a splint.
      • -
      • Energy sabres now have an off inhand.
      • -
      • The bone gauntlets should be slightly less murderously punchy on the fast punches mode.
      • -
      • RPEDs now drop their lowest part tier first when quick-emptied (used inhand).
      • -
      • Improvised gauzes can now be crafted in stacks up to 10, like their maximum stacksize implies they should be capable of doing.
      • -
      • Pouring sterilizine on gauze now takes the proper 5u per sterilized gauze instead of 10u.
      • -
      • Cryogenics now screams on common again when your fuckbuddy heads out.
      • -
      • Survival daggers! A slightly more expensive survival knife that comes with a brighter flashlight. On the blade.
      • -
      • Luxury pod capsules look different from normal capsules.
      • -
      • The wastes of Lavaland and the icy caverns of Snow Taxi rumble in unison.
      • -
      • Exosuits sold on the Supply shuttle no longer leave wreckages.
      • -
      • Apparently, shrink rays were buyable again, despite a PR having been made a while ago specifically for removing shrink rays. They're gone again.
      • -
      • Changeling bone gauntlets! They punch the shit out of people really good.
      • -
      • Guerilla gloves and gorilla gloves inherit the strip modifiers of their predecessors, because apparently they had those.
      • -
      • Pugilists now always hit the targeted limb and never miss.
      • -
      • The dock-silver standard set by Box and Meta has been enforced across maps in rotation (Delta, Pubby, Lambda).
      • -
      • The Box whiteship now has its missing tiny fan back.
      • -
      • The survival dagger light on the sprite now actually turns on and off.
      • -
      • The survival dagger in the glaive kit that can also be bought by itself is now better at butchering things.
      • -
      -

      HeroWithYay updated:

      -
        -
      • Changed description of Necrotizing Fasciitis symptom.
      • -
      • Wormhole Projector and Gravity Gun now require anomaly cores to function instead of firing pins.
      • -
      -

      KeRSedChaplain updated:

      -
        -
      • Resprited the brass claw
      • -
      -

      LetterN updated:

      -
        -
      • 2 more ways to get up from z1
      • -
      • tweaked the z2 garden to be less blank
      • -
      • fixed telecomms pda log
      • -
      • Coin & Holochip support for slot machine
      • -
      • Stickybans are now saved in the DB too
      • -
      • Immersive ™ audio reverbs. (also adds multiz audio)
      • -
      • Semi-hardsync from TG
      • -
      • Updates rust-g
      • -
      • Uses git CI instead of travis/appveyor now
      • -
      • Updates git and build tests.
      • -
      • minimap text
      • -
      • ports cinematic upgrades
      • -
      -

      Linzolle updated:

      -
        -
      • entertainment monitors no longer invisible
      • -
      • entertainment monitors now light up and display text when motion is detected in thunderdome
      • -
      • lizard snouts are no longer *slightly* lighter than they are supposed to be.
      • -
      -

      MrJWhit updated:

      -
        -
      • Expanded space hermit base
      • -
      • Replaced engineering fuel tank with a large fuel tank
      • -
      • Changed access to sec suit storage from armory access in every map to other security access
      • -
      • Adds a space loop to every map in toxins
      • -
      • -
      • Added the ability for cargo to buy a large welding tank
      • -
      • Tweaked large tank reagent sprites to /tg/'s
      • -
      • Gives metastation toxins storage a scrubber and a vent
      • -
      • Updates suit storage info on Tip Of the Round.
      • -
      • Increased christmas event from 22th to 27th to 10th to 27th
      • -
      • Removes an opposum from the wall
      • -
      • Donut boxes show what's inside of them now
      • -
      • Updated meat icons
      • -
      • Canceling events gives more time to stop from 10 to 30
      • -
      • Fixes two chairs on one table
      • -
      • Removed the wires connecting the AI from the rest of the station on cogstation.
      • -
      • Fixes experimenter on cogstation.
      • -
      • Less pipes in the overall area in toxins on cogstation
      • -
      • Small fixes on security on boxstation
      • -
      • Updated jukebox sprite.
      • -
      • Fixes maint area in boxstation
      • -
      • Christmas starts on the 18th now
      • -
      • Adds a goose bar sign
      • -
      • Effects can no longer trigger landmines
      • -
      • Removes the screen flashing on climax.
      • -
      • Makes gas sensors fireproof.
      • -
      • A small bucket of random fixes,
      • -
      • Minor fixes to kilo
      • -
      • Porting garbage collection tweak from /tg/
      • -
      • Updates our dark gygax sprites to /tg/'s
      • -
      • Bugfix of a morph becoming an AI eye
      • -
      • Mining station oxygen locker on the cycling airlock starts out wrenched.
      • -
      • Nerf combat knife damage
      • -
      • Code improvement on ventcrawling
      • -
      -

      NT Cleaning Crews On Break updated:

      -
        -
      • Most kinds of dirt, grime, and debris are now persistent. Get to work, jannies.
      • -
      • Dirt can now be removed by tile replacements. Other cleanable decals can't, though.
      • -
      -

      Putnam3145 updated:

      -
        -
      • Replaces majority judgement with usual judgement.
      • -
      • Toilet loot spawners don't lag the server on server start with forced hard dels.
      • -
      • vore prefs save now
      • -
      • gear harness no longer magically covers up the body mechanically despite covering up nothing visually
      • -
      • Regen coma now puts into a coma even from crit or while unconscious.
      • -
      • Regen coma now properly weakens while asleep.
      • -
      • Multi-surgery unit test no longer fails at random.
      • -
      • Dwarf speech is no longer absolutely paranoid about word replacement.
      • -
      • Spontaneous brain trauma now requires minimum 5 players
      • -
      • Grab bag works as advertised.
      • -
      • Xeno threat in dynamic tripled.
      • -
      • Vote system #defines are now strings
      • -
      • Stat panel UI for ranked choice votes
      • -
      • A fallback for dynamic antag rolling that allows for it to just try between traitor, blood brothers, heretics, changeling, bloodsucker and devil until there are enough roundstart antags. This can also happen randomly anyway. Blood brothers and devil are disabled for now, but the code is there to enable them.
      • -
      • A new storyteller, "Grab Bag", that forces the above round type.
      • -
      • atmos subsystem no longer dies if there's too many gases
      • -
      • Emotes can properly be filtered for in TGUI.
      • -
      • Holofirelocks work now.
      • -
      • adminhelping no longer removes entire admin tab
      • -
      • end of round no longer removes entire admin tab
      • -
      • Fixed a runtime in every healing nanite program.
      • -
      • removed a unit test causing master to fail
      • -
      • Planetary atmos no longer does superconduction.
      • -
      • Dynamic vote no longer shows the none-storyteller.
      • -
      • You can now exit polycircuit input
      • -
      • Polycircuits now check for range
      • -
      • gear harness alt-click is now sane
      • -
      • rolldown() and toggle_jumpsuit_adjust() now no longer mix behavior-that-should-be-overridden and behavior-that-shouldn't-be-overridden in ways that make no sense.
      • -
      • Gear harness now covers nothing.
      • -
      • Chemical stuff now displays fermichem stuff properly
      • -
      • Rad collectors now get 1.25x as much energy from radiation
      • -
      • Rad collectors now put out 1.25x as much stored energy per tick
      • -
      • Above two rad collector changes give a total 56.25% power output increase
      • -
      • Zeolites now only generate 1/5 the heat when reacting and don't require a catalyst.
      • -
      -

      Ryll/Shaps updated:

      -
        -
      • Fixed an issue with player logs becoming confused when someone triggers multiple events within one second (like being attacked by two people at the same time) that would cause holes in the logs
      • -
      -

      SandPoot updated:

      -
        -
      • You can attack a pile of money on the floor with your id to put it all in quickly.
      • -
      • Changes the limb grower a lot.
      • -
      • "Limb" costs on limbgrower are actually displayed like it was meant to all along.
      • -
      • Swaps the gift static blacklist with a global list one.
      • -
      -

      SiliconMain updated:

      -
        -
      • Engi department has gas masks in loadout
      • -
      • hololocks (which haven't worked for god knows how long) commented out until auxmos is merged
      • -
      -

      Sonic121x updated:

      -
        -
      • alarm ert hardsuit sprite for naga and canine
      • -
      • adjust the naga ert hardsuit to cover the hand
      • -
      • cydonia hardsuit helmet
      • -
      • digi sprite uniform
      • -
      • digi leg suit
      • -
      -

      SpaceManiac updated:

      -
        -
      • Fixed the maphook
      • -
      -

      Thalpy updated:

      -
        -
      • fixes some bugs in jacqs code from edits to the codebase
      • -
      -

      The Grinch updated:

      -
        -
      • infinite presents from hilbert hotel
      • -
      -

      TheObserver updated:

      -
        -
      • Re-adds the rifle stock, and sets the improv shotgun to be as it was.
      • -
      • The maintenance rifle has been shelved - for now. Watch this space.
      • -
      -

      TheObserver-sys updated:

      -
        -
      • Drake? Where's the dead fairygrass sprite?
      • -
      -

      TheSpaghetti updated:

      -
        -
      • no more tumor bread double punctuation
      • -
      -

      Trilbyspaceclone updated:

      -
        -
      • Zeolites now use gold rather then uranium for catalyst
      • -
      • Zeolites are not as hard to make ph wise
      • -
      • Making Zeolites heats up the beaker less allowing for better control
      • -
      • ASP 9mm and M1911 can now have suppressers added
      • -
      • Brass welders are 50% faster at refueling
      • -
      • redoes self fueling welders in the code to be less speggie
      • -
      • the corporate unifoms can now be gotton in the clothing mate vender
      • -
      -

      TripleShades updated:

      -
        -
      • Firelock to Surgery Bay drapes change: Swapped Nanomed and Fire Alarm button locations in both Surgery Bays change: Removes the double mirror in both Surgery Bays to be a singular mirror change: Moved an intercom to not be doorstuck below Paramedical Office remove: One Surgery Observation Fire Alarm button
      • -
      • New Paramedic Office next to Genetics where the old Genetics Reception used to be change: Surgery, Surgery Observation, and Recovery Hall layout revamped drastically change: Maints below Surgery lowered by one tile to recover lost tile space from Surgery expansion
      • -
      -

      Tupinambis updated:

      -
        -
      • Arachnids (spider people) with limited night vision, flash vulnerability, and webbing.
      • -
      -

      Vynzill updated:

      -
        -
      • new gateway mission mapadd: jungleresort map
      • -
      • fixes high luminosity eyes
      • -
      -

      Xantholne updated:

      -
        -
      • Fixed new birds changing back to basic parrot when sitting
      • -
      • New parrots from the RP server, can be found in Bird Crate in Cargo
      • -
      • You can now tuck disky into bed
      • -
      • You can now make beds by applying a bed sheet to them
      • -
      • You can now tuck in pai cards into bed
      • -
      • Added bed tucking element, can be added to any held object to allow tucking into beds
      • -
      • Twin Sword Sheaths have an equipment icon and icon when worn now and make a sound when sheathed/unsheathed
      • -
      -

      Yakumo Chen updated:

      -
        -
      • Slime Jelly is no longer obtainable from slimepeople. Go ask Xenobio
      • -
      -

      YakumoChen updated:

      -
        -
      • To lower production costs, Buzz Fuzz is now manufactured with Real™️ Synthetic honey.
      • -
      -

      Zandario updated:

      -
        -
      • Added some framework for future species expansions, including clothing refitting.
      • -
      • Made majority of the relevant Species IDs and Categories pre-defined, also for easier expansion and use.
      • -
      • lum slime sprites work again
      • -
      • Slapped the Species Defines where relevant
      • -
      -

      corin9090 updated:

      -
        -
      • The chaplain's prayer beads can now be worn on your belt slot
      • -
      -

      kappa-sama updated:

      -
        -
      • super saiyan
      • -
      • ishotgun crafting recipe no longer requires plasteel and is slightly more convenient
      • -
      • ishotgun does 45 damage now instead of 40.5
      • -
      • s
      • -
      • A new spell for the wizard and his martial apprentices, the Inner Mantra technique. It makes you punch people really good and makes you durable, but drains your energy while it's active.
      • -
      • A self-buffing spell for valiant bubblegum slayers that is ultimately useless on lavaland and probably overpowered for miner antagonists. Go figure. At least all it does is let you punch hard while draining your health every second.
      • -
      • bubblegum now drops a book that makes you into an abusive father instead of a shotgun that plays like pre-nerf shotguns
      • -
      • a powerup and powerdown sound effect
      • -
      • two icons for two buff spells
      • -
      -

      keronshb updated:

      -
        -
      • Allows Energy Bola to be caught
      • -
      • This also allows them to be dropped/picked up.
      • -
      • Adds a reduced stamina buffer for SCarp users
      • -
      • Gives SCarp users a better parry
      • -
      • Adds the SCarp bundle which includes a bo staff
      • -
      • Lets Carp costumes carry Bo Staffs
      • -
      • reduces the stamina damage of scarp slightly
      • -
      • reduced the blockchance of the bo staff
      • -
      • Adds more room to northwest maint
      • -
      • Adds a bridge between Atmos and the Turbine.
      • -
      • Blob Resource Tower to 2 points per instead of 1 point per.
      • -
      • Blob Factory Towers can be placed 5 tiles apart instead of 7.
      • -
      • Fixes Blobbernaut Factories consuming Factories if no naut is chosen.
      • -
      • Fixes Reflective Blobs
      • -
      • Re-adds the Clown Car to the clown uplink
      • -
      • 15 >16 TC cost
      • -
      • bonks on external airlocks
      • -
      • Fixes the parry data for scarp
      • -
      -

      kittycat2002 updated:

      -
        -
      • set the name of /datum/reagent/consumable/ethanol/species_drink to Species Drink
      • -
      -

      kiwedespars updated:

      -
        -
      • balanced bone gauntlets.
      • -
      • the robust dildo weapon now has sound.
      • -
      -

      necromanceranne updated:

      -
        -
      • Fixes various sprites for bokken, as well as being unable to craft certain parts and duplicate entries.
      • -
      • Bokken now come in two lengths; full and wakizashi, and two varieties: wood and ironwood. They have different stats for all four.
      • -
      • Bokken require menu crafting and part construction, as well as more complicated materials.
      • -
      • Bokken (long and short) require wood, cloth and leather to craft with a hatchet and screwdriver.
      • -
      • Ironwood bokken (long and short) require ironcap logs, cloth and leather to craft with a hatchet, screwdriver and welder.
      • -
      • Twin sheathes can only fit a pair of blades (longsword + shortsword) or they can fit two shortswords.
      • -
      • Fixed a twin sheath runtime.
      • -
      • A lot of bokken related sprites received an overhaul. Added overlay sprites for weapons sheathed in the twin sheathes.
      • -
      • The extradimensional blade received improved sprites for inhands/back sprites.
      • -
      • You can now make all the variants of the bokken.
      • -
      • Removes a duplicate sprite.
      • -
      • Renames all instances of 'ironwood' to 'steelwood'.
      • -
      • Adds new roboticist labcoat sprites!
      • -
      -

      qwertyquerty updated:

      -
        -
      • Flash the screen on climax
      • -
      -

      raspy-on-osu updated:

      -
        -
      • salicylic acid
      • -
      • space heater heating range and power
      • -
      • windoor open length
      • -
      -

      shellspeed1 updated:

      -
        -
      • Wings from Cit RP have been ported over
      • -
      • Moth wings from cit have been ported over
      • -
      • Cleaned up some pixels on existing moth wings.
      • -
      • Organized the lists for wings by if they are for moths or not and than by alphabetical.
      • -
      • Lings now have infinite space for DNA.
      • -
      • All xenomorph types have been added as corpses for mapping purposes
      • -
      • The dead xenomorphs in the lavaland xenomorph hive now have more variety.
      • -
      • Floor bots are now buildable with all toolboxes.
      • -
      • Xenomorph hybrids can now select wings ~~add: Xenomorph hybrids can now speak xenomorph~~
      • -
      • Xenomorph tongues are available for customization.
      • -
      • Mining borgs can claim points again
      • -
      • Construction bags have been added, use them to carry all sorts of construction bits.
      • -
      • A recipe has been added to cloth stacks to make material and construction bags.
      • -
      • Material bags and construction bags are now available in engineering lockers.
      • -
      • Adds the disposable sentry gun from tg for 11tc each.
      • -
      • The exofab can now print prosthetic limbs
      • -
      • The exofab was missing access to multiple cybernetic organs. This has now been rectified.
      • -
      • A new recipe for a spicy has been given to us by a strange business man.
      • -
      • The bluespace navigation gigabeacon design has been added to shuttle research for those wanting to take their ships around space more.
      • -
      • Xenomorph powers now list plasma cost in their description.
      • -
      -

      silicons updated:

      -
        -
      • nanite resistances tweaked
      • -
      • new nanite programs added for locking the user out from being modified by consoles or antivirals.
      • -
      • anomalies no longer spawn in walls
      • -
      • Twitch Plays: Clown Car
      • -
      • pugilists can now parry
      • -
      • c4 can no longer gib mobs
      • -
      • medium screens are better now
      • -
      • text formatting now uses one character instead of two around the text to emphasize.
      • -
      • colormates
      • -
      • shoving yourself up now costs 50% more
      • -
      • dullahans enabled
      • -
      • tailed individuals can now target groin to intertwine tails on grab intent.
      • -
      • Clowns now have unpredictable effects on supermatter crystals when dusting from contact.
      • -
      • anyone new to the server is lucky enough to have their sprint default to toggle instead of hold
      • -
      • stamina crit is only removed when at or under 100 stamina, rather than 140. stamina crit threshold is still at 140.
      • -
      • luxury shuttle no longer has noteleport
      • -
      • now only poly gets a headset on spawn, not all birds.
      • -
      • the warp implant now actually warps you back 10 seconds. leaves a trail, though. now unlimited us.
      • -
      • things in DEATHCOMA do not deathgasp on death
      • -
      • Meth and changeling adrenals no longer ignore all slowdowns, rather damage slowdowns.
      • -
      • you can now be an angel using a magic mirror again
      • -
      • command headsets are 120% instead of 160%
      • -
      • no more emote italics
      • -
      • players can now respawn/return to lobby as a ghost after a 15 minute (default) delay and rejoin on another character with some/many restrictions
      • -
      • cryo now preserves everything
      • -
      • Magrifle ammo no longer glows.
      • -
      • temperature slowdown divisor nerfed to 35 from 20.
      • -
      • dna melt drops all items being destroying you
      • -
      • keybinds generate anti-collision bindings where necessary automatically now
      • -
      • changeling combat mutations rebalanced. most of them take chemicals to upkeep now.
      • -
      • set-pose has been added
      • -
      • temporary flavor text renamed to set pose, fully visible in examine
      • -
      • ninja gloves no longer hardstun
      • -
      • ninja gloves now cost half as much to use to compensate
      • -
      • simple mobs are now immune to radioactive contamination
      • -
      -

      timothyteakettle updated:

      -
        -
      • time for memory loss message to show up when being revived is now correctly 300 seconds, instead of 30
      • -
      • the load away mission verb won't crash the server now
      • -
      • roundstart slimes can turn into puddles now
      • -
      • all gas masks (but welding + glass) can be alt clicked to show/hide identity
      • -
      • autosurgeons from travelling trader rewards now only have one use
      • -
      • fixes held items proccing crossed when passing someone
      • -
      • you can now get a family heirlooms based off your species instead of job
      • -
      • changeling stings retract upon turning into a slime puddle
      • -
      • you cannot transform into a slime puddle with a no drop item in your hands
      • -
      • slime puddles are now transparent and their colour looks more natural in comparison to the user
      • -
      • slime puddles are now even slower
      • -
      • slime puddles now get no protection from worn clothing
      • -
      • removes two debug messages left in from my prior eye customization pr
      • -
      • adds unlockable loadout items, corresponding category in loadouts, etc
      • -
      • added in-game age verification as an alternative to access requests
      • -
      • disabling adminhelp noises no longer disables looc
      • -
      • apids render now
      • -
      • you can now only entwine tails with people who have a tail
      • -
      • custom eyes and tongues now properly carry across cloning
      • -
      • re-adds the holoform verb for people who want to use it over going through the char list
      • -
      • eye sprites should look normal once more
      • -
      • licking people washes pie off their face
      • -
      • you can now pick your eye sprites from customization
      • -
      • looking at loadout equips loadout items on your preview image instead of job items
      • -
      • custom holoforms are now accessible through an action instead of through verbs
      • -
      • AI holoforms can now emote
      • -
      • cloning now correctly copies your blood colour, body sprite type and eye type
      • -
      • species with NOTRANSSTING cannot have envy's knife used on them
      • -
      • avian/digitigrade legs have been added for slimes
      • -
      • you can teleport bread
      • -
      • slime puddles are no longer layered down one layer
      • -
      • you cannot tackle with two paralysed arms
      • -
      • tackling with a single paralysed arm lowers your tackle roll by 2
      • -
      • circuits get pin data proc is sanitized when text is returned as data
      • -
      • loadout now has save slot support and colour choosing/saving for polychromic items
      • -
      • polychromic maid outfit
      • -
      • you can rebind communication hotkeys and they're the default now
      • -
      • you can now customize your size from 90% to 130%, going below 100% makes you have 10 less max health
      • -
      • *squeak
      • -
      • anthromorphic synth species
      • -
      • improvements to the automatic age gate
      • -
      • antag items are now of critical importance and wont fail to be placed on the character
      • -
      • a tonne of fixes to colourisation of parts, too many to name, including some sprite fixes
      • -
      • things now have their own individual primary/(secondary)/(tertiary) colours as required, and these can be modified by you
      • -
      -

      uomo91 updated:

      -
        -
      • Fixed "Show All" tab in player panel logs being broken.
      • -
      • Whispers, OOC, and various other things display differently in logs, visually distinguishing them from say logs.
      • -
      • Player panel logs will now show all logs chronologically, so you'll see commingled say and attack logs if you're on the "Show All" tab, etc...
      • -
      -

      yorii updated:

      -
        -
      • fixed botany rounding error that caused grass and other plants to misbehave
      • -
      -

      zeroisthebiggay updated:

      -
        -
      • legion now drops chests
      • -
      • Traitor assistants can now purchase the patented POGBox! Put TC into it for even higher damage!
      • -
      • MEGAFAUNA DROPS ARE LAVAPROOF
      • -
      • cool codex cicatrix inhands
      • -
      • gravitokinetic stands from tg
      • -
      • buffs stands overall
      • -
      • protector stands no longer become tposing invisible apes sometimes
      • -
      • jacqueline spawns on boxstation
      • -
      • secsheath for your cool stunsword at your local security vendor. you gotta hack it first though.
      • -
      • fuck the r*d cr*ss
      • -
      • The legion megafauna has been reworked. The fight should now be both slightly harder and faster.
      • -
      • You can no longer cheese the colossus by being a sand golem and simply being immune.
      • -
    GoonStation 13 Development Team From 4edba9fb0373079314a224e93cf2992a15ad67db Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 26 Mar 2021 02:05:08 +0000 Subject: [PATCH 12/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index bbf1a17862..bb9dc98068 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -883,12 +883,6 @@
    • you can now shove yourself up in any intent, not just help.
    - -

    22 January 2021

    -

    Arturlang updated:

    -
      -
    • Adds a way to give items to people, you can combat mode rightclick to offer it to one person, right click on people without mode and click the give verb, or use the hotkey CTRL G to offer it to everyone around you
    • -
    GoonStation 13 Development Team From 03c75ce48a20273830cf376c0967d81fbd589d45 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 29 Mar 2021 00:26:42 +0000 Subject: [PATCH 13/84] Automatic changelog compile [ci skip] --- html/changelog.html | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index bb9dc98068..eb22377e01 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -863,26 +863,6 @@
  • blobs can use the 'me' verb
  • adminhelps and pms only sanitize once instead of twice
  • - -

    25 January 2021

    -

    MrJWhit updated:

    -
      -
    • Alien radio code
    • -
    • Microwave can now be cleaned by a damp rag as well as soap.
    • -
    • Removes some unused code, and improves some other code.
    • -
    • The AI has a verb to look up and down z-levels
    • -
    • Making a monkey into a human doesn't unanchor random things on the tile
    • -
    • Makes a few slight improvements to drinking code
    • -
    • Makes encryption keys be put in the hands of the user when able instead of being dropped on the floor when removed from headsets
    • -
    -

    raspy-on-osu updated:

    -
      -
    • ventcrawling
    • -
    -

    silicons updated:

    -
      -
    • you can now shove yourself up in any intent, not just help.
    • -
    GoonStation 13 Development Team From e58ad434780bd353d8f221a4179e8ca2f67f01e7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 31 Mar 2021 00:20:53 +0000 Subject: [PATCH 14/84] Automatic changelog compile [ci skip] --- html/changelog.html | 53 --------------------------------------------- 1 file changed, 53 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index eb22377e01..4b2bd626cd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -810,59 +810,6 @@
  • colormates can now paint some mobs.
  • 1 dev explosions shouldn't delete brains anymore
  • - -

    27 January 2021

    -

    ArcaneMusic, ported by Hatterhat updated:

    -
      -
    • Strike a hydroponics tray with a fully-charged floral somatoray to lock in a mutation.
    • -
    • Floral somatorays now have the ability to force a mutation in a plant. This should drain the cell in a single shot, but we'll see.
    • -
    • Somatorays now take uranium to craft instead of radium.
    • -
    -

    Arturlang updated:

    -
      -
    • Actually adds a right click give option
    • -
    • Revenants can now clickdrag to throw stuff at people, with some items doing various things at the same time.
    • -
    -

    DeltaFire15 updated:

    -
      -
    • The woundmending rite no longer causes runtimes.
    • -
    • Ratvarian borgs can now use their tier-0 spells.
    • -
    • Ratvarian borgs can always use their assigned spells, if there is enough power.
    • -
    • The heretic antag panel now shows their sacrifices & current sacrifice targets.
    • -
    • The heretic roundend report now shows their sacrifices and nonsacrificed targets.
    • -
    • Living hearts can no longer select the same target as another living heart, removing a certain problem.
    • -
    -

    Hatterhat updated:

    -
      -
    • Department budget cards have been readded. TO THE CODE. NOT LOCKERS.
    • -
    • Also budget cards now look more like every other ID - see tgstation#55001.
    • -
    • One of the contractor tablet's payouts has been raised from a small payout to a medium payout.
    • -
    • The free golem ship's GPSes no longer start on. They were never meant to, but they did.
    • -
    • Headsets can't be found on most legion corpses now.
    • -
    • The flash on the assistant corpse is gone, too.
    • -
    -

    MrJWhit updated:

    -
      -
    • Remaps some air alarms for sanity.
    • -
    -

    SandPoot updated:

    -
      -
    • The drop circuit can no longer drop things that are not inside it.
    • -
    -

    raspy-on-osu updated:

    -
      -
    • bespoke ventcrawling element not detaching due to malformed call
    • -
    -

    shellspeed1 updated:

    -
      -
    • Floorbots had had a software update, preventing them from dogpiling on their target as easily as they did before.
    • -
    • Floorbots will now play a small chime when stacked on top of each other to indicate that they're moving apart.
    • -
    -

    timothyteakettle updated:

    -
      -
    • blobs can use the 'me' verb
    • -
    • adminhelps and pms only sanitize once instead of twice
    • -
    GoonStation 13 Development Team From f2208f99648b8bf3d3db98adb3bc7e0bffbbc8ad Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 1 Apr 2021 00:26:52 +0000 Subject: [PATCH 15/84] Automatic changelog compile [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 4b2bd626cd..46d9b16786 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -803,13 +803,6 @@
  • cowbell necklace happy 2021
  • shibari ropes & torn pantyhose
  • - -

    28 January 2021

    -

    silicons updated:

    -
      -
    • colormates can now paint some mobs.
    • -
    • 1 dev explosions shouldn't delete brains anymore
    • -
    GoonStation 13 Development Team From e101e55f7ab684852ea87804d93717f10729d06b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 2 Apr 2021 00:34:59 +0000 Subject: [PATCH 16/84] Automatic changelog compile [ci skip] --- html/changelog.html | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 46d9b16786..34dfeced7a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -771,38 +771,6 @@
  • some more FUCKING hairs
  • uncodersprites the advanced extinguisher
  • - -

    29 January 2021

    -

    MrJWhit updated:

    -
      -
    • Ported the QM, Captain, CMO, and HoS cloaks from beestation.
    • -
    • Removes excess air alarms from boxstation
    • -
    -

    TripleShades updated:

    -
      -
    • fixes engineering secure storage being the wrong area because I fucked that up previously my bad
    • -
    • removes funny extra light switch under right surgery table in surgery oops
    • -
    • Added chairs to the corpse launch viewing area
    • -
    • Small garden plot for flowers for parity with other station Chapels
    • -
    • Plain Bible to glass tables in Chapel
    • -
    • Candles and Matchbox to glass tables in Chapel
    • -
    • More glass tables, with a chaplain figure and another spare bible.
    • -
    • Bookcase to Box Chapel for parity with other station Chapels
    • -
    • Minimoog to Box Chapel as substitute for a church organ
    • -
    • Holy department sign just below Chapel change: Expanded the corpse launching area to feel less congested change: Added windows to the corpse launch so you can look inside I guess? change: Moved flowers and burial garments to the corner next to the corpse launcher change: Box Chaplain's office door is moved over one change: Confessional is now connected to Chaplain's office for parity with other station Chapels change: Moved coffins over to old confessional location change: Box Chapel now has pews instead of stools change: Box Chapel Confessional is now lit instead of being nearly pitch black remove: Two coffins from Chapel
    • -
    -

    timothyteakettle updated:

    -
      -
    • the miner bedsheet will now increment its progress when you redeem points from the ORM
    • -
    • you can add custom names and descriptions to item's on the loadout now
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • roundstart aesthetic sterile masks and roundstart paper masks
    • -
    • more accessory slot items
    • -
    • cowbell necklace happy 2021
    • -
    • shibari ropes & torn pantyhose
    • -
    GoonStation 13 Development Team From b675e57c0c06b6fd2b4c55e0a1cade55d50b3882 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 3 Apr 2021 00:25:19 +0000 Subject: [PATCH 17/84] Automatic changelog compile [ci skip] --- html/changelog.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 34dfeced7a..bc507ca1c9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -760,17 +760,6 @@
    • fermichem explosion EMPs don't cover the entire station
    - -

    30 January 2021

    -

    timothyteakettle updated:

    -
      -
    • adds 'clucks', 'caws' and 'gekkers' to the speech verb list
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • some more FUCKING hairs
    • -
    • uncodersprites the advanced extinguisher
    • -
    GoonStation 13 Development Team From ecc38dff107076261cb585f01b726fe5ccb54075 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 4 Apr 2021 00:27:31 +0000 Subject: [PATCH 18/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index bc507ca1c9..1a6372d2a1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -754,12 +754,6 @@
  • pais can now be carried around piggybacking/fireman
  • Meth and Nuka Cola once again, speed you up.
  • - -

    31 January 2021

    -

    Putnam3145 updated:

    -
      -
    • fermichem explosion EMPs don't cover the entire station
    • -
    GoonStation 13 Development Team From dc9c1eb8bd95a7bd6c3e8ac43db006403c931214 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 6 Apr 2021 00:27:15 +0000 Subject: [PATCH 19/84] Automatic changelog compile [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 1a6372d2a1..f8bc95fae5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -747,13 +747,6 @@
    • The green energy sabre's sprite now respects proper handedness.
    - -

    02 February 2021

    -

    silicons updated:

    -
      -
    • pais can now be carried around piggybacking/fireman
    • -
    • Meth and Nuka Cola once again, speed you up.
    • -
    GoonStation 13 Development Team From 3e257893b1236ca83c39d8f1b88bdee22dd28aac Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 7 Apr 2021 00:26:18 +0000 Subject: [PATCH 20/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index f8bc95fae5..ef4e9c596d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -741,12 +741,6 @@
    • dwarf facial hair is no longer randomised
    - -

    03 February 2021

    -

    Hatterhat updated:

    -
      -
    • The green energy sabre's sprite now respects proper handedness.
    • -
    GoonStation 13 Development Team From a216eeaf6ae7d3e7bfe444fc37f732223b00a935 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 9 Apr 2021 00:26:10 +0000 Subject: [PATCH 21/84] Automatic changelog compile [ci skip] --- html/changelog.html | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index ef4e9c596d..d457e4d823 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -715,32 +715,6 @@
    • syndicate ablative armwraps have been added.
    - -

    05 February 2021

    -

    SmArtKar updated:

    -
      -
    • The orbit menu now has an Auto-Observe button! No more sifting through the lame observe menu to snoop in people's backpacks! Also, orbit menu now refreshes.
    • -
    • KAs are no longer getting broken when fired by a circuit
    • -
    -

    keronshb updated:

    -
      -
    • Force and damage > 15 from 18/25
    • -
    • Knockdown put down to 5 from 30
    • -
    • Armor pen down to 10 from 100.
    • -
    • Makes cell chargers, charge faster.
    • -
    -

    raspy-on-osu updated:

    -
      -
    • alien royals can no longer ventcrawl
    • -
    -

    shellspeed1 updated:

    -
      -
    • There actually needs to be people for zombies to happen now.
    • -
    -

    timothyteakettle updated:

    -
      -
    • dwarf facial hair is no longer randomised
    • -
    GoonStation 13 Development Team From 40edd39c257a33273a4b4a88b12e1cc7fe7b3905 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 11 Apr 2021 00:29:44 +0000 Subject: [PATCH 22/84] Automatic changelog compile [ci skip] --- html/changelog.html | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d457e4d823..9db74f4c8f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -683,38 +683,6 @@
    • sentient viruses can now infect synths and ipcs
    - -

    07 February 2021

    -

    Thalpy updated:

    -
      -
    • Dispenser: Adds the ability to store a small amount of reagents in the machine itself for dispensing. Reacting recipies cannot be stored. Size of storage increases with bin size.
    • -
    • Dispenser: Allows reagents to be color coded by pH
    • -
    • Dispenser: Each reagent displays it's pH on hover
    • -
    • Dispenser: Allows the user to toggle between buttons and a radial dial
    • -
    • Dispenser: When the dispencer is upgraded it can dispense 5/3/2/1 volumes based on rating refactor: Dispenser: as it was before. This does not break recorded recipes.
    • -
    • Adds a round function to some numbers so they're not huge
    • -
    • The Chem master can now get purity for all reagents when analysed
    • -
    • Synthissue fixes
    • -
    • buffers now have a strong and weak variant. Weak can be dispensed, and strong can be created. Strong buffers are 6x more effective.
    • -
    • Some buffer pH edge calculation fixes
    • -
    -

    TyrianTyrell updated:

    -
      -
    • added a signed language, that can't be used over the radio but can be used if you're mute. also added the multilingual trait.
    • -
    • hopefully added an icon for the signed language.
    • -
    • changed how some traits function slightly.
    • -
    -

    dzahlus updated:

    -
      -
    • tweaked a few sounds
    • -
    • added a new weapon sounds
    • -
    • removed old weapon sounds
    • -
    • changed some sound related code
    • -
    -

    silicons updated:

    -
      -
    • syndicate ablative armwraps have been added.
    • -
    GoonStation 13 Development Team From d04f3dd4d4f1efc107210e6b89143783e7bc345f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 13 Apr 2021 00:28:39 +0000 Subject: [PATCH 23/84] Automatic changelog compile [ci skip] --- html/changelog.html | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9db74f4c8f..fbc944ec52 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -665,24 +665,6 @@
    • the aesthetic sterile mask no longer hides faces so you can cosplay egirls and keep flavortexts
    - -

    09 February 2021

    -

    Chiirno updated:

    -
      -
    • Adds clown waddle to clown shoes. Enhanced Clown Waddle Dampeners can be engaged in-hand with ctrl+click, _but why would you?_
    • -
    -

    MrJWhit updated:

    -
      -
    • Re-adds theater disposal outlet, and makes dorms disposal able to have things sent to it on boxstation.
    • -
    -

    TyrianTyrell updated:

    -
      -
    • made default tongue able to speak signed language.
    • -
    -

    timothyteakettle updated:

    -
      -
    • sentient viruses can now infect synths and ipcs
    • -
    GoonStation 13 Development Team From 96d154a618f84719cc9515920f3f70688ee94a88 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 15 Apr 2021 00:26:22 +0000 Subject: [PATCH 24/84] Automatic changelog compile [ci skip] --- html/changelog.html | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index fbc944ec52..fa345a43b7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -632,39 +632,6 @@
    • Voice of God - sleep removed, stun staggers instead, knockdown is faster but does not do stamina damage, vomit is faster but doesn't stun
    - -

    11 February 2021

    -

    Adelphon updated:

    -
      -
    • Charismatic Suit
    • -
    • Urban Jacket
    • -
    -

    DeltaFire15 updated:

    -
      -
    • Added nanogel to the robodrobe.
    • -
    -

    Putnam3145 updated:

    -
      -
    • Config to keep unreadied players from mode voting
    • -
    -

    dzahlus updated:

    -
      -
    • fixes grenadelaunch.ogg being used where it shouldn't and makes mech weapons use correct sound
    • -
    -

    keronshb updated:

    -
      -
    • 10 > 30 second for Warp Implant cooldown
    • -
    • Comments out power sink objective.
    • -
    -

    timothyteakettle updated:

    -
      -
    • persistent blood should stop being invisible and alt clicking it shouldn't return the entire spritesheet
    • -
    • pickpocketing is now logged using log_combat
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • the aesthetic sterile mask no longer hides faces so you can cosplay egirls and keep flavortexts
    • -
    GoonStation 13 Development Team From b5d720d3308884a5906b52065b8de45e7ad77c6f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 16 Apr 2021 00:25:13 +0000 Subject: [PATCH 25/84] Automatic changelog compile [ci skip] --- html/changelog.html | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index fa345a43b7..9ff0a3e422 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -617,21 +617,6 @@
    • migration error to version 39+ of savefiles is now logged instead of messaging all online admins in the chat
    - -

    12 February 2021

    -

    Hatterhat updated:

    -
      -
    • The ATVs on SnowCabin.dmm have been replaced with snowmobiles.
    • -
    -

    MrJWhit updated:

    -
      -
    • Random deltastation fixes.
    • -
    • Gives boxstation vault door actual vault door access
    • -
    -

    silicons updated:

    -
      -
    • Voice of God - sleep removed, stun staggers instead, knockdown is faster but does not do stamina damage, vomit is faster but doesn't stun
    • -
    GoonStation 13 Development Team From e86accccec939b5198b8284c6447d1c4d7e9f784 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 17 Apr 2021 00:25:22 +0000 Subject: [PATCH 26/84] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9ff0a3e422..6cbcc26219 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -607,16 +607,6 @@
    • added a define for multilingual granted languages, and changed the multilingual trait to use it.
    - -

    13 February 2021

    -

    Hatterhat updated:

    -
      -
    • Energy bolas now take 2.5 seconds to remove and dissipate on removal.
    • -
    -

    timothyteakettle updated:

    -
      -
    • migration error to version 39+ of savefiles is now logged instead of messaging all online admins in the chat
    • -
    GoonStation 13 Development Team From 230231a34bf08d192befec99dcddf91177038618 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 18 Apr 2021 00:26:47 +0000 Subject: [PATCH 27/84] Automatic changelog compile [ci skip] --- html/changelog.html | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 6cbcc26219..9fadfaf5a5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -589,24 +589,6 @@
  • people on the ground hit less hard in unarmed combat. rng miss remove from punches.
  • chat highlighting no longer drops half your entered words.
  • - -

    14 February 2021

    -

    DeltaFire15 updated:

    -
      -
    • The antag panel now correctly shows the names of cultist / clockcult datum subtypes.
    • -
    • Adding clock cultists via the admin panel now works correctly.
    • -
    • Xeno larvae should now be able to ventcrawl again.
    • -
    -

    Hatterhat updated:

    -
      -
    • Repairing sensors on jumpsuits now requires a fully-intact jumpsuit. Find some cloth.
    • -
    • Durathread armor kits now require you to have a fully-repaired jumpsuit, first, with no attachments.
    • -
    • Durathread armor kits now no longer weave the entirety of the jumpsuit armor universe into having armor.
    • -
    -

    TyrianTyrell updated:

    -
      -
    • added a define for multilingual granted languages, and changed the multilingual trait to use it.
    • -
    GoonStation 13 Development Team From 9df4eebbedd9ed5ed573c1586808a363921d67e2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 19 Apr 2021 00:26:20 +0000 Subject: [PATCH 28/84] Automatic changelog compile [ci skip] --- html/changelog.html | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9fadfaf5a5..fb0a74d395 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -561,34 +561,6 @@
    • sprint removal entry added, UI will revert to old UI while this is active.
    - -

    15 February 2021

    -

    Adelphon updated:

    -
      -
    • polychromatic shoes
    • -
    • polychromatic windbreaker
    • -
    • polychromatic canvas cloak
    • -
    • digitigrade charismatic suit texture
    • -
    -

    DeltaFire15 updated:

    -
      -
    • Kneecapped pugilist parries somewhat.
    • -
    • Slightly nerfed default unarmed parries.
    • -
    • Slightly nerfed traitor armwrap parries.
    • -
    • Pugilist parries now cannot perfectly defend against projectiles, as they were supposed to.
    • -
    • Some parrying numbers that one would think were in seconds didn't have the SECONDS. I added those.
    • -
    • Clock cultists now yell alot less when invoking scripture.
    • -
    -

    dzahlus updated:

    -
      -
    • Added new emote
    • -
    • added a new emote sound
    • -
    -

    silicons updated:

    -
      -
    • people on the ground hit less hard in unarmed combat. rng miss remove from punches.
    • -
    • chat highlighting no longer drops half your entered words.
    • -
    GoonStation 13 Development Team From 1f68d32295d3d09aff65abb2aa1e4f30e4879ebe Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 20 Apr 2021 00:26:20 +0000 Subject: [PATCH 29/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index fb0a74d395..1889c8fa85 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -555,12 +555,6 @@
    • priviledge --> privilege
    - -

    16 February 2021

    -

    silicons updated:

    -
      -
    • sprint removal entry added, UI will revert to old UI while this is active.
    • -
    GoonStation 13 Development Team From af8f15a729e47adddd7443baa4460b426b0867d4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 22 Apr 2021 00:27:35 +0000 Subject: [PATCH 30/84] Automatic changelog compile [ci skip] --- html/changelog.html | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 1889c8fa85..528a37bc52 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -524,37 +524,6 @@
    • staring into pierced realities is now logged
    - -

    18 February 2021

    -

    BlueWildrose updated:

    -
      -
    • Admins now receive messages regarding certain holodeck actions.
    • -
    -

    Hatterhat updated:

    -
      -
    • Free Golem Ship GPSes now start as disabled. Like they were supposed to.
    • -
    -

    LetterN updated:

    -
      -
    • No more liver damage when you opt out of "hornychems"
    • -
    -

    SmArtKar updated:

    -
      -
    • Added a new TCG card game
    • -
    -

    dzahlus updated:

    -
      -
    • Removed maroon objective due to toxic gameplay behaviour
    • -
    -

    shellspeed1 updated:

    -
      -
    • floor bots place plating before tiles now.
    • -
    • gets rid of another tile duplication issue.
    • -
    -

    silicons updated:

    -
      -
    • priviledge --> privilege
    • -
    GoonStation 13 Development Team From 0b918a4a380e2445cfbe059bcb7a14d4279acdd8 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 23 Apr 2021 00:26:49 +0000 Subject: [PATCH 31/84] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 528a37bc52..b5347f5415 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -514,16 +514,6 @@
    • stops people using Message All on PDAs when their cartridge doesn't allow it
    - -

    19 February 2021

    -

    Putnam3145 updated:

    -
      -
    • Buzz Fuzz's addiction threshold is now a can and a sip as intended.
    • -
    -

    timothyteakettle updated:

    -
      -
    • staring into pierced realities is now logged
    • -
    GoonStation 13 Development Team From 88a018df29c6be643f6e7760a721722f2ec375f2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 24 Apr 2021 00:27:30 +0000 Subject: [PATCH 32/84] Automatic changelog compile [ci skip] --- html/changelog.html | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index b5347f5415..592bf02e18 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -490,30 +490,6 @@
  • the query for checking mentors now gets properly deleted
  • vampires no longer burn in the chapel if they signed up as the chaplain
  • - -

    20 February 2021

    -

    Adelphon updated:

    -
      -
    • polychromic pants
    • -
    • urban coat made polychromic
    • -
    -

    Chiirno updated:

    -
      -
    • Synthflesh now unhusks with 100u instead of requiring 101u.
    • -
    -

    SmArtKar updated:

    -
      -
    • Added some QoL changes to TCG
    • -
    • Fixed TCG cards not saving
    • -
    -

    TyrianTyrell updated:

    -
      -
    • fixed the signed language so that you can actually use it, and that it's unusable when it's meant to be.
    • -
    -

    timothyteakettle updated:

    -
      -
    • stops people using Message All on PDAs when their cartridge doesn't allow it
    • -
    GoonStation 13 Development Team From 574a843d65467e2055700474175df49270345adf Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 25 Apr 2021 00:28:05 +0000 Subject: [PATCH 33/84] Automatic changelog compile [ci skip] --- html/changelog.html | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 592bf02e18..d5ddb64bcb 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -471,25 +471,6 @@
  • Added pain emote to getting wounded
  • added a new pain emote sounds
  • - -

    21 February 2021

    -

    Hatterhat updated:

    -
      -
    • Anomaly announcements and brand intelligence now always announce instead of having some ham-fisted chance of being a command report.
    • -
    -

    IronEleven updated:

    -
      -
    • Raises Space Vine Population Requirement from 10 to 20
    • -
    -

    MrJWhit updated:

    -
      -
    • Removes an unnecessary % on the seed extractor.
    • -
    -

    timothyteakettle updated:

    -
      -
    • the query for checking mentors now gets properly deleted
    • -
    • vampires no longer burn in the chapel if they signed up as the chaplain
    • -
    GoonStation 13 Development Team From 382ac96d2f4a478ee6a47273887ad9dd7f5f631b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 26 Apr 2021 00:28:22 +0000 Subject: [PATCH 34/84] Automatic changelog compile [ci skip] --- html/changelog.html | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d5ddb64bcb..7195987603 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -439,38 +439,6 @@
    • banning panel prioritises mobs with clients now when trying to find them if they're in the game
    - -

    22 February 2021

    -

    Putnam3145 updated:

    -
      -
    • (Hexa)crocin
    • -
    • (Hexa)camphor
    • -
    • Nymphomaniac quirk
    • -
    • All climaxes and arousals are now logged, as well as genital exposure.
    • -
    -

    SandPoot updated:

    -
      -
    • Cyborg tablets and it's special app for self-management.
    • -
    • In the case of a doomsday device being created outside of an AI it will delete itself.
    • -
    • Some sprites for it have been added and the borg's hud light toggles been changed to only on-off (made by yours truly)
    • -
    • A lot of borg code was changed
    • -
    • Tools no longer use istype checks and actually check for their behavior.
    • -
    -

    Vynzill updated:

    -
      -
    • cursed rice hat that's hard to find and obtain, along with a couple other hats
    • -
    • a replacement toy gun for donksoft lmg
    • -
    • gorillas to the jungle gateway, friendly, even when attacked.
    • -
    • couple mapping errors I noticed, most importantly a missing window in the chapel.
    • -
    • shotgun and donksoft lmg removed, captain coat nerfed armor values.
    • -
    • leaper healthpool from 450 to 550 hopefully making it more of a struggle, and gives it a name.
    • -
    • leaper pit is more wider. The hidden room south is now more obvious to find
    • -
    -

    dzahlus updated:

    -
      -
    • Added pain emote to getting wounded
    • -
    • added a new pain emote sounds
    • -
    GoonStation 13 Development Team From 1cf881470bb760bce137d7b816fd492645e97ad0 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 27 Apr 2021 00:25:58 +0000 Subject: [PATCH 35/84] Automatic changelog compile [ci skip] --- html/changelog.html | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index e3b9b14a1f..44ed1c8e5d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,24 +50,6 @@ -->
    -

    24 March 2021

    -

    Hatterhat updated:

    -
      -
    • The NOGUNS trait now takes precedence over the triggerguard checks.
    • -
    -

    ItzGabby updated:

    -
      -
    • Fluff Items with polychromic support
    • -
    • A new vendor called Bark box
    • -
    • A new form of snack with it's own box
    • -
    • Two harness, one of them being lewd
    • -
    • One new collar, with a ribbon. Classy.
    • -
    • More locked forms of collars
    • -
    • Purged old balls
    • -
    • Removed the funny buffs each colored tennis ball had, down with the powergame!
    • -
    • Added polychromic fluff icons, vendor icons, suit icons, snack icons, fancy box icons, and a polychromic version of Izzy's ball.
    • -
    • Deleted old balls, Izzy's Ball, except the rainbow one since it's special and as I did not go out of my way to get permission to touch.
    • -
    • Walked into vending.dm and glared for a moment at hydroponics' grammar.
    • 26 April 2021

      Trigg, stylemistake and SandPoot updated:

        @@ -384,11 +366,8 @@
      • The radioactive microlaser now calculates the strength of its delay effect using the intensity setting it had when you initially used it on your victim, not the intensity setting it currently has. This prevents people from "cheating out" its intensity 20 effect with only a 2 second delay and a 1 second cooldown.
      • Radioactive microlasers no longer contain twice as much metal as normal health analyzers do.
      -

      LetterN updated:

      +

      necromanceranne updated:

        -
      • fixed laptops pickability
      • -
      • fixed closets being unweldable
      • -
    • Replaces the useless bullet and laser shields with new Kinetic and Ablative shields, which do as they advertise.
    • Replaces the shield implants shield with a hardlight shield that can take large amounts of brute damage, but disintegrates when shot with disablers.
    • Fixes Fake Roman Shields being able to be used as normal riot shields.
    • @@ -828,17 +807,6 @@
      • xeno cube makes hostile xenos now, and drops a sentinel instead of a drone.
      - -

      23 February 2021

      -

      keronshb updated:

      -
        -
      • Hyperblade to uplink with poplock
      • -
      • Removes combination of two Dragon Tooth Swords while keeping it for regular eutactics.
      • -
      -

      timothyteakettle updated:

      -
        -
      • banning panel prioritises mobs with clients now when trying to find them if they're in the game
      • -
    GoonStation 13 Development Team From 02b5f70c10f625aad49eacd4e850266fdf89d396 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 28 Apr 2021 00:26:45 +0000 Subject: [PATCH 36/84] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 44ed1c8e5d..fa46c13a87 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -797,16 +797,6 @@
    • Traitor / Ling objective amount should now be correct again.
    - -

    24 February 2021

    -

    SandPoot updated:

    -
      -
    • Regular crowbars no longer open powered airlocks.
    • -
    -

    silicons updated:

    -
      -
    • xeno cube makes hostile xenos now, and drops a sentinel instead of a drone.
    • -
    GoonStation 13 Development Team From dc05f23e9e450aa7f0a8b93fa5babbf1f7c76ec2 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 29 Apr 2021 00:26:16 +0000 Subject: [PATCH 37/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index fa46c13a87..9185892185 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -791,12 +791,6 @@
    • All machine-frame based tool-use actions now have state-checking callbacks.
    - -

    25 February 2021

    -

    DeltaFire15 updated:

    -
      -
    • Traitor / Ling objective amount should now be correct again.
    • -
    GoonStation 13 Development Team From dc02561b3601b1fac0a781e9895469f76f1a0c15 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 30 Apr 2021 00:13:45 +0000 Subject: [PATCH 38/84] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9185892185..f9f94b6d37 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -785,12 +785,6 @@
    • chaplain arrythmic knives can no longer be abused for infinite speed.
    - -

    26 February 2021

    -

    DeltaFire15 updated:

    -
      -
    • All machine-frame based tool-use actions now have state-checking callbacks.
    • -
    GoonStation 13 Development Team From 4c8b1f2454cfe6e8be3a44dde2c40beb115a6e9a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 1 May 2021 00:15:03 +0000 Subject: [PATCH 39/84] Automatic changelog compile [ci skip] --- html/changelog.html | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index f9f94b6d37..12186a5fae 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -753,38 +753,6 @@
    • fixes toxinlovers dying from heretic stuff that should heal them instead
    - -

    27 February 2021

    -

    Hatterhat updated:

    -
      -
    • Lingfists (trait_mauler) now deal no stam damage and lost their 15(!!!) armor penetration.
    • -
    -

    Putnam3145 updated:

    -
      -
    • Tablets now protect their contents from rads.
    • -
    -

    TheObserver-sys updated:

    -
      -
    • Chems that should have been usable are now usable, try some cryoxadone on a plant today!!!
    • -
    -

    kappa-sama updated:

    -
      -
    • cards and card binders are now small-class items
    • -
    -

    keronshb updated:

    -
      -
    • 16 > 10 unlock cost for stronger abilities
    • -
    • Made nearly all other abilities for free.
    • -
    -

    kiwedespars updated:

    -
      -
    • reverted the pr that absolutely gutted pugilism and made it worse than base unarmed, also gives it a second long stagger
    • -
    • removed the ability to parry while horizontal, because that's dumb and makes it easy to just time the parries right.
    • -
    -

    silicons updated:

    -
      -
    • chaplain arrythmic knives can no longer be abused for infinite speed.
    • -
    GoonStation 13 Development Team From 16731b2475d57831d2d38d231bd06b3f7bf008e3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 2 May 2021 00:18:09 +0000 Subject: [PATCH 40/84] Automatic changelog compile [ci skip] --- html/changelog.html | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 12186a5fae..342b1a63c9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -734,25 +734,6 @@
    • cursed rice hat right in front of the jungle gateway's entrance is now removed from this dimensional plane
    - -

    28 February 2021

    -

    Putnam3145 updated:

    -
      -
    • Polychromic windbreaker's alt-click message is now coherent
    • -
    • Toggleable suits now have an on_toggle proc to be overridden.
    • -
    -

    R3dtail updated:

    -
      -
    • doubled max belly name length and quadrupled belly description length
    • -
    -

    SandPoot updated:

    -
      -
    • Body rejuvenation surgery will loop until the patient is completely healed.
    • -
    -

    dzahlus updated:

    -
      -
    • fixes toxinlovers dying from heretic stuff that should heal them instead
    • -
    GoonStation 13 Development Team From 59a8434d0cee25fe8cbba7e88a0843a0dfefda56 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 3 May 2021 00:16:49 +0000 Subject: [PATCH 41/84] Automatic changelog compile [ci skip] --- html/changelog.html | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 342b1a63c9..ab49f1731e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -722,18 +722,6 @@
    • Changelings will actually become the person they want to be when using "human form" ability(after having used last resort).
    - -

    01 March 2021

    -

    SmArtKar updated:

    -
      -
    • Fixes decks breaking your screen
    • -
    • Fixes binders not saving cards
    • -
    • Fixes binders not saving multiple cards of the same type
    • -
    -

    Vynzill updated:

    -
      -
    • cursed rice hat right in front of the jungle gateway's entrance is now removed from this dimensional plane
    • -
    GoonStation 13 Development Team From 1fb05a12fade41aba811e888b23bcb27ec9cf38c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 4 May 2021 00:10:22 +0000 Subject: [PATCH 42/84] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index ab49f1731e..b7e25baa22 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -712,16 +712,6 @@
  • Kinetic Accelerator now properly reloads a charge to it's chamber instead of nulling the variable forever
  • Now pacifists won't be able to use Kinetic Accelerators if a non-pacifist shoots it first
  • - -

    02 March 2021

    -

    LetterN updated:

    -
      -
    • colorpainter: let's not dispense null
    • -
    -

    SandPoot updated:

    -
      -
    • Changelings will actually become the person they want to be when using "human form" ability(after having used last resort).
    • -
    GoonStation 13 Development Team From 1542785490c1620826ccfbbb1c8b951a4bfa6dae Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 5 May 2021 00:02:52 +0000 Subject: [PATCH 43/84] Automatic changelog compile [ci skip] --- html/changelog.html | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index b7e25baa22..96725ae8f8 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -681,37 +681,6 @@
    • removes bsql
    - -

    03 March 2021

    -

    MarinaGryphon updated:

    -
      -
    • The AOOC mute pref is now properly respected.
    • -
    • Muting adminhelp sounds no longer mutes AOOC.
    • -
    -

    Putnam3145 updated:

    -
      -
    • pAIs now have a policy config
    • -
    • "Supermatter surge" event, which might cause problems if the supermatter is not sufficiently cooled (i.e. the setup is messed up in some way)
    • -
    • Fusion can no longer be done in open air.
    • -
    • Valentine's day event no longer gives everyone a valentine's antag.
    • -
    -

    SandPoot updated:

    -
      -
    • Legions should now pass their type to the person they infect (if valid).
    • -
    -

    dzahlus updated:

    -
      -
    • Added new subtype to lesser ash drake balanced around player control
    • -
    • rebalanced dragon transformation to a 1 minute cooldown as well as using the new subtype of megafauna
    • -
    -

    qweq12yt updated:

    -
      -
    • fixed infectious zombies not being able to attack if host was pacifist
    • -
    • adds a way for species to have blacklisted quirks, the removal, and restoration of said quirks upon species changes
    • -
    • Now pacifists won't be able to use flamethrowers
    • -
    • Kinetic Accelerator now properly reloads a charge to it's chamber instead of nulling the variable forever
    • -
    • Now pacifists won't be able to use Kinetic Accelerators if a non-pacifist shoots it first
    • -
    GoonStation 13 Development Team From 3b1304f43293095a4f95e3285bcaec314680ef37 Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Wed, 2 Feb 2022 17:38:19 -0800 Subject: [PATCH 44/84] Weekly dynamic days --- code/controllers/configuration/entries/dynamic.dm | 4 ++++ code/modules/holiday/dynamic.dm | 10 ++++++++++ tgstation.dme | 1 + 3 files changed, 15 insertions(+) create mode 100644 code/modules/holiday/dynamic.dm diff --git a/code/controllers/configuration/entries/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm index 935164352e..98203b7d8a 100644 --- a/code/controllers/configuration/entries/dynamic.dm +++ b/code/controllers/configuration/entries/dynamic.dm @@ -94,6 +94,10 @@ config_entry_value = 10 min_val = 0 +/datum/config_entry/keyed_list/dynamic_mode_days + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_FLAG + /datum/config_entry/keyed_list/storyteller_weight key_mode = KEY_MODE_TEXT value_mode = VALUE_MODE_NUM diff --git a/code/modules/holiday/dynamic.dm b/code/modules/holiday/dynamic.dm new file mode 100644 index 0000000000..fb50ea72ca --- /dev/null +++ b/code/modules/holiday/dynamic.dm @@ -0,0 +1,10 @@ +/datum/holiday/dynamic + name = "Dynamic Day" + +/datum/holiday/dynamic/shouldCelebrate(dd, mm, yy, ww, ddd) + var/list/days = CONFIG_GET(keyed_list/dynamic_mode_days) + return ddd in days + +/datum/holiday/dynamic/celebrate() + GLOB.dynamic_forced_threat_level = rand(90, 100) + CONFIG_SET(string/force_gamemode, "dynamic") // prevents the round vote, which prevents extended diff --git a/tgstation.dme b/tgstation.dme index 1bfe4f7561..b419903683 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2252,6 +2252,7 @@ #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_spaghetti.dm" #include "code\modules\games\cas.dm" #include "code\modules\games\unum.dm" +#include "code\modules\holiday\dynamic.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\holidays.dm" #include "code\modules\holiday\halloween\bartholomew.dm" From 345c1616f29cdb1602dcc8e58c2c3fc65cc83a64 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 10 Feb 2022 18:49:24 +0200 Subject: [PATCH 45/84] Adds a way to build bodies using the limbgrower --- code/game/machinery/limbgrower.dm | 101 ++++++++++++++---- code/modules/mob/living/carbon/human/human.dm | 3 + .../research/designs/limbgrower_designs.dm | 9 ++ tgui/packages/tgui/interfaces/Limbgrower.js | 23 ++-- 4 files changed, 109 insertions(+), 27 deletions(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index dc87322b57..68270b11bf 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -52,23 +52,30 @@ /obj/machinery/limbgrower/ui_data(mob/user) var/list/data = list() - - for(var/datum/reagent/reagent_id in reagents.reagent_list) - var/list/reagent_data = list( - reagent_name = reagent_id.name, - reagent_amount = reagent_id.volume, - reagent_type = reagent_id.type - ) - data["reagents"] += list(reagent_data) - + if(reagents.reagent_list.len) + for(var/datum/reagent/reagent_id in reagents.reagent_list) + var/list/reagent_data = list( + reagent_name = reagent_id.name, + reagent_amount = reagent_id.volume, + reagent_type = reagent_id.type + ) + data["reagents"] += list(reagent_data) + else + data["reagents"] = list() data["total_reagents"] = reagents.total_volume data["max_reagents"] = reagents.maximum_volume data["busy"] = busy var/list/disk_data = list() disk_data["disk"] = dna_disk //Do i, the machine, have a disk? - disk_data["name"] = dna_disk?.fields["name"] //Name for the human saved if there is one + if(dna_disk) + if(dna_disk.fields["name"]) + disk_data["name"] = dna_disk.fields["name"] + else if(dna_disk.genetic_makeup_buffer["name"]) + disk_data["name"] = dna_disk.genetic_makeup_buffer["name"] + else + disk_data["name"] = "No name" + //Name for the human saved if there is one data["disk"] = disk_data - return data /obj/machinery/limbgrower/ui_static_data(mob/user) @@ -119,6 +126,15 @@ if (busy) to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return + if(ispath(user_item.type, /obj/item/reagent_containers/blood) && user.a_intent != INTENT_HARM) + var/obj/item/reagent_containers/blood/B = user_item + if(!B.reagents.get_reagents()) + to_chat(user, "You can't fill the [src] with a empty [B]!") + return + user.visible_message("[user] drains the [user_item] into the [src] using the blood bag port on [src].", + "You drain the [user_item] into the [src] using the blood bag port.") + B.reagents.trans_to(src, B.amount_per_transfer_from_this) + return if(default_deconstruction_screwdriver(user, "limbgrower_panelopen", "limbgrower_idleoff", user_item)) ui_close(user) @@ -180,7 +196,7 @@ for(var/reagent_id in consumed_reagents_list) consumed_reagents_list[reagent_id] *= production_coefficient if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes.") + audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) return @@ -206,17 +222,13 @@ * modified_consumed_reagents_list - the list of reagents we will consume on build, modified by the production coefficient. */ /obj/machinery/limbgrower/proc/build_item(list/modified_consumed_reagents_list) - for(var/reagent_id in modified_consumed_reagents_list) - if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - break - - reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) - + HandleReagentUsage(modified_consumed_reagents_list) var/built_typepath = being_built.build_path // If we have a bodypart, we need to initialize the limb on its own. Otherwise we can build it here. - if(ispath(built_typepath, /obj/item/bodypart)) + if(ispath(built_typepath, /mob/living/carbon/human/chestonly)) + if(!build_mob_chest(built_typepath, FALSE)) + HandleReagentUsage(modified_consumed_reagents_list, FALSE) + else if(ispath(built_typepath, /obj/item/bodypart)) build_limb(built_typepath) else if(ispath(built_typepath, /obj/item/organ/genital)) //genitals are uhh... customizable build_genital(built_typepath) @@ -227,6 +239,17 @@ flick("limbgrower_unfill", src) icon_state = "limbgrower_idleoff" +/obj/machinery/limbgrower/proc/HandleReagentUsage(modified_consumed_reagents_list, remove = TRUE) + for(var/reagent_id in modified_consumed_reagents_list) + if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) + audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + break + if(remove) + reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + else + reagents.add_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + /* * The process of putting together a limb. * This is called from after we remove the reagents, so this proc is just initializing the limb type. @@ -306,6 +329,42 @@ else new built_typepath(loc) +/obj/machinery/limbgrower/proc/build_mob_chest(built_typepath) + // Create a mob with a chest, but nothing else + if(!ispath(built_typepath, /mob/living/carbon/human/chestonly)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + visible_message(src, "Buzzes, a error screen appearing on it's display.") + return FALSE + var/dna = dna_disk?.genetic_makeup_buffer["name"] + var/mob/living/carbon/human/chestonly/C = new(loc) + if(dna) + C.real_name = dna + else + C.dna.nameless = TRUE + C.real_name = "Synthetic Humanoid #[rand(10000, 99999)]" + C.set_resting(TRUE, TRUE) + C.stat = DEAD + C.adjustOxyLoss(200) + C.adjustCloneLoss(50) + C.med_hud_set_status() + C.med_hud_set_health() + C.underwear = "Nude" + C.undershirt = "Nude" + C.saved_underwear = "" + C.saved_undershirt = "" + C.hair_style = "bald" + C.skin_tone = "albino" + // Just enough to start reviving them, I hope + C.blood_volume = BLOOD_VOLUME_SURVIVE + // At some point, make a way to deal with species regenerate_organs + // Remove all the organs + for(var/organ in C.internal_organs) + var/obj/item/organ/O = organ + O.Remove(organ) + + C.update_appearance() + return TRUE + /obj/machinery/limbgrower/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/our_beaker in component_parts) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4fc60cc6ac..3e7f2f59e3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -942,6 +942,9 @@ . += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]" SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .) +/mob/living/carbon/human/chestonly + bodyparts = list(/obj/item/bodypart/chest) + /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 8da18c453c..39bba19176 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -2,6 +2,15 @@ //////////Limb Grower Designs /////// ///////////////////////////////////// + +/datum/design/chestmob + name = "Synthetic Humanoid Framework Chest" + id = "chestmob" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 100, /datum/reagent/blood = BLOOD_VOLUME_SURVIVE) + build_path = /mob/living/carbon/human/chestonly + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + /datum/design/leftarm name = "Left Arm" id = "leftarm" diff --git a/tgui/packages/tgui/interfaces/Limbgrower.js b/tgui/packages/tgui/interfaces/Limbgrower.js index b91c7e4b45..004137782e 100644 --- a/tgui/packages/tgui/interfaces/Limbgrower.js +++ b/tgui/packages/tgui/interfaces/Limbgrower.js @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs } from '../components'; +import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs, ProgressBar } from '../components'; import { Window } from '../layouts'; export const Limbgrower = (props, context) => { @@ -22,7 +22,7 @@ export const Limbgrower = (props, context) => { + height={760}> {!!busy && ( @@ -47,7 +47,16 @@ export const Limbgrower = (props, context) => {
    - {total_reagents} / {max_reagents} reagent capacity used. + {!!total_reagents && max_reagents + ? ( +

    + {`Total Reagents/Maximum Reagents: + ${total_reagents}/${max_reagents}`} +

    + ) + : null} +
    {reagents.map(reagent => ( @@ -56,13 +65,15 @@ export const Limbgrower = (props, context) => { label={reagent.reagent_name} buttons={( act('empty_reagent', { - reagent_type: reagent.reagent_type, - })} /> + onClick={() => { + act('empty_reagent', { reagent_type: reagent.reagent_type }); + + }} /> )}> {reagent.reagent_amount}u From fc6f3cdffc379d051547a28464e3a69e177b2074 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:54:05 +0200 Subject: [PATCH 46/84] tested and done, seems to work --- code/game/machinery/limbgrower.dm | 32 +++++++++++++------ .../research/designs/limbgrower_designs.dm | 3 ++ tgui/packages/tgui/interfaces/Limbgrower.js | 12 +++---- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 68270b11bf..8014582eb0 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -129,10 +129,13 @@ if(ispath(user_item.type, /obj/item/reagent_containers/blood) && user.a_intent != INTENT_HARM) var/obj/item/reagent_containers/blood/B = user_item if(!B.reagents.get_reagents()) - to_chat(user, "You can't fill the [src] with a empty [B]!") + to_chat(user, "You can't fill [src] with a empty [B.name]!") return - user.visible_message("[user] drains the [user_item] into the [src] using the blood bag port on [src].", - "You drain the [user_item] into the [src] using the blood bag port.") + if(reagents.total_volume == reagents.maximum_volume) + to_chat(user, "\The [src] can't hold more blood!") + return + user.visible_message("[user] drains the [user_item] into [src] using the blood bag port on [src].", + "You drain the [user_item] into [src] using the blood bag port.") B.reagents.trans_to(src, B.amount_per_transfer_from_this) return @@ -335,13 +338,21 @@ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) visible_message(src, "Buzzes, a error screen appearing on it's display.") return FALSE - var/dna = dna_disk?.genetic_makeup_buffer["name"] + // Fields is from cloning, a much fuller scan, genetic_makeup_buffer is less so + var/dna_genetics = dna_disk?.genetic_makeup_buffer + var/dna_cloning = dna_disk?.fields + var/datum/species/selected = GLOB.species_datums[selected_category] var/mob/living/carbon/human/chestonly/C = new(loc) - if(dna) - C.real_name = dna + C.real_name = length(dna_genetics) ? dna_genetics["name"] : "Synthetic Humanoid #[rand(10000, 99999)]" + if(length(dna_cloning)) + C.hardset_dna(dna_cloning["UI"], dna_cloning["SE"], dna_cloning["name"], dna_cloning["blood_type"], dna_cloning["mrace"], dna_cloning["features"]) + else if(length(dna_genetics)) + C.hardset_dna(dna_genetics["UI"], null, dna_genetics["name"], dna_genetics["blood_type"]) else - C.dna.nameless = TRUE C.real_name = "Synthetic Humanoid #[rand(10000, 99999)]" + C.hair_style = "bald" + C.skin_tone = "albino" + C.set_species(selected) C.set_resting(TRUE, TRUE) C.stat = DEAD C.adjustOxyLoss(200) @@ -352,8 +363,7 @@ C.undershirt = "Nude" C.saved_underwear = "" C.saved_undershirt = "" - C.hair_style = "bald" - C.skin_tone = "albino" + // Just enough to start reviving them, I hope C.blood_volume = BLOOD_VOLUME_SURVIVE // At some point, make a way to deal with species regenerate_organs @@ -361,7 +371,9 @@ for(var/organ in C.internal_organs) var/obj/item/organ/O = organ O.Remove(organ) - + C.update_body(TRUE) + C.update_hair() + C.update_body_parts() C.update_appearance() return TRUE diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 39bba19176..e30cdfb5ef 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -6,6 +6,9 @@ /datum/design/chestmob name = "Synthetic Humanoid Framework Chest" id = "chestmob" + // Mobs don't make very good roundstart icons + research_icon = 'icons/mob/human_parts.dmi' + research_icon_state = "default_human_chest" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/synthflesh = 100, /datum/reagent/blood = BLOOD_VOLUME_SURVIVE) build_path = /mob/living/carbon/human/chestonly diff --git a/tgui/packages/tgui/interfaces/Limbgrower.js b/tgui/packages/tgui/interfaces/Limbgrower.js index 004137782e..75b98f0d81 100644 --- a/tgui/packages/tgui/interfaces/Limbgrower.js +++ b/tgui/packages/tgui/interfaces/Limbgrower.js @@ -47,14 +47,10 @@ export const Limbgrower = (props, context) => {
    - {!!total_reagents && max_reagents - ? ( -

    - {`Total Reagents/Maximum Reagents: - ${total_reagents}/${max_reagents}`} -

    - ) - : null} + {/* Total_reagents could be null or undefined, so let's be safe */ + `Total Reagents/Maximum Reagents: + ${total_reagents ? total_reagents : 0}/${max_reagents}` + }
    From f404390c913d01c99b1909f3bb01cbe25b311906 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Wed, 16 Feb 2022 00:46:25 +0200 Subject: [PATCH 47/84] Edge case and documentation --- code/game/machinery/limbgrower.dm | 3 ++- tgui/packages/tgui/interfaces/Limbgrower.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 8014582eb0..ab93012ae4 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -356,7 +356,8 @@ C.set_resting(TRUE, TRUE) C.stat = DEAD C.adjustOxyLoss(200) - C.adjustCloneLoss(50) + // Limb replacement causes toxloss, which can cause too much suffering for the doctor that I don't want + C.adjustCloneLoss(45) C.med_hud_set_status() C.med_hud_set_health() C.underwear = "Nude" diff --git a/tgui/packages/tgui/interfaces/Limbgrower.js b/tgui/packages/tgui/interfaces/Limbgrower.js index 75b98f0d81..e7e04d4f51 100644 --- a/tgui/packages/tgui/interfaces/Limbgrower.js +++ b/tgui/packages/tgui/interfaces/Limbgrower.js @@ -42,6 +42,8 @@ export const Limbgrower = (props, context) => {
    Containing data for {disk['name']},
    Attempting to create genitalia will use the disk's data. + Any Synthetic Frameworks created will + overwrite the race category selected.
    ) : disk['disk'] ? "No data." : "No disk."}
    From 50455227f13614e7c7474aa33642e82e6eb35da7 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Wed, 16 Feb 2022 00:49:46 +0200 Subject: [PATCH 48/84] More comments --- code/game/machinery/limbgrower.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index ab93012ae4..3570ce49a3 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -354,6 +354,7 @@ C.skin_tone = "albino" C.set_species(selected) C.set_resting(TRUE, TRUE) + // Don't want to cause it to deathgasp.. C.stat = DEAD C.adjustOxyLoss(200) // Limb replacement causes toxloss, which can cause too much suffering for the doctor that I don't want From c42aa2c30a4d06ce05bc7f7f3e7293b49345e07e Mon Sep 17 00:00:00 2001 From: SandPoot Date: Tue, 15 Feb 2022 22:16:07 -0300 Subject: [PATCH 49/84] Upload files --- code/__HELPERS/cmp.dm | 3 + code/modules/admin/playtimes.dm | 68 ++++++++++ code/modules/admin/verbs/randomverbs.dm | 8 +- tgstation.dme | 1 + .../tgui/interfaces/PlayerPlaytimes.js | 119 ++++++++++++++++++ 5 files changed, 193 insertions(+), 6 deletions(-) create mode 100644 code/modules/admin/playtimes.dm create mode 100644 tgui/packages/tgui/interfaces/PlayerPlaytimes.js diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 4ee622961a..2fbf087288 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -140,3 +140,6 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") + +/proc/cmp_playtime(list/A, list/B) + return A["playtime"] - B["playtime"] diff --git a/code/modules/admin/playtimes.dm b/code/modules/admin/playtimes.dm new file mode 100644 index 0000000000..7cf24d9746 --- /dev/null +++ b/code/modules/admin/playtimes.dm @@ -0,0 +1,68 @@ +/datum/player_playtime/New(mob/viewer) + ui_interact(viewer) + +/datum/player_playtime/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PlayerPlaytimes", "Player Playtimes") + ui.open() + +/datum/player_playtime/ui_state(mob/user) + return GLOB.admin_state + +/datum/player_playtime/ui_data(mob/user) + var/list/data = list() + + var/list/clients = list() + for(var/client/C in GLOB.clients) + var/list/client = list() + + client["ckey"] = C.ckey + client["playtime"] = C.get_exp_living(TRUE) + client["playtime_hours"] = C.get_exp_living() + + var/mob/M = C.mob + client["observer"] = isobserver(M) + client["ingame"] = !isnewplayer(M) + client["name"] = M.real_name + var/nnpa = CONFIG_GET(number/notify_new_player_age) + if(nnpa >= 0) + if(C.account_age >= 0 && (C.account_age < CONFIG_GET(number/notify_new_player_age))) + client["new_account"] = "New BYOND account [C.account_age] day[(C.account_age==1?"":"s")] old, created on [C.account_join_date]" + + clients += list(client) + + clients = sortList(clients, /proc/cmp_playtime) + data["clients"] = clients + return data + +/datum/player_playtime/ui_act(action, params) + if(..()) + return + + switch(action) + if("view_playtime") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.holder.cmd_show_exp_panel(target.client) + if("admin_pm") + usr.client.cmd_admin_pm(params["ckey"]) + if("player_panel") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.holder.show_player_panel(target) + if("view_variables") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.debug_variables(target) + if("observe") + if(!isobserver(usr) && !check_rights(R_ADMIN)) + return + + var/mob/target = get_mob_by_key(params["ckey"]) + if(!target) + to_chat(usr, "Player not found.") + return + + var/client/C = usr.client + if(!isobserver(usr) && !C.admin_ghost()) + return + var/mob/dead/observer/A = C.mob + A.ManualFollow(target) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a0a1da9584..9e201ec360 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1557,6 +1557,7 @@ Traitors and the like can also be revived with the previous role mostly intact. /client/proc/cmd_admin_check_player_exp() //Allows admins to determine who the newer players are. set category = "Admin" set name = "Player Playtime" + if(!check_rights(R_ADMIN)) return @@ -1564,12 +1565,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, "Tracking is disabled in the server configuration file.") return - var/list/msg = list() - msg += "Playtime ReportPlaytime:
    " - src << browse(msg.Join(), "window=Player_playtime_check") + new /datum/player_playtime(usr) /obj/effect/temp_visual/fireball icon = 'icons/obj/wizard.dmi' diff --git a/tgstation.dme b/tgstation.dme index 4328158bfc..533962c9d9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1472,6 +1472,7 @@ #include "code\modules\admin\outfits.dm" #include "code\modules\admin\permissionedit.dm" #include "code\modules\admin\player_panel.dm" +#include "code\modules\admin\playtimes.dm" #include "code\modules\admin\sound_emitter.dm" #include "code\modules\admin\sql_message_system.dm" #include "code\modules\admin\stickyban.dm" diff --git a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js new file mode 100644 index 0000000000..aaa3e0cc98 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js @@ -0,0 +1,119 @@ +import { useBackend } from '../backend'; +import { Button, Icon, Section, Table, Tooltip } from '../components'; +import { Window } from '../layouts'; + +export const PlayerPlaytimes = (props, context) => { + const { act, data } = useBackend(context); + const { + clients, + } = data; + return ( + + +
    + + + +
    + +
    +
    + +
    + Ckey +
    +
    + +
    + Real Name +
    +
    + +
    + Actions +
    +
    +
    + {clients.map(client => ( + + +
    +
    +
    + +
    + {!!client.new_account + && ( + + + + )} {client.ckey} +
    +
    + +
    + {!!client.observer + && ( + + + + )} {client.name} +
    +
    + +
    +
    +
    +
    +
    + ))} +
    +
    +
    +
    + ); +}; From 7735a68d3e997f6251f963989da9c063a3a1df4c Mon Sep 17 00:00:00 2001 From: SandPoot Date: Tue, 15 Feb 2022 22:46:29 -0300 Subject: [PATCH 50/84] i forgot to push --- tgui/packages/tgui/interfaces/PlayerPlaytimes.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js index aaa3e0cc98..0996b0ba04 100644 --- a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js +++ b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js @@ -64,12 +64,12 @@ export const PlayerPlaytimes = (props, context) => {
    - {!!client.observer + {!client.ingame ? (At lobby) + : (!!client.observer && ( - - )} {client.name} + ))} {client.name}
    From 86c711a0030e88b34907d7880a5cd00a99cfd710 Mon Sep 17 00:00:00 2001 From: Arturlang <24881678+Arturlang@users.noreply.github.com> Date: Fri, 18 Feb 2022 23:44:03 +0200 Subject: [PATCH 51/84] Apply suggestions from code review Co-authored-by: Putnam3145 --- code/game/machinery/limbgrower.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 3570ce49a3..da1d294729 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -129,7 +129,7 @@ if(ispath(user_item.type, /obj/item/reagent_containers/blood) && user.a_intent != INTENT_HARM) var/obj/item/reagent_containers/blood/B = user_item if(!B.reagents.get_reagents()) - to_chat(user, "You can't fill [src] with a empty [B.name]!") + to_chat(user, "You can't fill [src] with an empty [B.name]!") return if(reagents.total_volume == reagents.maximum_volume) to_chat(user, "\The [src] can't hold more blood!") @@ -199,7 +199,7 @@ for(var/reagent_id in consumed_reagents_list) consumed_reagents_list[reagent_id] *= production_coefficient if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") + audible_message("\The [src] buzzes and states "INSUFFICENT REAGENTS"") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) return @@ -336,7 +336,7 @@ // Create a mob with a chest, but nothing else if(!ispath(built_typepath, /mob/living/carbon/human/chestonly)) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - visible_message(src, "Buzzes, a error screen appearing on it's display.") + visible_message(src, "Buzzes, an error screen appearing on its display.") return FALSE // Fields is from cloning, a much fuller scan, genetic_makeup_buffer is less so var/dna_genetics = dna_disk?.genetic_makeup_buffer From 2b11cfcc3335c4dc5f0223c4307dbc63d176b4b5 Mon Sep 17 00:00:00 2001 From: Arturlang <24881678+Arturlang@users.noreply.github.com> Date: Sat, 19 Feb 2022 12:55:35 +0200 Subject: [PATCH 52/84] Linz's suggestion Co-authored-by: Lin --- code/game/machinery/limbgrower.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index da1d294729..5b1bd91fc3 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -199,7 +199,7 @@ for(var/reagent_id in consumed_reagents_list) consumed_reagents_list[reagent_id] *= production_coefficient if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes and states "INSUFFICENT REAGENTS"") + audible_message("\The [src] buzzes and states \"INSUFFICENT REAGENTS\"") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) return From 29a4e1059205b71d600179de83208365973291ab Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Mon, 21 Feb 2022 01:09:21 +0200 Subject: [PATCH 53/84] Looping performance tweaks --- code/game/machinery/limbgrower.dm | 32 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 3570ce49a3..d77e2e0aae 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -225,12 +225,12 @@ * modified_consumed_reagents_list - the list of reagents we will consume on build, modified by the production coefficient. */ /obj/machinery/limbgrower/proc/build_item(list/modified_consumed_reagents_list) - HandleReagentUsage(modified_consumed_reagents_list) + reagent_usage(modified_consumed_reagents_list) var/built_typepath = being_built.build_path // If we have a bodypart, we need to initialize the limb on its own. Otherwise we can build it here. if(ispath(built_typepath, /mob/living/carbon/human/chestonly)) if(!build_mob_chest(built_typepath, FALSE)) - HandleReagentUsage(modified_consumed_reagents_list, FALSE) + reagent_usage(modified_consumed_reagents_list, FALSE) else if(ispath(built_typepath, /obj/item/bodypart)) build_limb(built_typepath) else if(ispath(built_typepath, /obj/item/organ/genital)) //genitals are uhh... customizable @@ -242,16 +242,24 @@ flick("limbgrower_unfill", src) icon_state = "limbgrower_idleoff" -/obj/machinery/limbgrower/proc/HandleReagentUsage(modified_consumed_reagents_list, remove = TRUE) - for(var/reagent_id in modified_consumed_reagents_list) - if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - break - if(remove) - reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) - else - reagents.add_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) +/obj/machinery/limbgrower/proc/reagent_usage(modified_consumed_reagents_list, remove = TRUE) + // Apparently, having a boolean in a loop is worse than doing it twice + if(remove) + for(var/reagent_id in modified_consumed_reagents_list) + if(reagent_sanity_check(reagent_id, modified_consumed_reagents_list[reagent_id])) + reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + else + for(var/reagent_id in modified_consumed_reagents_list) + if(reagent_sanity_check(reagent_id, modified_consumed_reagents_list[reagent_id])) + reagents.add_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + + +/obj/machinery/limbgrower/proc/reagent_sanity_check(reagent_id, amount) + if(reagents.has_reagent(reagent_id, amount)) + return TRUE + audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + return FALSE /* * The process of putting together a limb. From 6b3fb90ef61d9cdaf07fd307d7395dc5938decc5 Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 17:44:27 -0500 Subject: [PATCH 54/84] keep the cold in --- code/__DEFINES/atmospherics.dm | 1 + code/modules/clothing/suits/miscellaneous.dm | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 2ead5ea068..35de475d35 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -116,6 +116,7 @@ #define GLOVES_MAX_TEMP_PROTECT 1500 //For some gloves #define SHOES_MIN_TEMP_PROTECT 2.0 //For gloves #define SHOES_MAX_TEMP_PROTECT 1500 //For gloves +#define COAT_MAX_TEMP_PROTECT 330 //For winter coats (if they can stop you from getting cold why can't they do it the other way to a lesser extent) #define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define MAX_HIGH_PRESSURE_DAMAGE 16 // CITADEL CHANGES Max to 16, low to 8. diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 513ad94365..c35e5b0a07 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -279,7 +279,9 @@ item_state = "labcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun, /obj/item/staff/bostaff) hoodtype = /obj/item/clothing/head/hooded/carp_hood @@ -289,7 +291,9 @@ icon_state = "carp_casual" body_parts_covered = HEAD cold_protection = HEAD + heat_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? @@ -419,7 +423,9 @@ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio) body_parts_covered = CHEST|ARMS cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON /obj/item/clothing/suit/jacket/flannel @@ -520,6 +526,7 @@ icon_state = "leathercoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|ARMS|LEGS + heat_protection = CHEST|GROIN|ARMS|LEGS mutantrace_variation = STYLE_DIGITIGRADE /obj/item/clothing/suit/jacket/puffer @@ -537,6 +544,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN + heat_protection = CHEST|GROIN armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/jacket/miljacket @@ -655,7 +663,9 @@ item_state = "coatwinter" body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON @@ -666,7 +676,9 @@ icon_state = "winterhood" body_parts_covered = HEAD cold_protection = HEAD + heat_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS rad_flags = RAD_NO_CONTAMINATE From 4d403ebca5a338126bf5eec5fcd087de1c77eb67 Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 18:14:56 -0500 Subject: [PATCH 55/84] Update miscellaneous.dm --- code/modules/clothing/gloves/miscellaneous.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 8c8400a45d..d3e87dfdf3 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -9,6 +9,8 @@ equip_delay_other = 20 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT strip_mod = 0.9 custom_price = PRICE_ALMOST_CHEAP @@ -349,6 +351,8 @@ transfer_prints = TRUE cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT strip_mod = 0.9 /obj/item/clothing/gloves/evening/black From 93c322f494685701be8d15436bc95af8ed6cc776 Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 18:23:41 -0500 Subject: [PATCH 56/84] a --- code/modules/clothing/head/misc.dm | 3 ++- code/modules/clothing/head/misc_special.dm | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 76e8ca53df..98ab79068a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -264,7 +264,8 @@ item_state = "that" cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - + heat_protection = HEAD + max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/santa beepsky_fashion = /datum/beepsky_fashion/santa diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 247062581d..01f4a59e9e 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -93,6 +93,8 @@ var/earflaps = TRUE cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT ///Sprite visible when the ushanka flaps are folded up. var/upsprite = "ushankaup" ///Sprite visible when the ushanka flaps are folded down. From 2619387dc1913a7d580c16d1cdcdeaedf756647f Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 18:25:12 -0500 Subject: [PATCH 57/84] woops --- code/modules/clothing/gloves/miscellaneous.dm | 4 ++-- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/head/misc_special.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index d3e87dfdf3..2cfc22eef7 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -10,7 +10,7 @@ cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS - max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT strip_mod = 0.9 custom_price = PRICE_ALMOST_CHEAP @@ -352,7 +352,7 @@ cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS - max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT strip_mod = 0.9 /obj/item/clothing/gloves/evening/black diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 98ab79068a..3bc0d02350 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -265,7 +265,7 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD - max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/santa beepsky_fashion = /datum/beepsky_fashion/santa diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 01f4a59e9e..34df3bb932 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -94,7 +94,7 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD - max_heat_protection_temperature = COAT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT ///Sprite visible when the ushanka flaps are folded up. var/upsprite = "ushankaup" ///Sprite visible when the ushanka flaps are folded down. From 7f9d7936f084e70c2ce268bf875aaa9b06b7fb61 Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 18:31:48 -0500 Subject: [PATCH 58/84] a --- code/modules/clothing/gloves/mittens.dm | 2 ++ code/modules/clothing/gloves/tacklers.dm | 2 ++ 2 files changed, 4 insertions(+) diff --git a/code/modules/clothing/gloves/mittens.dm b/code/modules/clothing/gloves/mittens.dm index 42250aae2f..b1b17c9afe 100644 --- a/code/modules/clothing/gloves/mittens.dm +++ b/code/modules/clothing/gloves/mittens.dm @@ -6,6 +6,8 @@ //item_color = "white" cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT resistance_flags = NONE /obj/item/clothing/gloves/mittens/random diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 39d39ba58f..23230b32c5 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -6,6 +6,8 @@ transfer_prints = TRUE cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT resistance_flags = NONE //custom_premium_price = PRICE_EXPENSIVE /// For storing our tackler datum so we can remove it after From 6db0142ec39505223cc2e656511899709c819f1b Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 21 Feb 2022 18:58:54 -0500 Subject: [PATCH 59/84] fluffy tail costume. --- code/modules/clothing/suits/miscellaneous.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c35e5b0a07..5c4193d532 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -366,7 +366,10 @@ item_state = "ran_suit" body_parts_covered = CHEST|GROIN|LEGS flags_inv = HIDEJUMPSUIT|HIDETAUR - heat_protection = CHEST|GROIN|LEGS //fluffy tails! + cold_protection = CHEST|GROIN|LEGS //fluffy tails! + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Bleh, same as winter coat + heat_protection = CHEST|GROIN|LEGS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON /obj/item/clothing/head/ran From fd997e16153f29f28ba890673e796b0c3d82aef4 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 22 Feb 2022 21:59:28 +0000 Subject: [PATCH 60/84] initial test changes --- code/_globalvars/lists/objects.dm | 1 + code/game/objects/items/devices/PDA/PDA.dm | 26 +++++++++++++++++++++ code/game/objects/items/devices/PDA/cart.dm | 7 ++++++ code/modules/reagents/chemistry/holder.dm | 6 +++++ 4 files changed, 40 insertions(+) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 14969e6c92..d29bdfae23 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions +GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2339e88a76..9a873fb561 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -369,6 +369,8 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • [PDAIMG(rdoor)]Toggle Remote Door
  • " if (cartridge.access & CART_DRONEPHONE) dat += "
  • [PDAIMG(dronephone)]Drone Phone
  • " + if (cartridge.access & CART_BARTENDER) + dat += "
  • [PDAIMG(bucket)]Drink Recipe Browser
  • " dat += "
  • [PDAIMG(atmos)]Atmospheric Scan
  • " dat += "
  • [PDAIMG(flashlight)][fon ? "Disable" : "Enable"] Flashlight
  • " if (pai) @@ -705,6 +707,30 @@ GLOBAL_LIST_EMPTY(PDAs) if(T) pai.forceMove(T) +//DRINK RECIPE BROWSER============================= + if("Drink Recipe Browser") + if(cartridge && cartridge.access & CART_BARTENDER) + var/option = input(U, "Enter keyword to return a recipe.") + if(option) + option = lowertext(option) + var/list/reagents_required + var/found_reagent_name + for(var/reagent_name in GLOB.drink_reactions_list) + message_admins(reagent_name) + if(findtext(reagent_name, option)) + found_reagent_name = reagent_name + reagents_required = GLOB.drink_reactions_list[reagent_name].required_reagents + break + if(length(reagents_required)) + to_chat(U, "Reagent found: [found_reagent_name]
    Required Reagents:
    ") + var/reagents_required_string = "" + for(var/datum/reagent/r in reagents_required) + reagents_required_string += "[initial(r.name)]: [reagents_required[r]]
    " + to_chat(U, reagents_required_string) + return + else + to_chat(U, "Reagent with term: [option] could not be located!") + //LINK FUNCTIONS=================================== else//Cartridge menu linking diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 4ca0b86bc0..9d02207375 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -13,6 +13,7 @@ #define CART_QUARTERMASTER (1<<12) #define CART_HYDROPONICS (1<<13) #define CART_DRONEPHONE (1<<14) +#define CART_BARTENDER (1<<15) /obj/item/cartridge @@ -190,6 +191,12 @@ bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT spam_enabled = 1 +/obj/item/cartridge/bartender + name = "\improper B.O.O.Z.E cartridge" + desc = "Now with 12% alcohol!" + icon_state = "cart-bar" + access = CART_BARTENDER + /obj/item/cartridge/captain/New() ..() radio = new(src) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 2899f0ca11..6de8efd1db 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -32,6 +32,12 @@ var/datum/chemical_reaction/D = new path() var/list/reaction_ids = list() + // store drinks separately for bartender cartridge + if(D.id) + if(istype(D.id, /datum/reagent/consumable)) + var/datum/reagent/consumable/r = D.id + GLOB.drink_reactions_list[lowertext(initial(r.name))] = D + if(D.required_reagents && D.required_reagents.len) for(var/reaction in D.required_reagents) reaction_ids += reaction From 0f4a3efcb5ed66afdc882182c0b4c5589bf95064 Mon Sep 17 00:00:00 2001 From: keronshb Date: Tue, 22 Feb 2022 17:26:19 -0500 Subject: [PATCH 61/84] Fixes weird flipped line --- code/controllers/configuration/entries/general.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 1ffb5089b4..9966f90ce7 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -350,7 +350,8 @@ /datum/config_entry/flag/station_name_needs_approval -//ambition end - config_entry_value = 5 -/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. //ambition start +/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. + config_entry_value = 5 +//ambition end + From b578c65d7430d5d008e51832cfd842a489886492 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 23 Feb 2022 00:52:17 +0000 Subject: [PATCH 62/84] fixes --- code/game/objects/items/devices/PDA/PDA.dm | 12 +++++++----- .../objects/items/devices/PDA/PDA_types.dm | 1 + code/modules/reagents/chemistry/holder.dm | 7 ++++--- icons/obj/pda.dmi | Bin 16000 -> 16140 bytes 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 9a873fb561..8a97cc9f80 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -715,17 +715,19 @@ GLOBAL_LIST_EMPTY(PDAs) option = lowertext(option) var/list/reagents_required var/found_reagent_name + var/required_temp for(var/reagent_name in GLOB.drink_reactions_list) - message_admins(reagent_name) - if(findtext(reagent_name, option)) + if(findtext(lowertext(reagent_name), option)) found_reagent_name = reagent_name reagents_required = GLOB.drink_reactions_list[reagent_name].required_reagents + required_temp = GLOB.drink_reactions_list[reagent_name].required_temp break if(length(reagents_required)) - to_chat(U, "Reagent found: [found_reagent_name]
    Required Reagents:
    ") + to_chat(U, "Recipe found: [found_reagent_name][required_temp ? "
    Required Temperature: [required_temp]K" : ""]
    Required Reagents:") var/reagents_required_string = "" - for(var/datum/reagent/r in reagents_required) - reagents_required_string += "[initial(r.name)]: [reagents_required[r]]
    " + for(var/r in reagents_required) + var/datum/reagent/reagent = r + reagents_required_string += "
    [initial(reagent.name)]: [reagents_required[r]]" to_chat(U, reagents_required_string) return else diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 23ebaec3c2..8fcd97c261 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -222,6 +222,7 @@ /obj/item/pda/bar name = "bartender PDA" icon_state = "pda-bartender" + default_cartridge = /obj/item/cartridge/bartender inserted_item = /obj/item/pen/fountain /obj/item/pda/atmos diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 6de8efd1db..89ff24d2f3 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -14,6 +14,7 @@ GLOB.chemical_reagents_list[path] = D /proc/build_chemical_reactions_list() + message_admins("STARTY START START!") //Chemical Reactions - Initialises all /datum/chemical_reaction into a list // It is filtered into multiple lists within a list. // For example: @@ -26,17 +27,17 @@ //Randomized need to go last since they need to check against conflicts with normal recipes var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized) GLOB.chemical_reactions_list = list() + GLOB.drink_reactions_list = list() for(var/path in paths) var/datum/chemical_reaction/D = new path() var/list/reaction_ids = list() - // store drinks separately for bartender cartridge if(D.id) - if(istype(D.id, /datum/reagent/consumable)) + if(ispath(D.id, /datum/reagent/consumable)) var/datum/reagent/consumable/r = D.id - GLOB.drink_reactions_list[lowertext(initial(r.name))] = D + GLOB.drink_reactions_list[initial(r.name)] = D if(D.required_reagents && D.required_reagents.len) for(var/reaction in D.required_reagents) diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index 8992f4a4a104de0e727b17623492a60598ea59f3..f968d158601eab3e41261e216f8f6877f43f00ad 100644 GIT binary patch literal 16140 zcmbum2UHYYxFuRm28n_oISPnKkR&+=1q4OONk9<C?Xjo z=bVHlG^wGxr}+Q7?%en0&AMymtp%&APgm6mRp;CL?ERg0`j0dz$e73g0HAoFrS=2> zARJf!Bt!rJ(1ljQ!7ms7PmMj*UU=BLJGgo}KwSX9H!~}#!(~Q?cyd=4rjh)wQ(X+1F$kyO~kh-54VqGd9O_Ovinj@NE!1vCC^XzSc@z2SgYkY&$7c$nn zNs!TW=?k5RwMo5dXm4Q)p8!-+g26cl6V9WjON>|-aE^T)wUkC&-m$7 z>6W2eH)oh*gU=k0NPB-Yp43?o!N~V;vWrJSX#TkDj_=4ZzFf)J4g;#dunI}1=U9hi zyd_%RU42Y?QedbU+N6AKA<^`k%jfJr+YICZKSX*Jm8luE^&GvTo|tpf~wyO@sgZ8YwL=DW{HPI1i5q zLeXU)tEpx_tw|e>-0)jZlikP+SP0lV95~Hv$&@rPG2tKy(GRV6tOAs&rG)L22$YM7 z7^#)1OO=V#sKXrNAT$J@m@FCfe_tw^uA0(_Uix7JNBCePh&QO)cw8hZ64Q}QRQ#Nr z9SI@#W7o!)<5W!z4Go#C4ErpDyCNZMy=&{)Jg|`z^-c|rA%;%- zNS@2y&RAn!Pm%*;q3US;ydIm5lirl-)2~y)n2ns^`H@em#Ib9oWo74ED3nTH8g0ba zulGJCC!@b%Jf7(J3Y{g*AvNJ$>YZ}g!4MlG9yeRDzIFeUb0%Gp6CD~M7hSSy?+RnW zQ>R%}g(l{Cb?eA|y=o{d-9u08v@SP^9F)#LYt(+q^t2vwv#-$>a zKg_JXm*l8vVng3Lay|S@6VVEhw~cQWp}0@?e$(uUzG&aJj7_@BlPzZQ&yjP1)MM!G zGda;u`A^YlGxg8MGdXUOuZ)edOAv>@3Kc+~AK&n`f21((#KzZxO)BICl=Q7Rs)Cor z_fwj)&QLKCb`uS6w-}_PmcDI&Hl{x|Qqa>G)fK>OZ`6?1u_apXdxx(d-4RNB zr!ZJyNiJwpmPjwi+WFROXuzzHQ7r`0j-3?@k`YM12q-BR`SkUB`uzHn&r(q+GEsE2 zx_arhhx72k(3a=fZDBn>*dt2|SX%WMF}ynFQw*AcjBeNmfg2m6qDV5n|A|7x1}?af zV?;zZKK$k7iNgjG`@QT&oGBvcSi5wanY^mBOmTiuU*iErqNrQ?V|+sPH-88)K+nL< zFEXTz8zsi_XVj;ng`=hmOM}d3Is3Bi=$3`@_2O+3zaP*y-pnA*<3Vq-@=Oz#p)JrrObe>?>+_ssLlmr1nLP9PX zPPp)FHmsKOo-5(O%Uv6yP6Y7C$jDa}PaMd{33|_A{O;ioW^UfdA56D4$o2xoJdO3Gx7##?yTuWlSb&-$~l94aR?T_pRdDTZ&)mg;p#^kpt3 zH`Rpns`eXM*f_yV!Qx?Z`1!c zHlcMo9-sNLlQP44xHfLDTfLhi%vomneP6EtY)n#8(x*1dyiH+kU-p8lJ8PSZlk44* z+jJYYWE_HLe*qe+?}&4SQ6U~`3!L36C*{>7;L*r=3wKvjvO$@U2x<~=Jw$vaEvRo} zp^4+iB=e?%pHdgWDiPG=6plsdSH)5rIg=z>p6qcNw0(0sE4=L0k{tzm_}9z8-aa{n zyc@IE6)Cx}R@-S1?|3>~h4?M?&(CJT;{=J#R9fX=J0Hvu^JpyCHG`c6uN)C%;w{C3 zjj5;7s)g*PT?bgMLwThURD_feXLrh_hP(~;{*Og$@DBZLuk%~DNsc!%43F(xX2J&t zB1lJ&RD#}SLF1Xy3EN27oM=&tWe9LFU~j8s9juNTo%U7;w!534`f>Je@VORW=Yw_0eK#3&)JTU!v;;cBtZ0j1v_CB_$R z^JRVo+xYjGq8nfT;nxwr={mG$QeCn_YcXJCDljkdV>>0#BIF&F$KcN-@SucBFU5i# zSoTH|{q*yR9c&6G>OtkCUJI;ONtGPxl-nc!ZMJTd-JS8+qBWfl_b}fM?H57$+&9x_ zBgYP=1jG#yS$u5`;5{h`BYq=z`a+Ir$dpB8_QU-yPD(c}=%HLKz45gTz3u>Qm%RtC z#20LAzwh4UzK3V?llzBPnHZVA&PSKGv{N2dLhoC> z?{hX!h05M7!VUyYRM%K3dX~A;LZ;e3Y=DR)|B}#gi zj+J;fyNV(r7D7-INm^Q3)n_#{C^TKK?5WeCab@8bGE$$XZqv%FH1n0*Cm;XDso~n+ z;DZ4jfFlEH8CDmdu7Sue!>!wYKYZu4=$1N%)(@cv_+nHK$R#7@Ocv$!|ZuAmJ?LP(v zNX1^dS%H{8A5>!!H`WmA`U10bRIhD@%E})m;4YcN`xF#bG?5&o`Y+^XVo9FQ2Rtyu z9PfyoA8O>&m{u5GhXGpifj=EE3+L6D6M8wbMYoc!8Pj(YFU|`-SUoyJx8#1tzMe!@ zm^FNVC2sSl_;Escdx!3V?;pg@?Ik7OX{^kHTFA`GLS37AH)8RuhI?zl5Y`m)Pg9BP zBqvl6c5IKb<(K26a_t45Fcdz=z0vTrWQ1dxE0`5TIr~1f3Qz7>IV@XJv(erBwZoh~ zXzja8Ts(AlX@izl2Av1JHo6hsK^oE_VtE52_JimnwB+Ze-{=ndUBfAMZ$CJIiYPuXpg&b|AM-nPT3DxSop60 zeHWauR!_l$#G(3%`9iT|DFj4P7j41rc&kGS6Kq^njb$%$jCj7i_%*ZR0i@O<8U2 zz|)D+Z77A0;`PE=bhqK4fzHAd7B^9oeGyeK;*(ssdcgPN0GR|CGaNghd?nm>U*fa! z5J6%(ctgq^JMCJxPr0PLw`{f-^1CUONd)Q?LMtL*nA0Lw8u5+->z(lmt%uE4AF=8C zu5F|*#hDIT7BB-)40}c}#iDjBdclGv>KXGwmu#>(6>#58l>J-WN(1(q^lONY&rp>J zBVl~|@=8^%<^>~(%XIe^`=F-qky+3VPBNbWzJWn(8dJaQpL)|`M6rg7CH$1Ku&n~~ z=|%{n6*QFwW^aOMWSMTY+@JSt+$ZU0x^+&21zDKt*DpQ0b>?F^Z*!l-_U}C$b->U> zt@hhL9bRw{u@-;}x1Hf_ZEd~Zso^zlPflyRk+2u^7=53B!%!W@f+zCS8+O`_@P$>m zsFhcguCOZdi%{1+^D3?=RRzhQRk%dQynl^s0 ztRR5}LV;F~NB&Mp5O@Xdi=J&YuQ7U6!I%X(hKthXtwU`^4lgjV#XLyl<&>9a9plnG zq>H+Vsk?KE2c)xGMdydw3skbRwCFv53o>RR<3AS>Fgc%JB=4#M56{XcYjZSa)! zl*OZpXY+!VwQUtHPdy8)S@WW=L4a@>KQ6%MxawZo5ctS|_CF=G2U8ok!|b#7;E3#-de^A7&7xnMqTvaNi8M4cobTojTYg54;8wpdrXCHJ7za(<++%OF zu3JVQzp;HfhI8|7b3$jw1Y4oL-OK%iSbDlKuLG>^~4Tv_jF8f-%YKdHPIXZanlKa`6!H zbNU~)VUDS|Vk7Xb?HbXZ{wRPR6U)|q`8Ch+~E=vK~$J$52-?f1Woc=a1I9vdU6l%KZwSTO)+bCY}&((34O zd2SUfeXPzrGy|2i1%pu7WiONaGs~uslNu(oAPKVHh~t+&e-&LxYc{ffytYxFjq`Md zkoUVhDrMqZ+Zo_E4zAM59Z(ksmmfM>3$Z!ji!;#a_B&B|8I(RXI%e<+h>>55+Eid8LSPV|sJ&f`v{a}<3+1FP5kn%rA^ zmK@rHq$wPXtV~UgmUpO1f%9Gc@T)G1e2wRM9pIYW7%IB?VZJfAc}FHW`Mu(Ex#8XO ziuQm+*Hd{WW&a$@Eb{^G7wr0{Z1N&<15Hy?kAL!R?_hAJF9czGx`NaPI;nR*7kxs!pt955FKl)Nh`=Z)_hzlB&ES4F61 z_HpJ*)0tff;2CoP$oA~{(IF$d?t5a{!tci)(w~ zovW6Mo8zUNNye#G9yH)GN*Rp3CueuQM8WTYW0tD9y`nd;Vujkd-&Ik`E%kecLn{aM zz{(%?7!)K3IEhgjY9Sm?L&+mKNX9roLZc$_3l2&c6!$p(kBd9+;G>T&&lMDtg$W&Z zb~cJ;{~Q~c;$D^^`-}Bxu0#+{^jkX{qNc%quRvV&Q(?6y7QqE17?yJsEbG*N7VELz zM`N)t|1BW@my6t)RgfFYm+_2aPS_eso+-{U$HwnUdbm+iQlk98mbsia~|k~!>Zy?8%4%4T|O$- zDP{n$pvV(=euj~qk?tGy#0miIo?n>|fd-2yK`JUCFIIoWM}Alh@6xRh2y3&oif}N~ z;dN;(zQ!PwTU`7Lxr_V#hXCv2h87FCwCrKW2LuMLS*0+|sYl_~u#t!g#q}g?rnHA3 zmE1mHW#waMZ=Y}0;Bwz*k7apf#UfdZsmZ7|Th@n?k&)45A_A2(#(;T(_L~s;?&OV0 zaMOJyGV=Yca5-|^vRQOFSP0$zt&R6)sMjcg1MBqLCjMR4Hx@3+N0l-lE4mra*=HN- z_DZ~iq*3^z@B-MC?{y=ani?9*UGHf51q8l70@`l_)HhhpHDQdiB7cWog@{T$@TLB#hOWm=$$my$U=3m~%!{JBzt~>vucdU)B{Sc% zBS)Vi_0SbM;0#UcKOPcJi%7JOy}wGa$r$zLt;4UXs&-kA!!Iw7?t_BErce_0ha>*@ zH?t^3VK&}a?9P$vcDb$Z6k@|!3noFaOE$BTNF#GOV8>dl3(6DZ>gwuesF^yU9o#DZ z?akRHv22kwYa>L&Su6NnXy*yPyhypR{>cp|pdf%3ID>8STTm^^;C0NHsWiiGsZy?m zpG2u{e;42MlnHEd&ML+%m0^2oH1$oMtGrSp*)DBjn2cqM&n<3~cUs{8giw@<8nh4P z^`FLCQe-*Yp}x`o_SG!)mvPVgZ1@SB8n_Xk7JxjIh2>YxFtU##!oY8dOF-CoH0u2z z-t!KUzwXy6Et`2uu%Jq!{Ee~xSaI@t!WVumM_72-E<%cr_FDpGlu`6DD9E%=(td}2 zT$Bz3=gS6+%z~IV*S!DET@%z)&tScFOET2VAkJ*zB-NTI*A8Pcw>vtw74SmoWTjnJ z+swm1Q?yucD~h>Fv>ZLY;`S z$pwfjb0X|!J>uAQ!}{myobSOG#LACuEG5R+LE}a3g!^YI0NUzp{6zOnkk{QSt`K;W zao5Sv0k!MB{bdC~(nk#J$$m31gz3#Jv?We6IN{#>aPojN7q!-xR^H+gTY6|fTPZF< zsM5Yg1K8N=ULAJ@MM zfYQ-QnVaXn4wPQ_9ViP#v&k?IGfi}k|NabW3C%?Td2|81%)LFn{DtMkHqDJ)oQcAkuMlx`h3z~43NmNQwhAdhwN~U?J`hH1BEIn!lq+q zFOYp7vYTaYMcvC?^NFUp^se`SEGBlp%vEqDPhOA+kAjmKMwzruG>#CL>sDjV%k-b0 z1i!K@LNf>*vIiK`_BAdEGQ}D`D1D7E$lA3VCy;etB^k()oI3%9m>W6vE2Eu8 zFw-EH`O}zmmwIWA0ig9A&^kse#|)0T4Y|@I82#~N(2Ud|CI(J~`aszJOav5Ts;nK} z9e)*TAxlm^5u+DE1v|MzkDGW?X_wo=8E)hda_A9=*IH$c z26N4zK~e)MGO7Q}0=Or516-39$Y0ayY%An~(PE{C_{r=#{`kNAszLE}$oVKS&k(A*pRsb>c_GEG zbQ^!6w6w|_MB_gNXez*o87xK%OKWrZ6 zM+|6~{9p`BuQR`nfnTT$S60h!Ym(}fFXGS6A^L&o(>e{lt2g9RHK}6ID()Q#a20W( z;+KN%JV0*1W6FpAv7V+1l9KeiiKNof(g~Y`y6-hjp0l-CVRJb!SO$cfSVrX_Rh?a-4xCwGjVEE^;@)Dm%Ho>_6ce05#K0e;J*dSOt1^fH7PEJ+(?Ud7 z&S%iJmOFf41#B?XV_<(W!fS6<8iib7FM5>aZkEh?24X1Ne_*H#W$asX*ZkI)5LD9W zspcT9%{U0IqYN)VFNWG(3982P|A*uJSEAHBTzNc^L7Y>O zG+g0Fzd)8#^;Ecv3+8nU5*&>ZoNmQ}xSb+Eu7jH?rtJx~*y?XJdDFe#+KrzgLV;n6(^NnufVNyOG3rF3gzsLUk$+g?m_k=PMa?8oF$Wjm? zj&p*se%j{dnceQ-TE4hyLqmy_l2SuWjo|n1-#jJ3JpqYw$zo#-%EyiRuVe_gMZ}rn zJLq|!3f$*dhR{D3xNnTlf!}k^kSi~vVvYu896Rhk?Wf1zoE+PXW zYWX~6SV6&=1hh-I0Uoz1e|nwQ;vL5S)4aJgLHrl{E@2N8Cl|w|?`7<~*+^^KCtOG$ zvMzXgjhK-7f)Xkk7B1QFXF+GTt zS7{0$byoX{cukbu9z8HZ9&Yq(Opjm4@L6#GmK)`ZkAHCc zE3shFKcY_AH(Wr`{ns3~i*T{EngCpkorWgPC}qi+IGyEF{z|1+HNBY=lrB<{+20tp8Ots@tYDqltm5*YnYm&WME1PI2J7A+6` zZ|Gck4WIS)LVp}sVh|7Ws!p)rZ$0=?B661>mq9uqxru#u(-Wu0BTiwm_|B$fC73-17tmq!DqWW%MgJC*-lp&hh}Kvz&3EDRni zeU>U8P%lUmcN2qg&=m2{mZOQ|!;DwsX0SWgD>0mE$s}4Iu**J8W!7KSlvFQ%NP8hh z637&y-{ykm3n+ycNr4oF3*-Y*N@k$x6~Dr+^+BNwVG1_$UzbLrV>J@qI)w#KpXkI2 z*Sel6_0T~441#;OIih(}TgH*R?5|cctebq#T+JDLzt(FIDIo@MWLneqY`D;e`xtC^8 z?`|x9ib%koNh_~m7sbwmy}MM>(>vM#z|ww|3&50(H@`dhxnG8`b-rh{?J`sPda+r` z#D?t7;iGYg7irXuVZGNgq@bs|Su4&CxVm-dKYxQRi&?uPu&>j$a-`g*Z^QuKcATI| z>fvcckJP<3dTIpLoU3#lgX)2~7ET^~VbEJcTJY*(rm(f2f3IFn*4z~y!{*3Ule}H) z&%QRDq}SUl_%7%?Uq0@DV}Fxq?{vlof>Y|ar|3@hZk!{bM{ z5)-faCev(Km~S?HQi3I4GrTdgX#azF%4)O*_a2i387&1-AG(x<)+`&Be*8?jP{xn` z!(&rZ0T2UnDu|z&iw}vwntRU+Mu_1cX?Wwd0-95)$P#BGGXT`|+KDCf{Mo z1TJlu6&PY|R}^bRCUD*&k);lwR;_CfUF`dX&ql#7b;>g$<*AIG71|6~y#C1O56R&v zyK5^F&N!%OlzG}p#D!|Gx3j(oAslj8AdH`J3c-VS&3gJ=<~!r98o%8)%%W_~T-Tw9#e_Uz+i zw%}hY!AJ}S)Iq+m2a*H#VU}l(<3ScGuAWFAl1r!=Lg%U<<>pP4GFgvMa-a(XRD(*` zLJ&^+iNOTgIfOu2D|RzwgxD#K^a}1LrgC~`wWo+3LWVET9GB$cEg)w&%U4;CB1#PS z{*gyKKpY0=_~9Bj6>3c@7N!Z5e?`2)2T8yut9w*@gKTcUn1{sZORkOT2a2(<-O{ZrJdVSw z5G-f~s%#6B=gZyU^)Ch#i^xFFdbEN{iu$?pGgdVD)>2$Bhv;K)Ez`3a=v4me7s-_P z1BBP6X4pbVxLJ%+K22dpzml4-Ae?tBa=N5Dcdf<8Vf*fd`GZpk+}iXuM)oL1$>Yro@%lj4!RWqmPRfP{!7AA} z0rSN&!fpALLdfYwLn~$uq1sa>jQ?O3d56LX0PJHJMK({`E}Ob5rGp7^lmHReN&yu%v^2Irekm?V-uHN>?A==PER?m)Kcv0B#Za zZdl-ikB&C~?Rv=Z88Q53&6GW?isDy2B0{%DYcsjn62!7flH$QQw)D zG=JO&|J&dFEPWO|{R~-F2;G}an~?I^BiDI!=;!xu!o;I0H4BH@7?b{VYY=yJ5MZ^S zrM8OD)-ER+GkzMDV3ZH}MGL8;|0v1!^H+TSImxTlU&A-Y?^V#zYbP$wj8iAIJ4woB z?!T-tc?<&r3GytC+YZr*iTb05W-Z&WkLXXr({S;0>jEJikBs2Duc^?GT??$>PcN}N z{X7t|6#yQ^4E$e{#7~WV$xMxLZyxFDX*8+e+H??YY`$oRZvrqSW~s`R3`oF9ATjWM zn}I$X&xMc;3YB2{jE0xKu2f-eqWS#j>W~N7@4C1rd%EO~e`>$bBEqFeQp$sy{010Ak;qFRAY5vg))2{6e#gNc6|lZN=Qb6FMco;t(g$~S?_%T z>>cm3IIyL-=U%>pwemL^4k-H#rrmyvO@%^FhcO%rz~^+3?1`41Fk_O+&l$AWFk$_fqrHbGzwk1{_;LY|me#q1&v z9DLyctPxdsPg-NR!Ih&uro3Fx|9Uou>FvBLwO@s@GD?c;I)R(5%6~~s{J+4k|24ny ze{&Pd=)%H@qDGi>pyRfwi4}0QXcpTU%s^Ty?)L9gVe_mWR)M&+yh1yh+%qtc;LNvq zd^uN`!Ne0F)wV^PSO#?RTJ$oH@RR3fI)_U|c-4MvROB=Z9}(WvcDkwMvjwLl9tpv&gRpvZMvAgyayJC&5?;=(E(<-pdj=Jodmv zWPc0zT}c5HBHKEn=6;fnBXyLIGDhU6V9bJ06ClJ9|o1qKJ<0v|s{2?i)IX-x7i{ z-@C8V#NrgVEbMzbSZLX0x4Wp~)e%Eqslw*yVe4L4%)4Pc;Gw-@#K_d(rxDERym%;wb zo(wSkKtToqC$UJ}M;9qhfNnhYJ z3q|MtaZ&a2b@t)ceNej56ee&br`wzR2Mn&A;5a+-@*Oxle4br@Ep)Gy7I0;0q5gt- ztbRPxK+F!QgH{!b)6?VEn6*KGn&@`*7Zb|5zDExP@LY)ZC+5Ln3k{7(8lKqlB-wEPW_Gyglh&f-jOuyYWgUqZ>>*QZwe z2i?ln7)~u)msZCigtr3EN%yo&B_{=}B`GCEWu{4t?3&)W;P#!IU^aL`_l&h`G9jU& z8?U&p6^lp%g~GzJ*R#OyZS%V`vV}c8e`D=)cjMj^PYtjF&iTYPC*5Lnqr{Dh?Bm1* zwWO?at!zHdY42NenhF>8XA<4^_x;stUpqR+ef$_^qWK{NRZzeKC~0X${@u}UMQWp% zj+iqqeEC6R82(DAVwCo)_K}nHEWmOy=jn8?B`|pk^9Q_*Z0Wv{B@bzwnJMcOItp4| z^1#gj(A7)?N^g84lU(T@0AxH!`92k6v(_>i-*s2`i>_q=gq0zLLgta>9vgA;9`u0F z_N0$1eY%mJs!D^)*B$)Xr0R91F1-8KsVT)LI3(rdF12)Zqq)#m(@y)0{UxNG8t|of z+zC-iE3-CGxM(>dXRitw&Ke3cs@C2=S&*X5;3bz%I9PQJJXmyfN*7s;Oqk|;jh4X} zzHhM2%M7}BZ$zW-?VW68gZ=7c!fqW_rgMHgb`>6CVZL;L2$Bw9slQMVXu%$NZNOat zX2WY@-{16mZDbB`-;%K)DL+O3fdIy3+V9pU-gF-|k;(%s^noc{R^FH%t3U$4mkrn+ zAVruRwyLADhCspciK?#1|FIGKUq#CQ8#lK~`%kt0bI$5Kw`wE|oG1G{umR({0r{tiLX(Mi_;_KTudiftg zmzAJGSy4fu!#VBmU%`=-$H8mAy?{mtnX`lGR{~)F`?XQKQCug=E%}ovMRSC>On;RV ziBjb!Wl36p|7kmID2CyF@W{D{odr=>9{;hZlW~K|2_`2ii_pG1MEGK%j3hGal2yi& zy1=R}u;~`EG_k2b)fon7PW!|7Fy@25*p9uuJ$F4+=(^EQ061yYkKvx0ij0j-u`o06 zqnIe2$!jx7Wn%%tBzlAYW-0m+fb|?AW}MKpOiX1%F4LMq(GMKK_w=LTxHJoK+g@;0 z#LLQ(l8$f+W&#IVUL9A)G_B}q^uN(Ng~J(nc0o7%5{+!FNydG%>*4yCk|I#bPMg0L zjL0&GSU7Q=7mN#?%nx4bD_RTG219S_J_85VY^tvRu`>vTBKKE!h&W1J^_ zTz|(t_tO_LR`id2Y17bjC)!F0^LUG#=dDlifJSp~8q5XNk)O0B^U%rejHuJ3h$ji< zx?ye`+e`zrdsI(x_vqnS9yF)$qk`-?7>9`gk&OOG2%Q+D5E1C-sQsQ%RMhkbsz@g- z9NY-7xW6RlBpD7V?&J&C|Dh8pl~cgA=nVw#MuS22zOQl6ZVUU~hvq`DO&a+j&Ov=Q zyr!MiZ-oX1FH};1wN)~ACLUV$!D*q zC~smE)qfM-(`-sdFTg;!1if1{{cn6Ms<$v}=7)V~%qjN{Kg*%-j15&k3 zVeO7`4;}H_|DVkH&UoMV*}KT)A#N}fyO}+#w&@q-A0i|$cp>UI&;W7$&RKO>P|lF+ zJN-2Eyp0{W^m&2Ydgb%-^I!Dmq*->|ryDT<9Q93>X8aCOVxW1p5z$ivgHUjPiS@+~)+e`>o59r-+5tZ<>u#A`6_qh} z?k#Ql+oi$F8|?ay>3G0o&4w&sjzP8=1Yv3j2e|}`)1*LQ6{Y19CXZzspug0%bOXBG z8_TQ<@nif7!JRS`U#mhZ&Iz^@*G4;o<>0+v%RHW17B3fdQ@!tQ6O#r9ZHI&(v+jVr7M)!znxuJ$E5|z2J6*Rh`n! zH);X}RVA(AF)5j+N9M1S5u|ipd)(sU?&#e@7{OD1X3W<+Rz{hg-Yv~C+oV+#B#S}; zHQGxl!gtnMDl`|Ih)hkb^&1J*&;r{T`O|puA zzWFN{=JR3osF^%6=^L%gy?c14F-%eH-pCsT3$l*o_fnR;nyHPEbxYGBcZ00nP7jl7+ zt*8mB6RL0bI@PErBqrWMzFj^nB?M4MIHA%&OH0adD)t`SxMNetrMvrAQD?LVJyh@e zctO>e<73lpe`=Kq!zif*^Y^$5gu~a(C{E$Q)5q5%GolP}564ri9@O#h&PT*^ugqop zlKb!l`}r}Fk;VAkAgz_ew6?Oyp*NxWrlw@zJwAL8_LG09aI_)3IPokRt(bTjxjGyR z=IFSkR1Fi@4(HwYs%{ZQ-(Q#7UrD_9(F~{Y`I)AYFe1Ux?|jYZY~in+&14R>%_HoN z?gDm|T_KPMs`giE^!Kl`>%bXOlN}Rnhps<j8guV-Rr98d*us;dd#aU6)Fk_nndM01`yKp4l<>#&X2Y+cv00bB z$(T;Bv=pl)J-ntqOR_(=G(#ON`fz7j%8B`Z9x57>%B{@LoyUw1o_~io~Z`Y%? z7rodwHR`iU{GXn)vi`nnc0$F&r^tQ(+!^;7BY!?NzEES&aGe&Z+Tb!CuVf@>^}qYd70L?mQ(xrN#74@ zZBI9}j7d$siEY62_|)^WXGm6h_xD*HaU~Zg>S=m_8!$bFKdmr9`6SXmo9VZfFuj3evC(5Y`5j}FyC2u)m>yQe~3XIS4EH0~Pc0pYuiy_r%S7`o< znY&%etOye+WtOSau_~7_V83A7Wz~qwzWtL`s53e=;zN7(T$;-UqnsUqqBB(g*)v}C z?J9!3z2o6mAuqh<%^=Gb}Y(VveF^cOEbR6Tv> z$BX{$-nzk92RSkzOa5O}4mO#Mk-9gH=aTy( z(k7x{B8TrF0Tx-mcoLva$*K|&YFllC4*n3cUbHqOtZ;NKyV*2$g`3T@6dEOq`SnOf zPU1!STb;=Lp@zHeR`+6J{imCzMD37phKeDK#-pj zjjfhNE^!NrqNP;$#NAegOW8GEOfDGMvO^{%y)GS2Y7H?(mF}l|EVaY2@7^sTo0H9Q zI9BtWwy8@l#g>e-fz=}W!C!RU%!aW zPB>&y{N}xTL3y5?{ic}>#r@JSx4FwN+Z;{6$yYHB&%~6qbYkbk>yIwn59>5Ahlh5+ zz=XCVEJQ!V@Is@js8Hu<`>R#U$vAVz-yEOAwbhoXV^S4T(+Y5dsoRQb=OHz?&(t{p zh1O4&Wg!jWkfX8Y$Fd$%&35td@DzU|>(V8c==ksQJUgrGJH{(5oEh)!8v^ZLXf@*# z?j;Is(GqYn`O~fNM(p8p{RvCA{!bJfc3dD{{h(KO+8pSz+cU!Ma)vFMKnT>$N(+($ z`=d*yR|kr$m4rYmI`SmEO3`h_%|cx%b`#DXvEqzt3}0O4+>1+=yn#NMmu{ zEK5&u%U=@oDsE3$5Oi^|&mc2y;pIg}G!8fJadE(-0*wi}M)>i#B6nhUe#2)qWInqb zl7zfUGB*NO3Rz=0#-lH>$rmopG(+D`CFf5&sdl|fzOfMur-SZF=YTIs`y=30Kd)M>4Yi}Yg$3d3-O04U)@106X9$NA2Yv#{n{)Ao zoQZq7ylT`gSKl*Ujz1z0FR0TgT9SDcP7`Jt2YC?L9`-Ac#EdyocIZ(_t-=B$^Vxf!vBRV9N+}>%%89(RjPoy+<^z`kJKtvtV8|>>Ow%t literal 16000 zcmcJ$byQr>moIu6hu|b3KyXda;1*nhySqd1;M!P#1WiKF-~oa|aED+axNC5Cmj=4u z;XA)KGjGkT_3oX!?jLYYS6A2BRds6bPklbSKBy|o;$V?t0RVs__eM$`03cKke;8;0 z06Y#Y3j#mf_-g99OIf*Dyt8w0w{vy^0Pk<|5Pw6FR^pJe^z=D_RsloP5UVrCFcME$YcJ))+m3E}GPej6d_W1ddOI9;FSywtzS z(&0N@|F@RKH?gd)f7sG;pVZ4k>#4Z=yO{Ze?y9l&q$4j=>@bdtc5z|p$k!h>lbc9F z7%!b)hIeGh(8}qq3ZQoUyyTYQE{(g1{`5^yZUC!;J)w)UN7KqjP zZR@Z^o=J!$O7q6Pe2vFBtFD!~&1Gl0KUw{~=S5KI$#-&I^2{?=Oct2Kc=8~RQ&nN@ z{H}(BsfF`9BrieE?9dIqH7U&b^>hzG1%juH9xj!yK*$#|-(c@2g&HfE|StBAgpl<1~{b4bUBM3Ll$x zMF_{q%Nqj3YxijORziVhDysZ|6#~1^~+QQFYAU#x`!)U-`Vq+Wn9QG`3V`?>CQeQ?! zhRj)ez!-Xc45#R~vdN?i7)z3dDx$~qzVl;Gu^PYfT%2mXe@!~F<;rd_RdVtJ2mR;+ zBwxiwu`ekmYno9n!v{7@(XXYMtZHBoae08WOzDD5L-VWBbsX>a@9V!d_g|T(#S6wE zz|%wi?tT-_vhq%0nOp*(;x#LdLL%E&P3VPJF~?f49`5+NT`2y-phd&(?%T(F+*y82 zo1h8sAZ+;ZC=!jU*G;0_}Q?i^Ug?iXzx2MEv*Ijw{IcV!?EIab}!`R<^31odVP$- z#CKDNSD|8eIoTA$qN3T%gl&~1)^6$j{xJ;rehg>CbqtugP1-*~{CJ&U9l7vz#>0)g z7z!Q~5|XytlG5=V4y!*X1u#rRX+Gch6*BQ<=PaZyZkoSOmi{Oa87OI%T?A7!aDVPDNFLbV zr)He_Nk_+o!Qlcz_1&T(7k(oweg5|d>TwYoO8+$09vST}-kZf2xkK zBAC~ljQb!ECgAqn&cnr07q|z+VIP{zaK@S0b@?H=a3%np~p{L5$%_-ID~V7!<@vfXxnOL(JrMRUFQw)v`ht@ zSVhP#hFA|(Emn`}Z>^WggFa5$q?v*%jhan071#C^?A5Dih{wU) zli=XsF^oDXF^O}qu?*>m$`@;XaZ#7M%C`AyA8uwkc{^nM4WkGm?8#5_+S5hmQReG+ z(D&yvi+=>>^>y)d80J7!0`}d*gHReua(7Gh_rdgQX~`3*g#Zd-);~e8t7x?LFryAL zal>mZb;F^rW@)DH{xK6@H5TK|!>IQY1Y?Xj+aVQ}vdf~-y=lwCWB{+$h`1yCFlxww z=6Dh<5}_L$GbRY-3S!3{JkTQIbP5`%xGO@H4I1#DuFpCi%-1^KV{=pDD7*~{o62+y zk^75Ir}?j|)RJZ6Z=R0thsa|rq%VKK!C%`_#+xF~an0iK(=90e%)mv%g*g7iU11N| zdN&BVn)e;5G>vzkq0aGQ=^vQJ>Kr?hwj{iFuC9q2SVi3~9po;q()+u%*(!mcfGy5f zGi{kPuosR()OBSG9>Icv)nCSHiQe`1pJQq# zF9{16wP{TK?W25!^Ji!P-Rq?28p>ViL0T=!_)*)g16o=0kdB~G&*2ay65^wGt)B^3 z!e3~%T{oF4dI$ONmOb3~n5OQ-0Q@RHJ`U}L*CIB1d-UT_2i)TgtiU+{@2sASsdAv0 zKcbGNF*230u2P)y{+nb32aC+Y4Wk|+$BQbMH#=+8ZC>gA0-)?LJ|6` zi%Mo$DI;PE$$sT-$Gg(fCNoUt44Jp*Z^$STE!C9wcW+!4ps`R;`knRoT-(ZoH4Z(MENDkPq-5Nl+H=ypz5D! z{^}WaC$NseBtkw=&tb!${LQ}UJfEIs-Q&4g%mfY1vrIrp> z+uO#xE(~{!YkTi`L}$V|crm)#vl~H;k0@ajuwlb}%=_r&vB3-XTj>vCtjtWtwJP*(4$q z^v!jCR6L9wN(6+OeR~Njh{9%?SAVbOma8=y7Z=yNnem$7X4b}VF-tu3@i^Z%){aa* zigv^~reVhCizR3lB(qjDG|s6;M)4gvV(5HQ1l~MKEW&~pbU#ZH8HtS!ELM~}*&tcq z=HkrZMo;GoFpv;LtHUO+FJS*mnHkzz0OMkfcOBVrzh;$vQ!M>WBsuYBY$|#;~KOLylqnp;`A(jP}ygovQkxwuRoziQYCQWb+7fD-z*j zYoNVy4eDYiiTlSwgypq!GXda|{{sU8hvV*P2J~+Iw0l%2D#Tet2pbw(T|!h9!3-q- z#)ZA8gI7+vJsJ0^MTq+LxIsT@g5M_y!@u*xrAbtktXQ{#E`PDyeA)8>y|{pe=6Z#4 ztrRKoX{xC@&3E`~-~HwHS?YUL6??-Q*f58g5 z3*@`|hPVLINAoBO=@Vp87Si`^^_J!enX&lyrPl+Awun#l$=om0}vlv&j zmO4pU@;j5$#5{rk;rc!_fY(JicghHe(tvglQyp*UAU^q%1GQ_TU5^lYmjxU;F9`WE zd-hTWac|!3mD}wg%PT5M>FOra`Sv?gvc5r_$>v*JHfdDcU5*Zjx-7o!zSz5yEiOXr zl^D*Rza~d4ZbxxuQ3qIjYjl>Y^cZmAMMs}HVx4ejZrjR$hS^`(Z zc&UOi(Z)DlM>O{883;)hhP-O;^P+=lo&LVmg%)%Kl^WEoev+l=DAFpX8?_;liK_}&+w~QP1DzrDya`~(wDQwv$t=@W8=rm{VmRlF6>#CH) z-&D40@97UjjEP7C0b;1As3LpF?FT9g=$*5KqZ^{owYJaORiGPPe+{2q+v#_^BO^OH zVSi^}T(qWAwq{ZR`75}}6z@S)<`A`>S4ZwMv>}XIK%Pl-lBm}v9IS}XVv~FPfXsxkNSU}H`G;#wR4%(CajaukK4pSU%m0To2P)HA7r4Wak4FL z_^bcp<0){MKvbg6=Pthcjcwa)nI`1V&G1(vVV6-e3eV2Are8GznDk(c#;dvD*Dd)u zaqY2IQ{Js?hKwKJm(|=3CKbS(zACoaYcGSOZi^BtBl=}%p6GOF^m>x z6msW|aZu_v0S{JpdlIO^YIAYVz>j@CcaH+eBPu36*7beJQFgwF>?oA8KkyP%>p_c= zZ~lj9<-b6lNX{&s&A~HRrT+_60~1m9oyM}ZG1#<0K)Gzd$A4Im4t6>s&ffu^wQIK# zdA`)2cVV^?VL`&ye^m>9_o*~dAG7#nb9fsaqzZRMo7#MdyWU=5z_SVOQYvE!YPFz@urp9(ux|cwwl$nvQ8BW0fY?poKlD=D)o8vWBN9ah z5;E7?*m!l_eL@cUh|m|IvFC32Cb=u~IC z_Iqk)XXi8xc5;&VP94^u!`ANLdH>l}$%RT?;)cECXv(!wiGfJa>u~@0Xq}b0^^e0Woa7GM`k5!#Lh_e(QHYUk;JUOfAPDN zx!14CtBG-~p7a_4;S#vG z>oeP4*5RFn{7}e~tlnLQXQ+nAqvygpU; znn4#?^(Wln@4@)rohVMKTi50Eyix(4sqAP?j8UisqW^R!LV&k$e;odVkSVj($Os*; znFMgzufL%D^W05zUE=qpivLl_u;9KZ2bDwGd>OhQA-@nw;A|S(OCO%WEr70M?ndKG?tR$dF?-NFVk}oKlomGtv=VrxVVNP!DXldHkJYyHtcaSu2P?lh!p!5yZ5v)bDOK?MO zXn<_kq70zEgS;#q@MMEwLUZa}K2=?7sWOO^4lN!g0j(N@FwILto@{_W{I~nWOf&4KDB>9Afc80*`OGG)4eO~n#TDw|=@zE!7NaKN6JSgl5NCbj4Xg6kzV)u~p1Y5?ex0?aQU!)R0mt@z0C8ksS^ z4s8c%TOzVz_kJ?SrZ1m8f7+#0@qNa3Hl+nC@$;$BQ?~N}hj*1QMIyxvj2|W{`Qv|t(#`5eg(Mz14-Oc z+Bz>K2)#i%hp_R%CiVa^VI{ozZ{3rP2e%BeS^>-GS{IXL2;6$-_ZWv^%69XZAhlZd zXyT;v03_Jr4UA(8-n|wo!*|-b;Fj-KdBi6A_BTsHVrCC9Nk9GQRg=)O1FX4RCpttI zmT>#R{XBM70HwWqj^9tl-AAd%dj+kTkpPEjJ8&q|$=)do0FA`f+4a*H1sl1!xn`Ux z@n65ve}I1r(@l7~zFe?zbuxD3bK+OGVZ(A2h(PRQ^#0wfs=F4wJJzh*c++;V`^YJz zdw(&8`qL*0(b{jN9R#58W;z&fe7s+?J!kW* zCpx+P*8PAh`l>Q-V0|7A^;nSr+JC(#(5*kl=5vf1wOv<6QHeYtq7AsYcr6l53Nj2n zxy~lQugnAUn5`O(0^s^m%JU(X-o1vRQr*q6O?lTM&Ogw>_?GxE0Q@2xR}#qVFVbPk zr7gLfVczn6TB>QVvT4QvAt9u)=WO_*S8A`fyIYUKcbghGo{8|d z+}Atbo5s7jxpC_Mi5{r0pW1st9bk2V+7{bsK}~GPT%Jo6uyGzRdKMNBez9?m`asWw zJs%+>!2JIzGF1P)Q1ib~tcG^}r`hM{>wJ|5QfN9;MEZdT3STDvj6=z0${**@dxem{ zkYE|p(OH`JDgO#HnT9EaULm&!O+aIXKV8RtHQyXO7Uk_VYVA!L+XK0orJqi#fo<_M ziAinmP`K13Jua*O7uG-GhW^ChY7LTL#oY{geM z$3Gu|P_qRgnoNO|HQ?9~^3xidWF9v?Bqci@CUry2+}2@pU!UK>j0QhBe*){Jf&JPVyQL^ma64}b}78suVj2|4qeox;waUgFxRY`Y68 zrf@>6-N?g{-(z%7TXqTevkirVL=_b<$gpFHaEv%tZ$m--bqLgQdQa}xtLPBbe^h645kLp z_ad4&{iipNpwqB-hloK&U!RFg?yUHvp43l|rSeEjc{AI;s6d9$P^WE?)Gk%=7zGXq z9K=A=&J{LS*HdV5eL%NK>tlv>Nogy#^)+z2Zq#?Vw-?jzQ}g5hB;Y(KI>iYvg8n3n zb&5URH}bn%Q(xCwW*c;?W=Y9k6q;yxkRa}lps(zwSlFCLvcx~`WU_H)IVe1l8LT0R zJ{Fuqpjr)XCmF{v52F?4#9^79Y+85+Y?@{viG{7b+Xrm|Dnx}s$#$nabr(OLVmmcv zSKtTzL-jnJzo?kB3AZLkPgjmude=;uFlcZep7@DrV$4Q1|0^;zOnq9fM5O9Iml|EC z6V6_tJEEYj8-(xZBnJJ52#PV49^MqdiZ#zN? zT+fU(v_#8(ywSSnDd-VQP*X>I85RMH;P;}%Mdg?9qp#~F!Qa2Z+cYRpfF6GoDX|>3 z&UsvJJdPd}k&3GW z4O1c5ob&CdwAKZ2+i)~0W0yZbNke7hgaJB#kZpKcWjhKh8&77K0VxH|Q5#8@ng`iq zftffck_@Q&33I5*{g)z>^#jy86c$+gpE>VbOwJ>~*nNgsOTF2+rjHwt4-a*{W6YNn zS>wG*T9K9&b68RVsg@!%M*IHibOKm^>n?)oma>ndAV2=JpE(fQ{|(15QDM84-UkWldqP%423UwcO{ zRLMRG2m)oOSz+zOheD95-~eAIJsK)%*sVsa>4c#V4V4P4)C^H~zfDsnOh%`GLMH`1 zxgF5r(4+Y`ro=?fRUoM+JPQ-Ua(&>gr)L=4rfX1~w1w;G@#+wRA%b7M8xWwAY zHYi=}l9al=1D4wi{yQ$CBJjWuR~!JI^FHJP1PHq2nu#0-iZVD_iyX@^ez`rZvQfx# zGBQ4*EbSN4do*HIQ%5N8H>G9kegu);@MZaOAItJ@SgT(4R99K{Gaj1X4P(8owL&`N|)xNAf5~_oo{E& zXh`RE|1R#Jtt0R3yIKi3A~&riu^7E<2t0Zh2)Ap3N(-EOUABaz2i)cu_y`ETVkI+V zV)qijvllK;7u=`{G&ZKF)@OCsXGJP5LK*BNjeE>!>Uk+g_ZBI*-k?I)6s3z)MW*NI z^Y&S+CP$c?}^z3{WrC9^WDAY9k;liXdULKw%LV>94 zW!wVcgk;z5DX9FQi^IM{|L*#2zwsPSo0LJYT7TFPm@4fBdK2IK$nw#nazm7^}Nt z36K^}=Zv?Ey!Im5XUf#>i!U7Jsy}d%f{i>>WQ$Xbq$T z{k5|`MMf&;yd6dUt1|+WQQwnmiJvdrWb}Q7(>m`LZ_hz4N-FcuH$7O&&l)YNHpcC}xro2soeGM{1k^dp&L^j#H$Kp?_lwKiZAGwC z9uug*c?*SbQ_ezH431;}zE{C9=oiOJ`MB`SK)J&g?{Fm^N+n_p`oX?+e}|IeV~$yF zxi*jOi1&*@FtS*&+?9f~K{0T*6vQw)y`n!4H~xo%N4dUr8;xgmAhJC=wZUIv1qx0Q zbeMZMi>_6+;o%nFq z87EZJX84PdEOCATtHHoV+1(AAn2`RsCo8QdbhXr1)NSHB@v=x1k$=`)Z6zzjobUXS zB*<{w(m0jZpSId4VbmtBt!3>H4OpyJht+L758f26!W&2zTB|b~HD({)!}$FKjJyL; zh>j1r4HyeY^QV_y2!ihNL3G08C2&ZApz&VpXWj~whkOc#Y6Kq*^2ePQ!|(T?T~flE z^YSwz1uCLIlPc$)03g<;MJd6xC-C_3xbTA^apJCWhai zA3ZIG8hCrsK&|_V$h;Qe<4{Ox^#!ea*Tg&(JH`k@6TCPkl|LD^8O)r;1u7n?sp)sa z!*X(}N50ijAOL(TUcXZIxgdvIzZpAT!ba*MX z_?DY``7Z`0O}mnl=Y#1&Zm`Xv^k6wmV|JAU2uQXaoXcxkgnA6Tt$j#_=-R!aSU?6< zwFNJ^%E>HJtVe2h`gH$1HDs)(lheG5i4BSLmHFfFT1Dpf-D6$1wLDVv9BG5NjLowS z+M1LAaj>mUz>jA5cNERKyQwl5KE25HBVMZiSHUnTV_Ho$^-B^Bt^6C!6wic2n1cs= z7`B9PUP7KcUYC5dC#njsmP&YWe$>A^Jqb|}Db&fsvt8@)Fyt~F&Y*;dsojT!_%Aao zk6vo8sTJYZ!tciWat1ZpYBe$Q@F?y8>=6Ex>vh25TRTuwy> zDU}rjvoY2-v{Ii7bTVdy^RnVKTzrhJ-}9s*;~coMk#ckG}eFs*qB z9)e?gR5JRk>MiAALoOwIK>G)3wk4IUVgXP11*r5OVQSpF zQX2HQd@V96>P%mhmNqmaj4@LCa*EFq+k| zN2n+pGw(fGmdiXZx4CaPTi7dT_PCfd0RsS-$e`fh@NJ$mC57bY0SXwzIH7PmI^nr} zZbUI_pl)qRT?y>%w29+=Ibt{PxJgz-;AJuV&(}QwfIlKWJxxtyfdI|NzclqOVtS%5 zaBw#AL@V!g&+|`0<1}@2BnuvWR)QWj)Aj#mE$dxI4nmIG{9`QvstZkj=9pb8>F78{RR(ETqu0hk z`se_U+ENWOek9tef88Vk3=hT($n0t!NgmBRE3G#cPRUH`!aM`RHE`~Y~kq7RL z#;-_;?j=46@*=2!=Xx6YyZ9u1(%l~oT-UZED$RNnfFMSlwy2yZV#6D;oeBLNJ-zVQ zB)2W9&HPrwxsSZi-hrY}V^$S+Mt9AGr@(__P8jgTo%}*r&rSbB@4NIQ>YjJC7V!Xh z|4qbRWGNsi`lwZ*$0CkZB2(lKiP*HXy$je0?LkiSNfz3&gv|EAqf#|RO4EUezleJg zB`wXS!!Ld$X97se82D|RSRR=R#mR6TlK@lziVCDFgGi${{{@o0h+}NH=?u)@A^C*R z>G^$yIZT~a5NWI$TfWrjf*N!txxVU1N%@aA3!6BOYv%!=xAKwMJf*s3TY#Snf$Ht$ zM|le~0*>MhGJvBW!%)?ed?Ji1GfZOnDS+61fBjXB-&>a?0DN8>ZX|lp1n%EY-i6Nu z)0IhF$;@%d)eXPU8?Ld>{*)q%pB<2*q_4_wd!rE&&rci8zaEdq#E0Y-@cQ_#S07L! z^ZjX+_71+_Vx-FUe&Dfc$kV_&@-oF646D04&UYO3)^H9zY7FTPR|QaFZ+lRRC&?@1oX3V7B2 zjraO()OL~g`+%1DIxod9U-UASWam4ORa?>pfH@i5_LAXz=6pO3sE7k){1}7#@v-kh zs}wY=e~>F0Wl?{KhN0i;GP~FAgCyMlovVFLe#c;LfP8KyU1QvIhKw0JF1k z$UoH2U(TGH2qA9|(0vQbfz^F=G-sfw*_Hn4i1fG~YqQOTnsX>adNVo&Nd955)RAIq z{Q8OO-^RW&JPw^-sl^01%aJBbBZe{CBO@cUlarGlw`IXq$F>Sh#soqk%N|nL$beN@ zh!XtNWQeP|8B4}Xf+)w7y<;9~qT)a*di`c@t@HRIptHj6Zkbm8EqdwB+PT4t#Sb4{ zUx+*9VlUf%ZK~RA!}SW|>DS@tn}JViUx$R^2^n+{bJX=|}(Ldp%N3jEr#7+1}KK zX7OzI_VhHceo09YhjH$f8#dqqTw>X*N(zYpVC-#HLxhVbi+2@5T3T$sZwd6g#;`nv zB>hu1p%ewdi7E8tPjczm>%V_YR|Q&IGvwS_(gs>R226(^S@D1Vm&@jPqT`ZR#JZb$ zvlARB_NMBtcd_A%>|6A(q#1!7Yfn{$yzuv#4k-Wu-ML+w7C51#52|c|JIWQ1E9$pFQ)m$s! zZ4Dv`M2f(?di?c=>OdFL{s@Y04vjaOe?IzjMOrQ?509DF z0HF;3Q@L`TUt|Hd+>p+CC$rjMi-J;42b3<)>gw5ZJ|IY7`=j|@JpX2(roSF05czDJ zz^7^2r-fw{&Heh=%&@3O*jt+qC0@C1cN_vi$*kSFmDUW8w~;~$b1){i<^cYc zcpX>usYj~M9sdj(F5v-(O*zxt)j}=mprVhp8OM<0CJTt|E~aBNyuu=CG0b2>E-EYQ zxjtE|47l|K^Kbyb?KF;3lmfs9cP<-mBd6=6U)&2h%||F)3?8R_9afkQca}0KrR3zY z`nm-sV53x9_R&aRsNBK1U#x zj$40%?!pq)fMqSXoNQBcg{;bcD>##?5(Iz5_WFDpxt^{`P_p|*-pO~NU3Xt7edFS% zl&n~GcDDEBtPS~CQE_pL@rPo$2Vk6fbYo|IhB=Yuq^^i4$Si5IupsVm2+x82gP32G znluDa28S_!FE6YQi6u_IIy1COY{Pu)dZ{tN#{mOZ6jlN=+5JzQR?>8L&!$GfUCdE5 z6po~pS%sA(wig>srLs#7X!`o5s`aQ+u$Q}Ov~xL}kqu*$?(dh@8%LJW8zke;2;z`t zLOwc;2Mu6{d17y!HlD{Nwh##l3uAl5JP*zEI@-uv;&~U%nY7~3NTqvJV>TD!P%L}6 zsbW6@y$xjm?v2*}Krs`~CntwlU(rrml{Le%TSC>+FJ2TuuItV(W?)8U3M2x30|NkH zOM5MNbF+BWfz?Ws3bHk#uiRKEQ#4vVt5!lXX+hU;v1T9+`wZP5tua zy;-M>OIwY;HAhQHiQ+>G())5VspmENtn%`Pct}4c-=0hvD4akMd|FQfsMpuMMdcyl zOdonNY~jUyiPzUnugs-N=859E|Mr<^YkzERw#cCgp32Vzn~tFHeFk!k;7OV{3b*0o z7K1j6&8Q2FMQVrwLdpbT*y!FDmcvt?R52F)YKht(_Mzc8#RtRu-n;k)ssJK)s!ZNhW9&uB# zoixzh$0a*5GZB{hM?cIRTLz@$!D9q6r@tOISVDjY!6=UGV-(K-$Fr4mNi)G=?C!^p zbHp!kH_!^`zIWz9Dj5+!tq`69XLmQ{?-+v(H*@m?{qO$HRM`+;?$2&iE1IureACvS z=BG@V3gyX@nUOEFG=OK4ro zbX&vHl$GwWKYUQ3W<4O=pG}Wd!HQcuB}8uHOVPVn*dA3(TX~(2 zwj8WJaPyPA_E0(E;48Dq#X;p1LOjXpdx)biL`=E?6R6KmRuA*S^|-c9Gw+&==q)xq zm_vUjLxnQ`Wr^Zdza0)N6b<9SEz^3W!J;`M6h!xDAlr(Eqlx)rAm~h zijf8~dL+a6f^*n0^X2YLeCZT=A%S^{8WjW=#(VQ`>v(m~)E;rB+at>zg;DsRSeP(>3lZ!?p9bsY;4|mKlJ%=6-i=u9 zHM>o_ceMvxoJJfuwfSSYBI1VZ_5S3t;B@EYSmh5GXA=_UxuX^ zyU3*cF8Dxx8?wv(x-)>y?fRF5>bLJ0eht=5U%034ooqkOaUM zSvCZHCqzZ=M24QPkDv!B@u8fa>v26Ug0i|x5QR-(d<@z@Dy)nH9MS|^x&8Eu;Y3L( zeqOk9+p^Nqu3kp{r7HN-FF_fCrG)m%dD!@^r{{|~3L8dqJ-gs-k@%^sVHv(U8)#fn zaOmSn#z=dTI5fI*%GWP;1e|;i=J3c*-x~(JJ%E{U{ZZ4}7gk{l2&qqWwG$hHPyRJS zIFZiZvHyc$G>3eA)ae8Y|U9c`J7pPqodq> z;`m{sHk%pN61Tn2rW7rXpLm-Oloibt$qz|bMk?cHasG~C4BLyXscI6aS*w8oiu<$?ju+z2t;y(ZIl4H0*~v>JU)3YJswdK7 zUVkTD_->ULr0`3V?42~RK_s|@!aI9+nDD~r;60>;;|4D zKC^QYt+Pr6 Date: Wed, 23 Feb 2022 00:57:39 +0000 Subject: [PATCH 63/84] improves formatting of the couldn't find reagent text --- code/game/objects/items/devices/PDA/PDA.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 8a97cc9f80..c339b0024c 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -731,7 +731,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(U, reagents_required_string) return else - to_chat(U, "Reagent with term: [option] could not be located!") + to_chat(U, "Reagent with term: [option] could not be located!") //LINK FUNCTIONS=================================== From 56547a2556e6ac516c03a85b05efa25ce466e61f Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:38:04 +0000 Subject: [PATCH 64/84] generalizes recipe searching, adds chemistry functionality --- code/_globalvars/lists/objects.dm | 3 +- code/game/objects/items/devices/PDA/PDA.dm | 30 ++++++------------- code/game/objects/items/devices/PDA/cart.dm | 3 +- code/modules/reagents/chemistry/holder.dm | 32 +++++++++++++++++++-- 4 files changed, 42 insertions(+), 26 deletions(-) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index d29bdfae23..921b512d32 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,7 +16,8 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions -GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable +GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable for bartender PDA +GLOBAL_LIST(normalized_chemical_reactions_list) //list of all /datum/chemical_reaction datums with actual sane indexing for chemistry PDA GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index c339b0024c..1a130998b6 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -371,6 +371,8 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • [PDAIMG(dronephone)]Drone Phone
  • " if (cartridge.access & CART_BARTENDER) dat += "
  • [PDAIMG(bucket)]Drink Recipe Browser
  • " + if (cartridge.access & CART_CHEMISTRY) + dat += "
  • [PDAIMG(bucket)]Chemistry Recipe Browser
  • " dat += "
  • [PDAIMG(atmos)]Atmospheric Scan
  • " dat += "
  • [PDAIMG(flashlight)][fon ? "Disable" : "Enable"] Flashlight
  • " if (pai) @@ -710,28 +712,12 @@ GLOBAL_LIST_EMPTY(PDAs) //DRINK RECIPE BROWSER============================= if("Drink Recipe Browser") if(cartridge && cartridge.access & CART_BARTENDER) - var/option = input(U, "Enter keyword to return a recipe.") - if(option) - option = lowertext(option) - var/list/reagents_required - var/found_reagent_name - var/required_temp - for(var/reagent_name in GLOB.drink_reactions_list) - if(findtext(lowertext(reagent_name), option)) - found_reagent_name = reagent_name - reagents_required = GLOB.drink_reactions_list[reagent_name].required_reagents - required_temp = GLOB.drink_reactions_list[reagent_name].required_temp - break - if(length(reagents_required)) - to_chat(U, "Recipe found: [found_reagent_name][required_temp ? "
    Required Temperature: [required_temp]K" : ""]
    Required Reagents:") - var/reagents_required_string = "" - for(var/r in reagents_required) - var/datum/reagent/reagent = r - reagents_required_string += "
    [initial(reagent.name)]: [reagents_required[r]]" - to_chat(U, reagents_required_string) - return - else - to_chat(U, "Reagent with term: [option] could not be located!") + recipe_search(U, GLOB.drink_reactions_list) + +//CHEMISTRY RECIPE BROWSER + if("Chemistry Recipe Browser") + if(cartridge && cartridge.access & CART_CHEMISTRY) + recipe_search(U, GLOB.normalized_chemical_reactions_list) //LINK FUNCTIONS=================================== diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 9d02207375..ca72e3371b 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -14,6 +14,7 @@ #define CART_HYDROPONICS (1<<13) #define CART_DRONEPHONE (1<<14) #define CART_BARTENDER (1<<15) +#define CART_CHEMISTRY (1<<16) /obj/item/cartridge @@ -78,7 +79,7 @@ /obj/item/cartridge/chemistry name = "\improper ChemWhiz cartridge" icon_state = "cart-chem" - access = CART_REAGENT_SCANNER + access = CART_REAGENT_SCANNER | CART_CHEMISTRY bot_access_flags = MED_BOT /obj/item/cartridge/security diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 89ff24d2f3..e1602fab4a 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -27,7 +27,8 @@ //Randomized need to go last since they need to check against conflicts with normal recipes var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized) GLOB.chemical_reactions_list = list() - GLOB.drink_reactions_list = list() + GLOB.normalized_chemical_reactions_list = list() // chemistry pda + GLOB.drink_reactions_list = list() // bartender pda for(var/path in paths) @@ -35,9 +36,11 @@ var/list/reaction_ids = list() // store drinks separately for bartender cartridge if(D.id) + var/datum/reagent/r = D.id if(ispath(D.id, /datum/reagent/consumable)) - var/datum/reagent/consumable/r = D.id GLOB.drink_reactions_list[initial(r.name)] = D + if(ispath(D.id, /datum/reagent)) + GLOB.normalized_chemical_reactions_list[initial(r.name)] = D if(D.required_reagents && D.required_reagents.len) for(var/reaction in D.required_reagents) @@ -50,6 +53,31 @@ GLOB.chemical_reactions_list[id] += D break // Don't bother adding ourselves to other reagent ids, it is redundant +/proc/recipe_search(mob/M, list/reaction_list) + var/option = input(M, "Enter keyword to return a recipe.") + if(option) + option = lowertext(option) + var/list/reagents_required + var/found_reagent_name + var/required_temp + for(var/reagent_name in reaction_list) + if(findtext(lowertext(reagent_name), option)) + var/datum/chemical_reaction/reaction = reaction_list[reagent_name] + found_reagent_name = reagent_name + reagents_required = reaction.required_reagents + required_temp = reaction.required_temp + break + if(length(reagents_required)) + to_chat(M, "Recipe found: [found_reagent_name][required_temp ? "
    Required Temperature: [required_temp]K" : ""]
    Required Reagents:") + var/reagents_required_string = "" + for(var/r in reagents_required) + var/datum/reagent/reagent = r + reagents_required_string += "
    [initial(reagent.name)]: [reagents_required[r]]" + to_chat(M, reagents_required_string) + return + else + to_chat(M, "Reagent with term: [option] could not be located!") + /////////////////////////////////////////////////////////////////////////////////// /datum/reagents From 027002f92884d0819b8004bb542a3d677e67e091 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 23 Feb 2022 12:07:03 +0000 Subject: [PATCH 65/84] haha what if we didn't show secretcatchem --- code/modules/reagents/chemistry/holder.dm | 4 ++-- code/modules/reagents/chemistry/recipes.dm | 2 ++ code/modules/reagents/chemistry/recipes/special.dm | 2 ++ .../code/modules/reagents/chemistry/recipes/fermi.dm | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index e1602fab4a..cdad332def 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -34,8 +34,8 @@ var/datum/chemical_reaction/D = new path() var/list/reaction_ids = list() - // store drinks separately for bartender cartridge - if(D.id) + // store recipes separately for bartender/chemistry cartridges + if(D.id && !D.is_secret) // don't show things like secretcatchem or secret sauce var/datum/reagent/r = D.id if(ispath(D.id, /datum/reagent/consumable)) GLOB.drink_reactions_list[initial(r.name)] = D diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 41c0ed717e..aab46bc3e4 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -38,6 +38,8 @@ var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this. + var/is_secret = FALSE // If it should show in recipe searchers such as the bartender/chemistry PDA functions + /datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact) set waitfor = FALSE diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index ad277ef4ff..4aab8e4046 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related var/max_result_reagents = 1 var/list/possible_results = list() + is_secret = TRUE + /datum/chemical_reaction/randomized/proc/GenerateRecipe() created = world.time if(randomize_container) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index a78092988e..ce27433c07 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -548,6 +548,8 @@ FermiExplode = FALSE PurityMin = 0.2 + is_secret = TRUE + /datum/chemical_reaction/fermi/secretcatchem/New() //rand doesn't seem to work with n^-e OptimalTempMin += rand(-100, 100) From 5029af901b173475bb4d5ce480e89f0ca87d3d3b Mon Sep 17 00:00:00 2001 From: SandPoot Date: Fri, 25 Feb 2022 16:58:09 -0300 Subject: [PATCH 66/84] Upload files --- code/__DEFINES/DNA.dm | 2 +- code/__DEFINES/inventory.dm | 125 +++++------- code/__DEFINES/maths.dm | 3 + code/__HELPERS/custom_holoforms.dm | 2 +- code/__HELPERS/pronouns.dm | 18 +- code/__HELPERS/type2type.dm | 40 ++-- code/__HELPERS/unsorted.dm | 2 +- code/_onclick/hud/alien.dm | 2 +- code/_onclick/hud/drones.dm | 6 +- code/_onclick/hud/generic_dextrous.dm | 2 +- code/_onclick/hud/guardian.dm | 2 +- code/_onclick/hud/human.dm | 32 +-- code/_onclick/hud/monkey.dm | 10 +- code/_onclick/telekinesis.dm | 2 +- code/controllers/subsystem/job.dm | 8 +- code/datums/action.dm | 2 +- code/datums/components/anti_magic.dm | 2 +- code/datums/components/nanites.dm | 2 +- code/datums/components/phantomthief.dm | 2 +- code/datums/components/shielded.dm | 2 +- code/datums/components/twohanded.dm | 2 +- code/datums/diseases/_MobProcs.dm | 4 +- .../diseases/advance/symptoms/deafness.dm | 2 +- code/datums/diseases/wizarditis.dm | 6 +- code/datums/elements/earhealing.dm | 4 +- code/datums/elements/polychromic.dm | 2 +- code/datums/elements/spellcasting.dm | 2 +- code/datums/martial/boxing.dm | 4 +- code/datums/martial/krav_maga.dm | 4 +- code/datums/martial/wrestling.dm | 4 +- code/datums/mutations/cluwne.dm | 10 +- code/datums/outfit.dm | 32 +-- code/datums/status_effects/debuffs.dm | 4 +- code/datums/traits/_quirk.dm | 2 +- code/datums/traits/good.dm | 10 +- code/datums/traits/negative.dm | 10 +- code/datums/traits/neutral.dm | 2 +- code/game/gamemodes/changeling/changeling.dm | 2 +- code/game/gamemodes/clock_cult/clock_cult.dm | 4 +- .../game/gamemodes/clown_ops/bananium_bomb.dm | 6 +- .../game/gamemodes/clown_ops/clown_weapons.dm | 4 +- code/game/gamemodes/nuclear/nuclear.dm | 6 +- code/game/gamemodes/objective.dm | 4 +- code/game/objects/items.dm | 8 +- code/game/objects/items/chrono_eraser.dm | 2 +- code/game/objects/items/cigs_lighters.dm | 8 +- code/game/objects/items/defib.dm | 6 +- code/game/objects/items/devices/megaphone.dm | 2 +- .../items/devices/radio/electropack.dm | 4 +- .../objects/items/devices/radio/headset.dm | 4 +- .../items/devices/reverse_bear_trap.dm | 10 +- code/game/objects/items/devices/scanners.dm | 4 +- .../objects/items/devices/traitordevices.dm | 8 +- code/game/objects/items/fluff.dm | 2 +- code/game/objects/items/granters.dm | 2 +- code/game/objects/items/inducer.dm | 2 +- code/game/objects/items/storage/bags.dm | 10 +- code/game/objects/items/storage/book.dm | 2 +- code/game/objects/items/storage/fancy.dm | 4 +- code/game/objects/items/tanks/watertank.dm | 6 +- code/game/objects/items/weaponry.dm | 2 +- code/game/turfs/simulated/lava.dm | 4 +- code/modules/admin/topic.dm | 4 +- code/modules/admin/verbs/debug.dm | 2 +- .../abductor/equipment/abduction_gear.dm | 2 +- .../bloodsucker/bloodsucker_life.dm | 2 +- .../bloodsucker/bloodsucker_powers.dm | 2 +- .../antagonists/bloodsucker/powers/brawn.dm | 4 +- .../changeling/powers/biodegrade.dm | 6 +- .../changeling/powers/mutations.dm | 8 +- .../clockcult/clock_items/clockwork_armor.dm | 8 +- .../clock_items/construct_chassis.dm | 2 +- .../clockcult/clock_items/judicial_visor.dm | 12 +- .../clock_items/wraith_spectacles.dm | 2 +- .../clock_scriptures/scripture_scripts.dm | 24 +-- code/modules/antagonists/cult/blood_magic.dm | 12 +- code/modules/antagonists/cult/cult.dm | 6 +- code/modules/antagonists/cult/runes.dm | 2 +- code/modules/antagonists/devil/devil.dm | 8 +- .../eldritch_cult/eldritch_antag.dm | 6 +- .../eldritch_cult/eldritch_items.dm | 4 +- .../eldritch_cult/knowledge/rust_lore.dm | 2 +- code/modules/antagonists/ert/ert.dm | 4 +- .../antagonists/highlander/highlander.dm | 12 +- .../antagonists/overthrow/overthrow.dm | 6 +- .../antagonists/revolution/revolution.dm | 6 +- .../antagonists/traitor/datum_traitor.dm | 6 +- .../antagonists/wizard/equipment/artefact.dm | 8 +- code/modules/antagonists/wizard/wizard.dm | 12 +- .../awaymissions/mission_code/jungleresort.dm | 2 +- .../awaymissions/mission_code/snowdin.dm | 2 +- code/modules/client/preferences.dm | 4 +- code/modules/clothing/chameleon.dm | 4 +- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/ears/_ears.dm | 2 +- code/modules/clothing/glasses/_glasses.dm | 8 +- code/modules/clothing/glasses/hud.dm | 2 +- code/modules/clothing/glasses/phantomthief.dm | 4 +- code/modules/clothing/gloves/color.dm | 4 +- code/modules/clothing/gloves/miscellaneous.dm | 6 +- code/modules/clothing/gloves/tacklers.dm | 4 +- code/modules/clothing/head/_head.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/head/misc_special.dm | 8 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/masks/cluwne.dm | 4 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/neck/_neck.dm | 4 +- code/modules/clothing/outfits/vr.dm | 2 +- code/modules/clothing/outfits/vv_outfit.dm | 38 ++-- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/clothing/shoes/cluwne.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 8 +- code/modules/clothing/shoes/taeclowndo.dm | 4 +- .../modules/clothing/spacesuits/chronosuit.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 20 +- code/modules/clothing/suits/miscellaneous.dm | 6 +- .../modules/clothing/suits/reactive_armour.dm | 4 +- code/modules/clothing/suits/toggles.dm | 12 +- code/modules/clothing/suits/wiz_robe.dm | 2 +- code/modules/clothing/under/_under.dm | 2 +- code/modules/clothing/under/cluwne.dm | 2 +- code/modules/clothing/under/color.dm | 4 +- code/modules/events/wizard/curseditems.dm | 18 +- code/modules/flufftext/Hallucination.dm | 2 +- .../food_and_drinks/drinks/drinks/bottle.dm | 2 +- code/modules/holiday/halloween/jacqueen.dm | 4 +- code/modules/jobs/job_types/_job.dm | 2 +- .../jobs/job_types/atmospheric_technician.dm | 4 +- code/modules/jobs/job_types/chaplain.dm | 4 +- code/modules/jobs/job_types/chief_engineer.dm | 4 +- code/modules/jobs/job_types/paramedic.dm | 2 +- .../jobs/job_types/research_director.dm | 2 +- code/modules/jobs/job_types/roboticist.dm | 2 +- .../jobs/job_types/security_officer.dm | 2 +- code/modules/jobs/job_types/shaft_miner.dm | 2 +- .../jobs/job_types/station_engineer.dm | 4 +- .../mining/equipment/wormhole_jaunter.dm | 4 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mob/inventory.dm | 24 +-- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 10 +- .../mob/living/carbon/carbon_defense.dm | 6 +- .../mob/living/carbon/carbon_stripping.dm | 12 +- .../mob/living/carbon/handle_corruption.dm | 2 +- .../mob/living/carbon/human/examine.dm | 16 +- code/modules/mob/living/carbon/human/human.dm | 6 +- .../living/carbon/human/human_stripping.dm | 22 +- .../mob/living/carbon/human/inventory.dm | 60 +++--- .../mob/living/carbon/human/species.dm | 48 ++--- .../carbon/human/species_types/golems.dm | 2 +- .../carbon/human/species_types/mushpeople.dm | 2 +- .../human/species_types/shadowpeople.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 28 +-- code/modules/mob/living/carbon/inventory.dm | 40 ++-- code/modules/mob/living/carbon/life.dm | 10 +- .../mob/living/carbon/monkey/inventory.dm | 10 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../mob/living/carbon/monkey/punpun.dm | 4 +- .../modules/mob/living/carbon/update_icons.dm | 10 +- .../simple_animal/friendly/drone/_drone.dm | 4 +- .../friendly/drone/drones_as_items.dm | 2 +- .../simple_animal/friendly/drone/inventory.dm | 16 +- .../simple_animal/guardian/types/dextrous.dm | 8 +- .../hostile/mining_mobs/goliath.dm | 2 +- code/modules/ninja/energy_katana.dm | 2 +- code/modules/ninja/outfit.dm | 2 +- code/modules/ninja/suit/shoes.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 2 +- .../boxes_magazines/external/rechargable.dm | 2 +- code/modules/projectiles/gun.dm | 2 +- .../modules/projectiles/guns/ballistic/toy.dm | 2 +- .../projectiles/guns/energy/laser_gatling.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 2 +- .../chemistry/reagents/toxin_reagents.dm | 2 +- .../chemistry/recipes/slime_extracts.dm | 2 +- .../reagents/reagent_containers/glass.dm | 26 +-- .../reagents/reagent_containers/rags.dm | 6 +- .../nanites/nanite_programs/protocols.dm | 2 +- .../xenobiology/crossbreeding/_clothing.dm | 6 +- .../xenobiology/crossbreeding/regenerative.dm | 16 +- code/modules/spells/spell_types/lichdom.dm | 14 +- code/modules/surgery/organs/ears.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/vehicles/scooter.dm | 4 +- .../code/datums/components/souldeath.dm | 2 +- .../code/modules/client/loadout/__donator.dm | 190 +++++++++--------- .../code/modules/client/loadout/backpack.dm | 2 +- .../code/modules/client/loadout/glasses.dm | 2 +- .../code/modules/client/loadout/gloves.dm | 4 +- .../code/modules/client/loadout/hands.dm | 2 +- .../code/modules/client/loadout/head.dm | 6 +- .../code/modules/client/loadout/mask.dm | 2 +- .../code/modules/client/loadout/neck.dm | 2 +- .../code/modules/client/loadout/shoes.dm | 2 +- .../code/modules/client/loadout/suit.dm | 2 +- .../code/modules/client/loadout/uniform.dm | 12 +- .../code/modules/client/loadout/unlockable.dm | 2 +- .../modules/custom_loadout/custom_items.dm | 4 +- .../modules/custom_loadout/load_to_mob.dm | 2 +- .../eventmaps/Spookystation/JTGSZwork.dm | 2 +- .../chemistry/reagents/fermi_reagents.dm | 2 +- .../code/modules/reagents/objects/clothes.dm | 2 +- 206 files changed, 782 insertions(+), 818 deletions(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index cf98755a36..f73d123697 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -158,7 +158,7 @@ #define ORGAN_SLOT_STOMACH "stomach" #define ORGAN_SLOT_STOMACH_AID "stomach_aid" #define ORGAN_SLOT_BREATHING_TUBE "breathing_tube" -#define ORGAN_SLOT_EARS "ears" +#define ORGAN_ITEM_SLOT_EARS "ears" #define ORGAN_SLOT_EYES "eye_sight" #define ORGAN_SLOT_LUNGS "lungs" #define ORGAN_SLOT_HEART "heart" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 7b727fcc5a..6c83a46514 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -6,87 +6,52 @@ #define STORAGE_VIEW_DEPTH 2 //ITEM INVENTORY SLOT BITMASKS -#define ITEM_SLOT_OCLOTHING (1<<0) -#define ITEM_SLOT_ICLOTHING (1<<1) -#define ITEM_SLOT_GLOVES (1<<2) -#define ITEM_SLOT_EYES (1<<3) -#define ITEM_SLOT_EARS (1<<4) -#define ITEM_SLOT_MASK (1<<5) -#define ITEM_SLOT_HEAD (1<<6) -#define ITEM_SLOT_FEET (1<<7) -#define ITEM_SLOT_ID (1<<8) -#define ITEM_SLOT_BELT (1<<9) -#define ITEM_SLOT_BACK (1<<10) -#define ITEM_SLOT_POCKET (1<<11) // this is to allow items with a w_class of WEIGHT_CLASS_NORMAL or WEIGHT_CLASS_BULKY to fit in pockets. -#define ITEM_SLOT_DENYPOCKET (1<<12) // this is to deny items with a w_class of WEIGHT_CLASS_SMALL or WEIGHT_CLASS_TINY to fit in pockets. -#define ITEM_SLOT_NECK (1<<13) -#define ITEM_SLOT_HANDS (1<<14) -#define ITEM_SLOT_BACKPACK (1<<15) -#define ITEM_SLOT_SUITSTORE (1<<16) +/// Suit slot (armors, costumes, space suits, etc.) +#define ITEM_SLOT_OCLOTHING (1<<0) +/// Jumpsuit slot +#define ITEM_SLOT_ICLOTHING (1<<1) +/// Glove slot +#define ITEM_SLOT_GLOVES (1<<2) +/// Glasses slot +#define ITEM_SLOT_EYES (1<<3) +/// Ear slot (radios, earmuffs) +#define ITEM_SLOT_EARS (1<<4) +/// Mask slot +#define ITEM_SLOT_MASK (1<<5) +/// Head slot (helmets, hats, etc.) +#define ITEM_SLOT_HEAD (1<<6) +/// Shoe slot +#define ITEM_SLOT_FEET (1<<7) +/// ID slot +#define ITEM_SLOT_ID (1<<8) +/// Belt slot +#define ITEM_SLOT_BELT (1<<9) +/// Back slot +#define ITEM_SLOT_BACK (1<<10) +/// Dextrous simplemob "hands" (used for Drones and Dextrous Guardians) +#define ITEM_SLOT_DEX_STORAGE (1<<11) +/// Neck slot (ties, bedsheets, scarves) +#define ITEM_SLOT_NECK (1<<12) +/// A character's hand slots +#define ITEM_SLOT_HANDS (1<<13) +/// Inside of a character's backpack +#define ITEM_SLOT_BACKPACK (1<<14) +/// Suit Storage slot +#define ITEM_SLOT_SUITSTORE (1<<15) +/// Left Pocket slot +#define ITEM_SLOT_LPOCKET (1<<16) +/// Right Pocket slot +#define ITEM_SLOT_RPOCKET (1<<17) +/// Handcuff slot +#define ITEM_SLOT_HANDCUFFED (1<<18) +/// Legcuff slot (bolas, beartraps) +#define ITEM_SLOT_LEGCUFFED (1<<19) -//SLOTS -#define SLOT_BACK 1 -#define SLOT_WEAR_MASK 2 -#define SLOT_HANDCUFFED 3 -#define SLOT_HANDS 4 //wherever you provide a slot for hands you provide SLOT_HANDS - //SLOT_HANDS as a slot will pick ANY available hand -#define SLOT_BELT 5 -#define SLOT_WEAR_ID 6 -#define SLOT_EARS 7 -#define SLOT_GLASSES 8 -#define SLOT_GLOVES 9 -#define SLOT_NECK 10 -#define SLOT_HEAD 11 -#define SLOT_SHOES 12 -#define SLOT_WEAR_SUIT 13 -#define SLOT_W_UNIFORM 14 -#define SLOT_L_STORE 15 -#define SLOT_R_STORE 16 -#define SLOT_S_STORE 17 -#define SLOT_IN_BACKPACK 18 -#define SLOT_LEGCUFFED 19 -#define SLOT_GENERC_DEXTROUS_STORAGE 20 - - -#define SLOTS_AMT 20 // Keep this up to date! - -//I hate that this has to exist -/proc/slotdefine2slotbit(slotdefine) //Keep this up to date with the value of SLOT BITMASKS and SLOTS (the two define sections above) - . = 0 - switch(slotdefine) - if(SLOT_BACK) - . = ITEM_SLOT_BACK - if(SLOT_WEAR_MASK) - . = ITEM_SLOT_MASK - if(SLOT_NECK) - . = ITEM_SLOT_NECK - if(SLOT_BELT) - . = ITEM_SLOT_BELT - if(SLOT_WEAR_ID) - . = ITEM_SLOT_ID - if(SLOT_EARS) - . = ITEM_SLOT_EARS - if(SLOT_GLASSES) - . = ITEM_SLOT_EYES - if(SLOT_GLOVES) - . = ITEM_SLOT_GLOVES - if(SLOT_HEAD) - . = ITEM_SLOT_HEAD - if(SLOT_SHOES) - . = ITEM_SLOT_FEET - if(SLOT_WEAR_SUIT) - . = ITEM_SLOT_OCLOTHING - if(SLOT_W_UNIFORM) - . = ITEM_SLOT_ICLOTHING - if(SLOT_L_STORE, SLOT_R_STORE) - . = ITEM_SLOT_POCKET - if(SLOT_HANDS) - . = ITEM_SLOT_HANDS - if(SLOT_IN_BACKPACK) - . = ITEM_SLOT_BACKPACK - if(SLOT_S_STORE) - . = ITEM_SLOT_SUITSTORE +/// Total amount of slots +#define SLOTS_AMT 20 // Keep this up to date! +//SLOT GROUP HELPERS +#define ITEM_SLOT_POCKETS (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET) //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. #define HIDEGLOVES (1<<0) @@ -245,4 +210,4 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( #define GET_INTERNAL_SLOTS(C) list(C.head, C.wear_mask) //Slots that won't trigger humans' update_genitals() on equip(). -GLOBAL_LIST_INIT(no_genitals_update_slots, list(SLOT_L_STORE, SLOT_R_STORE, SLOT_S_STORE, SLOT_IN_BACKPACK, SLOT_LEGCUFFED, SLOT_HANDCUFFED, SLOT_HANDS, SLOT_GENERC_DEXTROUS_STORAGE)) +GLOBAL_LIST_INIT(no_genitals_update_slots, list(ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_BACKPACK, ITEM_SLOT_LEGCUFFED, ITEM_SLOT_HANDCUFFED, ITEM_SLOT_HANDS, ITEM_SLOT_DEX_STORAGE)) diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index f56cd76a71..60d02c1e49 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -105,6 +105,9 @@ #define TORADIANS(degrees) ((degrees) * 0.0174532925) +/// Gets shift x that would be required the bitflag (1<[pick("You hear a ringing in your ear.", "Your ears pop.")]
    ") if(5) if(power > 2) - var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_ITEM_SLOT_EARS) if(istype(ears) && ears.damage < ears.maxHealth) to_chat(M, "Your ears pop painfully and start bleeding!") ears.damage = max(ears.damage, ears.maxHealth) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index e769f466b9..0440fb231d 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -61,19 +61,19 @@ STI KALY - blind if(!istype(H.head, /obj/item/clothing/head/wizard)) if(!H.dropItemToGround(H.head)) qdel(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), ITEM_SLOT_HEAD) return if(prob(chance)) if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe)) if(!H.dropItemToGround(H.wear_suit)) qdel(H.wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), SLOT_WEAR_SUIT) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), ITEM_SLOT_OCLOTHING) return if(prob(chance)) if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic)) if(!H.dropItemToGround(H.shoes)) qdel(H.shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), SLOT_SHOES) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), ITEM_SLOT_FEET) return else var/mob/living/carbon/H = affected_mob diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm index 1c74777845..38afc5e307 100644 --- a/code/datums/elements/earhealing.dm +++ b/code/datums/elements/earhealing.dm @@ -19,7 +19,7 @@ user_by_item -= target /datum/element/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot) - if(slot == SLOT_EARS && istype(user)) + if(slot == ITEM_SLOT_EARS && istype(user)) user_by_item[source] = user else user_by_item -= source @@ -30,7 +30,7 @@ var/mob/living/carbon/user = user_by_item[i] if(HAS_TRAIT(user, TRAIT_DEAF)) continue - var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_ITEM_SLOT_EARS) if(!ears) continue ears.deaf = max(ears.deaf - 0.25, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 5e888e0609..2649a8ee6f 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -144,7 +144,7 @@ return TRUE /datum/element/polychromic/proc/grant_user_action(atom/source, mob/user, slot) - if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED || slot == SLOT_HANDCUFFED || slot == SLOT_GENERC_DEXTROUS_STORAGE) + if(slot == ITEM_SLOT_BACKPACK || slot == ITEM_SLOT_LEGCUFFED || slot == ITEM_SLOT_HANDCUFFED || slot == ITEM_SLOT_DEX_STORAGE) return var/datum/action/polychromic/P = actions_by_atom[source] if(!P) diff --git a/code/datums/elements/spellcasting.dm b/code/datums/elements/spellcasting.dm index 877bcdbcd3..676168ea49 100644 --- a/code/datums/elements/spellcasting.dm +++ b/code/datums/elements/spellcasting.dm @@ -34,7 +34,7 @@ stacked_spellcasting_by_user -= target /datum/element/spellcasting/proc/on_equip(datum/source, mob/equipper, slot) - if(!(cast_slots & slotdefine2slotbit(slot))) + if(!(cast_slots & slot)) return users_by_item[source] = equipper if(!stacked_spellcasting_by_user[equipper]) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 4682595aec..5b6c0e222d 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -59,7 +59,7 @@ /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_GLOVES) + if(ishuman(user) && slot == ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,TRUE) @@ -68,5 +68,5 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) style.remove(H) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 3691b2fccc..f8ed72eae8 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -197,7 +197,7 @@ /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_GLOVES) + if(ishuman(user) && slot == ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,1) @@ -206,7 +206,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) style.remove(H) /obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 8dc1afba81..466bf5c778 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -485,7 +485,7 @@ /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_BELT) + if(ishuman(user) && slot == ITEM_SLOT_BELT) var/mob/living/carbon/human/H = user style.teach(H,1) @@ -494,7 +494,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_BELT) == src) + if(H.get_item_by_slot(ITEM_SLOT_BELT) == src) style.remove(H) //Subtype of wrestling, reserved for the wrestling belts found in the holodeck diff --git a/code/datums/mutations/cluwne.dm b/code/datums/mutations/cluwne.dm index 59b7752372..45a78be27b 100644 --- a/code/datums/mutations/cluwne.dm +++ b/code/datums/mutations/cluwne.dm @@ -17,18 +17,18 @@ if(!istype(H.wear_mask, /obj/item/clothing/mask/gas/cluwne)) if(!H.dropItemToGround(H.wear_mask)) qdel(H.wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), SLOT_WEAR_MASK) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), ITEM_SLOT_MASK) if(!istype(H.w_uniform, /obj/item/clothing/under/cluwne)) if(!H.dropItemToGround(H.w_uniform)) qdel(H.w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), ITEM_SLOT_ICLOTHING) if(!istype(H.shoes, /obj/item/clothing/shoes/clown_shoes/cluwne)) if(!H.dropItemToGround(H.shoes)) qdel(H.shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), SLOT_SHOES) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), ITEM_SLOT_FEET) - owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot - owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), SLOT_BACK) // ditto + owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), ITEM_SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot + owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), ITEM_SLOT_BACK) // ditto /datum/mutation/human/cluwne/on_life(mob/living/carbon/human/owner) if((prob(15) && owner.IsUnconscious())) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 0b46629365..4c17874f97 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -153,31 +153,31 @@ //Start with uniform,suit,backpack for additional slots if(uniform) - H.equip_to_slot_or_del(new uniform(H), SLOT_W_UNIFORM, TRUE) + H.equip_to_slot_or_del(new uniform(H), ITEM_SLOT_ICLOTHING, TRUE) if(suit) - H.equip_to_slot_or_del(new suit(H), SLOT_WEAR_SUIT, TRUE) + H.equip_to_slot_or_del(new suit(H), ITEM_SLOT_OCLOTHING, TRUE) if(back) - H.equip_to_slot_or_del(new back(H), SLOT_BACK, TRUE) + H.equip_to_slot_or_del(new back(H), ITEM_SLOT_BACK, TRUE) if(belt) - H.equip_to_slot_or_del(new belt(H), SLOT_BELT, TRUE) + H.equip_to_slot_or_del(new belt(H), ITEM_SLOT_BELT, TRUE) if(gloves) - H.equip_to_slot_or_del(new gloves(H), SLOT_GLOVES, TRUE) + H.equip_to_slot_or_del(new gloves(H), ITEM_SLOT_GLOVES, TRUE) if(shoes) - H.equip_to_slot_or_del(new shoes(H), SLOT_SHOES, TRUE) + H.equip_to_slot_or_del(new shoes(H), ITEM_SLOT_FEET, TRUE) if(head) - H.equip_to_slot_or_del(new head(H), SLOT_HEAD, TRUE) + H.equip_to_slot_or_del(new head(H), ITEM_SLOT_HEAD, TRUE) if(mask) - H.equip_to_slot_or_del(new mask(H), SLOT_WEAR_MASK, TRUE) + H.equip_to_slot_or_del(new mask(H), ITEM_SLOT_MASK, TRUE) if(neck) - H.equip_to_slot_or_del(new neck(H), SLOT_NECK, TRUE) + H.equip_to_slot_or_del(new neck(H), ITEM_SLOT_NECK, TRUE) if(ears) - H.equip_to_slot_or_del(new ears(H), SLOT_EARS, TRUE) + H.equip_to_slot_or_del(new ears(H), ITEM_SLOT_EARS, TRUE) if(glasses) - H.equip_to_slot_or_del(new glasses(H), SLOT_GLASSES, TRUE) + H.equip_to_slot_or_del(new glasses(H), ITEM_SLOT_EYES, TRUE) if(id) - H.equip_to_slot_or_del(new id(H), SLOT_WEAR_ID, TRUE) + H.equip_to_slot_or_del(new id(H), ITEM_SLOT_ID, TRUE) if(suit_store) - H.equip_to_slot_or_del(new suit_store(H), SLOT_S_STORE, TRUE) + H.equip_to_slot_or_del(new suit_store(H), ITEM_SLOT_SUITSTORE, TRUE) if(undershirt) H.undershirt = initial(undershirt.name) @@ -195,9 +195,9 @@ if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon. if(l_pocket) - H.equip_to_slot_or_del(new l_pocket(H), SLOT_L_STORE, TRUE) + H.equip_to_slot_or_del(new l_pocket(H), ITEM_SLOT_LPOCKET, TRUE) if(r_pocket) - H.equip_to_slot_or_del(new r_pocket(H), SLOT_R_STORE, TRUE) + H.equip_to_slot_or_del(new r_pocket(H), ITEM_SLOT_RPOCKET, TRUE) if(box) if(!backpack_contents) @@ -211,7 +211,7 @@ if(!isnum(number))//Default to 1 number = 1 for(var/i in 1 to number) - H.equip_to_slot_or_del(new path(H), SLOT_IN_BACKPACK, TRUE) + H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE) if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit)) var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index dbec6c6ee2..e45f9cf3a9 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -578,7 +578,7 @@ if(60 to 69) H.adjustOrganLoss(ORGAN_SLOT_EYES,10) if(70 to 79) - H.adjustOrganLoss(ORGAN_SLOT_EARS,10) + H.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,10) if(80 to 89) H.adjustOrganLoss(ORGAN_SLOT_LUNGS,10) if(90 to 99) @@ -610,7 +610,7 @@ if(60 to 69) H.adjustOrganLoss(ORGAN_SLOT_EYES,5) if(70 to 79) - H.adjustOrganLoss(ORGAN_SLOT_EARS,5) + H.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,5) if(80 to 89) H.adjustOrganLoss(ORGAN_SLOT_LUNGS,5) if(90 to 99) diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index 22a851da1d..99fa6e73c5 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -129,7 +129,7 @@ Use this as a guideline var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H)) H.put_in_hands(glasses) - H.equip_to_slot(glasses, SLOT_GLASSES) + H.equip_to_slot(glasses, ITEM_SLOT_EYES) H.regenerate_icons() //This whole proc is called automatically diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 23fd75f982..a0f62a32b8 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -108,10 +108,10 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/choice_beacon/music/B = new(get_turf(H)) H.put_in_hands(B) - H.equip_to_slot_if_possible(B, SLOT_IN_BACKPACK) + H.equip_to_slot_if_possible(B, ITEM_SLOT_BACKPACK) var/obj/item/musicaltuner/musicaltuner = new(get_turf(H)) H.put_in_hands(musicaltuner) - H.equip_to_slot_if_possible(musicaltuner, SLOT_IN_BACKPACK) + H.equip_to_slot_if_possible(musicaltuner, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/photographer @@ -127,7 +127,7 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/camera/camera = new(get_turf(H)) H.put_in_hands(camera) - H.equip_to_slot(camera, SLOT_NECK) + H.equip_to_slot(camera, ITEM_SLOT_NECK) H.regenerate_icons() /datum/quirk/selfaware @@ -166,7 +166,7 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/toy/crayon/spraycan/spraycan = new(get_turf(H)) H.put_in_hands(spraycan) - H.equip_to_slot(spraycan, SLOT_IN_BACKPACK) + H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/voracious @@ -188,7 +188,7 @@ /datum/quirk/trandening/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/autosurgeon/gloweyes/gloweyes = new(get_turf(H)) - H.equip_to_slot(gloweyes, SLOT_IN_BACKPACK) + H.equip_to_slot(gloweyes, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/bloodpressure diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 38007023b5..10f66fce0c 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -57,9 +57,9 @@ GLOBAL_LIST_EMPTY(family_heirlooms) heirloom = new heirloom_type(get_turf(quirk_holder)) GLOB.family_heirlooms += heirloom var/list/slots = list( - "in your left pocket" = SLOT_L_STORE, - "in your right pocket" = SLOT_R_STORE, - "in your backpack" = SLOT_IN_BACKPACK + "in your left pocket" = ITEM_SLOT_LPOCKET, + "in your right pocket" = ITEM_SLOT_RPOCKET, + "in your backpack" = ITEM_SLOT_BACKPACK ) where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" @@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/nearsighted/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H)) - if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES)) + if(!H.equip_to_slot_if_possible(glasses, ITEM_SLOT_EYES)) H.put_in_hands(glasses) /datum/quirk/nyctophobia @@ -383,7 +383,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/blindness/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/sunglasses/blindfold/white/glasses = new(get_turf(H)) - if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes + if(!H.equip_to_slot_if_possible(glasses, ITEM_SLOT_EYES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes H.put_in_hands(glasses) H.regenerate_icons() diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 36712ea6bb..6b2cdbd455 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -172,7 +172,7 @@ /datum/quirk/colorist/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/dyespray/spraycan = new(get_turf(quirk_holder)) - H.equip_to_slot(spraycan, SLOT_IN_BACKPACK) + H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/colorist/post_add() diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 83c1eec598..77c953567c 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,6 +1,6 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")) -GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_suit" = SLOT_WEAR_SUIT, "w_uniform" = SLOT_W_UNIFORM, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_EARS, "wear_id" = SLOT_WEAR_ID, "s_store" = SLOT_S_STORE)) +GLOBAL_LIST_INIT(slot2slot, list("head" = ITEM_SLOT_HEAD, "wear_mask" = ITEM_SLOT_MASK, "neck" = ITEM_SLOT_NECK, "back" = ITEM_SLOT_BACK, "wear_suit" = ITEM_SLOT_OCLOTHING, "w_uniform" = ITEM_SLOT_ICLOTHING, "shoes" = ITEM_SLOT_FEET, "belt" = ITEM_SLOT_BELT, "gloves" = ITEM_SLOT_GLOVES, "glasses" = ITEM_SLOT_EYES, "ears" = ITEM_SLOT_EARS, "wear_id" = ITEM_SLOT_ID, "s_store" = ITEM_SLOT_SUITSTORE)) GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling)) GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our this objective to all lings diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 08a8d69575..77371ad7bc 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -205,11 +205,11 @@ Credit where due: var/mob/living/carbon/human/L = M var/obj/item/clockwork/slab/S = new var/slot = "At your feet" - var/list/slots = list("In your left pocket" = SLOT_L_STORE, "In your right pocket" = SLOT_R_STORE, "In your backpack" = SLOT_IN_BACKPACK) + var/list/slots = list("In your left pocket" = ITEM_SLOT_LPOCKET, "In your right pocket" = ITEM_SLOT_RPOCKET, "In your backpack" = ITEM_SLOT_BACKPACK) if(ishuman(L)) var/mob/living/carbon/human/H = L var/obj/item/clockwork/replica_fabricator/F = new - if(H.equip_to_slot_or_del(F, SLOT_IN_BACKPACK)) + if(H.equip_to_slot_or_del(F, ITEM_SLOT_BACKPACK)) to_chat(H, "You have been equipped with a replica fabricator, an advanced tool that can convert objects like doors, tables or even coats into clockwork equivalents.") slot = H.equip_in_one_of_slots(S, slots) if(slot == "In your backpack") diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index 695fc79169..3e8d45b842 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -37,17 +37,17 @@ if(!H.w_uniform || H.dropItemToGround(H.w_uniform)) C = new /obj/item/clothing/under/rank/civilian/clown(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_W_UNIFORM) + H.equip_to_slot_or_del(C, ITEM_SLOT_ICLOTHING) if(!H.shoes || H.dropItemToGround(H.shoes)) C = new /obj/item/clothing/shoes/clown_shoes(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_SHOES) + H.equip_to_slot_or_del(C, ITEM_SLOT_FEET) if(!H.wear_mask || H.dropItemToGround(H.wear_mask)) C = new /obj/item/clothing/mask/gas/clown_hat(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_WEAR_MASK) + H.equip_to_slot_or_del(C, ITEM_SLOT_MASK) H.dna.add_mutation(CLOWNMUT) H.dna.add_mutation(SMILE) diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index a27cb02ea8..081ffbbdc4 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -214,7 +214,7 @@ if(!istype(C.wear_mask, /obj/item/clothing/mask/gas/clown_hat) && !istype(C.wear_mask, /obj/item/clothing/mask/gas/mime)) if(!C.wear_mask || C.dropItemToGround(C.wear_mask)) var/obj/item/clothing/mask/fakemoustache/sticky/the_stash = new /obj/item/clothing/mask/fakemoustache/sticky() - C.equip_to_slot_or_del(the_stash, SLOT_WEAR_MASK, TRUE, TRUE, TRUE, TRUE) + C.equip_to_slot_or_del(the_stash, ITEM_SLOT_MASK, TRUE, TRUE, TRUE, TRUE) /obj/item/clothing/mask/fakemoustache/sticky var/unstick_time = 2 MINUTES @@ -226,7 +226,7 @@ /obj/item/clothing/mask/fakemoustache/sticky/equipped(mob/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) ADD_TRAIT(user, TRAIT_NO_INTERNALS, STICKY_MOUSTACHE_TRAIT) /obj/item/clothing/mask/fakemoustache/sticky/dropped(mob/user) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index a82abe9b3d..f7ccae24e4 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -154,7 +154,7 @@ if(tc) var/obj/item/U = new uplink_type(H, H.key, tc) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK) var/obj/item/implant/weapons_auth/W = new W.implant(H) @@ -170,7 +170,7 @@ mask = /obj/item/clothing/mask/gas/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET belt = /obj/item/storage/belt/military r_hand = /obj/item/gun/ballistic/automatic/shotgun/bulldog backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ @@ -186,7 +186,7 @@ suit = /obj/item/clothing/suit/space/syndicate/black/red head = /obj/item/clothing/head/helmet/space/syndicate/black/red r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET belt = /obj/item/storage/belt/military backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ /obj/item/tank/jetpack/oxygen/harness=1,\ diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 0358c3af2c..fd43b994e8 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -165,7 +165,7 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo. if(receiver && receiver.current) if(ishuman(receiver.current)) var/mob/living/carbon/human/H = receiver.current - var/list/slots = list("backpack" = SLOT_IN_BACKPACK) + var/list/slots = list("backpack" = ITEM_SLOT_BACKPACK) for(var/eq_path in special_equipment) var/obj/O = new eq_path . += O @@ -1197,7 +1197,7 @@ GLOBAL_LIST_EMPTY(cult_contraband) I.forceMove(get_turf(owner)) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK), critical = TRUE) + H.equip_in_one_of_slots(I, list("backpack" = ITEM_SLOT_BACKPACK), critical = TRUE) hoarded_item = I diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 953d21d318..54bdeff4de 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -351,7 +351,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return - if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(loc == user && current_equipped_slot && current_equipped_slot != ITEM_SLOT_HANDS) if(current_equipped_slot in user.check_obscured_slots()) to_chat(user, "You are unable to unequip that while wearing other garments over it!") return FALSE @@ -416,7 +416,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return - if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(loc == user && current_equipped_slot && current_equipped_slot != ITEM_SLOT_HANDS) if(current_equipped_slot in user.check_obscured_slots()) to_chat(user, "You are unable to unequip that while wearing other garments over it!") return FALSE @@ -568,7 +568,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there + if(slot == ITEM_SLOT_BACKPACK || slot == ITEM_SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there return FALSE return TRUE @@ -817,7 +817,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(ismob(location)) var/mob/M = location var/success = FALSE - if(src == M.get_item_by_slot(SLOT_WEAR_MASK)) + if(src == M.get_item_by_slot(ITEM_SLOT_MASK)) success = TRUE if(success) location = get_turf(M) diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 04838103f9..682ce18215 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -34,7 +34,7 @@ user.put_in_hands(PA) /obj/item/chrono_eraser/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BACK) + if(slot == ITEM_SLOT_BACK) return 1 /obj/item/gun/energy/chrono_gun diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 702cbd8d56..8227097d8f 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -89,7 +89,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM ..() /obj/item/proc/help_light_cig(mob/living/M) - var/mask_item = M.get_item_by_slot(SLOT_WEAR_MASK) + var/mask_item = M.get_item_by_slot(ITEM_SLOT_MASK) if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item @@ -130,7 +130,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.add_reagent_list(list_reagents) if(starts_lit) light() - AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(SLOT_WEAR_MASK))//90% to knock off when wearing a mask + AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(ITEM_SLOT_MASK))//90% to knock off when wearing a mask /obj/item/clothing/mask/cigarette/Destroy() STOP_PROCESSING(SSobj, src) @@ -819,7 +819,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/vape/equipped(mob/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) if(!screw) to_chat(user, "You start puffing on the vape.") reagents.reagents_holder_flags &= ~(NO_REACT) @@ -830,7 +830,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/vape/dropped(mob/user) . = ..() var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_WEAR_MASK) == src) + if(C.get_item_by_slot(ITEM_SLOT_MASK) == src) reagents.reagents_holder_flags |= NO_REACT STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 0570de6bcf..476758efee 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -80,13 +80,13 @@ /obj/item/defibrillator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user) if(slot_flags == ITEM_SLOT_BACK) - if(user.get_item_by_slot(SLOT_BACK) == src) + if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) ui_action_click() else to_chat(user, "Put the defibrillator on your back first!") else if(slot_flags == ITEM_SLOT_BELT) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) ui_action_click() else to_chat(user, "Strap the defibrillator's belt on first!") @@ -182,7 +182,7 @@ /obj/item/defibrillator/equipped(mob/user, slot) ..() - if((slot_flags == ITEM_SLOT_BACK && slot != SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != SLOT_BELT)) + if((slot_flags == ITEM_SLOT_BACK && slot != ITEM_SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != ITEM_SLOT_BELT)) remove_paddles(user) update_power() diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 365446bad9..a3de2d822f 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -19,7 +19,7 @@ /obj/item/megaphone/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HANDS) + if (slot == ITEM_SLOT_HANDS) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index c51edc8106..2c55bbf8e4 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -156,7 +156,7 @@ category = list("hacked", "Misc") /obj/item/electropack/shockcollar/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(loc == user && user.get_item_by_slot(SLOT_NECK)) + if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK)) to_chat(user, "The collar is fastened tight! You'll need help taking this off!") return return ..() @@ -167,7 +167,7 @@ if(isliving(loc) && on) //the "on" arg is currently useless var/mob/living/L = loc - if(!L.get_item_by_slot(SLOT_NECK)) //**properly** stops pocket shockers + if(!L.get_item_by_slot(ITEM_SLOT_NECK)) //**properly** stops pocket shockers return if(shock_cooldown == TRUE) return diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 58a3eb312b..6feb8bf663 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/ComponentInitialize() . = ..() if (bowman) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) /obj/item/radio/headset/Initialize() . = ..() @@ -373,4 +373,4 @@ GLOBAL_LIST_INIT(channel_tokens, list( name = replacetext(name,"headset", "bowman headset") desc = "[desc] Protects ears from flashbangs." bowman = TRUE - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index de7e3d2812..810f2150e6 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -48,7 +48,7 @@ /obj/item/reverse_bear_trap/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscarbon(user)) var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_HEAD) == src) + if(C.get_item_by_slot(ITEM_SLOT_HEAD) == src) if(HAS_TRAIT_FROM(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) && !struggling) struggling = TRUE var/fear_string @@ -82,26 +82,26 @@ ..() /obj/item/reverse_bear_trap/attack(mob/living/target, mob/living/user) - if(target.get_item_by_slot(SLOT_HEAD)) + if(target.get_item_by_slot(ITEM_SLOT_HEAD)) to_chat(user, "Remove [target.p_their()] headgear first!") return target.visible_message("[user] starts forcing [src] onto [target]'s head!", \ "[target] starts forcing [src] onto your head!", "You hear clanking.") to_chat(user, "You start forcing [src] onto [target]'s head...") - if(!do_after(user, 30, target = target) || target.get_item_by_slot(SLOT_HEAD)) + if(!do_after(user, 30, target = target) || target.get_item_by_slot(ITEM_SLOT_HEAD)) return target.visible_message("[user] forces and locks [src] onto [target]'s head!", \ "[target] locks [src] onto your head!", "You hear a click, and then a timer ticking down.") to_chat(user, "You force [src] onto [target]'s head and click the padlock shut.") user.dropItemToGround(src) - target.equip_to_slot_if_possible(src, SLOT_HEAD) + target.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD) arm() notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/beep.ogg') /obj/item/reverse_bear_trap/proc/snap() reset() var/mob/living/carbon/human/H = loc - if(!istype(H) || H.get_item_by_slot(SLOT_HEAD) != src) + if(!istype(H) || H.get_item_by_slot(ITEM_SLOT_HEAD) != src) visible_message("[src]'s jaws snap open with an ear-piercing crack!") playsound(src, 'sound/effects/snap.ogg', 75, TRUE) else diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index a353a2b76b..c224f98fe7 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -333,7 +333,7 @@ GENETICS SCANNER var/has_stomach = C.dna && !(NOSTOMACH in C.dna.species.species_traits) if(!M.getorganslot(ORGAN_SLOT_EYES)) msg += "\tSubject does not have eyes.\n" - if(!M.getorganslot(ORGAN_SLOT_EARS)) + if(!M.getorganslot(ORGAN_ITEM_SLOT_EARS)) msg += "\tSubject does not have ears.\n" if(!M.getorganslot(ORGAN_SLOT_BRAIN)) msg += "\tSubject's brain function is non-existent!\n" @@ -436,7 +436,7 @@ GENETICS SCANNER if(R) blood_type = R.name - + if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio)) msg += "LOW [HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM) ? "coolant" : "blood"] level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]\n" else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio)) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index ac79b3b887..11900d8e42 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -208,7 +208,7 @@ effective or pretty fucking useless. actions_types = list(/datum/action/item_action/toggle) /obj/item/shadowcloak/ui_action_click(mob/user) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) if(!on) Activate(usr) else @@ -216,7 +216,7 @@ effective or pretty fucking useless. return /obj/item/shadowcloak/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BELT) + if(slot == ITEM_SLOT_BELT) return 1 /obj/item/shadowcloak/proc/Activate(mob/living/carbon/human/user) @@ -238,11 +238,11 @@ effective or pretty fucking useless. /obj/item/shadowcloak/dropped(mob/user) ..() - if(user && user.get_item_by_slot(SLOT_BELT) != src) + if(user && user.get_item_by_slot(ITEM_SLOT_BELT) != src) Deactivate() /obj/item/shadowcloak/process() - if(user.get_item_by_slot(SLOT_BELT) != src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) != src) Deactivate() return var/turf/T = get_turf(src) diff --git a/code/game/objects/items/fluff.dm b/code/game/objects/items/fluff.dm index 7105e57c30..0df8d5b447 100644 --- a/code/game/objects/items/fluff.dm +++ b/code/game/objects/items/fluff.dm @@ -6,7 +6,7 @@ // 1) Tennis balls, lines 39 - 99 // 2) Chew bones, lines 101 - 138 // 3) Frisbee, lines 140 - 166 -*/ +*/ /obj/item/toy/fluff name = "Fluff Item" diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index d1450c2685..c084b90d6f 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -336,7 +336,7 @@ var/obj/item/clothing/magichead = new /obj/item/clothing/mask/horsehead/cursed(user.drop_location()) if(!user.dropItemToGround(user.wear_mask)) qdel(user.wear_mask) - user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE) + user.equip_to_slot_if_possible(magichead, ITEM_SLOT_MASK, TRUE, TRUE) qdel(src) else to_chat(user,"I say thee neigh") //It still lives here diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index ddcd35f834..a5913c308d 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -188,7 +188,7 @@ icon_state = "inducer-combat" item_state = "inducer-combat" w_class = WEIGHT_CLASS_BULKY - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT desc = "A tool for inductively charging internal power cells. This one has been modified and upgraded to be able to charge into guns as well as normal electronics." cell_type = /obj/item/stock_parts/cell/hyper powertransfer = 1300 diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 6bb501807d..56ad6c2534 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -108,7 +108,7 @@ desc = "This little bugger can be used to store and transport ores." icon = 'icons/obj/mining.dmi' icon_state = "satchel" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_NORMAL component_type = /datum/component/storage/concrete/stack var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it @@ -400,7 +400,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bag" desc = "A bag for storing pills, patches, and bottles." - slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKETS resistance_flags = FLAMMABLE /obj/item/storage/bag/chemistry/ComponentInitialize() @@ -420,7 +420,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "biobag" desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." - slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKETS resistance_flags = FLAMMABLE /obj/item/storage/bag/bio/ComponentInitialize() @@ -451,7 +451,7 @@ desc = "A pouch for your ammo that goes in your pocket." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "ammopouch" - slot_flags = ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE @@ -472,7 +472,7 @@ Bag for holding materials desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "materialpouch" - slot_flags = ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 476f35fe4c..1a3b40d1da 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", var/mob/living/carbon/human/H = usr H.dna.add_mutation(CLOWNMUT) H.dna.add_mutation(SMILE) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), SLOT_WEAR_MASK) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), ITEM_SLOT_MASK) GLOB.bible_icon_state = icon_state GLOB.bibleitemstates = item_state diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index f68084d63a..111e3c96a0 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -248,10 +248,10 @@ return ..() var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents if(cig) - if(!user.wear_mask && !(SLOT_WEAR_MASK in M.check_obscured_slots())) + if(!user.wear_mask && !(ITEM_SLOT_MASK in M.check_obscured_slots())) var/obj/item/clothing/mask/cigarette/W = cig SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M) - M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK) + M.equip_to_slot_if_possible(W, ITEM_SLOT_MASK) contents -= W to_chat(user, "You take \a [W] out of the pack.") else diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index fffcd6dada..88131fb197 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -58,7 +58,7 @@ /obj/item/watertank/equipped(mob/user, slot) ..() - if(slot != SLOT_BACK) + if(slot != ITEM_SLOT_BACK) remove_noz() /obj/item/watertank/proc/remove_noz() @@ -348,14 +348,14 @@ toggle_injection() /obj/item/reagent_containers/chemtank/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BACK) + if(slot == ITEM_SLOT_BACK) return 1 /obj/item/reagent_containers/chemtank/proc/toggle_injection() var/mob/living/carbon/human/user = usr if(!istype(user)) return - if (user.get_item_by_slot(SLOT_BACK) != src) + if (user.get_item_by_slot(ITEM_SLOT_BACK) != src) to_chat(user, "The chemtank needs to be on your back before you can activate it!") return if(on) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 3fd31941f3..b00d736282 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -1229,7 +1229,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/slapper/on_offered(mob/living/carbon/offerer) . = TRUE - + if(!(locate(/mob/living/carbon) in orange(1, offerer))) visible_message(span_danger("[offerer] raises [offerer.p_their()] arm, looking around for a high-five, but there's no one around!"), \ span_warning("You post up, looking for a high-five, but finding no one within range!"), null, 2) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 8d7da15761..5da3d079c2 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -153,8 +153,8 @@ continue if(iscarbon(L)) var/mob/living/carbon/C = L - var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT) - var/obj/item/clothing/H = C.get_item_by_slot(SLOT_HEAD) + var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING) + var/obj/item/clothing/H = C.get_item_by_slot(ITEM_SLOT_HEAD) if(S && H && S.clothing_flags & LAVAPROTECT && H.clothing_flags & LAVAPROTECT) return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 17bad60945..76677dbe10 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1686,8 +1686,8 @@ if(ishuman(L)) var/mob/living/carbon/human/observer = L - observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), SLOT_W_UNIFORM) - observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), SLOT_SHOES) + observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), ITEM_SLOT_ICLOTHING) + observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), ITEM_SLOT_FEET) L.Unconscious(100) sleep(5) L.forceMove(pick(GLOB.tdomeobserve)) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 138913b3a4..7957a6d638 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -202,7 +202,7 @@ id.forceMove(W) W.update_icon() else - H.equip_to_slot(id,SLOT_WEAR_ID) + H.equip_to_slot(id,ITEM_SLOT_ID) else alert("Invalid mob") diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 8484732d8d..011d175cfa 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -62,7 +62,7 @@ A.UpdateButtonIcon() /obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it. + if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to activate the vest if he's actually wearing it. return TRUE /obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 29e64a4913..c5f1cfbb40 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -84,7 +84,7 @@ return FALSE if(owner.current.reagents.has_reagent(/datum/reagent/consumable/garlic)) return FALSE - if(istype(owner.current.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(istype(owner.current.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) return FALSE owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index 2fb7a2ccca..0a799021e9 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -94,7 +94,7 @@ if(display_error) to_chat(owner, "You have a stake in your chest! Your powers are useless.") return FALSE - if(istype(owner.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(istype(owner.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) if(display_error) to_chat(owner, "") return FALSE diff --git a/code/modules/antagonists/bloodsucker/powers/brawn.dm b/code/modules/antagonists/bloodsucker/powers/brawn.dm index 5444cccd3f..db3ce92ec1 100644 --- a/code/modules/antagonists/bloodsucker/powers/brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/brawn.dm @@ -105,7 +105,7 @@ var/mob/living/carbon/user_C = owner //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ") if(user_C.handcuffed) - var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_HANDCUFFED) if(istype(O)) user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) @@ -124,7 +124,7 @@ return TRUE */ // Destroy Leg Cuffs if(user_C.legcuffed) - var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) + var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_LEGCUFFED) if(istype(O)) user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm index 8b3b1659d1..b440228a4e 100644 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ b/code/modules/antagonists/changeling/powers/biodegrade.dm @@ -17,7 +17,7 @@ return FALSE if(user.handcuffed) - var/obj/O = user.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/O = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED) if(!istype(O)) return FALSE user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \ @@ -27,7 +27,7 @@ used = TRUE if(user.legcuffed) - var/obj/O = user.get_item_by_slot(SLOT_LEGCUFFED) + var/obj/O = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) if(!istype(O)) return FALSE user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \ @@ -37,7 +37,7 @@ used = TRUE if(user.wear_suit && user.wear_suit.breakouttime && !used) - var/obj/item/clothing/suit/S = user.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/suit/S = user.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(!istype(S)) return FALSE user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S]!", \ diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index f4b74c5567..ec95ee4ef6 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -130,8 +130,8 @@ user.dropItemToGround(user.head) user.dropItemToGround(user.wear_suit) - user.equip_to_slot_if_possible(new suit_type(user), SLOT_WEAR_SUIT, 1, 1, 1) - user.equip_to_slot_if_possible(new helmet_type(user), SLOT_HEAD, 1, 1, 1) + user.equip_to_slot_if_possible(new suit_type(user), ITEM_SLOT_OCLOTHING, 1, 1, 1) + user.equip_to_slot_if_possible(new helmet_type(user), ITEM_SLOT_HEAD, 1, 1, 1) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chem_recharge_slowdown += recharge_slowdown @@ -637,7 +637,7 @@ user.dropItemToGround(user.gloves) - user.equip_to_slot_if_possible(new glove_type(user), SLOT_GLOVES, 1, 1, 1) + user.equip_to_slot_if_possible(new glove_type(user), ITEM_SLOT_GLOVES, 1, 1, 1) playsound(user, 'sound/effects/blobattack.ogg', 30, 1) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chem_recharge_slowdown += recharge_slowdown @@ -733,7 +733,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/cling/equipped(mob/user, slot) . = ..() - if(current_equipped_slot == SLOT_GLOVES) + if(current_equipped_slot == ITEM_SLOT_GLOVES) to_chat(user, "With [src] formed around our arms, we are ready to fight.") /obj/item/clothing/gloves/fingerless/pugilist/cling/dropped(mob/user) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index ad507adcec..b5f2a358e6 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -38,7 +38,7 @@ /obj/item/clothing/head/helmet/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_HEAD && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_HEAD && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] head!", "The helmet flickers off your head, leaving only nausea!") @@ -105,7 +105,7 @@ /obj/item/clothing/suit/armor/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_OCLOTHING && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The cuirass flickers off your body, leaving only nausea!") @@ -165,7 +165,7 @@ /obj/item/clothing/gloves/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_GLOVES && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_GLOVES && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] arms!", "The gauntlets flicker off your arms, leaving only nausea!") @@ -215,7 +215,7 @@ /obj/item/clothing/shoes/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_SHOES && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_FEET && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] feet!", "The treads flicker off your feet, leaving only nausea!") diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm index daee9f5c2c..9342cd8ea5 100644 --- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm +++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm @@ -117,4 +117,4 @@ S.no_cost = TRUE if(seasonal_hat && seasonal_hat != "none") var/obj/item/hat = new seasonal_hat(construct) - construct.equip_to_slot_or_del(hat, SLOT_HEAD) + construct.equip_to_slot_or_del(hat, ITEM_SLOT_HEAD) diff --git a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm index e748da8765..138f04feb3 100644 --- a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm +++ b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm @@ -28,13 +28,13 @@ return ..() /obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) return 0 return ..() /obj/item/clothing/glasses/judicial_visor/equipped(mob/living/user, slot) ..() - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) update_status(FALSE) if(blaster.ranged_ability_user) blaster.remove_ranged_ability() @@ -55,13 +55,13 @@ addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later /obj/item/clothing/glasses/judicial_visor/proc/check_on_mob(mob/user) - if(user && src != user.get_item_by_slot(SLOT_GLASSES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from + if(user && src != user.get_item_by_slot(ITEM_SLOT_EYES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from update_status(FALSE) if(blaster.ranged_ability_user) blaster.remove_ranged_ability() /obj/item/clothing/glasses/judicial_visor/attack_self(mob/user) - if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(SLOT_GLASSES)) + if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(ITEM_SLOT_EYES)) blaster.toggle(user) /obj/item/clothing/glasses/judicial_visor/proc/update_status(change_to) @@ -89,7 +89,7 @@ if(!src) return 0 recharging = FALSE - if(user && src == user.get_item_by_slot(SLOT_GLASSES)) + if(user && src == user.get_item_by_slot(ITEM_SLOT_EYES)) to_chat(user, "Your [name] hums. It is ready.") else active = FALSE @@ -115,7 +115,7 @@ /obj/effect/proc_holder/judicial_visor/InterceptClickOn(mob/living/caller, params, atom/target) if(..()) return - if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(SLOT_GLASSES)) + if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(ITEM_SLOT_EYES)) remove_ranged_ability() return diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index 5e25b8de82..837844d0cb 100644 --- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -75,7 +75,7 @@ /obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot) ..() - if(slot != SLOT_GLASSES || up) + if(slot != ITEM_SLOT_EYES || up) return if(HAS_TRAIT(user, TRAIT_BLIND)) to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\"" ) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm index 7ba4ce0936..be4785f4a7 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm @@ -200,18 +200,18 @@ /datum/action/innate/clockwork_armaments/Activate() var/do_message = 0 - var/obj/item/I = owner.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/I = owner.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), SLOT_WEAR_SUIT) - I = owner.get_item_by_slot(SLOT_HEAD) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), ITEM_SLOT_OCLOTHING) + I = owner.get_item_by_slot(ITEM_SLOT_HEAD) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), SLOT_HEAD) - I = owner.get_item_by_slot(SLOT_GLOVES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), ITEM_SLOT_HEAD) + I = owner.get_item_by_slot(ITEM_SLOT_GLOVES) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), SLOT_GLOVES) - I = owner.get_item_by_slot(SLOT_SHOES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), ITEM_SLOT_GLOVES) + I = owner.get_item_by_slot(ITEM_SLOT_FEET) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), SLOT_SHOES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), ITEM_SLOT_FEET) if(do_message) owner.visible_message("Strange armor appears on [owner]!", "A bright shimmer runs down your body, equipping you with Ratvarian armor.") playsound(owner, 'sound/magic/clockwork/fellowship_armory.ogg', 15 * do_message, TRUE) //get sound loudness based on how much we equipped @@ -309,16 +309,16 @@ continue T = get_turf(M) var/heal_ticks = 0 //one heal tick for each piece of ratvarian armor worn - var/obj/item/I = H.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_HEAD) + I = H.get_item_by_slot(ITEM_SLOT_HEAD) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_GLOVES) + I = H.get_item_by_slot(ITEM_SLOT_GLOVES) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_SHOES) + I = H.get_item_by_slot(ITEM_SLOT_FEET) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ if(heal_ticks) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 521c32fe3d..0efde2d3db 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -678,12 +678,12 @@ uses-- var/mob/living/carbon/C = target C.visible_message("Otherworldly armor suddenly appears on [C]!") - C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,SLOT_W_UNIFORM) - C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), SLOT_HEAD) - C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), SLOT_WEAR_SUIT) - C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES) - C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK) - C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), SLOT_GLOVES) + C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING) + C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), ITEM_SLOT_HEAD) + C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), ITEM_SLOT_OCLOTHING) + C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET) + C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) + C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), ITEM_SLOT_GLOVES) if(C == user) qdel(src) //Clears the hands C.put_in_hands(new /obj/item/melee/cultblade(user)) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index a18523069e..ea8ae6cb7e 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -95,9 +95,9 @@ /datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob) var/list/slots = list( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/T = new item_path(mob) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 7981a10701..3b73a998e7 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -1090,7 +1090,7 @@ structure_check() searches for nearby cultist structures required for the invoca /proc/hudFix(mob/living/carbon/human/target) if(!target || !target.client) return - var/obj/O = target.get_item_by_slot(SLOT_GLASSES) + var/obj/O = target.get_item_by_slot(ITEM_SLOT_EYES) if(istype(O, /obj/item/clothing/glasses/hud/security)) var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] AH.add_hud_to(target) diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index 65ce89d33f..9f69f10887 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -460,10 +460,10 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", return -1 currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1) var/mob/living/carbon/human/H = owner.current - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), SLOT_SHOES) - H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), SLOT_HANDS) - H.equip_to_slot_or_del(new /obj/item/pen(H), SLOT_L_STORE) + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), ITEM_SLOT_FEET) + H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), ITEM_SLOT_HANDS) + H.equip_to_slot_or_del(new /obj/item/pen(H), ITEM_SLOT_LPOCKET) if(SOULVALUE >= BLOOD_THRESHOLD) H.set_species(/datum/species/lizard, 1) H.underwear = "Nude" diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm index fc0a5cdc6a..d7334d6c9c 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm @@ -72,9 +72,9 @@ /datum/antagonist/heretic/proc/ecult_give_item(obj/item/item_path, mob/living/carbon/human/H) var/list/slots = list( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/T = new item_path(H) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 28228aedd6..c0f3e2be7c 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -145,7 +145,7 @@ /obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) + if(ishuman(user) && user.mind && slot == ITEM_SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) ADD_TRAIT(user, trait, CLOTHING_TRAIT) user.update_sight() @@ -239,7 +239,7 @@ /obj/item/clothing/mask/void_mask/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_WEAR_MASK) + if(ishuman(user) && user.mind && slot == ITEM_SLOT_MASK) local_user = user START_PROCESSING(SSobj, src) diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 733b2725cb..0eb52746fa 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -39,7 +39,7 @@ var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) if(E) E.on_effect() - H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) + H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_ITEM_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) /datum/eldritch_knowledge/spell/area_conversion name = "Aggressive Spread" diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 43a7e561c0..a8e57ee08b 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -234,8 +234,8 @@ var/obj/O = new C(owner.current) var/list/slots = list ( "backpack" = ITEM_SLOT_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/mob/living/carbon/human/H = owner.current var/equipped = H.equip_in_one_of_slots(O, slots) diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index ffca67b882..b2fce0269a 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -45,11 +45,11 @@ qdel(I) for(var/obj/item/I in H.held_items) qdel(I) - H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES) - H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE) + H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), ITEM_SLOT_EARS) + H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), ITEM_SLOT_FEET) + H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), ITEM_SLOT_LPOCKET) for(var/obj/item/pinpointer/nuke/P in H) P.attack_self(H) var/obj/item/card/id/W = new(H) @@ -60,7 +60,7 @@ W.registered_name = H.real_name ADD_TRAIT(W, TRAIT_NODROP, HIGHLANDER) W.update_label(H.real_name) - H.equip_to_slot_or_del(W, SLOT_WEAR_ID) + H.equip_to_slot_or_del(W, ITEM_SLOT_ID) sword = new(H) if(!GLOB.highlander) diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm index f086f5db97..fffd8f9237 100644 --- a/code/modules/antagonists/overthrow/overthrow.dm +++ b/code/modules/antagonists/overthrow/overthrow.dm @@ -127,9 +127,9 @@ // Give AI hacking board var/obj/item/aiModule/core/full/overthrow/O = new(H) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = H.equip_in_one_of_slots(O, slots, critical = TRUE) if (!where) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 925527f35e..e4625b4ef2 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -272,9 +272,9 @@ if(give_flash) var/obj/item/assembly/flash/T = new(H) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE) if (!where) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 78403d4e27..f184961004 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -240,9 +240,9 @@ folder = new/obj/item/folder/syndicate/blue(mob.loc) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = "At your feet" diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 44f267358a..6f7ba374f7 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -229,12 +229,12 @@ H.dropItemToGround(I) var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) - H.equip_to_slot_or_del(new hat(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) + H.equip_to_slot_or_del(new hat(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), SLOT_BACK) + H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) /obj/item/voodoo diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index c52436a3c4..63bb2b5b57 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -208,17 +208,17 @@ if(!istype(master_mob) || !istype(H)) return if(master_mob.ears) - H.equip_to_slot_or_del(new master_mob.ears.type, SLOT_EARS) + H.equip_to_slot_or_del(new master_mob.ears.type, ITEM_SLOT_EARS) if(master_mob.w_uniform) - H.equip_to_slot_or_del(new master_mob.w_uniform.type, SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new master_mob.w_uniform.type, ITEM_SLOT_ICLOTHING) if(master_mob.shoes) - H.equip_to_slot_or_del(new master_mob.shoes.type, SLOT_SHOES) + H.equip_to_slot_or_del(new master_mob.shoes.type, ITEM_SLOT_FEET) if(master_mob.wear_suit) - H.equip_to_slot_or_del(new master_mob.wear_suit.type, SLOT_WEAR_SUIT) + H.equip_to_slot_or_del(new master_mob.wear_suit.type, ITEM_SLOT_OCLOTHING) if(master_mob.head) - H.equip_to_slot_or_del(new master_mob.head.type, SLOT_HEAD) + H.equip_to_slot_or_del(new master_mob.head.type, ITEM_SLOT_HEAD) if(master_mob.back) - H.equip_to_slot_or_del(new master_mob.back.type, SLOT_BACK) + H.equip_to_slot_or_del(new master_mob.back.type, ITEM_SLOT_BACK) //Operation: Fuck off and scare people owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm index 6c82b2c0c4..f520cfdbee 100644 --- a/code/modules/awaymissions/mission_code/jungleresort.dm +++ b/code/modules/awaymissions/mission_code/jungleresort.dm @@ -27,7 +27,7 @@ /obj/item/clothing/head/rice_hat/cursed/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 5d30ccd907..ba3f07bd7d 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -589,7 +589,7 @@ back = /obj/item/storage/backpack mask = /obj/item/clothing/mask/breath r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female mob_gender = FEMALE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8d6646b8d0..3cec5c3e50 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3225,10 +3225,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/occupied_slots = L[initial(G.category)] ? L[initial(G.category)] + 1 : 1 LAZYSET(L, initial(G.category), occupied_slots) switch(slot) - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(L[LOADOUT_CATEGORY_BACKPACK] < BACKPACK_SLOT_AMT) return TRUE - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(L[LOADOUT_CATEGORY_HANDS] < HANDS_SLOT_AMT) return TRUE else diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 008772663d..697afd4885 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -63,8 +63,8 @@ // it's TRAIT_NODROP D.dropItemToGround(target, TRUE) qdel(old_headgear) - // where is `SLOT_HEAD` defined? WHO KNOWS - D.equip_to_slot(new_headgear, SLOT_HEAD) + // where is `ITEM_SLOT_HEAD` defined? WHO KNOWS + D.equip_to_slot(new_headgear, ITEM_SLOT_HEAD) return 1 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1a7c220550..572cce28b2 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -219,7 +219,7 @@ ..() if (!istype(user)) return - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + if(slot_flags & slot) //Was equipped to a valid slot for this item? if(iscarbon(user) && LAZYLEN(zones_disabled)) RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/bristle) if(LAZYLEN(user_vars_to_edit)) @@ -450,7 +450,7 @@ BLIND // can't see anything return FALSE // Skip species restriction checks on non-equipment slots - if(slot in list(SLOT_IN_BACKPACK, SLOT_L_STORE, SLOT_R_STORE)) + if(slot in list(ITEM_SLOT_BACKPACK, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET)) return TRUE if(species_restricted && ishuman(M)) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index f58be1373a..a2f0c80041 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -20,7 +20,7 @@ /obj/item/clothing/ears/earmuffs/ComponentInitialize() . = ..() AddElement(/datum/element/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) /obj/item/clothing/ears/headphones name = "headphones" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 737bbbb522..9726ab6b59 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -115,7 +115,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) /obj/item/clothing/glasses/science/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) return 1 /obj/item/clothing/glasses/night @@ -158,7 +158,7 @@ /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) user.visible_message("Circuitry from the eyepatch links itself to your brain as you put on the eyepatch.") if(HAS_TRAIT(user, TRAIT_POOR_AIM)) user.visible_message("You hear a fizzing noise from the circuit. That can't be good.") @@ -351,7 +351,7 @@ /obj/item/clothing/glasses/sunglasses/blindfold/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) user.become_blind("blindfold_[REF(src)]") /obj/item/clothing/glasses/sunglasses/blindfold/dropped(mob/living/carbon/human/user) @@ -372,7 +372,7 @@ var/colored_before = FALSE /obj/item/clothing/glasses/sunglasses/blindfold/white/equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == SLOT_GLASSES) + if(ishuman(user) && slot == ITEM_SLOT_EYES) update_icon(user) user.update_inv_glasses() //Color might have been changed by update_icon. ..() diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index cad91315a3..c848dbdfa8 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -18,7 +18,7 @@ /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) ..() - if(hud_type && slot == SLOT_GLASSES) + if(hud_type && slot == ITEM_SLOT_EYES) var/datum/atom_hud/H = GLOB.huds[hud_type] H.add_hud_to(user) diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm index ba3ea2830e..db77f17218 100644 --- a/code/modules/clothing/glasses/phantomthief.dm +++ b/code/modules/clothing/glasses/phantomthief.dm @@ -17,7 +17,7 @@ /obj/item/clothing/glasses/phantomthief/syndicate/examine(mob/user) . = ..() - if(user.get_item_by_slot(SLOT_GLASSES) == src) + if(user.get_item_by_slot(ITEM_SLOT_EYES) == src) if(world.time >= nextadrenalinepop) . += "The built-in adrenaline injector is ready for use." else @@ -33,7 +33,7 @@ . = ..() if(!istype(user)) return - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) return RegisterSignal(user, COMSIG_LIVING_COMBAT_ENABLED, .proc/injectadrenaline) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 836b845faa..1e3f2c08cf 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -31,7 +31,7 @@ C.visible_message("[U] sprays glittery rubber on the hands of [C]!") else user.visible_message("The rubber fails to stick to [C]'s hands!", - "The rubber fails to stick to [C]'s [(SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!") + "The rubber fails to stick to [C]'s [(ITEM_SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!") qdel(src) @@ -226,7 +226,7 @@ /obj/item/clothing/gloves/color/latex/equipped(mob/user, slot) ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) ADD_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/color/latex/dropped(mob/user) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 8c8400a45d..053f21e148 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -36,7 +36,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) wornonce = TRUE if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) to_chat(user, "What purpose is there to don the weapons of pugilism if you're already well-practiced in martial arts? Mixing arts is blasphemous!") @@ -195,7 +195,7 @@ /obj/item/clothing/gloves/fingerless/ablative/equipped(mob/user, slot) . = ..() - if(current_equipped_slot == SLOT_GLOVES) + if(current_equipped_slot == ITEM_SLOT_GLOVES) RegisterSignal(user, COMSIG_LIVING_ACTIVE_PARRY_START, .proc/get_component_parry_data) wornonce = TRUE @@ -262,7 +262,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/mauler/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) wornonce = TRUE if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) return diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 39d39ba58f..7fc1d05d15 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -28,7 +28,7 @@ if(!ishuman(user)) return switch(slot) // I didn't like how it looked - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance) else @@ -103,7 +103,7 @@ /obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) ADD_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/dropped(mob/user) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 6ad3a19694..ea58d0bc88 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -34,7 +34,7 @@ var/obj/item/WH = H.head H.visible_message("[src] bounces off [H]'s [WH.name]!", "[src] bounces off your [WH.name], falling to the floor.") return - if(H.equip_to_slot_if_possible(src, SLOT_HEAD, FALSE, TRUE)) + if(H.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD, FALSE, TRUE)) H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!") return if(iscyborg(hit_atom)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6b698f9619..126b1af40f 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -27,7 +27,7 @@ /obj/item/clothing/head/helmet/ComponentInitialize() . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD)) /obj/item/clothing/head/helmet/examine(mob/user) . = ..() diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 5af694ea1b..592614af61 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -220,7 +220,7 @@ /obj/item/clothing/head/warden/drill/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 76e8ca53df..744e29646a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -354,7 +354,7 @@ /obj/item/clothing/head/frenchberet/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 247062581d..c091bc1d6a 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -147,7 +147,7 @@ beepsky_fashion = /datum/beepsky_fashion/cat /obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == SLOT_HEAD) + if(ishuman(user) && slot == ITEM_SLOT_HEAD) update_icon(user) user.update_inv_head() //Color might have been changed by update_icon. ..() @@ -186,7 +186,7 @@ /obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) ..() - if(ishuman(user) && slot == SLOT_HEAD) + if(ishuman(user) && slot == ITEM_SLOT_HEAD) var/mob/living/carbon/human/H = user if(istype(H.wear_suit, /obj/item/clothing/suit/cardborg)) var/obj/item/clothing/suit/cardborg/CB = H.wear_suit @@ -265,7 +265,7 @@ /obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot != SLOT_HEAD || warped) + if(slot != ITEM_SLOT_HEAD || warped) return if(paranoia) QDEL_NULL(paranoia) @@ -295,7 +295,7 @@ if(!isliving(loc) || !paranoia) return var/mob/living/target = loc - if(target.get_item_by_slot(SLOT_HEAD) != src) + if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src) return QDEL_NULL(paranoia) if(!target.IsUnconscious()) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index ef7c6a1926..cca13ce1d8 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -18,7 +18,7 @@ /obj/item/clothing/mask/equipped(mob/M, slot) . = ..() - if (slot == SLOT_WEAR_MASK && modifies_speech) + if (slot == ITEM_SLOT_MASK && modifies_speech) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm index a1177e2b47..f39f5e73b8 100644 --- a/code/modules/clothing/masks/cluwne.dm +++ b/code/modules/clothing/masks/cluwne.dm @@ -55,7 +55,7 @@ . = ..() if(!ishuman(user)) return - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return @@ -88,7 +88,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) if(is_cursed && can_cluwne) //logic predetermined log_admin("[key_name(H)] was made into a cluwne by [src]") message_admins("[key_name(H)] got cluwned by [src]") diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index e6a0425920..45da6a9a75 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -290,7 +290,7 @@ . = ..() if(iscarbon(user)) var/mob/living/carbon/C = user - if((C.get_item_by_slot(SLOT_HEAD == src)) || (C.get_item_by_slot(SLOT_WEAR_MASK) == src)) + if((C.get_item_by_slot(ITEM_SLOT_HEAD == src)) || (C.get_item_by_slot(ITEM_SLOT_MASK) == src)) to_chat(user, "You can't tie [src] while wearing it!") return if(slot_flags & ITEM_SLOT_HEAD) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 28a3343ae6..1f40df0f57 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -226,7 +226,7 @@ return /obj/item/clothing/neck/petcollar/locked/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE) + if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK) && lock != FALSE) to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!") return ..() @@ -323,7 +323,7 @@ . = ..() if(iscarbon(user)) var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_NECK) == src) + if(C.get_item_by_slot(ITEM_SLOT_NECK) == src) to_chat(user, "You can't untie [src] while wearing it!") return if(user.is_holding(src)) diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index ac852a35a8..99fc5d1359 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -36,7 +36,7 @@ . = ..() var/key = H.key ? H.key : preference_source ? preference_source.key : null var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, key, 80) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK) var/obj/item/implant/weapons_auth/W = new W.implant(H) var/obj/item/implant/explosive/E = new diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index b9d9bf0b22..de230b254e 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -10,35 +10,35 @@ /datum/outfit/varedit/proc/set_equipement_by_slot(slot,item_path) switch(slot) - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) uniform = item_path - if(SLOT_BACK) + if(ITEM_SLOT_BACK) back = item_path - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) suit = item_path - if(SLOT_BELT) + if(ITEM_SLOT_BELT) belt = item_path - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) gloves = item_path - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) shoes = item_path - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = item_path - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) mask = item_path - if(SLOT_NECK) + if(ITEM_SLOT_NECK) neck = item_path - if(SLOT_EARS) + if(ITEM_SLOT_EARS) ears = item_path - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) glasses = item_path - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) id = item_path - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) suit_store = item_path - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) l_pocket = item_path - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) r_pocket = item_path @@ -68,7 +68,7 @@ //Copy equipment var/list/result = list() - var/list/slots_to_check = list(SLOT_W_UNIFORM,SLOT_BACK,SLOT_WEAR_SUIT,SLOT_BELT,SLOT_GLOVES,SLOT_SHOES,SLOT_HEAD,SLOT_WEAR_MASK,SLOT_NECK,SLOT_EARS,SLOT_GLASSES,SLOT_WEAR_ID,SLOT_S_STORE,SLOT_L_STORE,SLOT_R_STORE) + var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET) for(var/s in slots_to_check) var/obj/item/I = get_item_by_slot(s) var/vedits = collect_vv(I) @@ -79,7 +79,7 @@ //Copy access O.stored_access = list() - var/obj/item/id_slot = get_item_by_slot(SLOT_WEAR_ID) + var/obj/item/id_slot = get_item_by_slot(ITEM_SLOT_ID) if(id_slot) O.stored_access |= id_slot.GetAccess() //Copy hands @@ -98,7 +98,7 @@ result["RHAND"] = vedits O.vv_values = result //Copy backpack contents if exist. - var/obj/item/backpack = get_item_by_slot(SLOT_BACK) + var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK) if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE)) var/list/bp_stuff = list() var/list/typecounts = list() @@ -136,7 +136,7 @@ for(var/vname in edits) I.vv_edit_var(vname,edits[vname]) //Apply access - var/obj/item/id_slot = H.get_item_by_slot(SLOT_WEAR_ID) + var/obj/item/id_slot = H.get_item_by_slot(ITEM_SLOT_ID) if(id_slot) var/obj/item/card/id/card = id_slot.GetID() if(istype(card)) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index c98824fa7f..d8ac875df5 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -87,7 +87,7 @@ /obj/item/clothing/shoes/equipped(mob/user, slot) . = ..() - if(offset && slot_flags & slotdefine2slotbit(slot)) + if(offset && (slot_flags & slot)) user.pixel_y += offset worn_y_dimension -= (offset * 2) user.update_inv_shoes() diff --git a/code/modules/clothing/shoes/cluwne.dm b/code/modules/clothing/shoes/cluwne.dm index fbe1ba624b..aec57a2148 100644 --- a/code/modules/clothing/shoes/cluwne.dm +++ b/code/modules/clothing/shoes/cluwne.dm @@ -23,7 +23,7 @@ . = ..() if(!ishuman(user)) return - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 773b1ac361..cd01d6f099 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -96,7 +96,7 @@ /obj/item/clothing/shoes/magboots/crushing/equipped(mob/user,slot) . = ..() - if (slot == SLOT_SHOES && magpulse) + if (slot == ITEM_SLOT_FEET && magpulse) RegisterSignal(user, COMSIG_MOVABLE_MOVED,.proc/crush) /obj/item/clothing/shoes/magboots/crushing/dropped(mob/user) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 669ffa1780..7a67308760 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -28,7 +28,7 @@ /obj/item/clothing/shoes/combat/sneakboots/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT) /obj/item/clothing/shoes/combat/sneakboots/dropped(mob/user) @@ -112,7 +112,7 @@ /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) if(enabled_waddle) waddle = user.AddComponent(/datum/component/waddling) if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)) @@ -340,7 +340,7 @@ /obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) if(!isliving(user)) return - if(!istype(user.get_item_by_slot(SLOT_SHOES), /obj/item/clothing/shoes/wheelys)) + if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) to_chat(user, "You must be wearing the wheely-heels to use them!") return if(!(W.is_occupant(user))) @@ -460,7 +460,7 @@ /obj/item/clothing/shoes/wallwalkers/equipped(mob/user,slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE,.proc/intercept_user_move) /obj/item/clothing/shoes/wallwalkers/dropped(mob/user) diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm index c0f8a77543..82f467d8b1 100644 --- a/code/modules/clothing/shoes/taeclowndo.dm +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/human/H = user if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY))) return - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) spells = new for(var/spell in spelltypes) var/obj/effect/proc_holder/spell/S = new spell @@ -29,7 +29,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_SHOES) == src) + if(H.get_item_by_slot(ITEM_SLOT_FEET) == src) for(var/spell in spells) var/obj/effect/proc_holder/spell/S = spell H.mind.spell_list.Remove(S) diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 6642731d8b..e30b0953c6 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -107,7 +107,7 @@ teleport_now.UpdateButtonIcon() - var/list/nonsafe_slots = list(SLOT_BELT, SLOT_BACK) + var/list/nonsafe_slots = list(ITEM_SLOT_BELT, ITEM_SLOT_BACK) var/list/exposed = list() for(var/slot in nonsafe_slots) var/obj/item/slot_item = user.get_item_by_slot(slot) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 18138bf4b6..d8a6426295 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -50,12 +50,12 @@ soundloop.stop(user) /obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_HEAD) + if(slot == ITEM_SLOT_HEAD) return 1 /obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot) ..() - if(slot != SLOT_HEAD) + if(slot != ITEM_SLOT_HEAD) if(suit) suit.RemoveHelmet() soundloop.stop(user) @@ -118,7 +118,7 @@ if(jetpack) to_chat(user, "[src] already has a jetpack installed.") return - if(src == user.get_item_by_slot(SLOT_WEAR_SUIT)) //Make sure the player is not wearing the suit before applying the upgrade. + if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING)) //Make sure the player is not wearing the suit before applying the upgrade. to_chat(user, "You cannot install the upgrade to [src] while wearing it.") return @@ -130,7 +130,7 @@ if(!jetpack) to_chat(user, "[src] has no jetpack installed.") return - if(src == user.get_item_by_slot(SLOT_WEAR_SUIT)) + if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING)) to_chat(user, "You cannot remove the jetpack from [src] while wearing it.") return @@ -145,7 +145,7 @@ /obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot) ..() if(jetpack) - if(slot == SLOT_WEAR_SUIT) + if(slot == ITEM_SLOT_OCLOTHING) for(var/X in jetpack.actions) var/datum/action/A = X A.Grant(user) @@ -158,7 +158,7 @@ A.Remove(user) /obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. + if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. return 1 //Engineering @@ -488,7 +488,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/medical/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] DHUD.add_hud_to(user) @@ -528,7 +528,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] DHUD.add_hud_to(user) @@ -702,7 +702,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] DHUD.add_hud_to(user) ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "mason_hardsuit") @@ -726,7 +726,7 @@ /obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot) . = ..() - if(slot != SLOT_WEAR_SUIT) + if(slot != ITEM_SLOT_OCLOTHING) if(listeningTo) UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) return diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 513ad94365..5d19efac4c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -206,7 +206,7 @@ /obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot) ..() - if(slot == SLOT_WEAR_SUIT) + if(slot == ITEM_SLOT_OCLOTHING) disguise(user) /obj/item/clothing/suit/cardborg/dropped(mob/living/user) @@ -1012,7 +1012,7 @@ /obj/item/clothing/suit/hooded/wintercoat/ratvar/equipped(mob/living/user,slot) ..() - if (slot != SLOT_WEAR_SUIT || !real) + if (slot != ITEM_SLOT_OCLOTHING || !real) return if (is_servant_of_ratvar(user)) return @@ -1034,7 +1034,7 @@ /obj/item/clothing/suit/hooded/wintercoat/narsie/equipped(mob/living/user,slot) ..() - if (slot != SLOT_WEAR_SUIT || !real) + if (slot != ITEM_SLOT_OCLOTHING || !real) return if (iscultist(user)) return diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index 98fb836c38..608aca2aad 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -51,7 +51,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" add_fingerprint(user) - if(user.get_item_by_slot(SLOT_WEAR_SUIT) == src) + if(user.get_item_by_slot(ITEM_SLOT_OCLOTHING) == src) user.update_inv_wear_suit() /obj/item/clothing/suit/armor/reactive/emp_act(severity) @@ -177,7 +177,7 @@ /obj/item/clothing/suit/armor/reactive/tesla/equipped(mob/user, slot) ..() - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + if(slot_flags & slot) //Was equipped to a valid slot for this item? ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "reactive_tesla_armor") /obj/item/clothing/suit/armor/reactive/tesla/block_action(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 78708f54bb..5ee247e135 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -31,11 +31,11 @@ ToggleHood() /obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK) + if(slot == ITEM_SLOT_OCLOTHING || slot == ITEM_SLOT_NECK) return 1 /obj/item/clothing/suit/hooded/equipped(mob/user, slot) - if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK) + if(slot != ITEM_SLOT_OCLOTHING && slot != ITEM_SLOT_NECK) RemoveHood() ..() @@ -80,7 +80,7 @@ if(H.head) to_chat(H, "You're already wearing something on your head!") return - else if(H.equip_to_slot_if_possible(hood,SLOT_HEAD,0,0,1)) + else if(H.equip_to_slot_if_possible(hood,ITEM_SLOT_HEAD,0,0,1)) suittoggled = TRUE update_icon() H.update_inv_wear_suit() @@ -102,7 +102,7 @@ /obj/item/clothing/head/hooded/equipped(mob/user, slot) ..() - if(slot != SLOT_HEAD) + if(slot != ITEM_SLOT_HEAD) if(suit) suit.RemoveHood() else @@ -177,7 +177,7 @@ /obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot) if(!helmettype) return - if(slot != SLOT_WEAR_SUIT) + if(slot != ITEM_SLOT_OCLOTHING) RemoveHelmet() ..() @@ -222,7 +222,7 @@ if(message) to_chat(H, "You're already wearing something on your head!") return - else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1)) + else if(H.equip_to_slot_if_possible(helmet,ITEM_SLOT_HEAD,0,0,1)) if(message) to_chat(H, "You engage the helmet on the hardsuit.") suittoggled = TRUE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 977e916f87..5b131749b8 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -167,7 +167,7 @@ actions_types = list(/datum/action/item_action/stickmen) /obj/item/clothing/suit/wizrobe/paper/item_action_slot_check(slot, mob/user, datum/action/A) - if(A.type == /datum/action/item_action/stickmen && slot != SLOT_WEAR_SUIT) + if(A.type == /datum/action/item_action/stickmen && slot != ITEM_SLOT_OCLOTHING) return FALSE return ..() diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 59af632d2a..61e4bb5149 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -114,7 +114,7 @@ if(!alt_covers_chest) body_parts_covered |= CHEST - if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) + if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user)) var/mob/living/carbon/human/H = user attached_accessory.on_uniform_equip(src, user) if(attached_accessory.above_suit) diff --git a/code/modules/clothing/under/cluwne.dm b/code/modules/clothing/under/cluwne.dm index 5a908c5663..e1af4b5171 100644 --- a/code/modules/clothing/under/cluwne.dm +++ b/code/modules/clothing/under/cluwne.dm @@ -16,7 +16,7 @@ /obj/item/clothing/under/cluwne/equipped(mob/living/carbon/user, slot) if(!ishuman(user)) return - if(slot == SLOT_W_UNIFORM) + if(slot == ITEM_SLOT_ICLOTHING) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 824f026e8c..06d2771d88 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -17,7 +17,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) //or else you end up with naked assistants running around everywhere... + H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) //or else you end up with naked assistants running around everywhere... else new C(loc) return INITIALIZE_HINT_QDEL @@ -30,7 +30,7 @@ var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random) if(ishuman(loc)) var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) else new C(loc) return INITIALIZE_HINT_QDEL diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 2f0b9c68f8..061de0ea7c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -18,23 +18,23 @@ switch(item_set) if("wizardmimic") - loadout[SLOT_WEAR_SUIT] = /obj/item/clothing/suit/wizrobe - loadout[SLOT_SHOES] = /obj/item/clothing/shoes/sandal/magic - loadout[SLOT_HEAD] = /obj/item/clothing/head/wizard + loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe + loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic + loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard ruins_spaceworthiness = 1 if("swords") - loadout[SLOT_HANDS] = /obj/item/katana/cursed + loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed if("bigfatdoobie") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy ruins_spaceworthiness = 1 if("boxing") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/luchador - loadout[SLOT_GLOVES] = /obj/item/clothing/gloves/boxing + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador + loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing ruins_spaceworthiness = 1 if("voicemodulators") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/chameleon + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon if("catgirls2015") - loadout[SLOT_HEAD] = /obj/item/clothing/head/kitty + loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/kitty ruins_spaceworthiness = 1 ruins_wizard_loadout = 1 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 5d84901e7f..a2e822ba08 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -739,7 +739,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(close_other) //increase the odds for(var/i in 1 to 5) message_pool.Add("You feel a tiny prick!") - var/obj/item/storage/equipped_backpack = other.get_item_by_slot(SLOT_BACK) + var/obj/item/storage/equipped_backpack = other.get_item_by_slot(ITEM_SLOT_BACK) if(istype(equipped_backpack)) for(var/i in 1 to 5) //increase the odds message_pool.Add("[other] puts the [pick(\ diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index f650a935ea..1c151511af 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -35,7 +35,7 @@ //If they have a hat/helmet and the user is targeting their head. if(affecting == BODY_ZONE_HEAD) - var/obj/item/I = target.get_item_by_slot(SLOT_HEAD) + var/obj/item/I = target.get_item_by_slot(ITEM_SLOT_HEAD) if(I) headarmor = I.armor.melee diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm index 1ebacf0968..723b404717 100644 --- a/code/modules/holiday/halloween/jacqueen.dm +++ b/code/modules/holiday/halloween/jacqueen.dm @@ -432,7 +432,7 @@ var/obj/item/W = C.head C.dropItemToGround(W, TRUE) var/jaqc_latern = new /obj/item/clothing/head/hardhat/pumpkinhead/jaqc - C.equip_to_slot(jaqc_latern, SLOT_HEAD, 1, 1) + C.equip_to_slot(jaqc_latern, ITEM_SLOT_HEAD, 1, 1) if(4) visible_message("[src] waves their arms around, \"In your body there's something amiss, you'll find it's a chem made by my sis!\"") jacqrunes("In your body there's something amiss, you'll find it's a chem made by my sis!", C) @@ -449,7 +449,7 @@ var/obj/item/W = H.wear_suit H.dropItemToGround(W, TRUE) var/ghost = new /obj/item/clothing/suit/ghost_sheet/sticky - H.equip_to_slot(ghost, SLOT_WEAR_SUIT, 1, 1) + H.equip_to_slot(ghost, ITEM_SLOT_OCLOTHING, 1, 1) poof() //Blame Fel diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 1f5becace8..6eaad5e2dc 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -241,7 +241,7 @@ var/satchel = /obj/item/storage/backpack/satchel var/duffelbag = /obj/item/storage/backpack/duffelbag - var/pda_slot = SLOT_BELT + var/pda_slot = ITEM_SLOT_BELT /datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) var/preference_backpack = preference_source?.prefs.backbag diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index de66c32138..82eae55bde 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -40,7 +40,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/atmos/rig @@ -49,4 +49,4 @@ mask = /obj/item/clothing/mask/gas suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index a9e891a303..7789e3c614 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -34,7 +34,7 @@ B.icon_state = GLOB.bible_icon_state B.item_state = GLOB.bible_item_state to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod var/obj/item/nullrod/N = new nrt(H) H.put_in_hands(N) @@ -108,7 +108,7 @@ GLOB.bible_name = B.name GLOB.deity = B.deity_name - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1) SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 804952dbb2..6fbf546e95 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -55,7 +55,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET chameleon_extras = /obj/item/stamp/ce /datum/outfit/job/ce/rig @@ -68,4 +68,4 @@ glasses = /obj/item/clothing/glasses/meson/engine gloves = /obj/item/clothing/gloves/color/yellow head = null - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 331bad9bfe..b9fc5809e3 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -41,7 +41,7 @@ r_pocket = /obj/item/pinpointer/crew l_pocket = /obj/item/pda/medical backpack_contents = list(/obj/item/roller=1) - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack = /obj/item/storage/backpack/medic satchel = /obj/item/storage/backpack/satchel/med diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 6c2cb94d13..e70e747ae6 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -63,4 +63,4 @@ mask = /obj/item/clothing/mask/breath suit = /obj/item/clothing/suit/space/hardsuit/rd suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index b44d536cd2..90dacc0482 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -37,4 +37,4 @@ backpack = /obj/item/storage/backpack/science satchel = /obj/item/storage/backpack/satchel/tox - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 3462fb96c9..1823a2498a 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S if(ears) if(H.ears) qdel(H.ears) - H.equip_to_slot_or_del(new ears(H),SLOT_EARS) + H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS) var/obj/item/card/id/W = H.wear_id W.access |= dep_access diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 0c04380afe..273f74defa 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -60,7 +60,7 @@ mask = /obj/item/clothing/mask/gas/explorer glasses = /obj/item/clothing/glasses/meson suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE backpack_contents = list( /obj/item/flashlight/seclite=1,\ /obj/item/kitchen/knife/combat/survival=1, diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 25bd2196a0..83b11b22f6 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -43,7 +43,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/engineer/gloved @@ -56,6 +56,6 @@ suit = /obj/item/clothing/suit/space/hardsuit/engine suit_store = /obj/item/tank/internals/oxygen head = null - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 9c503279d4..9eed296851 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -20,7 +20,7 @@ /obj/item/wormhole_jaunter/equipped(mob/user, slot) . = ..() - if(slot == SLOT_BELT) + if(slot == ITEM_SLOT_BELT) RegisterSignal(user, COMSIG_MOVABLE_CHASM_DROP, .proc/chasm_react) /obj/item/wormhole_jaunter/dropped(mob/user) @@ -68,7 +68,7 @@ var/mob/M = loc if(istype(M)) - if(M.get_item_by_slot(SLOT_BELT) == src) + if(M.get_item_by_slot(ITEM_SLOT_BELT) == src) if(prob(severity)) M.visible_message("[src] overloads and activates!") SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 0d46912a5a..0b394e0fc5 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -307,7 +307,7 @@ var/mob/living/carbon/human/active_owner /obj/item/clothing/neck/necklace/memento_mori/item_action_slot_check(slot, mob/user, datum/action/A) - return slot == SLOT_NECK + return slot == ITEM_SLOT_NECK /obj/item/clothing/neck/necklace/memento_mori/dropped(mob/user) ..() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 67a95006ab..849bbb9e38 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -182,7 +182,7 @@ held_items[hand_index] = I I.layer = ABOVE_HUD_LAYER I.plane = ABOVE_HUD_PLANE - I.equipped(src, SLOT_HANDS) + I.equipped(src, ITEM_SLOT_HANDS) if(I.pulledby) I.pulledby.stop_pulling() update_inv_hands() @@ -375,14 +375,14 @@ if(!slot_priority) slot_priority = list( \ - SLOT_BACK, SLOT_WEAR_ID,\ - SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\ - SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ - SLOT_SHOES, SLOT_GLOVES,\ - SLOT_EARS, SLOT_GLASSES,\ - SLOT_BELT, SLOT_S_STORE,\ - SLOT_L_STORE, SLOT_R_STORE,\ - SLOT_GENERC_DEXTROUS_STORAGE\ + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS, ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE\ ) for(var/slot in slot_priority) @@ -424,7 +424,7 @@ if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M)) return TRUE - var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK)) + var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(ITEM_SLOT_BELT), M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), M.get_item_by_slot(ITEM_SLOT_BACK)) for(var/i in possible) if(!i) continue @@ -446,10 +446,10 @@ //used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...) /mob/proc/getBackSlot() - return SLOT_BACK + return ITEM_SLOT_BACK /mob/proc/getBeltSlot() - return SLOT_BELT + return ITEM_SLOT_BELT diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index ca2946fd8a..7dedf5a739 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -172,7 +172,7 @@ if(target.dropItemToGround(W)) target.visible_message("[src] tears [W] off of [target]'s face!", \ "[src] tears [W] off of [target]'s face!") - target.equip_to_slot_if_possible(src, SLOT_WEAR_MASK, 0, 1, 1) + target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, 0, 1, 1) return TRUE // time for a smoke /obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) @@ -259,7 +259,7 @@ return 1 var/mob/living/carbon/C = M - if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip)) + if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip)) var/mob/living/carbon/human/H = C if(H.is_mouth_covered(head_only = 1)) return FALSE diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 61839ce123..969e63563d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -261,7 +261,7 @@ // too soon. var/buckle_cd = 600 if(handcuffed) - var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/item/restraints/O = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED) buckle_cd = O.breakouttime MarkResistTime() visible_message("[src] attempts to unbuckle [p_them()]self!", \ @@ -1137,15 +1137,15 @@ /mob/living/carbon/check_obscured_slots() if(head) if(head.flags_inv & HIDEMASK) - LAZYOR(., SLOT_WEAR_MASK) + LAZYOR(., ITEM_SLOT_MASK) if(head.flags_inv & HIDEEYES) - LAZYOR(., SLOT_GLASSES) + LAZYOR(., ITEM_SLOT_EYES) if(head.flags_inv & HIDEEARS) - LAZYOR(., SLOT_EARS) + LAZYOR(., ITEM_SLOT_EARS) if(wear_mask) if(wear_mask.flags_inv & HIDEEYES) - LAZYOR(., SLOT_GLASSES) + LAZYOR(., ITEM_SLOT_EYES) // if any of our bodyparts are bleeding /mob/living/carbon/proc/is_bleeding() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index a12d6614fa..8f954c0239 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -24,7 +24,7 @@ /mob/living/carbon/get_ear_protection() var/number = ..() - var/obj/item/organ/ears/E = getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/E = getorganslot(ORGAN_ITEM_SLOT_EARS) if(!E) number = INFINITY else @@ -417,7 +417,7 @@ SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist) intensity = reflist[1] var/ear_safety = get_ear_protection() - var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = getorganslot(ORGAN_ITEM_SLOT_EARS) var/effect_amount = intensity - ear_safety if(effect_amount > 0) if(stun_pwr) @@ -457,7 +457,7 @@ /mob/living/carbon/can_hear() . = FALSE - var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = getorganslot(ORGAN_ITEM_SLOT_EARS) if(istype(ears) && !ears.deaf) . = TRUE diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm index 45ff02f0d5..afbd6edaeb 100644 --- a/code/modules/mob/living/carbon/carbon_stripping.dm +++ b/code/modules/mob/living/carbon/carbon_stripping.dm @@ -1,10 +1,10 @@ /datum/strippable_item/mob_item_slot/head key = STRIPPABLE_ITEM_HEAD - item_slot = SLOT_HEAD + item_slot = ITEM_SLOT_HEAD /datum/strippable_item/mob_item_slot/back key = STRIPPABLE_ITEM_BACK - item_slot = SLOT_BACK + item_slot = ITEM_SLOT_BACK /datum/strippable_item/mob_item_slot/back/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -18,15 +18,15 @@ /datum/strippable_item/mob_item_slot/mask key = STRIPPABLE_ITEM_MASK - item_slot = SLOT_WEAR_MASK + item_slot = ITEM_SLOT_MASK /datum/strippable_item/mob_item_slot/neck key = STRIPPABLE_ITEM_NECK - item_slot = SLOT_NECK + item_slot = ITEM_SLOT_NECK /datum/strippable_item/mob_item_slot/handcuffs key = STRIPPABLE_ITEM_HANDCUFFS - item_slot = SLOT_HANDCUFFED + item_slot = ITEM_SLOT_HANDCUFFED /datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user) if (!iscarbon(source)) @@ -41,7 +41,7 @@ /datum/strippable_item/mob_item_slot/legcuffs key = STRIPPABLE_ITEM_LEGCUFFS - item_slot = SLOT_LEGCUFFED + item_slot = ITEM_SLOT_LEGCUFFED /datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user) if (!iscarbon(source)) diff --git a/code/modules/mob/living/carbon/handle_corruption.dm b/code/modules/mob/living/carbon/handle_corruption.dm index b56752453b..06256f6f8e 100644 --- a/code/modules/mob/living/carbon/handle_corruption.dm +++ b/code/modules/mob/living/carbon/handle_corruption.dm @@ -102,7 +102,7 @@ if("jamcoolanthud") hud_used.coolant_display.jam(10) if("receporgandamage") - adjustOrganLoss(ORGAN_SLOT_EARS, rand(10, 20)) + adjustOrganLoss(ORGAN_ITEM_SLOT_EARS, rand(10, 20)) adjustOrganLoss(ORGAN_SLOT_EYES, rand(10, 20)) to_chat(src, "Power spike detected in auditory and visual systems!") if("longlimbdisable") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c3fb82de36..32a4fac90f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -31,7 +31,7 @@ . += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]!" //uniform - if(w_uniform && !(SLOT_W_UNIFORM in obscured)) + if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured)) //accessory var/accessory_msg if(istype(w_uniform, /obj/item/clothing/under)) @@ -47,7 +47,7 @@ if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage - if(s_store && !(SLOT_S_STORE in obscured)) + if(s_store && !(ITEM_SLOT_SUITSTORE in obscured)) . += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]." //back if(back) @@ -59,7 +59,7 @@ . += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]." //gloves - if(gloves && !(SLOT_GLOVES in obscured)) + if(gloves && !(ITEM_SLOT_GLOVES in obscured)) . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." else if(length(blood_DNA)) var/hand_number = get_num_arms(FALSE) @@ -78,18 +78,18 @@ . += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist." //shoes - if(shoes && !(SLOT_SHOES in obscured)) + if(shoes && !(ITEM_SLOT_FEET in obscured)) . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." //mask - if(wear_mask && !(SLOT_WEAR_MASK in obscured)) + if(wear_mask && !(ITEM_SLOT_MASK in obscured)) . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." - if(wear_neck && !(SLOT_NECK in obscured)) + if(wear_neck && !(ITEM_SLOT_NECK in obscured)) . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." //eyes - if(!(SLOT_GLASSES in obscured)) + if(!(ITEM_SLOT_EYES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." else if((left_eye_color == BLOODCULT_EYE || right_eye_color == BLOODCULT_EYE) && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) @@ -100,7 +100,7 @@ . += "[t_His] eyes are flickering a bright yellow!" //ears - if(ears && !(SLOT_EARS in obscured)) + if(ears && !(ITEM_SLOT_EARS in obscured)) . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears." //ID diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5a58289316..9af03ef0d0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -372,11 +372,11 @@ . = ..() if(wear_suit) if(wear_suit.flags_inv & HIDEGLOVES) - LAZYOR(., SLOT_GLOVES) + LAZYOR(., ITEM_SLOT_GLOVES) if(wear_suit.flags_inv & HIDEJUMPSUIT) - LAZYOR(., SLOT_W_UNIFORM) + LAZYOR(., ITEM_SLOT_ICLOTHING) if(wear_suit.flags_inv & HIDESHOES) - LAZYOR(., SLOT_SHOES) + LAZYOR(., ITEM_SLOT_FEET) /mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) if(judgement_criteria & JUDGE_EMAGGED) diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 6197241ef3..cd05e06731 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -35,15 +35,15 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/eyes key = STRIPPABLE_ITEM_EYES - item_slot = SLOT_GLASSES + item_slot = ITEM_SLOT_EYES /datum/strippable_item/mob_item_slot/ears key = STRIPPABLE_ITEM_EARS - item_slot = SLOT_EARS + item_slot = ITEM_SLOT_EARS /datum/strippable_item/mob_item_slot/jumpsuit key = STRIPPABLE_ITEM_JUMPSUIT - item_slot = SLOT_W_UNIFORM + item_slot = ITEM_SLOT_ICLOTHING /datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/suit key = STRIPPABLE_ITEM_SUIT - item_slot = SLOT_WEAR_SUIT + item_slot = ITEM_SLOT_OCLOTHING /datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -108,11 +108,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/gloves key = STRIPPABLE_ITEM_GLOVES - item_slot = SLOT_GLOVES + item_slot = ITEM_SLOT_GLOVES /datum/strippable_item/mob_item_slot/feet key = STRIPPABLE_ITEM_FEET - item_slot = SLOT_SHOES + item_slot = ITEM_SLOT_FEET /datum/strippable_item/mob_item_slot/feet/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -141,7 +141,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/suit_storage key = STRIPPABLE_ITEM_SUIT_STORAGE - item_slot = SLOT_S_STORE + item_slot = ITEM_SLOT_SUITSTORE /datum/strippable_item/mob_item_slot/suit_storage/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -155,11 +155,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/id key = STRIPPABLE_ITEM_ID - item_slot = SLOT_WEAR_ID + item_slot = ITEM_SLOT_ID /datum/strippable_item/mob_item_slot/belt key = STRIPPABLE_ITEM_BELT - item_slot = SLOT_BELT + item_slot = ITEM_SLOT_BELT /datum/strippable_item/mob_item_slot/belt/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -212,12 +212,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/pocket/left key = STRIPPABLE_ITEM_LPOCKET - item_slot = SLOT_L_STORE + item_slot = ITEM_SLOT_LPOCKET pocket_side = "left" /datum/strippable_item/mob_item_slot/pocket/right key = STRIPPABLE_ITEM_RPOCKET - item_slot = SLOT_R_STORE + item_slot = ITEM_SLOT_RPOCKET pocket_side = "right" /proc/get_strippable_alternate_action_internals(obj/item/item, atom/source) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 199a6b44be..4c30a1d742 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -17,39 +17,39 @@ // Return the item currently in the slot ID /mob/living/carbon/human/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) return back - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return wear_mask - if(SLOT_NECK) + if(ITEM_SLOT_NECK) return wear_neck - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) return handcuffed - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) return legcuffed - if(SLOT_BELT) + if(ITEM_SLOT_BELT) return belt - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) return wear_id - if(SLOT_EARS) + if(ITEM_SLOT_EARS) return ears - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) return glasses - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) return gloves - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) return shoes - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) return wear_suit - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) return w_uniform - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) return l_store - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) return r_store - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) return s_store return null @@ -98,17 +98,17 @@ var/not_handled = FALSE //Added in case we make this type path deeper one day switch(slot) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) belt = I update_inv_belt() - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) wear_id = I sec_hud_set_ID() update_inv_wear_id() - if(SLOT_EARS) + if(ITEM_SLOT_EARS) ears = I update_inv_ears() - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) glasses = I var/obj/item/clothing/glasses/G = I if(G.glass_colour_type) @@ -121,13 +121,13 @@ if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) gloves = I update_inv_gloves() - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) shoes = I update_inv_shoes() - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) wear_suit = I if(I.flags_inv & HIDEJUMPSUIT) update_inv_w_uniform() @@ -135,17 +135,17 @@ stop_pulling() //can't pull if restrained update_action_buttons_icon() //certain action buttons will no longer be usable. update_inv_wear_suit() - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) w_uniform = I update_suit_sensors() update_inv_w_uniform() - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) l_store = I update_inv_pockets() - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) r_store = I update_inv_pockets() - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) s_store = I update_inv_s_store() else @@ -296,7 +296,7 @@ if(incapacitated()) return var/obj/item/thing = get_active_held_item() - var/obj/item/equipped_back = get_item_by_slot(SLOT_BACK) + var/obj/item/equipped_back = get_item_by_slot(ITEM_SLOT_BACK) if(!equipped_back) // We also let you equip a backpack like this if(!thing) to_chat(src, "You have no backpack to take something out of!") @@ -327,7 +327,7 @@ if(incapacitated()) return var/obj/item/thing = get_active_held_item() - var/obj/item/equipped_belt = get_item_by_slot(SLOT_BELT) + var/obj/item/equipped_belt = get_item_by_slot(ITEM_SLOT_BELT) if(!equipped_belt) // We also let you equip a belt like this if(!thing) to_chat(src, "You have no belt to take something out of!") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index e6ac8ae881..847664d957 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/obj/item/organ/lungs/lungs = C.getorganslot(ORGAN_SLOT_LUNGS) var/obj/item/organ/appendix/appendix = C.getorganslot(ORGAN_SLOT_APPENDIX) var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_ITEM_SLOT_EARS) var/obj/item/organ/tongue/tongue = C.getorganslot(ORGAN_SLOT_TONGUE) var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER) var/obj/item/organ/stomach/stomach = C.getorganslot(ORGAN_SLOT_STOMACH) @@ -1260,11 +1260,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/num_legs = H.get_num_legs(FALSE) switch(slot) - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(H.get_empty_held_indexes()) return TRUE return FALSE - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) if(H.wear_mask) return FALSE if(!(I.slot_flags & ITEM_SLOT_MASK)) @@ -1272,25 +1272,25 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_NECK) + if(ITEM_SLOT_NECK) if(H.wear_neck) return FALSE if( !(I.slot_flags & ITEM_SLOT_NECK) ) return FALSE return TRUE - if(SLOT_BACK) + if(ITEM_SLOT_BACK) if(H.back) return FALSE if( !(I.slot_flags & ITEM_SLOT_BACK) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) if(H.wear_suit) return FALSE if( !(I.slot_flags & ITEM_SLOT_OCLOTHING) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) if(H.gloves) return FALSE if( !(I.slot_flags & ITEM_SLOT_GLOVES) ) @@ -1298,7 +1298,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_arms < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) if(H.shoes) return FALSE if( !(I.slot_flags & ITEM_SLOT_FEET) ) @@ -1311,7 +1311,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) if(H.belt) return FALSE if(!(I.item_flags & NO_UNIFORM_REQUIRED)) @@ -1323,7 +1323,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!(I.slot_flags & ITEM_SLOT_BELT)) return return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) if(H.glasses) return FALSE if(!(I.slot_flags & ITEM_SLOT_EYES)) @@ -1331,7 +1331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(H.head) return FALSE if(!(I.slot_flags & ITEM_SLOT_HEAD)) @@ -1339,7 +1339,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_EARS) + if(ITEM_SLOT_EARS) if(H.ears) return FALSE if(!(I.slot_flags & ITEM_SLOT_EARS)) @@ -1347,13 +1347,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) if(H.w_uniform) return FALSE if( !(I.slot_flags & ITEM_SLOT_ICLOTHING) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) if(H.wear_id) return FALSE if(!(I.item_flags & NO_UNIFORM_REQUIRED)) @@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if( !(I.slot_flags & ITEM_SLOT_ID) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them. return FALSE if(H.l_store) @@ -1377,11 +1377,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(return_warning) return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!" return FALSE - if(I.slot_flags & ITEM_SLOT_DENYPOCKET) - return FALSE - if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) + if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) ) return TRUE - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) if(HAS_TRAIT(I, TRAIT_NODROP)) return FALSE if(H.r_store) @@ -1393,12 +1391,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(return_warning) return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!" return FALSE - if(I.slot_flags & ITEM_SLOT_DENYPOCKET) - return FALSE - if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) + if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) ) return TRUE return FALSE - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) if(HAS_TRAIT(I, TRAIT_NODROP)) return FALSE if(H.s_store) @@ -1418,7 +1414,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if( istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) ) return TRUE return FALSE - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) if(H.handcuffed) return FALSE if(!istype(I, /obj/item/restraints/handcuffs)) @@ -1426,7 +1422,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_arms < 2) return FALSE return TRUE - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) if(H.legcuffed) return FALSE if(!istype(I, /obj/item/restraints/legcuffs)) @@ -1434,7 +1430,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_legs < 2) return FALSE return TRUE - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(H.back) if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index ac25c9e021..f90199c8ee 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -12,7 +12,7 @@ punchdamagelow = 5 punchdamagehigh = 14 punchstunthreshold = 10 - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) nojumpsuit = 1 sexes = 1 damage_overlay_type = "" diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 0655b28197..afcec291e9 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -16,7 +16,7 @@ punchdamagehigh = 12 //still better than humans punchstunthreshold = 10 - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING) burnmod = 1.25 heatmod = 1.5 diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index bfef310cdf..f412099831 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -37,7 +37,7 @@ limbs_id = SPECIES_SHADOW burnmod = 1.5 blacklisted = TRUE - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER) mutanteyes = /obj/item/organ/eyes/night_vision/nightmare diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 52d736f9ce..cb2458e376 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -128,7 +128,7 @@ There are several things that need to be remembered: remove_overlay(UNIFORM_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ICLOTHING) + 1] inv.update_icon() if(istype(w_uniform, /obj/item/clothing/under)) @@ -180,7 +180,7 @@ There are several things that need to be remembered: remove_overlay(ID_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ID) + 1] inv.update_icon() var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] @@ -204,8 +204,8 @@ There are several things that need to be remembered: if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLOVES_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1] inv.update_icon() if(!gloves && bloody_hands) @@ -242,7 +242,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EYES) + 1] inv.update_icon() if(glasses) @@ -269,7 +269,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS) + 1] inv.update_icon() if(ears) @@ -295,7 +295,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_FEET) + 1] inv.update_icon() if(dna.species.mutant_bodyparts["taur"]) @@ -330,7 +330,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SUITSTORE) + 1] inv.update_icon() if(s_store) @@ -357,7 +357,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] inv.update_icon() if(head) @@ -394,7 +394,7 @@ There are several things that need to be remembered: remove_overlay(BELT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BELT) + 1] inv.update_icon() if(belt) @@ -416,7 +416,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_OCLOTHING) + 1] inv.update_icon() if(wear_suit) @@ -479,10 +479,10 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv - inv = hud_used.inv_slots[SLOT_L_STORE] + inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_LPOCKET) + 1] inv.update_icon() - inv = hud_used.inv_slots[SLOT_R_STORE] + inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_RPOCKET) + 1] inv.update_icon() if(l_store) @@ -506,7 +506,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] inv.update_icon() if(wear_mask) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 13f811196e..2422528d21 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -1,16 +1,16 @@ /mob/living/carbon/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) return back - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return wear_mask - if(SLOT_NECK) + if(ITEM_SLOT_NECK) return wear_neck - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) return handcuffed - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) return legcuffed return null @@ -20,17 +20,17 @@ return slot if(critical) //it is CRITICAL they get this item, no matter what //do they have a backpack? - var/obj/item/backpack = get_item_by_slot(SLOT_BACK) + var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK) if(!backpack) //nothing on their back backpack = new /obj/item/storage/backpack(get_turf(src)) - if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one + if(equip_to_slot(backpack, ITEM_SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one I.forceMove(backpack) - return SLOT_BACK + return ITEM_SLOT_BACK else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE)) //place it in here, regardless of storage capacity I.forceMove(backpack) - return SLOT_BACK + return ITEM_SLOT_BACK else //this should NEVER happen, but if it does, report it with the appropriate information var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]" @@ -69,28 +69,28 @@ I.appearance_flags |= NO_CLIENT_COLOR var/not_handled = FALSE switch(slot) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) back = I update_inv_back() - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) wear_mask = I wear_mask_update(I, toggle_off = 0) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = I head_update(I) - if(SLOT_NECK) + if(ITEM_SLOT_NECK) wear_neck = I update_inv_neck(I) - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) handcuffed = I update_handcuffed() - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) legcuffed = I update_inv_legcuffed() - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) put_in_hands(I) update_inv_hands() - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) not_handled = TRUE else @@ -170,7 +170,7 @@ if(!offered_item) to_chat(src, "You're not holding anything to give!") return - + if(IS_DEAD_OR_INCAP(src)) to_chat(src, span_warning("You're unable to offer anything in your current state!")) return @@ -184,7 +184,7 @@ visible_message(span_notice("[src] is offering [offered_item]."), \ span_notice("You offer [offered_item]."), null, 2) - + apply_status_effect(STATUS_EFFECT_OFFERING, offered_item) /** diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 182ae1afb8..27f795015e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -676,7 +676,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put /mob/living/carbon/proc/get_cooling_efficiency() if(!HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM)) return 1 - + var/integration_bonus = min(blood_volume * SYNTH_INTEGRATION_COOLANT_CAP, integrating_blood * SYNTH_INTEGRATION_COOLANT_PENALTY) //Integration blood somewhat helps, though only at 40% impact and to a cap of 25% of current blood level. var/blood_effective_volume = blood_volume + integration_bonus var/coolant_efficiency = min(blood_effective_volume / BLOOD_VOLUME_SAFE, 1) //Low coolant is only a negative, adding more than needed will not help you. @@ -706,13 +706,13 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put return total_environment_efficiency /mob/living/carbon/proc/check_suitlinking() - var/suit_item = get_item_by_slot(SLOT_WEAR_SUIT) - var/head_item = get_item_by_slot(SLOT_HEAD) + var/suit_item = get_item_by_slot(ITEM_SLOT_OCLOTHING) + var/head_item = get_item_by_slot(ITEM_SLOT_HEAD) var/turf/T = get_turf(src) - + if(istype(head_item, /obj/item/clothing/head/helmet/space) && istype(suit_item, /obj/item/clothing/suit/space)) return 1 - + if(T && is_mining_level(T.z) && istype(head_item, /obj/item/clothing/head/hooded/explorer) && istype(suit_item, /obj/item/clothing/suit/hooded/explorer)) return 1 diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm index 34599028f7..156eef9b6b 100644 --- a/code/modules/mob/living/carbon/monkey/inventory.dm +++ b/code/modules/mob/living/carbon/monkey/inventory.dm @@ -5,29 +5,29 @@ return FALSE switch(slot) - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(get_empty_held_indexes()) return TRUE return FALSE - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) if(wear_mask) return FALSE if( !(I.slot_flags & ITEM_SLOT_MASK) ) return FALSE return TRUE - if(SLOT_NECK) + if(ITEM_SLOT_NECK) if(wear_neck) return FALSE if( !(I.slot_flags & ITEM_SLOT_NECK) ) return FALSE return TRUE - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(head) return FALSE if( !(I.slot_flags & ITEM_SLOT_HEAD) ) return FALSE return TRUE - if(SLOT_BACK) + if(ITEM_SLOT_BACK) if(back) return FALSE if( !(I.slot_flags & ITEM_SLOT_BACK) ) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index f8ac8c6716..8a029613e2 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -184,5 +184,5 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list( . = ..() if(prob(10)) var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src) - equip_to_slot_or_del(helmet,SLOT_HEAD) + equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD) INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm index c59218a8a3..d71a989c1d 100644 --- a/code/modules/mob/living/carbon/monkey/punpun.dm +++ b/code/modules/mob/living/carbon/monkey/punpun.dm @@ -29,9 +29,9 @@ if(ancestor_chain > 1) generate_fake_scars(rand(ancestor_chain, ancestor_chain * 4)) if(relic_hat) - equip_to_slot_or_del(new relic_hat, SLOT_HEAD) + equip_to_slot_or_del(new relic_hat, ITEM_SLOT_HEAD) if(relic_mask) - equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK) + equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK) /mob/living/carbon/monkey/punpun/BiologicalLife(seconds, times_fired) if(!(. = ..())) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 43e0db1f08..cd9cd5db4c 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -91,7 +91,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] inv?.update_icon() if(wear_mask) @@ -104,8 +104,8 @@ /mob/living/carbon/update_inv_neck() remove_overlay(NECK_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_NECK]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1] inv.update_icon() if(wear_neck) @@ -119,7 +119,7 @@ remove_overlay(BACK_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1] inv?.update_icon() if(back) @@ -135,7 +135,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] inv?.update_icon() if(head) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index ecd5db3ccf..dfb00f2657 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -88,10 +88,10 @@ if(default_storage) var/obj/item/I = new default_storage(src) - equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_STORAGE) + equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE) if(default_hatmask) var/obj/item/I = new default_hatmask(src) - equip_to_slot_or_del(I, SLOT_HEAD) + equip_to_slot_or_del(I, ITEM_SLOT_HEAD) ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index 948be53abc..df4d1e0673 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -61,7 +61,7 @@ if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len) var/hat_type = pick(possible_seasonal_hats) var/obj/item/new_hat = new hat_type(D) - D.equip_to_slot_or_del(new_hat, SLOT_HEAD) + D.equip_to_slot_or_del(new_hat, ITEM_SLOT_HEAD) D.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) user.transfer_ckey(D, FALSE) qdel(src) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index 00be08bb1d..4c112858da 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -21,13 +21,13 @@ /mob/living/simple_animal/drone/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning) switch(slot) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(head) return 0 if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK))) return 0 return 1 - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) if(internal_storage) return 0 return 1 @@ -36,9 +36,9 @@ /mob/living/simple_animal/drone/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) return internal_storage return ..() @@ -63,10 +63,10 @@ I.plane = ABOVE_HUD_PLANE switch(slot) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = I update_inv_head() - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) internal_storage = I update_inv_internal_storage() else @@ -77,7 +77,7 @@ I.equipped(src, slot) /mob/living/simple_animal/drone/getBackSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/drone/getBeltSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index a079507a63..6d421d326e 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -52,7 +52,7 @@ /mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning) switch(slot) - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) if(internal_storage) return 0 return 1 @@ -63,17 +63,17 @@ return switch(slot) - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) internal_storage = I update_inv_internal_storage() else to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!") /mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage() if(internal_storage && client && hud_used && hud_used.hud_shown) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index fa67fd8e3b..6bd55d06ae 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -191,7 +191,7 @@ continue visible_message("[src] grabs hold of [L]!") var/mob/living/carbon/C = L - var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(S && S.resistance_flags & GOLIATH_RESISTANCE) L.Stun(25) else if(S && S.resistance_flags & GOLIATH_WEAKNESS) diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index cf895924b0..f59a06dc69 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -111,7 +111,7 @@ if(user.put_in_hands(src)) msg = "Your Energy Katana teleports into your hand!" - else if(user.equip_to_slot_if_possible(src, SLOT_BELT, 0, 1, 1)) + else if(user.equip_to_slot_if_possible(src, ITEM_SLOT_BELT, 0, 1, 1)) msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!" else msg = "Your Energy Katana teleports to your location!" diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm index ca740d9ad7..f9ce438ed9 100644 --- a/code/modules/ninja/outfit.dm +++ b/code/modules/ninja/outfit.dm @@ -11,7 +11,7 @@ l_pocket = /obj/item/grenade/plastic/c4/ninja r_pocket = /obj/item/hypospray/mkii/CMO/combat suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE belt = /obj/item/energy_katana implants = list(/obj/item/implant/explosive) diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 6fba60a6ef..4f46a1bfc6 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -22,7 +22,7 @@ /obj/item/clothing/shoes/space_ninja/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT) /obj/item/clothing/shoes/space_ninja/dropped(mob/user) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index f07ad0bc39..8c26f40d8b 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -163,7 +163,7 @@ icon = 'icons/obj/ammo.dmi' icon_state = "shotgunclip" caliber = "shotgun" // slapped in to allow shell mix n match - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_NORMAL w_volume = ITEM_VOLUME_STRIPPER_CLIP ammo_type = /obj/item/ammo_casing/shotgun diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm index 5b774b111a..76d8f217ab 100644 --- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm +++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm @@ -54,7 +54,7 @@ desc = "A miniature battery for an energy weapon." icon = 'icons/obj/ammo.dmi' icon_state = "mws_batt" - slot_flags = SLOT_BELT | SLOT_EARS + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_EARS throwforce = 1 caliber = "mws" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bbd77ad665..a1c7c312ab 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -619,7 +619,7 @@ . += knife_overlay /obj/item/gun/item_action_slot_check(slot, mob/user, datum/action/A) - if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != SLOT_HANDS) + if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != ITEM_SLOT_HANDS) return FALSE return ..() diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index e7f26670d4..1f0601ac77 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -140,6 +140,6 @@ recoil = 0.1 inaccuracy_modifier = 0.25 dualwield_spread_mult = 1.4 - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL weapon_weight = WEAPON_MEDIUM diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index a0274d76d7..2bb1ece906 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -32,7 +32,7 @@ /obj/item/minigunpack/on_attack_hand(var/mob/living/carbon/user) if(src.loc == user) if(!armed) - if(user.get_item_by_slot(SLOT_BACK) == src) + if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) armed = 1 if(!user.put_in_hands(gun)) armed = 0 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index ec628255fa..5521bf80f4 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2670,7 +2670,7 @@ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -100) M.adjustOrganLoss(ORGAN_SLOT_HEART, -100) M.adjustOrganLoss(ORGAN_SLOT_LIVER, -100) - M.adjustOrganLoss(ORGAN_SLOT_EARS, -100) + M.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS, -100) M.adjustOrganLoss(ORGAN_SLOT_STOMACH, -100) M.adjustOrganLoss(ORGAN_SLOT_TONGUE, -100) M.adjustOrganLoss(ORGAN_SLOT_EYES, -100) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index af670c00dc..a70c17ec25 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -1073,7 +1073,7 @@ taste_description = "sugary sweetness" /datum/reagent/toxin/leadacetate/on_mob_life(mob/living/carbon/M) - M.adjustOrganLoss(ORGAN_SLOT_EARS,1) + M.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,1) M.adjustOrganLoss(ORGAN_SLOT_BRAIN,1) if(prob(1)) to_chat(M, "Ah, what was that? You thought you heard something...") diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index fddff17a9d..03b0e1b715 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -581,7 +581,7 @@ if(istype(extract)) if(extract.Uses > 0) var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast) - if(lastheld && !lastheld.equip_to_slot_if_possible(extract, SLOT_HANDS, disable_warning = TRUE)) + if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE)) extract.forceMove(get_turf(lastheld)) use_slime_core(holder) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 6e1b753c32..cc7ff43bab 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -300,14 +300,14 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head slot_equipment_priority = list( \ - SLOT_BACK, SLOT_WEAR_ID,\ - SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\ - SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ - SLOT_SHOES, SLOT_GLOVES,\ - SLOT_EARS, SLOT_GLASSES,\ - SLOT_BELT, SLOT_S_STORE,\ - SLOT_L_STORE, SLOT_R_STORE,\ - SLOT_GENERC_DEXTROUS_STORAGE + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS, ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE ) container_flags = APTFT_ALTCLICK|APTFT_VERB container_HP = 1 @@ -330,11 +330,11 @@ /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) if(reagents.total_volume) to_chat(user, "[src]'s contents spill all over you!") var/R = reagents.log_list() - log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, SLOT_HEAD) - [R]") + log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, ITEM_SLOT_HEAD) - [R]") reagents.reaction(user, TOUCH) reagents.clear_reagents() reagent_flags = NONE @@ -345,10 +345,10 @@ /obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M) if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head - var/index = slot_equipment_priority.Find(SLOT_HEAD) - slot_equipment_priority.Remove(SLOT_HEAD) + var/index = slot_equipment_priority.Find(ITEM_SLOT_HEAD) + slot_equipment_priority.Remove(ITEM_SLOT_HEAD) . = ..() - slot_equipment_priority.Insert(index, SLOT_HEAD) + slot_equipment_priority.Insert(index, ITEM_SLOT_HEAD) return return ..() diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index c26ed4db31..78cb9d43ea 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -150,11 +150,11 @@ /obj/item/reagent_containers/rag/towel/equipped(mob/living/user, slot) . = ..() switch(slot) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) body_parts_covered = GROIN|LEGS - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) body_parts_covered = CHEST|GROIN|LEGS - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) body_parts_covered = HEAD flags_inv = HIDEHAIR diff --git a/code/modules/research/nanites/nanite_programs/protocols.dm b/code/modules/research/nanites/nanite_programs/protocols.dm index 3716bc61ac..56f083d31f 100644 --- a/code/modules/research/nanites/nanite_programs/protocols.dm +++ b/code/modules/research/nanites/nanite_programs/protocols.dm @@ -244,7 +244,7 @@ if(eyes) eyes.applyOrganDamage(0.75) if(prob(13)) - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_ITEM_SLOT_EARS) if(ears) ears.applyOrganDamage(0.75) current_stage++ diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 1ac09652b5..b30a53c27d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -19,7 +19,7 @@ Slimecrossing Armor /obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]") user.failed_last_breath = FALSE user.clear_alert("not_enough_oxy") @@ -39,7 +39,7 @@ Slimecrossing Armor var/glasses_color = "#FFFFFF" /obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot) - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) return TRUE /obj/structure/light_prism @@ -111,7 +111,7 @@ Slimecrossing Armor /obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_HEAD) + if(slot == ITEM_SLOT_HEAD) ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]") /obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user) diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index dee7b1cf45..f871cac778 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -127,10 +127,10 @@ Regenerative extracts: /obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user) var/equipped = 0 - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), SLOT_SHOES) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), SLOT_W_UNIFORM) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), SLOT_GLOVES) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), SLOT_HEAD) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), ITEM_SLOT_FEET) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), ITEM_SLOT_ICLOTHING) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), ITEM_SLOT_GLOVES) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), ITEM_SLOT_HEAD) if(equipped > 0) target.visible_message("The milky goo congeals into clothing!") @@ -142,13 +142,13 @@ Regenerative extracts: return var/mob/living/carbon/human/H = target var/fireproofed = FALSE - if(H.get_item_by_slot(SLOT_WEAR_SUIT)) + if(H.get_item_by_slot(ITEM_SLOT_OCLOTHING)) fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_OCLOTHING) fireproof(C) - if(H.get_item_by_slot(SLOT_HEAD)) + if(H.get_item_by_slot(ITEM_SLOT_HEAD)) fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(SLOT_HEAD) + var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_HEAD) fireproof(C) if(fireproofed) target.visible_message("Some of [target]'s clothing gets coated in the goo, and turns blue!") diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index fbe7a0ea40..bf6051c87c 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -63,9 +63,9 @@ H.dropItemToGround(H.w_uniform) H.dropItemToGround(H.wear_suit) H.dropItemToGround(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_WEAR_SUIT) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), ITEM_SLOT_OCLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), ITEM_SLOT_ICLOTHING) // you only get one phylactery. M.mind.RemoveSpell(src) @@ -132,10 +132,10 @@ var/mob/old_body = mind.current var/mob/living/carbon/human/lich = new(item_turf) - lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), SLOT_SHOES) - lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), SLOT_W_UNIFORM) - lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), SLOT_WEAR_SUIT) - lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), SLOT_HEAD) + lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), ITEM_SLOT_FEET) + lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), ITEM_SLOT_ICLOTHING) + lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), ITEM_SLOT_OCLOTHING) + lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), ITEM_SLOT_HEAD) lich.real_name = mind.name mind.transfer_to(lich) diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index 80b7599ec3..71fa88233a 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -3,7 +3,7 @@ icon_state = "ears" desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible." zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_EARS + slot = ORGAN_ITEM_SLOT_EARS gender = PLURAL healing_factor = STANDARD_ORGAN_HEALING @@ -138,7 +138,7 @@ icon_state = "ears-c" desc = "A pair of microphones intended to be installed in an IPC head, that grant the ability to hear." zone = BODY_ZONE_HEAD - slot = ORGAN_SLOT_EARS + slot = ORGAN_ITEM_SLOT_EARS gender = PLURAL organ_flags = ORGAN_SYNTHETIC diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index a3c6ea06c8..60628e6db0 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -333,7 +333,7 @@ if(only_one) return TRUE - if(!getorganslot(ORGAN_SLOT_EARS)) + if(!getorganslot(ORGAN_ITEM_SLOT_EARS)) var/obj/item/organ/ears/ears if(dna && dna.species && dna.species.mutantears) ears = new dna.species.mutantears diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 3e0e71446d..d4a87a0f1e 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -102,7 +102,7 @@ var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) unbuckle_mob(H) H.throw_at(throw_target, 3, 2) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) + var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD) if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) H.updatehealth() @@ -281,7 +281,7 @@ H.throw_at(throw_target, 4, 3) H.DefaultCombatKnockdown(30) H.adjustStaminaLoss(30) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) + var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD) if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1) H.updatehealth() diff --git a/modular_citadel/code/datums/components/souldeath.dm b/modular_citadel/code/datums/components/souldeath.dm index ab45210a46..01e6acb795 100644 --- a/modular_citadel/code/datums/components/souldeath.dm +++ b/modular_citadel/code/datums/components/souldeath.dm @@ -32,4 +32,4 @@ playsound(wearer, 'sound/misc/souldeath.ogg', 100, FALSE) /datum/component/souldeath/neck - equip_slot = SLOT_NECK + equip_slot = ITEM_SLOT_NECK diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index f2c7b398cf..fe53574470 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -2,289 +2,289 @@ /datum/gear/donator name = "IF YOU SEE THIS, PING A CODER RIGHT NOW!" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/bikehorn/golden category = LOADOUT_CATEGORY_DONATOR ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard /datum/gear/donator/pet name = "Pet Beacon" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/choice_beacon/pet ckeywhitelist = list() donator_group_id = DONATOR_GROUP_TIER_1 // can be accessed by all donators /datum/gear/donator/carpet name = "Carpet Beacon" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/choice_beacon/box/carpet ckeywhitelist = list() donator_group_id = DONATOR_GROUP_TIER_1 /datum/gear/donator/chameleon_bedsheet name = "Chameleon Bedsheet" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/bedsheet/chameleon ckeywhitelist = list() donator_group_id = DONATOR_GROUP_TIER_1 /datum/gear/donator/donortestingbikehorn name = "Donor item testing bikehorn" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/bikehorn geargroupID = list("DONORTEST") //This is a list mainly for the sake of testing, but geargroupID works just fine with ordinary strings /datum/gear/donator/kevhorn name = "Airhorn" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/bikehorn/airhorn ckeywhitelist = list("kevinz000") /datum/gear/donator/kiaracloak name = "Kiara's cloak" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/cloak/inferno ckeywhitelist = list("inferno707") /datum/gear/donator/kiaracollar name = "Kiara's collar" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/petcollar/inferno ckeywhitelist = list("inferno707") /datum/gear/donator/kiaramedal name = "Insignia of Steele" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/accessory/medal/steele ckeywhitelist = list("inferno707") /datum/gear/donator/hheart name = "The Hollow Heart" - slot = SLOT_WEAR_MASK + slot = ITEM_SLOT_MASK path = /obj/item/clothing/mask/hheart ckeywhitelist = list("inferno707") /datum/gear/donator/engravedzippo name = "Engraved zippo" - slot = SLOT_HANDS + slot = ITEM_SLOT_HANDS path = /obj/item/lighter/gold ckeywhitelist = list("dirtyoldharry") /datum/gear/donator/geisha name = "Geisha suit" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/geisha ckeywhitelist = list("atiefling") /datum/gear/donator/specialscarf name = "Special scarf" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/scarf/zomb ckeywhitelist = list("zombierobin") /datum/gear/donator/redmadcoat name = "The Mad's labcoat" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/toggle/labcoat/mad/red ckeywhitelist = list("zombierobin") /datum/gear/donator/santahat name = "Santa hat" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/santa/fluff ckeywhitelist = list("illotafv") /datum/gear/donator/reindeerhat name = "Reindeer hat" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/hardhat/reindeer/fluff ckeywhitelist = list("illotafv") /datum/gear/donator/treeplushie name = "Christmas tree plushie" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/plush/tree ckeywhitelist = list("illotafv") /datum/gear/donator/santaoutfit name = "Santa costume" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/space/santa/fluff ckeywhitelist = list("illotafv") /datum/gear/donator/treecloak name = "Christmas tree cloak" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/cloak/festive ckeywhitelist = list("illotafv") /datum/gear/donator/carrotplush name = "Carrot plushie" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/plush/carrot ckeywhitelist = list("improvedname") /datum/gear/donator/carrotcloak name = "Carrot cloak" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/cloak/carrot ckeywhitelist = list("improvedname") /datum/gear/donator/albortorosamask name = "Alborto Rosa mask" - slot = SLOT_WEAR_MASK + slot = ITEM_SLOT_MASK path = /obj/item/clothing/mask/luchador/zigfie ckeywhitelist = list("zigfie") /datum/gear/donator/mankini name = "Mankini" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/misc/stripper/mankini ckeywhitelist = list("zigfie") /datum/gear/donator/pinkshoes name = "Pink shoes" - slot = SLOT_SHOES + slot = ITEM_SLOT_FEET path = /obj/item/clothing/shoes/sneakers/pink ckeywhitelist = list("zigfie") /datum/gear/donator/reecesgreatcoat name = "Reece's Great Coat" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/trenchcoat/green ckeywhitelist = list("geemiesif") /datum/gear/donator/russianflask name = "Russian flask" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/reagent_containers/food/drinks/flask/russian cost = 2 ckeywhitelist = list("slomka") /datum/gear/donator/stalkermask name = "S.T.A.L.K.E.R. mask" - slot = SLOT_WEAR_MASK + slot = ITEM_SLOT_MASK path = /obj/item/clothing/mask/gas/stalker ckeywhitelist = list("slomka") /datum/gear/donator/stripedcollar name = "Striped collar" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/petcollar/stripe ckeywhitelist = list("jademanique") /datum/gear/donator/performersoutfit name = "Bluish performer's outfit" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/singer/yellow/custom ckeywhitelist = list("killer402402") /datum/gear/donator/vermillion name = "Vermillion clothing" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/suit/vermillion ckeywhitelist = list("fractious") /datum/gear/donator/AM4B name = "Foam Force AM4-B" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/gun/ballistic/automatic/AM4B ckeywhitelist = list("zeronetalpha") /datum/gear/donator/carrotsatchel name = "Carrot Satchel" - slot = SLOT_HANDS + slot = ITEM_SLOT_HANDS path = /obj/item/storage/backpack/satchel/carrot ckeywhitelist = list("improvedname") /datum/gear/donator/naomisweater name = "worn black sweater" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/sweater/black/naomi ckeywhitelist = list("technicalmagi") /datum/gear/donator/naomicollar name = "worn pet collar" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/petcollar/naomi ckeywhitelist = list("technicalmagi") /datum/gear/donator/gladiator name = "Gladiator Armor" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/under/costume/gladiator ckeywhitelist = list("aroche") /datum/gear/donator/bloodredtie name = "Blood Red Tie" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/tie/bloodred ckeywhitelist = list("kyutness") /datum/gear/donator/puffydress name = "Puffy Dress" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/puffydress ckeywhitelist = list("stallingratt") /datum/gear/donator/labredblack name = "Black and Red Coat" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/toggle/labcoat/labredblack ckeywhitelist = list("blakeryan", "durandalphor") /datum/gear/donator/torisword name = "Rainbow Zweihander" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/dualsaber/hypereutactic/toy/rainbow ckeywhitelist = list("annoymous35") /datum/gear/donator/darksabre name = "Dark Sabre" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/darksabre ckeywhitelist = list("inferno707") /datum/gear/donator/darksabresheath name = "Dark Sabre Sheath" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/storage/belt/sabre/darksabre ckeywhitelist = list("inferno707") /datum/gear/donator/toriball name = "Rainbow Tennis Ball" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow ckeywhitelist = list("annoymous35") /datum/gear/donator/izzyball name = "Katlin's Ball" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/fluff/tennis_poly/tri/squeak/izzy ckeywhitelist = list("izzyinbox") /datum/gear/donator/cloak name = "Green Cloak" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/cloak/green ckeywhitelist = list("killer402402") /datum/gear/donator/steelflask name = "Steel Flask" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/reagent_containers/food/drinks/flask/steel cost = 2 ckeywhitelist = list("nik707") /datum/gear/donator/paperhat name = "Paper Hat" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/paperhat ckeywhitelist = list("kered2") /datum/gear/donator/cloakce name = "Polychromic CE Cloak" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/neck/cloak/polychromic/polyce ckeywhitelist = list("worksbythesea", "blakeryan") loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC @@ -292,290 +292,290 @@ /datum/gear/donator/ssk name = "Stun Sword Kit" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/ssword_kit ckeywhitelist = list("phillip458") /datum/gear/donator/techcoat name = "Techomancers Labcoat" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/suit/toggle/labcoat/mad/techcoat ckeywhitelist = list("wilchen") /datum/gear/donator/leechjar name = "Jar of Leeches" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/custom/leechjar ckeywhitelist = list("sgtryder") /datum/gear/donator/darkarmor name = "Dark Armor" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/suit/armor/vest/darkcarapace ckeywhitelist = list("inferno707") /datum/gear/donator/devilwings name = "Strange Wings" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/devilwings ckeywhitelist = list("kitsun") /datum/gear/donator/flagcape name = "US Flag Cape" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/neck/flagcape ckeywhitelist = list("darnchacha") /datum/gear/donator/luckyjack name = "Lucky Jackboots" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/shoes/lucky ckeywhitelist = list("donaldtrumpthecommunist") /datum/gear/donator/raiqbawks name = "Miami Boombox" - slot = SLOT_HANDS + slot = ITEM_SLOT_HANDS cost = 2 path = /obj/item/boombox/raiq ckeywhitelist = list("chefferz") /datum/gear/donator/m41 name = "Toy M41" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/gun/m41 ckeywhitelist = list("thalverscholen") /datum/gear/donator/Divine_robes name = "Divine robes" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/custom/lunasune ckeywhitelist = list("invader4352") /datum/gear/donator/gothcoat name = "Goth Coat" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/gothcoat ckeywhitelist = list("norko") /datum/gear/donator/corgisuit name = "Corgi Suit" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/hooded/ian_costume ckeywhitelist = list("cathodetherobot") /datum/gear/donator/sharkcloth name = "Leon's Skimpy Outfit" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/under/custom/leoskimpy ckeywhitelist = list("spectrosis") /datum/gear/donator/mimemask name = "Mime Mask" - slot = SLOT_WEAR_MASK + slot = ITEM_SLOT_MASK path = /obj/item/clothing/mask/gas/mime ckeywhitelist = list("pireamaineach") /datum/gear/donator/mimeoveralls name = "Mime's Overalls" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/under/custom/mimeoveralls ckeywhitelist = list("pireamaineach") /datum/gear/donator/soulneck name = "Soul Necklace" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/undertale ckeywhitelist = list("twilightic") /datum/gear/donator/frenchberet name = "French Beret" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/frenchberet ckeywhitelist = list("notazoltan") /datum/gear/donator/zuliecloak name = "Project: Zul-E" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/hooded/cloak/zuliecloak ckeywhitelist = list("asky") /datum/gear/donator/blackredgold name = "Black, Red, and Gold Coat" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/blackredgold ckeywhitelist = list("ttbnc") /datum/gear/donator/fritzplush name = "Fritz Plushie" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/plush/mammal/dog/fritz ckeywhitelist = list("analwerewolf") /datum/gear/donator/kimono name = "Kimono" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/kimono ckeywhitelist = list("sfox63") /datum/gear/donator/commjacket name = "Dusty Commisar's Cloak" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/commjacket ckeywhitelist = list("sadisticbatter") /datum/gear/donator/mw2_russian_para name = "Russian Paratrooper Jumper" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/custom/mw2_russian_para ckeywhitelist = list("investigator77") /datum/gear/donator/longblackgloves name = "Luna's Gauntlets" - slot = SLOT_GLOVES + slot = ITEM_SLOT_GLOVES path = /obj/item/clothing/gloves/longblackgloves ckeywhitelist = list("bigmanclancy") /datum/gear/donator/trendy_fit name = "Trendy Fit" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/custom/trendy_fit ckeywhitelist = list("midgetdragon") /datum/gear/donator/singery name = "Yellow Performer Outfit" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/singer/yellow ckeywhitelist = list("maxlynchy") /datum/gear/donator/csheet name = "NT Bedsheet" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/bedsheet/captain ckeywhitelist = list("tikibomb") /datum/gear/donator/borgplush name = "Robot Plush" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/toy/plush/borgplushie ckeywhitelist = list("nicholaiavenicci") /datum/gear/donator/donorberet name = "Atmos Beret" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/blueberet ckeywhitelist = list("foxystalin") /datum/gear/donator/donorgoggles name = "Flight Goggles" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/flight ckeywhitelist = list("maxlynchy") /datum/gear/donator/onionneck name = "Onion Necklace" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/necklace/onion ckeywhitelist = list("cdrcross") /datum/gear/donator/mikubikini name = "starlight singer bikini" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/custom/mikubikini ckeywhitelist = list("grandvegeta") /datum/gear/donator/mikujacket name = "starlight singer jacket" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/mikujacket ckeywhitelist = list("grandvegeta") /datum/gear/donator/mikuhair name = "starlight singer hair" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/head/mikuhair ckeywhitelist = list("grandvegeta") /datum/gear/donator/mikugloves name = "starlight singer gloves" - slot = SLOT_GLOVES + slot = ITEM_SLOT_GLOVES path = /obj/item/clothing/gloves/mikugloves ckeywhitelist = list("grandvegeta") /datum/gear/donator/mikuleggings name = "starlight singer leggings" - slot = SLOT_SHOES + slot = ITEM_SLOT_FEET path = /obj/item/clothing/shoes/sneakers/mikuleggings ckeywhitelist = list("grandvegeta") /datum/gear/donator/cosmos name = "cosmic space bedsheet" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/bedsheet/cosmos ckeywhitelist = list("grunnyyy") /datum/gear/donator/customskirt name = "custom atmos skirt" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/under/custom/customskirt ckeywhitelist = list("thakyz") /datum/gear/donator/hisakaki name = "halo" - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD path = /obj/item/clothing/head/halo ckeywhitelist = list("hisakaki") /datum/gear/donator/vest name = "vest and shirt" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/custom/vest ckeywhitelist = list("maylowfox") /datum/gear/donator/exo name = "exo frame" - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/custom/exo ckeywhitelist = list("jesterz7") /datum/gear/donator/choker name = "NT Choker" - slot = SLOT_NECK + slot = ITEM_SLOT_NECK path = /obj/item/clothing/neck/petcollar/donorchoker ckeywhitelist = list("trigillass") /datum/gear/donator/strangemask name = "Strange Metal Mask" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/mask/breath/mmask ckeywhitelist = list("sneka") /datum/gear/donator/smaiden name = "shrine maiden outfit" - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/smaiden ckeywhitelist = list("ultimarifox") /datum/gear/donator/mgasmask name = "Military Gas Mask" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/clothing/mask/gas/military ckeywhitelist = list("unclebourbon") /datum/gear/donator/clownmask name = "Clown Mask" - path = SLOT_WEAR_MASK + path = ITEM_SLOT_MASK path = /obj/item/clothing/mask/gas/clown_hat ckeywhitelist = list("djkouta") /datum/gear/donator/spacehoodie name = "Space Hoodie" - path = SLOT_WEAR_SUIT + path = ITEM_SLOT_OCLOTHING path = /obj/item/clothing/suit/spacehoodie ckeywhitelist = list("bidlink2") /datum/gear/donator/pokerchips name = "pokerchip set" - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK path = /obj/item/storage/box/pockerchips ckeywhitelist = list("greed2323") diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index 466ee50474..3824993009 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -1,7 +1,7 @@ /datum/gear/backpack category = LOADOUT_CATEGORY_BACKPACK subcategory = LOADOUT_SUBCATEGORY_BACKPACK_GENERAL - slot = SLOT_IN_BACKPACK + slot = ITEM_SLOT_BACKPACK /datum/gear/backpack/plushbox name = "Plushie Choice Box" diff --git a/modular_citadel/code/modules/client/loadout/glasses.dm b/modular_citadel/code/modules/client/loadout/glasses.dm index f3b07657f4..fe44abc3de 100644 --- a/modular_citadel/code/modules/client/loadout/glasses.dm +++ b/modular_citadel/code/modules/client/loadout/glasses.dm @@ -1,6 +1,6 @@ /datum/gear/glasses category = LOADOUT_CATEGORY_GLASSES - slot = SLOT_GLASSES + slot = ITEM_SLOT_EYES /datum/gear/glasses/blindfold name = "Blindfold" diff --git a/modular_citadel/code/modules/client/loadout/gloves.dm b/modular_citadel/code/modules/client/loadout/gloves.dm index 09694ddec7..2a80d43bb1 100644 --- a/modular_citadel/code/modules/client/loadout/gloves.dm +++ b/modular_citadel/code/modules/client/loadout/gloves.dm @@ -1,6 +1,6 @@ /datum/gear/gloves category = LOADOUT_CATEGORY_GLOVES - slot = SLOT_GLOVES + slot = ITEM_SLOT_GLOVES /datum/gear/gloves/fingerless name = "Fingerless Gloves" @@ -9,7 +9,7 @@ /datum/gear/gloves/evening name = "Evening gloves" path = /obj/item/clothing/gloves/evening - + /datum/gear/gloves/midnight name = "Midnight gloves" path = /obj/item/clothing/gloves/evening/black diff --git a/modular_citadel/code/modules/client/loadout/hands.dm b/modular_citadel/code/modules/client/loadout/hands.dm index eb496ed78c..5dbe8b33dd 100644 --- a/modular_citadel/code/modules/client/loadout/hands.dm +++ b/modular_citadel/code/modules/client/loadout/hands.dm @@ -1,6 +1,6 @@ /datum/gear/hands category = LOADOUT_CATEGORY_HANDS - slot = SLOT_HANDS + slot = ITEM_SLOT_HANDS /datum/gear/hands/cane name = "Cane" diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm index 6d6c803ef1..f2a7ead5be 100644 --- a/modular_citadel/code/modules/client/loadout/head.dm +++ b/modular_citadel/code/modules/client/loadout/head.dm @@ -1,7 +1,7 @@ /datum/gear/head category = LOADOUT_CATEGORY_HEAD subcategory = LOADOUT_SUBCATEGORY_HEAD_GENERAL - slot = SLOT_HEAD + slot = ITEM_SLOT_HEAD /datum/gear/head/baseball name = "Ballcap" @@ -156,12 +156,12 @@ /*Commenting out Until next Christmas or made automatic /datum/gear/santahatr name = "Red Santa Hat" - category = SLOT_HEAD + category = ITEM_SLOT_HEAD path = /obj/item/clothing/head/christmashat /datum/gear/santahatg name = "Green Santa Hat" - category = SLOT_HEAD + category = ITEM_SLOT_HEAD path = /obj/item/clothing/head/christmashatg */ diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm index 52e79884c2..16b47e60e7 100644 --- a/modular_citadel/code/modules/client/loadout/mask.dm +++ b/modular_citadel/code/modules/client/loadout/mask.dm @@ -1,6 +1,6 @@ /datum/gear/mask category = LOADOUT_CATEGORY_MASK - slot = SLOT_WEAR_MASK + slot = ITEM_SLOT_MASK /datum/gear/mask/balaclava name = "Balaclava" diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm index 128285628a..b07ddf98db 100644 --- a/modular_citadel/code/modules/client/loadout/neck.dm +++ b/modular_citadel/code/modules/client/loadout/neck.dm @@ -1,7 +1,7 @@ /datum/gear/neck category = LOADOUT_CATEGORY_NECK subcategory = LOADOUT_SUBCATEGORY_NECK_GENERAL - slot = SLOT_NECK + slot = ITEM_SLOT_NECK /datum/gear/neck/bluetie name = "Blue tie" diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/shoes.dm index e2b3916ae0..394c957f36 100644 --- a/modular_citadel/code/modules/client/loadout/shoes.dm +++ b/modular_citadel/code/modules/client/loadout/shoes.dm @@ -1,6 +1,6 @@ /datum/gear/shoes category = LOADOUT_CATEGORY_SHOES - slot = SLOT_SHOES + slot = ITEM_SLOT_FEET /datum/gear/shoes/laceup name = "Laceup shoes" diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index 066bcf14c7..1d4a29ef3e 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -1,7 +1,7 @@ /datum/gear/suit category = LOADOUT_CATEGORY_SUIT subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL - slot = SLOT_WEAR_SUIT + slot = ITEM_SLOT_OCLOTHING /datum/gear/suit/poncho name = "Poncho" diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index c16aa5ea55..2b2f3b53e4 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -1,7 +1,7 @@ /datum/gear/uniform category = LOADOUT_CATEGORY_UNIFORM subcategory = LOADOUT_SUBCATEGORY_UNIFORM_GENERAL - slot = SLOT_W_UNIFORM + slot = ITEM_SLOT_ICLOTHING /datum/gear/uniform/suit name = "Black suit" @@ -636,27 +636,27 @@ /*Commenting out Until next Christmas or made automatic /datum/gear/uniform/christmasmaler name = "Red Masculine Christmas Suit" - category = SLOT_W_UNIFORM + category = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/christmas /datum/gear/uniform/christmasmaleg name = "Green Masculine Christmas Suit" - category = SLOT_W_UNIFORM + category = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/christmas/green /datum/gear/uniform/christmasfemaler name = "Red Feminine Christmas Suit" - category = SLOT_W_UNIFORM + category = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/christmas/croptop /datum/gear/uniform/christmasfemaleg name = "Green Feminine Christmas Suit" - category = SLOT_W_UNIFORM + category = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/costume/christmas/croptop/green /datum/gear/uniform/pinkstripper name = "Pink stripper outfit" - category = SLOT_W_UNIFORM + category = ITEM_SLOT_ICLOTHING path = /obj/item/clothing/under/misc/stripper cost = 3 */ diff --git a/modular_citadel/code/modules/client/loadout/unlockable.dm b/modular_citadel/code/modules/client/loadout/unlockable.dm index 67e0c06d8c..9db05a66e9 100644 --- a/modular_citadel/code/modules/client/loadout/unlockable.dm +++ b/modular_citadel/code/modules/client/loadout/unlockable.dm @@ -1,6 +1,6 @@ /datum/gear/unlockable category = LOADOUT_CATEGORY_UNLOCKABLE - slot = SLOT_NECK + slot = ITEM_SLOT_NECK var/progress_required //what does our progress need to be to unlock it var/progress_key //what is the key used to retrieve existing progress for this unlockable diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index cb1b9728af..b8ee221e73 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -77,7 +77,7 @@ item_state = "gold_zippo" w_class = WEIGHT_CLASS_TINY flags_1 = CONDUCT_1 - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT heat = 1500 resistance_flags = FIRE_PROOF light_color = LIGHT_COLOR_FIRE @@ -404,7 +404,7 @@ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak body_parts_covered = CHEST|GROIN|ARMS - slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong? + slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong? mutantrace_variation = NONE /obj/item/clothing/head/hooded/cloakhood/zuliecloak diff --git a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm index 79f17afc74..1d28c7320c 100644 --- a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm +++ b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm @@ -52,7 +52,7 @@ loaded_atom.forceMove(T) continue var/obj/item/loaded = loaded_atom - var/obj/item/storage/S = H.get_item_by_slot(SLOT_BACK) + var/obj/item/storage/S = H.get_item_by_slot(ITEM_SLOT_BACK) if(istype(S)) SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack continue diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm index dbf5ad0648..85bbf109bf 100644 --- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm +++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm @@ -1024,7 +1024,7 @@ GLOBAL_LIST_EMPTY(rain_sounds) lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' icon_state = "umbrella_closed" - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT force = 5 throwforce = 5 w_class = WEIGHT_CLASS_SMALL diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 537eb76a66..bc598e81e3 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -48,7 +48,7 @@ var/obj/item/W = M.head M.dropItemToGround(W, TRUE) var/hat = new /obj/item/clothing/head/hattip() - M.equip_to_slot(hat, SLOT_HEAD, 1, 1) + M.equip_to_slot(hat, ITEM_SLOT_HEAD, 1, 1) /datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M) diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm index ab4d49c56f..b6391ba82d 100644 --- a/modular_citadel/code/modules/reagents/objects/clothes.dm +++ b/modular_citadel/code/modules/reagents/objects/clothes.dm @@ -37,7 +37,7 @@ /obj/item/clothing/head/hattip/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) From de96a68bf52823a7a40f4ddab91b2b02dbaf7413 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Fri, 25 Feb 2022 17:01:48 -0300 Subject: [PATCH 67/84] mistake --- code/__DEFINES/DNA.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index f73d123697..cf98755a36 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -158,7 +158,7 @@ #define ORGAN_SLOT_STOMACH "stomach" #define ORGAN_SLOT_STOMACH_AID "stomach_aid" #define ORGAN_SLOT_BREATHING_TUBE "breathing_tube" -#define ORGAN_ITEM_SLOT_EARS "ears" +#define ORGAN_SLOT_EARS "ears" #define ORGAN_SLOT_EYES "eye_sight" #define ORGAN_SLOT_LUNGS "lungs" #define ORGAN_SLOT_HEART "heart" From f7ea1f377d842352f19e06e00ac28bcf120f2cf7 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Fri, 25 Feb 2022 17:09:31 -0300 Subject: [PATCH 68/84] oops, replace all is a hell of a drug --- code/datums/components/nanites.dm | 2 +- code/datums/diseases/advance/symptoms/deafness.dm | 2 +- code/datums/elements/earhealing.dm | 2 +- code/datums/status_effects/debuffs.dm | 4 ++-- code/game/objects/items/devices/scanners.dm | 2 +- .../antagonists/eldritch_cult/knowledge/rust_lore.dm | 2 +- code/modules/mob/living/carbon/carbon_defense.dm | 6 +++--- code/modules/mob/living/carbon/handle_corruption.dm | 2 +- code/modules/mob/living/carbon/human/species.dm | 2 +- code/modules/reagents/chemistry/reagents/other_reagents.dm | 2 +- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 2 +- code/modules/research/nanites/nanite_programs/protocols.dm | 2 +- code/modules/surgery/organs/ears.dm | 4 ++-- code/modules/surgery/organs/organ_internal.dm | 2 +- 14 files changed, 18 insertions(+), 18 deletions(-) diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index d16b5c692e..50ac5e5cc5 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -317,7 +317,7 @@ host_mob.Paralyze(120) if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) if(ears) ears.adjustEarDamage(0, 30) //nanites coming out of your ears C.vomit(0, FALSE, TRUE, 2, FALSE, VOMIT_NANITE, FALSE, TRUE, 0) //nanites coming out of your mouth diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm index b4ad65c86b..b6dd185b36 100644 --- a/code/datums/diseases/advance/symptoms/deafness.dm +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -51,7 +51,7 @@ Bonus to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]") if(5) if(power > 2) - var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS) if(istype(ears) && ears.damage < ears.maxHealth) to_chat(M, "Your ears pop painfully and start bleeding!") ears.damage = max(ears.damage, ears.maxHealth) diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm index 38afc5e307..2ceb261622 100644 --- a/code/datums/elements/earhealing.dm +++ b/code/datums/elements/earhealing.dm @@ -30,7 +30,7 @@ var/mob/living/carbon/user = user_by_item[i] if(HAS_TRAIT(user, TRAIT_DEAF)) continue - var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_SLOT_EARS) if(!ears) continue ears.deaf = max(ears.deaf - 0.25, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index e45f9cf3a9..dbec6c6ee2 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -578,7 +578,7 @@ if(60 to 69) H.adjustOrganLoss(ORGAN_SLOT_EYES,10) if(70 to 79) - H.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,10) + H.adjustOrganLoss(ORGAN_SLOT_EARS,10) if(80 to 89) H.adjustOrganLoss(ORGAN_SLOT_LUNGS,10) if(90 to 99) @@ -610,7 +610,7 @@ if(60 to 69) H.adjustOrganLoss(ORGAN_SLOT_EYES,5) if(70 to 79) - H.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,5) + H.adjustOrganLoss(ORGAN_SLOT_EARS,5) if(80 to 89) H.adjustOrganLoss(ORGAN_SLOT_LUNGS,5) if(90 to 99) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index c224f98fe7..0ca2e40b45 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -333,7 +333,7 @@ GENETICS SCANNER var/has_stomach = C.dna && !(NOSTOMACH in C.dna.species.species_traits) if(!M.getorganslot(ORGAN_SLOT_EYES)) msg += "\tSubject does not have eyes.\n" - if(!M.getorganslot(ORGAN_ITEM_SLOT_EARS)) + if(!M.getorganslot(ORGAN_SLOT_EARS)) msg += "\tSubject does not have ears.\n" if(!M.getorganslot(ORGAN_SLOT_BRAIN)) msg += "\tSubject's brain function is non-existent!\n" diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 0eb52746fa..733b2725cb 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -39,7 +39,7 @@ var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) if(E) E.on_effect() - H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_ITEM_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) + H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) /datum/eldritch_knowledge/spell/area_conversion name = "Aggressive Spread" diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 8f954c0239..a12d6614fa 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -24,7 +24,7 @@ /mob/living/carbon/get_ear_protection() var/number = ..() - var/obj/item/organ/ears/E = getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/E = getorganslot(ORGAN_SLOT_EARS) if(!E) number = INFINITY else @@ -417,7 +417,7 @@ SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist) intensity = reflist[1] var/ear_safety = get_ear_protection() - var/obj/item/organ/ears/ears = getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) var/effect_amount = intensity - ear_safety if(effect_amount > 0) if(stun_pwr) @@ -457,7 +457,7 @@ /mob/living/carbon/can_hear() . = FALSE - var/obj/item/organ/ears/ears = getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) if(istype(ears) && !ears.deaf) . = TRUE diff --git a/code/modules/mob/living/carbon/handle_corruption.dm b/code/modules/mob/living/carbon/handle_corruption.dm index 06256f6f8e..b56752453b 100644 --- a/code/modules/mob/living/carbon/handle_corruption.dm +++ b/code/modules/mob/living/carbon/handle_corruption.dm @@ -102,7 +102,7 @@ if("jamcoolanthud") hud_used.coolant_display.jam(10) if("receporgandamage") - adjustOrganLoss(ORGAN_ITEM_SLOT_EARS, rand(10, 20)) + adjustOrganLoss(ORGAN_SLOT_EARS, rand(10, 20)) adjustOrganLoss(ORGAN_SLOT_EYES, rand(10, 20)) to_chat(src, "Power spike detected in auditory and visual systems!") if("longlimbdisable") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 847664d957..ee98288c5d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/obj/item/organ/lungs/lungs = C.getorganslot(ORGAN_SLOT_LUNGS) var/obj/item/organ/appendix/appendix = C.getorganslot(ORGAN_SLOT_APPENDIX) var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) var/obj/item/organ/tongue/tongue = C.getorganslot(ORGAN_SLOT_TONGUE) var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER) var/obj/item/organ/stomach/stomach = C.getorganslot(ORGAN_SLOT_STOMACH) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5521bf80f4..ec628255fa 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2670,7 +2670,7 @@ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -100) M.adjustOrganLoss(ORGAN_SLOT_HEART, -100) M.adjustOrganLoss(ORGAN_SLOT_LIVER, -100) - M.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS, -100) + M.adjustOrganLoss(ORGAN_SLOT_EARS, -100) M.adjustOrganLoss(ORGAN_SLOT_STOMACH, -100) M.adjustOrganLoss(ORGAN_SLOT_TONGUE, -100) M.adjustOrganLoss(ORGAN_SLOT_EYES, -100) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a70c17ec25..af670c00dc 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -1073,7 +1073,7 @@ taste_description = "sugary sweetness" /datum/reagent/toxin/leadacetate/on_mob_life(mob/living/carbon/M) - M.adjustOrganLoss(ORGAN_ITEM_SLOT_EARS,1) + M.adjustOrganLoss(ORGAN_SLOT_EARS,1) M.adjustOrganLoss(ORGAN_SLOT_BRAIN,1) if(prob(1)) to_chat(M, "Ah, what was that? You thought you heard something...") diff --git a/code/modules/research/nanites/nanite_programs/protocols.dm b/code/modules/research/nanites/nanite_programs/protocols.dm index 56f083d31f..3716bc61ac 100644 --- a/code/modules/research/nanites/nanite_programs/protocols.dm +++ b/code/modules/research/nanites/nanite_programs/protocols.dm @@ -244,7 +244,7 @@ if(eyes) eyes.applyOrganDamage(0.75) if(prob(13)) - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_ITEM_SLOT_EARS) + var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) if(ears) ears.applyOrganDamage(0.75) current_stage++ diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index 71fa88233a..80b7599ec3 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -3,7 +3,7 @@ icon_state = "ears" desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible." zone = BODY_ZONE_HEAD - slot = ORGAN_ITEM_SLOT_EARS + slot = ORGAN_SLOT_EARS gender = PLURAL healing_factor = STANDARD_ORGAN_HEALING @@ -138,7 +138,7 @@ icon_state = "ears-c" desc = "A pair of microphones intended to be installed in an IPC head, that grant the ability to hear." zone = BODY_ZONE_HEAD - slot = ORGAN_ITEM_SLOT_EARS + slot = ORGAN_SLOT_EARS gender = PLURAL organ_flags = ORGAN_SYNTHETIC diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 60628e6db0..a3c6ea06c8 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -333,7 +333,7 @@ if(only_one) return TRUE - if(!getorganslot(ORGAN_ITEM_SLOT_EARS)) + if(!getorganslot(ORGAN_SLOT_EARS)) var/obj/item/organ/ears/ears if(dna && dna.species && dna.species.mutantears) ears = new dna.species.mutantears From fb8158e89359a8c8a82178de944ffa8fbf5234c1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 26 Feb 2022 00:33:23 +0000 Subject: [PATCH 69/84] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-15523.yml | 4 ---- html/changelogs/archive/2022-02.yml | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-15523.yml diff --git a/html/changelogs/AutoChangeLog-pr-15523.yml b/html/changelogs/AutoChangeLog-pr-15523.yml deleted file mode 100644 index 48767debcb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15523.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - balance: "Now slightly easier to get 50,000 points with toxins (50,000 point baseline changed from 200 light range to 175)" diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index 0715711ef7..d46305bd06 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -154,3 +154,7 @@ now' timothyteakettle: - rscadd: adds snake coiling +2022-02-26: + Putnam3145: + - balance: Now slightly easier to get 50,000 points with toxins (50,000 point baseline + changed from 200 light range to 175) From 1415b9580f59e0261a6d817c7d277d4da1d5b3e8 Mon Sep 17 00:00:00 2001 From: keronshb Date: Fri, 25 Feb 2022 22:29:09 -0500 Subject: [PATCH 70/84] Last fixes --- code/datums/mind.dm | 4 ++-- code/modules/antagonists/_common/antag_datum.dm | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 91983ead15..7a051f999d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -201,7 +201,7 @@ . = LAZYLEN(antag_datums) LAZYADD(antag_datums, instanced_datum) if(!.) - current.verbs += /mob/proc/edit_objectives_and_ambitions + add_verb(current, /mob/proc/edit_objectives_and_ambitions) //ambition end /datum/mind/proc/remove_antag_datum(datum_type) @@ -218,7 +218,7 @@ LAZYREMOVE(antag_datums, instanced_datum) if(. && !LAZYLEN(antag_datums)) ambitions = null - current.verbs -= /mob/proc/edit_objectives_and_ambitions + remove_verb(current, /mob/proc/edit_objectives_and_ambitions) //ambition end /datum/mind/proc/remove_all_antag_datums() //For the Lazy amongst us. diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 4fbca1b32a..61936b4b7f 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -82,9 +82,8 @@ GLOBAL_LIST_EMPTY(antagonists) if(!owner) stack_trace("Destroy()ing antagonist datum when it has no owner.") else - LAZYREMOVE(owner.antag_datums, src) //ambition start - owner?.do_remove_antag_datum(src) + owner?.do_remove_antag_datum(src) //ambition end owner = null return ..() @@ -237,7 +236,7 @@ GLOBAL_LIST_EMPTY(antagonists) remove_innate_effects() clear_antag_moodies() - LAZYREMOVE(owner.antag_datums, src) + owner.do_remove_antag_datum(src) // cit skill for(var/A in skill_modifiers) owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type)) From 681679e67565fc9c22e1d2920d1b50c800d347c6 Mon Sep 17 00:00:00 2001 From: keronshb Date: Fri, 25 Feb 2022 22:42:27 -0500 Subject: [PATCH 71/84] cleanup --- code/modules/antagonists/_common/antag_datum.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 61936b4b7f..a1b1a1288e 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -249,7 +249,6 @@ GLOBAL_LIST_EMPTY(antagonists) farewell() // UnregisterSignal(owner, COMSIG_PRE_MINDSHIELD_IMPLANT) // UnregisterSignal(owner, COMSIG_MINDSHIELD_IMPLANTED) - owner.do_remove_antag_datum(src) var/datum/team/team = get_team() if(team) team.remove_member(owner) From 6ec93ab8c9bd93fc57525c444374394f80fb4381 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:08:07 -0600 Subject: [PATCH 72/84] Automatic changelog generation for PR #15495 [ci skip] --- html/changelogs/AutoChangeLog-pr-15495.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15495.yml diff --git a/html/changelogs/AutoChangeLog-pr-15495.yml b/html/changelogs/AutoChangeLog-pr-15495.yml new file mode 100644 index 0000000000..f9a025c584 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15495.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Configurable weekly high-chaos days" From 89a6385e15e426023bb757cd361113aae4df7b04 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:08:15 -0600 Subject: [PATCH 73/84] Automatic changelog generation for PR #15503 [ci skip] --- html/changelogs/AutoChangeLog-pr-15503.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15503.yml diff --git a/html/changelogs/AutoChangeLog-pr-15503.yml b/html/changelogs/AutoChangeLog-pr-15503.yml new file mode 100644 index 0000000000..96dc78ff65 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15503.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscadd: "The limbgrower can make human chest parts that you can build onto into a person." From 6da623250f6ea0633c01591dd95430d82092fe89 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:08:21 -0600 Subject: [PATCH 74/84] Automatic changelog generation for PR #15505 [ci skip] --- html/changelogs/AutoChangeLog-pr-15505.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15505.yml diff --git a/html/changelogs/AutoChangeLog-pr-15505.yml b/html/changelogs/AutoChangeLog-pr-15505.yml new file mode 100644 index 0000000000..2c5f1ae47c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15505.yml @@ -0,0 +1,4 @@ +author: "SandPoot and Crowbar764" +delete-after: True +changes: + - rscadd: "TGUI for the player playtimes menu." From ae2c49b472e66c91fc5dcc441fd95359f260c48b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:08:30 -0600 Subject: [PATCH 75/84] Automatic changelog generation for PR #15528 [ci skip] --- html/changelogs/AutoChangeLog-pr-15528.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15528.yml diff --git a/html/changelogs/AutoChangeLog-pr-15528.yml b/html/changelogs/AutoChangeLog-pr-15528.yml new file mode 100644 index 0000000000..5b22ff00dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15528.yml @@ -0,0 +1,4 @@ +author: "SandPoot" +delete-after: True +changes: + - refactor: "Kills off SLOT_ in favor of ITEM_SLOT_" From d53c465102832a6fd3061b7a703fe99c3339a333 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:08:50 -0600 Subject: [PATCH 76/84] Automatic changelog generation for PR #15526 [ci skip] --- html/changelogs/AutoChangeLog-pr-15526.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15526.yml diff --git a/html/changelogs/AutoChangeLog-pr-15526.yml b/html/changelogs/AutoChangeLog-pr-15526.yml new file mode 100644 index 0000000000..60d49802c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15526.yml @@ -0,0 +1,5 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "adds a cartridge for the bartender's PDA that lets them search drink recipes" + - rscadd: "updates chemist cartridge to be able to search all chemical recipes" From 206f5d1fff24d38af6b0b0261abc0fea96a8a592 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 26 Feb 2022 19:09:02 -0600 Subject: [PATCH 77/84] Automatic changelog generation for PR #15522 [ci skip] --- html/changelogs/AutoChangeLog-pr-15522.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15522.yml diff --git a/html/changelogs/AutoChangeLog-pr-15522.yml b/html/changelogs/AutoChangeLog-pr-15522.yml new file mode 100644 index 0000000000..40705aba5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15522.yml @@ -0,0 +1,4 @@ +author: "bunny232" +delete-after: True +changes: + - rscadd: "Cold weather gear can now provide insulation against temperatures of up to 57C (330K)" From 535a5d43e96a01c038b6662c388ff5b5bb915792 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 28 Feb 2022 00:36:44 +0000 Subject: [PATCH 78/84] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-15495.yml | 4 ---- html/changelogs/AutoChangeLog-pr-15503.yml | 4 ---- html/changelogs/AutoChangeLog-pr-15505.yml | 4 ---- html/changelogs/AutoChangeLog-pr-15522.yml | 4 ---- html/changelogs/AutoChangeLog-pr-15526.yml | 5 ----- html/changelogs/AutoChangeLog-pr-15528.yml | 4 ---- html/changelogs/archive/2022-02.yml | 16 ++++++++++++++++ 7 files changed, 16 insertions(+), 25 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-15495.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-15503.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-15505.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-15522.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-15526.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-15528.yml diff --git a/html/changelogs/AutoChangeLog-pr-15495.yml b/html/changelogs/AutoChangeLog-pr-15495.yml deleted file mode 100644 index f9a025c584..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15495.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - rscadd: "Configurable weekly high-chaos days" diff --git a/html/changelogs/AutoChangeLog-pr-15503.yml b/html/changelogs/AutoChangeLog-pr-15503.yml deleted file mode 100644 index 96dc78ff65..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15503.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - rscadd: "The limbgrower can make human chest parts that you can build onto into a person." diff --git a/html/changelogs/AutoChangeLog-pr-15505.yml b/html/changelogs/AutoChangeLog-pr-15505.yml deleted file mode 100644 index 2c5f1ae47c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15505.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SandPoot and Crowbar764" -delete-after: True -changes: - - rscadd: "TGUI for the player playtimes menu." diff --git a/html/changelogs/AutoChangeLog-pr-15522.yml b/html/changelogs/AutoChangeLog-pr-15522.yml deleted file mode 100644 index 40705aba5f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15522.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "bunny232" -delete-after: True -changes: - - rscadd: "Cold weather gear can now provide insulation against temperatures of up to 57C (330K)" diff --git a/html/changelogs/AutoChangeLog-pr-15526.yml b/html/changelogs/AutoChangeLog-pr-15526.yml deleted file mode 100644 index 60d49802c0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15526.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - rscadd: "adds a cartridge for the bartender's PDA that lets them search drink recipes" - - rscadd: "updates chemist cartridge to be able to search all chemical recipes" diff --git a/html/changelogs/AutoChangeLog-pr-15528.yml b/html/changelogs/AutoChangeLog-pr-15528.yml deleted file mode 100644 index 5b22ff00dc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15528.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SandPoot" -delete-after: True -changes: - - refactor: "Kills off SLOT_ in favor of ITEM_SLOT_" diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index d46305bd06..12ad63274c 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -158,3 +158,19 @@ Putnam3145: - balance: Now slightly easier to get 50,000 points with toxins (50,000 point baseline changed from 200 light range to 175) +2022-02-28: + Arturlang: + - rscadd: The limbgrower can make human chest parts that you can build onto into + a person. + Putnam3145: + - rscadd: Configurable weekly high-chaos days + SandPoot: + - refactor: Kills off SLOT_ in favor of ITEM_SLOT_ + SandPoot and Crowbar764: + - rscadd: TGUI for the player playtimes menu. + bunny232: + - rscadd: Cold weather gear can now provide insulation against temperatures of up + to 57C (330K) + timothyteakettle: + - rscadd: adds a cartridge for the bartender's PDA that lets them search drink recipes + - rscadd: updates chemist cartridge to be able to search all chemical recipes From 778bf1777b758589043a0736e7b7b37afdfb7087 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 28 Feb 2022 22:01:57 +0000 Subject: [PATCH 79/84] fixes coiling issue (#15530) * why * new signals for resting and stop pulling these are to be used as signals that will cancel the coiling * Create coiling.dm * Update coiling.dm * adds sprite accessory for coiled naga * main changes that apply the actual visuals to the coiling mechanics * adds message to coiling, fixes offset, adds action icon * coil offset was using old direction * reordering * fixes coil sprite not disappearing * fixes offsets, solves loadout issue * follows lin's suggestion and adds support for slimes by making it entirely handled in handle mutant * fix * Update preferences.dm * no slimes you're not allowed the hidden sprite --- code/modules/client/preferences.dm | 2 ++ .../dead/new_player/sprite_accessories/_sprite_accessories.dm | 2 +- .../mob/living/carbon/human/innate_abilities/customization.dm | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3cec5c3e50..3f31540fe2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2136,6 +2136,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/S = instance if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) continue + if(S.ignore) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_taur_list[S.name] = path var/new_taur diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index f5e1c2e113..08ae75d728 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -29,7 +29,7 @@ if(path == prototype && skip_prototype) continue var/datum/sprite_accessory/P = path - if((roundstart && initial(P.locked)) || initial(P.ignore)) + if((roundstart && initial(P.locked))) continue var/datum/sprite_accessory/D = new path() diff --git a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm index 363f6ecbb2..463cdfde1e 100644 --- a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm +++ b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm @@ -135,6 +135,8 @@ var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(S.ignore) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) snowflake_taur_list[S.name] = path var/new_taur From 8bb99cb05b5cdcd4af9747a8aee0075a1a61f01d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 28 Feb 2022 16:02:00 -0600 Subject: [PATCH 80/84] Automatic changelog generation for PR #15530 [ci skip] --- html/changelogs/AutoChangeLog-pr-15530.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15530.yml diff --git a/html/changelogs/AutoChangeLog-pr-15530.yml b/html/changelogs/AutoChangeLog-pr-15530.yml new file mode 100644 index 0000000000..3452231463 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15530.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "coiling icon appears properly" From c8ca35e14db6ca40904c73a3fe70bbf6210f20a4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 1 Mar 2022 00:44:37 +0000 Subject: [PATCH 81/84] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-15530.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-15530.yml diff --git a/html/changelogs/AutoChangeLog-pr-15530.yml b/html/changelogs/AutoChangeLog-pr-15530.yml deleted file mode 100644 index 3452231463..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15530.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - bugfix: "coiling icon appears properly" From 7898c971ea1fdaedf583d1391a59d8eabf33c0a2 Mon Sep 17 00:00:00 2001 From: TripleShades Date: Wed, 2 Mar 2022 21:45:39 -0500 Subject: [PATCH 82/84] Omega Station Again (#15531) * Update OmegaStation.dmm * Update OmegaStation.dmm --- _maps/map_files/OmegaStation/OmegaStation.dmm | 223 +++++++++++++----- 1 file changed, 167 insertions(+), 56 deletions(-) diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 275cf95856..440f4bd137 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -3618,6 +3618,10 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "cargounload" + }, /turf/open/floor/plasteel, /area/cargo/storage) "afG" = ( @@ -3635,16 +3639,10 @@ /turf/open/floor/plasteel, /area/cargo/storage) "afH" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "cargounload" +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/cargo/storage) +/area/maintenance/port/fore) "afI" = ( /obj/machinery/button/door{ id = "cargounload"; @@ -5252,6 +5250,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/conveyor_switch/oneway{ + id = "cargoload" + }, /turf/open/floor/plasteel, /area/cargo/storage) "aij" = ( @@ -5716,6 +5717,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/effect/turf_decal/stripes/box, /turf/open/floor/plasteel, /area/security/brig) "aiW" = ( @@ -9298,6 +9300,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/machinery/space_heater, /turf/open/floor/plasteel, /area/maintenance/port/central) "aoK" = ( @@ -11001,7 +11004,9 @@ name = "Maintenance Hatch"; req_access_txt = "12" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, /area/maintenance/port/fore) "arq" = ( /turf/closed/wall/r_wall, @@ -14667,6 +14672,10 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastright{ + dir = 1; + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engineering/atmos) "awO" = ( @@ -18616,13 +18625,10 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "aDm" = ( -/obj/structure/bookcase/random/fiction, -/obj/structure/cable/white{ - icon_state = "1-2" +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/service/library) +/area/maintenance/port/fore) "aDn" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -21181,12 +21187,6 @@ dir = 8 }, /obj/effect/turf_decal/loading_area, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -21444,7 +21444,7 @@ /area/engineering/main) "aHs" = ( /obj/effect/turf_decal/tile/blue, -/obj/machinery/vending/medical, +/obj/structure/closet/crate/freezer/blood, /turf/open/floor/plasteel/white, /area/medical/medbay/zone3) "aHt" = ( @@ -24049,6 +24049,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/effect/turf_decal/trimline/green/line, /turf/open/floor/plating, /area/maintenance/port/aft) "aLq" = ( @@ -24148,6 +24149,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/aft) "aLC" = ( @@ -27873,6 +27877,9 @@ c_tag = "Library 2"; dir = 4 }, +/obj/structure/sign/painting{ + pixel_y = 32 + }, /turf/open/floor/plasteel/dark, /area/service/library) "aRU" = ( @@ -29243,6 +29250,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, +/obj/effect/turf_decal/trimline/green/line, /turf/open/floor/plating, /area/maintenance/port/aft) "aUv" = ( @@ -29469,7 +29477,7 @@ icon_state = "1-2" }, /obj/effect/turf_decal/trimline/green/line{ - dir = 8 + dir = 9 }, /turf/open/floor/plating, /area/maintenance/port/aft) @@ -30039,6 +30047,10 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/door/window/northright{ + name = "Library Desk Door"; + req_access_txt = "37" + }, /turf/open/floor/plasteel/dark, /area/service/library) "aVP" = ( @@ -30105,9 +30117,13 @@ /turf/open/floor/plasteel/dark, /area/service/library) "aVV" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/plasteel/dark, -/area/service/library) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/brig) "aVW" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical, @@ -34533,6 +34549,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/medical/medbay/zone3) "bda" = ( @@ -35222,7 +35241,6 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/zone3) "bdV" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -35230,6 +35248,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/zone3) "bdW" = ( @@ -35524,6 +35545,16 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/item/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/healthanalyzer, +/obj/item/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/healthanalyzer, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bes" = ( @@ -36338,12 +36369,12 @@ dir = 8 }, /obj/machinery/smartfridge/organ/preloaded{ + density = 0; pixel_y = -31 }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "bfG" = ( -/obj/structure/closet/crate/freezer/blood, /obj/structure/extinguisher_cabinet{ pixel_y = -26 }, @@ -36361,6 +36392,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/vending/medical, /turf/open/floor/plasteel/dark, /area/medical/medbay/zone3) "bfH" = ( @@ -36928,11 +36960,12 @@ /obj/structure/mirror{ pixel_x = 26 }, -/obj/structure/sink{ - dir = 4; - pixel_x = 12 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, /turf/open/floor/plasteel/white, /area/service/chapel/main) "bgC" = ( @@ -40553,6 +40586,10 @@ name = "Atmospherics Lockdown Blast door" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastright{ + dir = 2; + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engineering/atmos) "cXu" = ( @@ -40649,8 +40686,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "dvB" = ( -/obj/structure/sink/puddle, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand, +/obj/structure/well_foundation, +/turf/open/floor/plating, /area/maintenance/port/aft) "dxC" = ( /obj/machinery/disposal/bin, @@ -40912,6 +40950,10 @@ /obj/effect/landmark/carpspawn, /turf/open/space/basic, /area/space/station_ruins) +"eIk" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/plasteel/dark, +/area/service/library) "eOg" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -41193,6 +41235,25 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel, /area/engineering/atmos) +"fHF" = ( +/obj/structure/table/wood, +/obj/item/folder, +/obj/item/pen, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/painting{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "fIN" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 @@ -41232,7 +41293,8 @@ /obj/machinery/hydroponics/soil, /obj/item/seeds/tea, /obj/machinery/light/small, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand, +/turf/open/floor/plating, /area/maintenance/port/aft) "fRe" = ( /turf/open/floor/plating/airless{ @@ -42648,6 +42710,15 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, /area/hallway/secondary/entry) +"lvb" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "lvw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/meter/atmos, @@ -42669,6 +42740,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"lxu" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/plasteel/dark, +/area/service/library) "lyp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/effect/turf_decal/tile/blue, @@ -43670,7 +43745,8 @@ icon_state = "1-4" }, /obj/item/reagent_containers/glass/bottle/nutrient/rh, -/turf/open/floor/plating/asteroid/airless, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, /area/maintenance/port/aft) "pNE" = ( /obj/structure/grille, @@ -43777,7 +43853,8 @@ /obj/structure/cable/white{ icon_state = "0-2" }, -/turf/open/floor/plating/asteroid/airless, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, /area/maintenance/port/aft) "qgC" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ @@ -43903,6 +43980,16 @@ }, /turf/open/floor/plasteel, /area/engineering/atmos) +"qOl" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/zone3) "qRz" = ( /obj/machinery/newscaster{ pixel_x = 32 @@ -44086,6 +44173,7 @@ /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/weather, /obj/effect/turf_decal/weather, +/obj/machinery/space_heater, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) "sdX" = ( @@ -46839,7 +46927,8 @@ "sTH" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/tower, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, /area/maintenance/port/aft) "sVt" = ( /turf/closed/wall/r_wall, @@ -46852,7 +46941,8 @@ /area/maintenance/starboard/aft) "sZH" = ( /obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand, +/turf/open/floor/plating, /area/maintenance/port/aft) "tac" = ( /obj/structure/grille, @@ -47678,6 +47768,24 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/solars/port/aft) +"vPQ" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "vPZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -47787,7 +47895,8 @@ /obj/machinery/hydroponics/soil, /obj/item/shovel/spade, /obj/item/cultivator, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand, +/turf/open/floor/plating, /area/maintenance/port/aft) "wkG" = ( /obj/structure/lattice/catwalk, @@ -47837,7 +47946,8 @@ /obj/structure/cable/white{ icon_state = "0-4" }, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, /area/maintenance/port/aft) "wwT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -48330,7 +48440,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, /area/maintenance/port/aft) "ykL" = ( /obj/structure/chair/stool/bar, @@ -79594,7 +79705,7 @@ aUU aWz aVL ylr -aSG +lvb jXc aME aLv @@ -80840,7 +80951,7 @@ ayd ayy arq azh -ars +aDm asy ars ars @@ -81090,7 +81201,7 @@ acH acH acH acH -ars +aDm agF agF agF @@ -82117,7 +82228,7 @@ aep azo aAo acH -ars +afH ars agF aio @@ -82414,7 +82525,7 @@ atE aMG aQW aRT -aRU +fHF aUc aUV aVN @@ -82670,7 +82781,7 @@ sHV avB axl sJI -aSc +vPQ aTc aUd sKd @@ -82892,7 +83003,7 @@ ahz aBw aCp air -aiW +aVV ajW akX alM @@ -83445,7 +83556,7 @@ aRX aTf axj aCB -aDm +aDo aDn aDo aKn @@ -83703,7 +83814,7 @@ aTg sJX bxS aVS -aWE +eIk aXh ajG ajG @@ -84217,7 +84328,7 @@ aSa aUg sKe aVU -aWE +lxu aXj ajG aOb @@ -84473,7 +84584,7 @@ aSb sJS aBn aDf -aVV +aWE aVQ aXg ajG @@ -87309,7 +87420,7 @@ ajN baA bbq bbq -bbq +qOl bdV aUM aVf @@ -95737,7 +95848,7 @@ aad adn aee aeU -afH +aeU agA aho aif From 484aa1c26503c2623f6c8d25ea597c34629679f1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 2 Mar 2022 20:45:41 -0600 Subject: [PATCH 83/84] Automatic changelog generation for PR #15531 [ci skip] --- html/changelogs/AutoChangeLog-pr-15531.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15531.yml diff --git a/html/changelogs/AutoChangeLog-pr-15531.yml b/html/changelogs/AutoChangeLog-pr-15531.yml new file mode 100644 index 0000000000..f773a0f283 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15531.yml @@ -0,0 +1,15 @@ +author: "TripleShades" +delete-after: True +changes: + - rscadd: "[Omega] Windoors to Atmos flaps" + - rscadd: "[Omega] Windoor to Librarian desk" + - rscadd: "[Omega] Another belt switch to Cargo" + - rscadd: "[Omega] Superfluous decals" + - rscadd: "[Omega] Two space heaters" + - rscadd: "[Omega] Two empty medkits and health scanners to Robotics" + - rscadd: "[Omega] More painting mounts in the Library +remove: [Omega] Superfluous decals" + - bugfix: "[Omega] Organ Fridge no longer invisibly takes up the tile it was shifted from +tweak: [Omega] Maint garden is no longer spaced at the cost of losing a puddle +tweak: [Omega] Moves around the blood crate in Medbay to swap with a vendor +tweak: [Omega] Moved around Library book shelves" From 906361a4629af850927e4562d490239335cd2f2f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 4 Mar 2022 00:40:08 +0000 Subject: [PATCH 84/84] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-15531.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-15531.yml diff --git a/html/changelogs/AutoChangeLog-pr-15531.yml b/html/changelogs/AutoChangeLog-pr-15531.yml deleted file mode 100644 index f773a0f283..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15531.yml +++ /dev/null @@ -1,15 +0,0 @@ -author: "TripleShades" -delete-after: True -changes: - - rscadd: "[Omega] Windoors to Atmos flaps" - - rscadd: "[Omega] Windoor to Librarian desk" - - rscadd: "[Omega] Another belt switch to Cargo" - - rscadd: "[Omega] Superfluous decals" - - rscadd: "[Omega] Two space heaters" - - rscadd: "[Omega] Two empty medkits and health scanners to Robotics" - - rscadd: "[Omega] More painting mounts in the Library -remove: [Omega] Superfluous decals" - - bugfix: "[Omega] Organ Fridge no longer invisibly takes up the tile it was shifted from -tweak: [Omega] Maint garden is no longer spaced at the cost of losing a puddle -tweak: [Omega] Moves around the blood crate in Medbay to swap with a vendor -tweak: [Omega] Moved around Library book shelves"