From 71a9e3003d1e2539c91ad06e0954f7c4c82f8128 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 21 Apr 2024 00:37:05 +0000 Subject: [PATCH 01/60] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-27279.yml | 12 ------------ html/changelogs/archive/2024-04.yml | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 12 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-27279.yml diff --git a/html/changelogs/AutoChangeLog-pr-27279.yml b/html/changelogs/AutoChangeLog-pr-27279.yml deleted file mode 100644 index 87fa196e896..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27279.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: "CliffracerX" -delete-after: True -changes: - - rscadd: "you can mount Mk. II Hyposprays onto the underside of Hypospray Kits & quickdraw them" - - rscadd: "MK. II hypospray upgrade kit through imports - bigger vials, but it'll hurt your wallet to get 'em!" - - image: "redid every Mk. II Hypospray, hypokit & vial sprite!" - - qol: "hypovials are now color-codable & the type can still be seen when loaded into a hypospray" - - qol: "R&D can research how to make new hypokits & Mk. II Hyposprays" - - balance: "boosted deluxe hypokits' storage, nerfed small hypokits' storage & made them pocketable" - - admin: "icspawning supports quirks & loadout items now" - - admin: "bluespace technician RPED has been significantly upgraded" - - bugfix: "hotfix for loadout wallets not filling properly" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index c29d7a53d7b..5f4e9588d5d 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -397,3 +397,18 @@ - rscadd: added the research skill - balance: experisci scanner affected by research skill - balance: xenoarch affected by research skill +2024-04-21: + CliffracerX: + - rscadd: you can mount Mk. II Hyposprays onto the underside of Hypospray Kits & + quickdraw them + - rscadd: MK. II hypospray upgrade kit through imports - bigger vials, but it'll + hurt your wallet to get 'em! + - image: redid every Mk. II Hypospray, hypokit & vial sprite! + - qol: hypovials are now color-codable & the type can still be seen when loaded + into a hypospray + - qol: R&D can research how to make new hypokits & Mk. II Hyposprays + - balance: boosted deluxe hypokits' storage, nerfed small hypokits' storage & made + them pocketable + - admin: icspawning supports quirks & loadout items now + - admin: bluespace technician RPED has been significantly upgraded + - bugfix: hotfix for loadout wallets not filling properly From dac75a481c6659a30cd425bfc1d06be848eac1af Mon Sep 17 00:00:00 2001 From: Waterpig <49160555+Majkl-J@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:18:47 +0200 Subject: [PATCH 02/60] Fixes basic benos dying due to being cold (#27427) I see your pokemon --- .../master_files/code/modules/mob/living/basic/alien/alien.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modular_skyrat/master_files/code/modules/mob/living/basic/alien/alien.dm b/modular_skyrat/master_files/code/modules/mob/living/basic/alien/alien.dm index d953fad3ae2..46a2d06ea78 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/basic/alien/alien.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/basic/alien/alien.dm @@ -1,4 +1,6 @@ /mob/living/basic/alien + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 950 //If you dont want to fight them, Burn them. If you want the rewards from tarkon? Dont burn them. unsuitable_heat_damage = 50 //Hot Acid Blood. pressure_resistance = 200 //Exoskeleton. The likeliness of them being in high-pressure places naturally are 0% anyways. From 8ecd4bf5b1509199bbcc4fa689920cff4941aeb9 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:19:09 +0200 Subject: [PATCH 03/60] Automatic changelog for PR #27427 [ci skip] --- html/changelogs/AutoChangeLog-pr-27427.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27427.yml diff --git a/html/changelogs/AutoChangeLog-pr-27427.yml b/html/changelogs/AutoChangeLog-pr-27427.yml new file mode 100644 index 00000000000..41d386d8ca3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27427.yml @@ -0,0 +1,4 @@ +author: "Majkl-J" +delete-after: True +changes: + - bugfix: "Basicmob xenos no longer die to lack of heating" \ No newline at end of file From a9ff04635232d49d2ec96829f0180e6f13ef7877 Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Wed, 24 Apr 2024 00:13:45 +0530 Subject: [PATCH 04/60] Administrator Cherrypick (#27405) * Admin Verb Datums MkIII | Now with functional command bar (#82511) * Modular stuffs * Put some admin jump verbs back into the context menu | sorts area jump list again (#82647) ## About The Pull Request See title. ## Why It's Good For The Game Some admins wanted all the jump verbs back, aswell as making them not AGhost you. Also make the Jump To Area verb use a sorted list again * Hey what if admins were allowed to use the player panel (#82682) Re-adds the player panel verb to the verb panel. * Controller Overview UI (#82739) * Fixes a minor spelling mistake on the admin panel/verb list (#82747) ## About The Pull Request Corrects `inisimin` to `invisimin`. This addresses #82728, but only fixes one of the two issues mentioned ## Why It's Good For The Game -1 spelling mistake ## Changelog :cl: spellcheck: 'inisimin' verb corrected to 'invisimin' /:cl: * Player Panel-age (#82757) * Admin Forced Mob Rename and Preference Update (#82715) --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: chel <64568243+iliyaxox@users.noreply.github.com> --- .vscode/settings.json | 2 + code/__DEFINES/_protect.dm | 3 +- code/__DEFINES/admin.dm | 3 +- code/__DEFINES/admin_verb.dm | 92 ++ code/__DEFINES/subsystems.dm | 3 +- code/__DEFINES/vv.dm | 1 + code/__HELPERS/hallucinations.dm | 8 +- code/_onclick/hud/movable_screen_objects.dm | 26 +- code/controllers/admin.dm | 25 +- code/controllers/master.dm | 79 +- code/controllers/subsystem/admin_verbs.dm | 150 +++ code/controllers/subsystem/explosions.dm | 17 +- code/controllers/subsystem/mapping.dm | 26 +- code/controllers/subsystem/weather.dm | 12 +- code/datums/brain_damage/imaginary_friend.dm | 4 +- code/datums/components/puzzgrid.dm | 13 +- code/datums/keybinding/admin.dm | 12 +- code/datums/station_traits/admin_panel.dm | 8 +- code/game/atom/atom_vv.dm | 8 +- code/game/objects/objs.dm | 4 +- code/modules/admin/admin.dm | 45 +- code/modules/admin/admin_fax_panel.dm | 31 +- code/modules/admin/admin_investigate.dm | 15 +- code/modules/admin/admin_pda_message.dm | 10 +- code/modules/admin/admin_verbs.dm | 958 ++++-------------- code/modules/admin/adminmenu.dm | 11 - code/modules/admin/callproc/callproc.dm | 40 +- code/modules/admin/force_event.dm | 10 +- code/modules/admin/known_alts.dm | 7 +- code/modules/admin/outfit_manager.dm | 30 +- code/modules/admin/painting_manager.dm | 11 +- code/modules/admin/permissionedit.dm | 10 +- code/modules/admin/stickyban.dm | 9 +- code/modules/admin/tag.dm | 21 +- code/modules/admin/topic.dm | 126 +-- code/modules/admin/trophy_manager.dm | 11 +- .../admin/verb_datums/_admin_verb_datum.dm | 27 + .../admin/verb_datums/_admin_verb_holder.dm | 0 code/modules/admin/verbs/SDQL2/SDQL_2.dm | 15 +- code/modules/admin/verbs/admin.dm | 83 +- code/modules/admin/verbs/admin_newscaster.dm | 15 +- code/modules/admin/verbs/adminevents.dm | 320 ++---- code/modules/admin/verbs/adminfun.dm | 155 +-- code/modules/admin/verbs/admingame.dm | 294 +++--- code/modules/admin/verbs/adminjump.dm | 171 +--- code/modules/admin/verbs/adminpm.dm | 35 +- code/modules/admin/verbs/adminsay.dm | 32 +- code/modules/admin/verbs/atmosdebug.dm | 24 +- code/modules/admin/verbs/beakerpanel.dm | 11 +- code/modules/admin/verbs/borgpanel.dm | 21 +- .../admin/verbs/change_shuttle_events.dm | 23 +- code/modules/admin/verbs/cinematic.dm | 18 +- code/modules/admin/verbs/commandreport.dm | 27 +- code/modules/admin/verbs/config_helpers.dm | 21 +- code/modules/admin/verbs/deadsay.dm | 35 +- code/modules/admin/verbs/debug.dm | 540 ++++------ code/modules/admin/verbs/diagnostics.dm | 58 +- code/modules/admin/verbs/ert.dm | 18 +- code/modules/admin/verbs/fix_air.dm | 35 +- code/modules/admin/verbs/fov.dm | 12 +- code/modules/admin/verbs/fps.dm | 19 +- code/modules/admin/verbs/getlogs.dm | 18 +- .../admin/verbs/ghost_pool_protection.dm | 9 +- code/modules/admin/verbs/lawpanel.dm | 18 +- code/modules/admin/verbs/lua/lua_editor.dm | 10 +- code/modules/admin/verbs/machine_upgrade.dm | 16 +- code/modules/admin/verbs/manipulate_organs.dm | 29 +- code/modules/admin/verbs/map_export.dm | 29 +- .../admin/verbs/map_template_loadverb.dm | 46 +- code/modules/admin/verbs/mapping.dm | 274 ++--- code/modules/admin/verbs/maprotation.dm | 49 +- code/modules/admin/verbs/panicbunker.dm | 26 +- .../admin/verbs/player_ticket_history.dm | 9 +- code/modules/admin/verbs/playsound.dm | 112 +- code/modules/admin/verbs/possess.dm | 28 +- .../admin/verbs/reestablish_db_connection.dm | 20 +- code/modules/admin/verbs/requests.dm | 9 +- code/modules/admin/verbs/secrets.dm | 23 +- code/modules/admin/verbs/selectequipment.dm | 14 +- code/modules/admin/verbs/server.dm | 264 ++--- code/modules/admin/verbs/shuttlepanel.dm | 12 +- code/modules/admin/verbs/spawnobjasmob.dm | 83 +- code/modules/admin/verbs/special_verbs.dm | 43 + .../admin/view_variables/mark_datum.dm | 6 +- .../modules/admin/view_variables/tag_datum.dm | 6 +- .../admin/view_variables/topic_basic.dm | 5 +- .../admin/view_variables/view_variables.dm | 4 + .../antagonists/traitor/balance_helper.dm | 10 +- .../pipes/pipe_spritesheet_helper.dm | 5 +- code/modules/cargo/centcom_podlauncher.dm | 7 +- code/modules/client/client_procs.dm | 76 +- code/modules/client/verbs/ooc.dm | 25 +- code/modules/explorer_drone/manager.dm | 9 +- code/modules/fishing/admin.dm | 12 +- code/modules/logging/log_holder.dm | 6 +- .../modules/mob/dead/observer/observer_say.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 4 +- code/modules/mob/living/living.dm | 24 + code/modules/mob/living/living_say.dm | 4 +- code/modules/mob/mob.dm | 40 +- .../procedural_mapping/mapGenerator.dm | 34 +- .../reagents/chemistry/chem_wiki_render.dm | 19 +- code/modules/requests/request_manager.dm | 23 +- code/modules/tgui_input/say_modal/speech.dm | 2 +- code/modules/transport/admin.dm | 53 +- code/modules/wiremod/core/admin_panel.dm | 10 +- code/modules/wiremod/core/duplicator.dm | 20 +- .../master_files/code/modules/admin/admin.dm | 9 +- modular_skyrat/modules/admin/code/aooc.dm | 4 +- modular_skyrat/modules/admin/code/fix_chat.dm | 4 +- modular_skyrat/modules/admin/code/loud_say.dm | 16 +- .../modules/admin/code/player_ranks.dm | 18 +- modular_skyrat/modules/admin/code/sooc.dm | 4 +- .../automapper/code/area_spawn_subsystem.dm | 6 +- .../modules/bsa_overhaul/code/admin_verb.dm | 8 +- .../decay_subsystem/code/spawn_nest.dm | 8 +- .../delam_emergency_stop/code/admin_scram.dm | 26 +- .../modules/events/code/event_spawner_menu.dm | 8 +- .../modules/ices_events/code/ICES_tgui.dm | 10 +- .../code/interaction_datum.dm | 8 +- .../code/liquid_systems/liquid_controller.dm | 7 +- modular_skyrat/modules/liquids/code/tools.dm | 29 +- .../modules/lorecaster/code/story_manager.dm | 8 +- .../oneclickantag/code/oneclickantag.dm | 10 +- .../opposing_force/code/admin_procs.dm | 13 +- .../modules/panicbunker/code/panicbunker.dm | 11 +- .../pollution/code/admin_spawn_pollution.dm | 14 +- .../modules/server_overflow/code/chat_link.dm | 16 +- .../code/title_screen_controls.dm | 36 +- tgstation.dme | 6 +- .../tgui/interfaces/ControllerOverview.tsx | 245 +++++ 131 files changed, 2336 insertions(+), 3587 deletions(-) create mode 100644 code/__DEFINES/admin_verb.dm create mode 100644 code/controllers/subsystem/admin_verbs.dm delete mode 100644 code/modules/admin/adminmenu.dm create mode 100644 code/modules/admin/verb_datums/_admin_verb_datum.dm create mode 100644 code/modules/admin/verb_datums/_admin_verb_holder.dm create mode 100644 code/modules/admin/verbs/special_verbs.dm create mode 100644 tgui/packages/tgui/interfaces/ControllerOverview.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index d7c1bfc1d1e..0ef2ce67760 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,8 @@ }, "files.eol": "\n", "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true, + "editor.insertSpaces": false, "git.branchProtection": ["master"], "gitlens.advanced.blame.customArguments": ["-w"], "tgstationTestExplorer.project.resultsType": "json", diff --git a/code/__DEFINES/_protect.dm b/code/__DEFINES/_protect.dm index 9152cfcb570..a1202ebaf32 100644 --- a/code/__DEFINES/_protect.dm +++ b/code/__DEFINES/_protect.dm @@ -11,7 +11,7 @@ return FALSE;\ }\ ##Path/Read(savefile/savefile){\ - qdel(src);\ + del(src);\ }\ ##Path/Write(savefile/savefile){\ return;\ @@ -19,3 +19,4 @@ #else #define GENERAL_PROTECT_DATUM(Path) #endif +// we del instead of qdel because for security reasons we must ensure the datum does not exist if Read is called. qdel will not enforce this. diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 9946e022b61..a0ab44002a0 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -26,6 +26,8 @@ #define BANTYPE_ANY_JOB 9 //Admin Permissions +/// Used for signifying that all admins can use this regardless of actual permissions +#define R_NONE NONE #define R_BUILD (1<<0) #define R_ADMIN (1<<1) #define R_BAN (1<<2) @@ -177,4 +179,3 @@ GLOBAL_VAR_INIT(ghost_role_flags, ALL) /// Used in logging uses of admin verbs (and sometimes some non-admin or debug verbs) to the blackbox /// Only pass it a string key, the verb being used. #define BLACKBOX_LOG_ADMIN_VERB(the_verb) SSblackbox.record_feedback("tally", "admin_verb", 1, the_verb) - diff --git a/code/__DEFINES/admin_verb.dm b/code/__DEFINES/admin_verb.dm new file mode 100644 index 00000000000..cbf856bf436 --- /dev/null +++ b/code/__DEFINES/admin_verb.dm @@ -0,0 +1,92 @@ +/client/CanProcCall(procname) + if(findtext(procname, "__avd_") == 1) + message_admins("[key_name_admin(usr)] attempted to directly call admin verb '[procname]'.") + log_admin("[key_name(usr)] attempted to directly call admin verb '[procname]'.") + return FALSE + return ..() + +/** + * This is the only macro you should use to define admin verbs. + * It will define the verb and the verb holder for you. + * Using it is very simple: + * ADMIN_VERB(verb_path, R_PERM, "Name", "Description", "Admin.Category", args...) + * This sets up all of the above and also acts as syntatic sugar as a verb delcaration for the verb itself. + * Note that the verb args have an injected `client/user` argument that is the user that called the verb. + * Do not use usr in your verb; technically you can but I'll kill you. + */ +#define _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, show_in_context_menu, verb_args...) \ +/datum/admin_verb/##verb_path_name \ +{ \ + name = ##verb_name; \ + description = ##verb_desc; \ + category = ##verb_category; \ + permissions = ##verb_permissions; \ + verb_path = /client/proc/__avd_##verb_path_name; \ +}; \ +/client/proc/__avd_##verb_path_name(##verb_args) \ +{ \ + set name = ##verb_name; \ + set desc = ##verb_desc; \ + set hidden = FALSE; /* this is explicitly needed as the proc begins with an underscore */ \ + set popup_menu = ##show_in_context_menu; \ + set category = ##verb_category; \ + var/list/_verb_args = list(usr, /datum/admin_verb/##verb_path_name); \ + _verb_args += args; \ + SSadmin_verbs.dynamic_invoke_verb(arglist(_verb_args)); \ +}; \ +/datum/admin_verb/##verb_path_name/__avd_do_verb(client/user, ##verb_args) + +#define ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, verb_args...) \ +_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, FALSE, ##verb_args) + +#define ADMIN_VERB_ONLY_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, verb_args...) \ +_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, TRUE, ##verb_args) + +#define ADMIN_VERB_AND_CONTEXT_MENU(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, verb_args...) \ +_ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_category, TRUE, ##verb_args) + +/// Used to define a special check to determine if the admin verb should exist at all. Useful for verbs such as play sound which require configuration. +#define ADMIN_VERB_CUSTOM_EXIST_CHECK(verb_path_name) \ +/datum/admin_verb/##verb_path_name/__avd_check_should_exist() + +/// Used to define the visibility flag of the verb. If the admin does not have this flag enabled they will not see the verb. +#define ADMIN_VERB_VISIBILITY(verb_path_name, verb_visibility) /datum/admin_verb/##verb_path_name/visibility_flag = ##verb_visibility + +// These are put here to prevent the "procedure override precedes definition" error. +/datum/admin_verb/proc/__avd_get_verb_path() + CRASH("__avd_get_verb_path not defined. use the macro") +/datum/admin_verb/proc/__avd_do_verb(...) + CRASH("__avd_do_verb not defined. use the macro") +/datum/admin_verb/proc/__avd_check_should_exist() + return TRUE + +/* + * This is an example of how to use the above macro: + * ``` + * ADMIN_VERB(name_of_verb, R_ADMIN, "Verb Name", "Verb Desc", "Verb Category", mob/target in world) + * to_chat(user, "Hello!") + * ``` + * Note the implied `client/user` argument that is injected into the verb. + * Also note that byond is shit and you cannot multi-line the macro call. + */ + +/// Use this to mark your verb as not having a description. Should ONLY be used if you are also hiding the verb! +#define ADMIN_VERB_NO_DESCRIPTION "" +/// Used to verbs you do not want to show up in the master verb panel. +#define ADMIN_CATEGORY_HIDDEN null + +// Admin verb categories +#define ADMIN_CATEGORY_MAIN "Admin" +#define ADMIN_CATEGORY_EVENTS "Admin.Events" +#define ADMIN_CATEGORY_FUN "Admin.Fun" +#define ADMIN_CATEGORY_GAME "Admin.Game" + +// Special categories that are seperated +#define ADMIN_CATEGORY_DEBUG "Debug" +#define ADMIN_CATEGORY_SERVER "Server" +#define ADMIN_CATEGORY_OBJECT "Object" +#define ADMIN_CATEGORY_MAPPING "Mapping" +#define ADMIN_CATEGORY_PROFILE "Profile" + +// Visibility flags +#define ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG "Map-Debug" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 1a1940b76cd..ccd7e4e06bb 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -136,8 +136,9 @@ #define INIT_ORDER_DBCORE 95 #define INIT_ORDER_BLACKBOX 94 #define INIT_ORDER_SERVER_MAINT 93 +#define INIT_ORDER_PLAYER_RANKS 86 // SKYRAT EDIT - Player Ranks Subsystem #define INIT_ORDER_INPUT 85 -#define INIT_ORDER_PLAYER_RANKS 84 // SKYRAT EDIT - Player Ranks Subsystem +#define INIT_ORDER_ADMIN_VERBS 84 // needs to be pretty high, admins cant do much without it #define INIT_ORDER_SOUNDS 83 #define INIT_ORDER_INSTRUMENTS 82 #define INIT_ORDER_GREYSCALE 81 diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index dfa930f7a76..a83ef71ddc6 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -136,6 +136,7 @@ // /mob/living #define VV_HK_GIVE_SPEECH_IMPEDIMENT "impede_speech" +#define VV_HK_ADMIN_RENAME "admin_rename" #define VV_HK_ADD_MOOD "addmood" #define VV_HK_REMOVE_MOOD "removemood" #define VV_HK_GIVE_HALLUCINATION "give_hallucination" diff --git a/code/__HELPERS/hallucinations.dm b/code/__HELPERS/hallucinations.dm index 525114cea28..1eeab08d876 100644 --- a/code/__HELPERS/hallucinations.dm +++ b/code/__HELPERS/hallucinations.dm @@ -113,11 +113,7 @@ GLOBAL_LIST_INIT(random_hallucination_weighted_list, generate_hallucination_weig to_chat(usr, span_boldnotice("The total weight of the hallucination weighted list is [total_weight].")) return total_weight -/// Debug verb for getting the weight of each distinct type within the random_hallucination_weighted_list -/client/proc/debug_hallucination_weighted_list_per_type() - set name = "Show Hallucination Weights" - set category = "Debug" - +ADMIN_VERB(debug_hallucination_weighted_list_per_type, R_DEBUG, "Show Hallucination Weights", "View the weight of each hallucination subtype in the random weighted list.", ADMIN_CATEGORY_DEBUG) var/header = "Type Weight Percent" var/total_weight = debug_hallucination_weighted_list() @@ -153,7 +149,7 @@ GLOBAL_LIST_INIT(random_hallucination_weighted_list, generate_hallucination_weig var/page_style = "" var/page_contents = "[page_style][header][jointext(assoc_to_keys(all_weights), "")]
" - var/datum/browser/popup = new(mob, "hallucinationdebug", "Hallucination Weights", 600, 400) + var/datum/browser/popup = new(user.mob, "hallucinationdebug", "Hallucination Weights", 600, 400) popup.set_content(page_contents) popup.open() diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index b1f40f76294..e0a6c6873bd 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -44,40 +44,30 @@ offset[2] += y_off return offset_to_screen_loc(offset[1], offset[2], our_client?.view) -//Debug procs -/client/proc/test_movable_UI() - set category = "Debug" - set name = "Spawn Movable UI Object" - - var/atom/movable/screen/movable/M = new() +ADMIN_VERB(test_movable_UI, R_DEBUG, "Spawn Movable UI Object", "Spawn a movable UI object for testing.", ADMIN_CATEGORY_DEBUG) + var/atom/movable/screen/movable/M = new M.name = "Movable UI Object" M.icon_state = "block" M.maptext = MAPTEXT("Movable") M.maptext_width = 64 - var/screen_l = input(usr,"Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Movable UI Object") as text|null + var/screen_l = input(user, "Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Movable UI Object") as text|null if(!screen_l) return M.screen_loc = screen_l + user.screen += M - screen += M - - -/client/proc/test_snap_UI() - set category = "Debug" - set name = "Spawn Snap UI Object" - - var/atom/movable/screen/movable/snap/S = new() +ADMIN_VERB(test_snap_ui, R_DEBUG, "Spawn Snap UI Object", "Spawn a snap UI object for testing.", ADMIN_CATEGORY_DEBUG) + var/atom/movable/screen/movable/snap/S = new S.name = "Snap UI Object" S.icon_state = "block" S.maptext = MAPTEXT("Snap") S.maptext_width = 64 - var/screen_l = input(usr,"Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Snap UI Object") as text|null + var/screen_l = input(user,"Where on the screen? (Formatted as 'X,Y' e.g: '1,1' for bottom left)","Spawn Snap UI Object") as text|null if(!screen_l) return S.screen_loc = screen_l - - screen += S + user.screen += S diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index 421712d5ad4..5056e3804ef 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -44,15 +44,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) usr.client.debug_variables(target) message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") - -// Debug verbs. -/client/proc/restart_controller(controller in list("Master", "Failsafe")) - set category = "Debug" - set name = "Restart Controller" - set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" - - if(!holder) - return +ADMIN_VERB(restart_controller, R_DEBUG, "Restart Controller", "Restart one of the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG, controller in list("Master", "Failsafe")) switch(controller) if("Master") Recreate_MC() @@ -61,16 +53,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) new /datum/controller/failsafe() BLACKBOX_LOG_ADMIN_VERB("Restart Failsafe Controller") - message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") - -/client/proc/debug_controller() - set category = "Debug" - set name = "Debug Controller" - set desc = "Debug the various periodic loop controllers for the game (be careful!)" - - if(!holder) - return + message_admins("Admin [key_name_admin(user)] has restarted the [controller] controller.") +ADMIN_VERB(debug_controller, R_DEBUG, "Debug Controller", "Debug the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG) var/list/controllers = list() var/list/controller_choices = list() @@ -85,7 +70,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) if (!istype(controller)) return - debug_variables(controller) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/debug_variables, controller) BLACKBOX_LOG_ADMIN_VERB("Debug Controller") - message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") + message_admins("Admin [key_name_admin(user)] is debugging the [controller] controller.") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 9aa6d821abb..d7996890f98 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -76,6 +76,9 @@ GLOBAL_REAL(Master, /datum/controller/master) ///used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits var/static/current_ticklimit = TICK_LIMIT_RUNNING + /// Whether the Overview UI will update as fast as possible for viewers. + var/overview_fast_update = FALSE + /datum/controller/master/New() if(!config) config = new @@ -135,6 +138,78 @@ GLOBAL_REAL(Master, /datum/controller/master) ss.Shutdown() log_world("Shutdown complete") +ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "View the current states of the Subsystem Controllers.", ADMIN_CATEGORY_SERVER) + Master.ui_interact(user.mob) + +/datum/controller/master/ui_status(mob/user, datum/ui_state/state) + if(!user.client?.holder?.check_for_rights(R_SERVER|R_DEBUG)) + return UI_CLOSE + return UI_INTERACTIVE + +/datum/controller/master/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(isnull(ui)) + ui = new /datum/tgui(user, src, "ControllerOverview") + ui.open() + +/datum/controller/master/ui_data(mob/user) + var/list/data = list() + + var/list/subsystem_data = list() + for(var/datum/controller/subsystem/subsystem as anything in subsystems) + subsystem_data += list(list( + "name" = subsystem.name, + "ref" = REF(subsystem), + "init_order" = subsystem.init_order, + "last_fire" = subsystem.last_fire, + "next_fire" = subsystem.next_fire, + "can_fire" = subsystem.can_fire, + "doesnt_fire" = !!(subsystem.flags & SS_NO_FIRE), + "cost_ms" = subsystem.cost, + "tick_usage" = subsystem.tick_usage, + "tick_overrun" = subsystem.tick_overrun, + "initialized" = subsystem.initialized, + "initialization_failure_message" = subsystem.initialization_failure_message, + )) + data["subsystems"] = subsystem_data + data["world_time"] = world.time + data["map_cpu"] = world.map_cpu + data["fast_update"] = overview_fast_update + + return data + +/datum/controller/master/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if(..()) + return TRUE + + switch(action) + if("toggle_fast_update") + overview_fast_update = !overview_fast_update + return TRUE + + if("view_variables") + var/datum/controller/subsystem/subsystem = locate(params["ref"]) in subsystems + if(isnull(subsystem)) + to_chat(ui.user, span_warning("Failed to locate subsystem.")) + return + SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/debug_variables, subsystem) + return TRUE + +/datum/controller/master/proc/check_and_perform_fast_update() + PRIVATE_PROC(TRUE) + set waitfor = FALSE + + + if(!overview_fast_update) + return + + var/static/already_updating = FALSE + if(already_updating) + return + already_updating = TRUE + SStgui.update_uis(src) + already_updating = FALSE + // Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart, // -1 if we encountered a runtime trying to recreate it /proc/Recreate_MC() @@ -582,11 +657,9 @@ GLOBAL_REAL(Master, /datum/controller/master) if (processing * sleep_delta <= world.tick_lag) current_ticklimit -= (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc if we plan on running next tick + check_and_perform_fast_update() sleep(world.tick_lag * (processing * sleep_delta)) - - - // This is what decides if something should run. /datum/controller/master/proc/CheckQueue(list/subsystemstocheck) . = 0 //so the mc knows if we runtimed diff --git a/code/controllers/subsystem/admin_verbs.dm b/code/controllers/subsystem/admin_verbs.dm new file mode 100644 index 00000000000..9496b95d998 --- /dev/null +++ b/code/controllers/subsystem/admin_verbs.dm @@ -0,0 +1,150 @@ +GENERAL_PROTECT_DATUM(/datum/controller/subsystem/admin_verbs) + +SUBSYSTEM_DEF(admin_verbs) + name = "Admin Verbs" + flags = SS_NO_FIRE + init_order = INIT_ORDER_ADMIN_VERBS + /// A list of all admin verbs indexed by their type. + var/list/datum/admin_verb/admin_verbs_by_type = list() + /// A list of all admin verbs indexed by their visibility flag. + var/list/list/datum/admin_verb/admin_verbs_by_visibility_flag = list() + /// A map of all assosciated admins and their visibility flags. + var/list/admin_visibility_flags = list() + /// A list of all admins that are pending initialization of this SS. + var/list/admins_pending_subsytem_init = list() + +/datum/controller/subsystem/admin_verbs/Initialize() + setup_verb_list() + process_pending_admins() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/admin_verbs/Recover() + admin_verbs_by_type = SSadmin_verbs.admin_verbs_by_type + +/datum/controller/subsystem/admin_verbs/stat_entry(msg) + return "[..()] | V: [length(admin_verbs_by_type)]" + +/datum/controller/subsystem/admin_verbs/proc/process_pending_admins() + var/list/pending_admins = admins_pending_subsytem_init + admins_pending_subsytem_init = null + for(var/admin_ckey in pending_admins) + assosciate_admin(GLOB.directory[admin_ckey]) + +/datum/controller/subsystem/admin_verbs/proc/setup_verb_list() + if(length(admin_verbs_by_type)) + CRASH("Attempting to setup admin verbs twice!") + for(var/datum/admin_verb/verb_type as anything in subtypesof(/datum/admin_verb)) + var/datum/admin_verb/verb_singleton = new verb_type + if(!verb_singleton.__avd_check_should_exist()) + qdel(verb_singleton, force = TRUE) + continue + + admin_verbs_by_type[verb_type] = verb_singleton + if(verb_singleton.visibility_flag) + if(!(verb_singleton.visibility_flag in admin_verbs_by_visibility_flag)) + admin_verbs_by_visibility_flag[verb_singleton.visibility_flag] = list() + admin_verbs_by_visibility_flag[verb_singleton.visibility_flag] |= list(verb_singleton) + +/datum/controller/subsystem/admin_verbs/proc/get_valid_verbs_for_admin(client/admin) + if(isnull(admin.holder)) + CRASH("Why are we checking a non-admin for their valid... ahem... admin verbs?") + + var/list/has_permission = list() + for(var/permission_flag in GLOB.bitflags) + if(admin.holder.check_for_rights(permission_flag)) + has_permission["[permission_flag]"] = TRUE + + var/list/valid_verbs = list() + for(var/datum/admin_verb/verb_type as anything in admin_verbs_by_type) + var/datum/admin_verb/verb_singleton = admin_verbs_by_type[verb_type] + if(!verify_visibility(admin, verb_singleton)) + continue + + var/verb_permissions = verb_singleton.permissions + if(verb_permissions == R_NONE) + valid_verbs |= list(verb_singleton) + else for(var/permission_flag in bitfield_to_list(verb_permissions)) + if(!has_permission["[permission_flag]"]) + continue + valid_verbs |= list(verb_singleton) + + return valid_verbs + +/datum/controller/subsystem/admin_verbs/proc/verify_visibility(client/admin, datum/admin_verb/verb_singleton) + var/needed_flag = verb_singleton.visibility_flag + return !needed_flag || (needed_flag in admin_visibility_flags[admin.ckey]) + +/datum/controller/subsystem/admin_verbs/proc/update_visibility_flag(client/admin, flag, state) + if(state) + admin_visibility_flags[admin.ckey] |= list(flag) + assosciate_admin(admin) + return + + admin_visibility_flags[admin.ckey] -= list(flag) + // they lost the flag, iterate over verbs with that flag and yoink em + for(var/datum/admin_verb/verb_singleton as anything in admin_verbs_by_visibility_flag[flag]) + verb_singleton.unassign_from_client(admin) + admin.init_verbs() + +/datum/controller/subsystem/admin_verbs/proc/dynamic_invoke_verb(client/admin, datum/admin_verb/verb_type, ...) + if(IsAdminAdvancedProcCall()) + message_admins("PERMISSION ELEVATION: [key_name_admin(admin)] attempted to dynamically invoke admin verb '[verb_type]'.") + return + + if(ismob(admin)) + var/mob/mob = admin + admin = mob.client + + if(!ispath(verb_type, /datum/admin_verb) || verb_type == /datum/admin_verb) + CRASH("Attempted to dynamically invoke admin verb with invalid typepath '[verb_type]'.") + if(isnull(admin.holder)) + CRASH("Attempted to dynamically invoke admin verb '[verb_type]' with a non-admin.") + + var/list/verb_args = args.Copy() + verb_args.Cut(2, 3) + var/datum/admin_verb/verb_singleton = admin_verbs_by_type[verb_type] // this cannot be typed because we need to use `:` + if(isnull(verb_singleton)) + CRASH("Attempted to dynamically invoke admin verb '[verb_type]' that doesn't exist.") + + if(!admin.holder.check_for_rights(verb_singleton.permissions)) + to_chat(admin, span_adminnotice("You lack the permissions to do this.")) + return + + var/old_usr = usr + usr = admin.mob + // THE MACRO ENSURES THIS EXISTS. IF IT EVER DOESNT EXIST SOMEONE DIDNT USE THE DAMN MACRO! + verb_singleton.__avd_do_verb(arglist(verb_args)) + usr = old_usr + SSblackbox.record_feedback("tally", "dynamic_admin_verb_invocation", 1, "[verb_type]") + +/** + * Assosciates and/or resyncs an admin with their accessible admin verbs. + */ +/datum/controller/subsystem/admin_verbs/proc/assosciate_admin(client/admin) + if(IsAdminAdvancedProcCall()) + return + + if(!isnull(admins_pending_subsytem_init)) // if the list exists we are still initializing + to_chat(admin, span_big(span_green("Admin Verbs are still initializing. Please wait and you will be automatically assigned your verbs when it is complete."))) + admins_pending_subsytem_init |= list(admin.ckey) + return + + // refresh their verbs + admin_visibility_flags[admin.ckey] ||= list() + for(var/datum/admin_verb/verb_singleton as anything in get_valid_verbs_for_admin(admin)) + verb_singleton.assign_to_client(admin) + admin.init_verbs() + +/** + * Unassosciates an admin from their admin verbs. + * Goes over all admin verbs because we don't know which ones are assigned to the admin's mob without a bunch of extra bookkeeping. + * This might be a performance issue in the future if we have a lot of admin verbs. + */ +/datum/controller/subsystem/admin_verbs/proc/deassosciate_admin(client/admin) + if(IsAdminAdvancedProcCall()) + return + + UnregisterSignal(admin, COMSIG_CLIENT_MOB_LOGIN) + for(var/datum/admin_verb/verb_type as anything in admin_verbs_by_type) + admin_verbs_by_type[verb_type].unassign_from_client(admin) + admin_visibility_flags -= list(admin.ckey) diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 1922d4a05f5..7bf5ace5d20 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -87,12 +87,9 @@ SUBSYSTEM_DEF(explosions) throwturf -= T held_throwturf -= T -/client/proc/check_bomb_impacts() - set name = "Check Bomb Impact" - set category = "Debug" - - var/newmode = tgui_alert(usr, "Use reactionary explosions?","Check Bomb Impact", list("Yes", "No")) - var/turf/epicenter = get_turf(mob) +ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effect of a bomb would be.", ADMIN_CATEGORY_DEBUG) + var/newmode = tgui_alert(user, "Use reactionary explosions?","Check Bomb Impact", list("Yes", "No")) + var/turf/epicenter = get_turf(user.mob) if(!epicenter) return @@ -100,7 +97,7 @@ SUBSYSTEM_DEF(explosions) var/heavy = 0 var/light = 0 var/list/choices = list("Small Bomb","Medium Bomb","Big Bomb","Custom Bomb") - var/choice = tgui_input_list(usr, "Pick the bomb size", "Bomb Size?", choices) + var/choice = tgui_input_list(user, "Pick the bomb size", "Bomb Size?", choices) switch(choice) if(null) return 0 @@ -117,9 +114,9 @@ SUBSYSTEM_DEF(explosions) heavy = 5 light = 7 if("Custom Bomb") - dev = input("Devastation range (Tiles):") as num - heavy = input("Heavy impact range (Tiles):") as num - light = input("Light impact range (Tiles):") as num + dev = input(user, "Devastation range (Tiles):") as num + heavy = input(user, "Heavy impact range (Tiles):") as num + light = input(user, "Light impact range (Tiles):") as num var/max_range = max(dev, heavy, light) var/x0 = epicenter.x diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b34f9551eb4..3aa9fba84e6 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -651,46 +651,38 @@ GLOBAL_LIST_EMPTY(the_station_areas) holodeck_templates[holo_template.template_id] = holo_template -//Manual loading of away missions. -/client/proc/admin_away() - set name = "Load Away Mission" - set category = "Admin.Events" - - if(!holder || !check_rights(R_FUN)) - return - - +ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away mission for the station.", ADMIN_CATEGORY_EVENTS) if(!GLOB.the_gateway) - if(tgui_alert(usr, "There's no home gateway on the station. You sure you want to continue ?", "Uh oh", list("Yes", "No")) != "Yes") + if(tgui_alert(user, "There's no home gateway on the station. You sure you want to continue ?", "Uh oh", list("Yes", "No")) != "Yes") return var/list/possible_options = GLOB.potentialRandomZlevels + "Custom" var/away_name var/datum/space_level/away_level var/secret = FALSE - if(tgui_alert(usr, "Do you want your mission secret? (This will prevent ghosts from looking at your map in any way other than through a living player's eyes.)", "Are you $$$ekret?", list("Yes", "No")) == "Yes") + if(tgui_alert(user, "Do you want your mission secret? (This will prevent ghosts from looking at your map in any way other than through a living player's eyes.)", "Are you $$$ekret?", list("Yes", "No")) == "Yes") secret = TRUE - var/answer = input("What kind?","Away") as null|anything in possible_options + var/answer = input(user, "What kind?","Away") as null|anything in possible_options switch(answer) if("Custom") - var/mapfile = input("Pick file:", "File") as null|file + var/mapfile = input(user, "Pick file:", "File") as null|file if(!mapfile) return away_name = "[mapfile] custom" - to_chat(usr,span_notice("Loading [away_name]...")) + to_chat(user,span_notice("Loading [away_name]...")) var/datum/map_template/template = new(mapfile, "Away Mission") away_level = template.load_new_z(secret) else if(answer in GLOB.potentialRandomZlevels) away_name = answer - to_chat(usr,span_notice("Loading [away_name]...")) + to_chat(user,span_notice("Loading [away_name]...")) var/datum/map_template/template = new(away_name, "Away Mission") away_level = template.load_new_z(secret) else return - message_admins("Admin [key_name_admin(usr)] has loaded [away_name] away mission.") - log_admin("Admin [key_name(usr)] has loaded [away_name] away mission.") + message_admins("Admin [key_name_admin(user)] has loaded [away_name] away mission.") + log_admin("Admin [key_name(user)] has loaded [away_name] away mission.") if(!away_level) message_admins("Loading [away_name] failed!") return diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 78c99f47903..b8496a623eb 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -86,15 +86,9 @@ SUBSYSTEM_DEF(weather) /datum/controller/subsystem/weather/proc/get_weather_by_type(type) return locate(type) in processing -/** - * Calls end() on all current weather effects that are currently processing in the weather subsystem. - */ -/client/proc/stop_weather() - set category = "Debug" - set name = "Stop All Active Weather" - - log_admin("[key_name(src)] stopped all currently active weather.") - message_admins("[key_name_admin(src)] stopped all currently active weather.") +ADMIN_VERB(stop_weather, R_DEBUG|R_ADMIN, "Stop All Active Weather", "Stop all currently active weather.", ADMIN_CATEGORY_DEBUG) + log_admin("[key_name(user)] stopped all currently active weather.") + message_admins("[key_name_admin(user)] stopped all currently active weather.") for(var/datum/weather/current_weather as anything in SSweather.processing) if(current_weather in SSweather.processing) current_weather.end() diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 18ca8172968..e3891392d1a 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -217,11 +217,11 @@ message = capitalize(message) if(message_mods[RADIO_EXTENSION] == MODE_ADMIN) - client?.cmd_admin_say(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, message) return if(message_mods[RADIO_EXTENSION] == MODE_DEADMIN) - client?.dsay(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/dsay, message) return if(check_emote(message, forced)) diff --git a/code/datums/components/puzzgrid.dm b/code/datums/components/puzzgrid.dm index e91bcdb3002..d7e264f651f 100644 --- a/code/datums/components/puzzgrid.dm +++ b/code/datums/components/puzzgrid.dm @@ -280,12 +280,7 @@ var/list/answers = list() var/description -/// Debug verb for validating that all puzzgrids can be created successfully. -/// Locked behind a verb because it's fairly slow and memory intensive. -/client/proc/validate_puzzgrids() - set name = "Validate Puzzgrid Config" - set category = "Debug" - +ADMIN_VERB(validate_puzzgrids, R_DEBUG, "Validate Puzzgrid Config", "Validate the puzzgrid config to ensure it's set up correctly.", ADMIN_CATEGORY_DEBUG) var/line_number = 0 for (var/line in world.file2list(PUZZGRID_CONFIG)) @@ -296,16 +291,16 @@ var/line_json_decoded = safe_json_decode(line) if (isnull(line_json_decoded)) - to_chat(src, span_warning("Line [line_number] in puzzgrids.txt is not a JSON: [line]")) + to_chat(user, span_warning("Line [line_number] in puzzgrids.txt is not a JSON: [line]")) continue var/datum/puzzgrid/puzzgrid = new var/populate_result = puzzgrid.populate(line_json_decoded) if (populate_result != TRUE) - to_chat(src, span_warning("Line [line_number] in puzzgrids.txt is not formatted correctly: [populate_result]")) + to_chat(user, span_warning("Line [line_number] in puzzgrids.txt is not formatted correctly: [populate_result]")) - to_chat(src, span_notice("Validated. If you did not see any errors, you're in the clear.")) + to_chat(user, span_notice("Validated. If you did not see any errors, you're in the clear.")) #undef PUZZGRID_CONFIG #undef PUZZGRID_GROUP_COUNT diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index 80936aa41e7..1e94f71e58a 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -23,7 +23,7 @@ . = ..() if(.) return - user.admin_ghost() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) return TRUE /datum/keybinding/admin/player_panel_new @@ -51,7 +51,7 @@ . = ..() if(.) return - user.togglebuildmodeself() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/build_mode_self) return TRUE /datum/keybinding/admin/stealthmode @@ -65,7 +65,7 @@ . = ..() if(.) return - user.stealth() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/stealth) return TRUE /datum/keybinding/admin/invisimin @@ -79,7 +79,7 @@ . = ..() if(.) return - user.invisimin() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/invisimin) return TRUE /datum/keybinding/admin/deadsay @@ -107,7 +107,7 @@ . = ..() if(.) return - user.deadmin() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/deadmin) return TRUE /datum/keybinding/admin/readmin @@ -135,5 +135,5 @@ . = ..() if(.) return - user.holder?.display_tags() + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/display_tags) return TRUE diff --git a/code/datums/station_traits/admin_panel.dm b/code/datums/station_traits/admin_panel.dm index 02eca48b54f..67669027c54 100644 --- a/code/datums/station_traits/admin_panel.dm +++ b/code/datums/station_traits/admin_panel.dm @@ -1,10 +1,6 @@ -/// Opens the station traits admin panel -/datum/admins/proc/station_traits_panel() - set name = "Modify Station Traits" - set category = "Admin.Events" - +ADMIN_VERB(station_traits_panel, R_FUN, "Modify Station Traits", "Modify the station traits for the next round.", ADMIN_CATEGORY_EVENTS) var/static/datum/station_traits_panel/station_traits_panel = new - station_traits_panel.ui_interact(usr) + station_traits_panel.ui_interact(user.mob) /datum/station_traits_panel var/static/list/future_traits diff --git a/code/game/atom/atom_vv.dm b/code/game/atom/atom_vv.dm index 8830a4af2f4..10a6cbff24a 100644 --- a/code/game/atom/atom_vv.dm +++ b/code/game/atom/atom_vv.dm @@ -67,14 +67,10 @@ message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")) if(href_list[VV_HK_TRIGGER_EXPLOSION]) - if(!check_rights(R_FUN)) - return - usr.client.cmd_admin_explosion(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/admin_explosion, src) if(href_list[VV_HK_TRIGGER_EMP]) - if(!check_rights(R_FUN)) - return - usr.client.cmd_admin_emp(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/admin_emp, src) if(href_list[VV_HK_SHOW_HIDDENPRINTS]) if(!check_rights(R_ADMIN)) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index d84fc46de43..e8797836bae 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -225,9 +225,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) return if(href_list[VV_HK_OSAY]) - if(!check_rights(R_FUN, FALSE)) - return - usr.client.object_say(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/object_say, src) if(href_list[VV_HK_MASS_DEL_TYPE]) if(!check_rights(R_DEBUG|R_SERVER)) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 99aa63325ad..10b9a58b870 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -48,14 +48,9 @@ ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/datum/admins/proc/spawn_atom(object as text) - set category = "Debug" - set desc = "(atom path) Spawn an atom" - set name = "Spawn" - - if(!check_rights(R_SPAWN) || !object) +ADMIN_VERB(spawn_atom, R_SPAWN, "Spawn", "Spawn an atom.", ADMIN_CATEGORY_DEBUG, object as text) + if(!object) return - var/list/preparsed = splittext(object,":") var/path = preparsed[1] var/amount = 1 @@ -65,7 +60,7 @@ var/chosen = pick_closest_path(path) if(!chosen) return - var/turf/T = get_turf(usr) + var/turf/T = get_turf(user.mob) if(ispath(chosen, /turf)) T.ChangeTurf(chosen) @@ -74,21 +69,14 @@ var/atom/A = new chosen(T) A.flags_1 |= ADMIN_SPAWNED_1 - log_admin("[key_name(usr)] spawned [amount] x [chosen] at [AREACOORD(usr)]") + log_admin("[key_name(user)] spawned [amount] x [chosen] at [AREACOORD(user.mob)]") BLACKBOX_LOG_ADMIN_VERB("Spawn Atom") -/datum/admins/proc/podspawn_atom(object as text) - set category = "Debug" - set desc = "(atom path) Spawn an atom via supply drop" - set name = "Podspawn" - - if(!check_rights(R_SPAWN)) - return - +ADMIN_VERB(spawn_atom_pod, R_SPAWN, "PodSpawn", "Spawn an atom via supply drop.", ADMIN_CATEGORY_DEBUG, object as text) var/chosen = pick_closest_path(object) if(!chosen) return - var/turf/target_turf = get_turf(usr) + var/turf/target_turf = get_turf(user.mob) if(ispath(chosen, /turf)) target_turf.ChangeTurf(chosen) @@ -101,25 +89,18 @@ var/atom/A = new chosen(pod) A.flags_1 |= ADMIN_SPAWNED_1 - log_admin("[key_name(usr)] pod-spawned [chosen] at [AREACOORD(usr)]") + log_admin("[key_name(user)] pod-spawned [chosen] at [AREACOORD(user.mob)]") BLACKBOX_LOG_ADMIN_VERB("Podspawn Atom") -/datum/admins/proc/spawn_cargo(object as text) - set category = "Debug" - set desc = "(atom path) Spawn a cargo crate" - set name = "Spawn Cargo" - - if(!check_rights(R_SPAWN)) - return - +ADMIN_VERB(spawn_cargo, R_SPAWN, "Spawn Cargo", "Spawn a cargo crate.", ADMIN_CATEGORY_DEBUG, object as text) var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/datum/supply_pack))) if(!chosen) return var/datum/supply_pack/S = new chosen S.admin_spawned = TRUE - S.generate(get_turf(usr)) + S.generate(get_turf(user.mob)) - log_admin("[key_name(usr)] spawned cargo pack [chosen] at [AREACOORD(usr)]") + log_admin("[key_name(user)] spawned cargo pack [chosen] at [AREACOORD(user.mob)]") BLACKBOX_LOG_ADMIN_VERB("Spawn Cargo") /datum/admins/proc/dynamic_mode_options(mob/user) @@ -246,10 +227,8 @@ log_admin(logged_message) message_admins(logged_message) -/datum/admins/proc/create_or_modify_area() - set category = "Debug" - set name = "Create or modify area" - create_area(usr) +ADMIN_VERB(create_or_modify_area, R_DEBUG, "Create Or Modify Area", "Create of modify an area. wow.", ADMIN_CATEGORY_DEBUG) + create_area(user.mob) //Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked //defaults to kicking everyone (afk + non afk clients in the lobby) diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm index fe1f03d7d7e..8874b6f38eb 100644 --- a/code/modules/admin/admin_fax_panel.dm +++ b/code/modules/admin/admin_fax_panel.dm @@ -1,15 +1,6 @@ -/** - * If client have R_ADMIN flag, opens an admin fax panel. - */ -/client/proc/fax_panel() - set category = "Admin.Events" - set name = "Fax Panel" - - if(!check_rights(R_ADMIN)) - return - - var/datum/fax_panel_interface/ui = new(usr) - ui.ui_interact(usr) +ADMIN_VERB(fax_panel, R_ADMIN, "Fax Panel", "View and respond to faxes sent to CC.", ADMIN_CATEGORY_EVENTS) + var/datum/fax_panel_interface/ui = new /datum/fax_panel_interface(user.mob) + ui.ui_interact(user.mob) /// Admin Fax Panel. Tool for sending fax messages faster. /datum/fax_panel_interface @@ -97,15 +88,15 @@ switch(action) if("follow") - if(!isobserver(usr)) - usr.client?.admin_ghost() + if(!isobserver(ui.user)) + SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/admin_ghost) - usr.client?.admin_follow(action_fax) + ui.user.client?.admin_follow(action_fax) if("preview") // see saved variant if(!fax_paper) return - fax_paper.ui_interact(usr) + fax_paper.ui_interact(ui.user) if("save") // save paper if(params["paperName"]) @@ -129,7 +120,7 @@ if(stamp) fax_paper.add_stamp(stamp_class, params["stampX"], params["stampY"], params["stampAngle"], stamp) - fax_paper.update_static_data(usr) // OK, it's work, and update UI. + fax_paper.update_static_data(ui.user) // OK, it's work, and update UI. if("send") //copy @@ -137,9 +128,9 @@ our_fax.name = fax_paper.name //send action_fax.receive(our_fax, sending_fax_name) - message_admins("[key_name_admin(usr)] has sent a custom fax message to [action_fax.name][ADMIN_FLW(action_fax)][ADMIN_SHOW_PAPER(fax_paper)].") - log_admin("[key_name(usr)] has sent a custom fax message to [action_fax.name]") + message_admins("[key_name_admin(ui.user)] has sent a custom fax message to [action_fax.name][ADMIN_FLW(action_fax)][ADMIN_SHOW_PAPER(fax_paper)].") + log_admin("[key_name(ui.user)] has sent a custom fax message to [action_fax.name]") if("createPaper") - var/obj/item/paper/our_paper = fax_paper.copy(/obj/item/paper, usr.loc) + var/obj/item/paper/our_paper = fax_paper.copy(/obj/item/paper, ui.user.loc) our_paper.name = fax_paper.name diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 94ea182891f..edc3525bf2f 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -10,13 +10,8 @@ WRITE_FILE(F, "[time_stamp(format = "YYYY-MM-DD hh:mm:ss")] [REF(src)] ([x],[y],[z]) || [source] [message]
") -/client/proc/investigate_show() - set name = "Investigate" - set category = "Admin.Game" - if(!holder) - return - - var/list/investigates = list( +ADMIN_VERB(investigate_show, R_NONE, "Investigate", "Browse various detailed logs.", ADMIN_CATEGORY_GAME) + var/static/list/investigates = list( INVESTIGATE_ACCESSCHANGES, INVESTIGATE_ATMOS, INVESTIGATE_BOTANY, @@ -48,7 +43,7 @@ var/list/combined = sort_list(logs_present) + sort_list(logs_missing) - var/selected = tgui_input_list(src, "Investigate what?", "Investigation", combined) + var/selected = tgui_input_list(user, "Investigate what?", "Investigation", combined) if(isnull(selected)) return if(!(selected in combined) || selected == "---") @@ -62,6 +57,6 @@ var/F = file("[GLOB.log_directory]/[selected].html") if(!fexists(F)) - to_chat(src, span_danger("No [selected] logfile was found."), confidential = TRUE) + to_chat(user, span_danger("No [selected] logfile was found."), confidential = TRUE) return - src << browse(F,"window=investigate[selected];size=800x300") + user << browse(F,"window=investigate[selected];size=800x300") diff --git a/code/modules/admin/admin_pda_message.dm b/code/modules/admin/admin_pda_message.dm index 44ca86f893e..c1c4fef0b57 100644 --- a/code/modules/admin/admin_pda_message.dm +++ b/code/modules/admin/admin_pda_message.dm @@ -1,12 +1,6 @@ -///Allows an admin to send messages on PDA -/client/proc/message_pda() - set name = "PDA Message" - set category = "Admin.Events" - if(!holder || !check_rights(R_ADMIN)) - return - - holder.message_pda() +ADMIN_VERB(message_pda, R_ADMIN, "PDA Message", "Send a message to a user's PDA.", ADMIN_CATEGORY_EVENTS) + user.holder.message_pda() ///Opens up the PDA Message Panel /datum/admins/proc/message_pda() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 9ca2ea8ff7d..731de224f8d 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,503 +1,103 @@ -//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -//the procs are cause you can't put the comments in the GLOB var define -GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) -GLOBAL_PROTECT(admin_verbs_default) -/world/proc/AVerbsDefault() - return list( - /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ - /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/cmd_admin_say, /*admin-only ooc chat*/ - /client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/ - /client/proc/debugstatpanel, - /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ - /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/fix_air, /*resets air in designated radius to its default atmos composition*/ - /client/proc/hide_verbs, /*hides all our adminverbs*/ - /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ - /client/proc/mark_datum_mapview, - /client/proc/reestablish_db_connection, /*reattempt a connection to the database*/ - /client/proc/reload_admins, - /client/proc/requests, - /client/proc/secrets, - /client/proc/stop_sounds, - /client/proc/tag_datum_mapview, - - /client/proc/addbunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/ - /client/proc/cmd_loud_admin_say, /*admin-only chat except its annoying - SKYRAT EDIT ADDITION - ADMIN*/ - /client/proc/remove_liquid, /*SKYRAT EDIT ADDITION*/ - /client/proc/revokebunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/ - ) -GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) -GLOBAL_PROTECT(admin_verbs_admin) -/world/proc/AVerbsAdmin() - return list( -// Admin datums - /datum/admins/proc/access_news_network, /*allows access of newscasters*/ - /datum/admins/proc/announce, /*priority announce something to all clients.*/ - /datum/admins/proc/display_tags, - /datum/admins/proc/fishing_calculator, - /datum/admins/proc/known_alts_panel, - /datum/admins/proc/show_lag_switch_panel, - /datum/admins/proc/open_borgopanel, - /datum/admins/proc/open_shuttlepanel, /* Opens shuttle manipulator UI */ - /datum/admins/proc/paintings_manager, - /datum/admins/proc/set_admin_notice, /*announcement all clients see when joining the server.*/ - /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ - /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/ - /datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/ - /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ - /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ - /datum/admins/proc/trophy_manager, - /datum/admins/proc/view_all_circuits, - /datum/verbs/menu/Admin/verb/playerpanel, /* It isn't /datum/admin but it fits no less */ - /datum/admins/proc/change_shuttle_events, //allows us to change the shuttle events - /datum/admins/proc/reset_tram, //tram related admin actions -// Client procs - /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ - /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcom*/ - /client/proc/admin_disable_shuttle, /*allows us to disable the emergency shuttle admin-wise so that it cannot be called*/ - /client/proc/admin_enable_shuttle, /*undoes the above*/ - /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ - /client/proc/admin_hostile_environment, /*Allows admins to prevent the emergency shuttle from leaving, also lets admins clear hostile environments if theres one stuck*/ - /client/proc/centcom_podlauncher,/*Open a window to launch a Supplypod and configure it or it's contents*/ - /client/proc/check_ai_laws, /*shows AI and borg laws*/ - /client/proc/check_antagonists, /*shows all antags*/ - /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ - /client/proc/cmd_admin_check_player_exp, /* shows players by playtime */ - /client/proc/cmd_admin_create_centcom_report, - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ - /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/ - /client/proc/cmd_admin_headset_message, /*send a message to somebody through their headset as CentCom*/ - /client/proc/cmd_admin_local_narrate, /*sends text to all mobs within view of atom*/ - /client/proc/cmd_admin_subtle_message, /*send a message to somebody as a 'voice in their head'*/ - /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/ - /client/proc/cmd_change_command_name, - /client/proc/create_mob_worm, - /client/proc/fax_panel, /*send a paper to fax*/ - /client/proc/force_load_lazy_template, - /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ - /client/proc/Getmob, /*teleports a mob to our location*/ - /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ - /client/proc/getserverlogs, /*for accessing server logs*/ - /client/proc/getcurrentlogs, /*for accessing server logs for the current round*/ - /client/proc/ghost_pool_protection, /*opens a menu for toggling ghost roles*/ - /client/proc/invisimin, /*allows our mob to go invisible/visible*/ - /client/proc/jumptoarea, - /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ - /client/proc/jumptomob, /*allows us to jump to a specific mob*/ - /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ - /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ - /client/proc/list_bombers, - /client/proc/list_dna, - /client/proc/list_fingerprints, - /client/proc/list_law_changes, - /client/proc/list_signalers, - /client/proc/manage_sect, /*manage chaplain religious sect*/ - /client/proc/message_pda, /*send a message to somebody on PDA*/ - /client/proc/respawn_character, - /client/proc/show_manifest, - /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ - /client/proc/toggle_combo_hud, /* toggle display of the combination pizza antag and taco sci/med/eng hud */ - /client/proc/toggle_view_range, /*changes how far we can see*/ - /client/proc/cmd_admin_law_panel, - /client/proc/log_viewer_new, - /client/proc/player_ticket_history, - /datum/admins/proc/toggleaooc, /*Toggle Antag OOC - SKYRAT EDIT ADDITION*/ - /datum/admins/proc/toggledchat, /*SKYRAT EDIT ADDITION*/ - /datum/admins/proc/togglesooc, /*Toggle Security OOC - SKYRAT EDIT ADDITION*/ - /client/proc/admin_open_event_spawners_menu, /*EVENTS - SKYRAT EDIT ADDITION*/ - /client/proc/request_help, /*SKYRAT EDIT ADDITION*/ - /client/proc/view_opfors, /*OPFOR - SKYRAT EDIT ADDITION*/ - /client/proc/lorecaster_story_manager, /* SKYRAT EDIT ADDITION */ - ) -GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel, /client/proc/library_control)) -GLOBAL_PROTECT(admin_verbs_ban) -GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_direct_mob_sound, /client/proc/play_sound, /client/proc/set_round_end_sound)) -GLOBAL_PROTECT(admin_verbs_sounds) -GLOBAL_LIST_INIT(admin_verbs_fun, list( -// Admin datums - /datum/admins/proc/station_traits_panel, -// Client procs - /client/proc/admin_away, - /client/proc/add_marked_mob_ability, - /client/proc/admin_change_sec_level, - /client/proc/cinematic, - /client/proc/cmd_admin_add_freeform_ai_law, - /client/proc/cmd_admin_gib_self, - /client/proc/cmd_select_equipment, - /client/proc/command_report_footnote, - /client/proc/delay_command_report, - /client/proc/drop_bomb, - /client/proc/drop_dynex_bomb, - /client/proc/forceEvent, - /client/proc/mass_zombie_cure, - /client/proc/mass_zombie_infection, - /client/proc/object_say, - /client/proc/polymorph_all, - /client/proc/remove_marked_mob_ability, - /client/proc/reset_ooc, - /client/proc/run_weather, - /client/proc/set_dynex_scale, - /client/proc/set_ooc, - /client/proc/show_tip, - /client/proc/smite, - /client/proc/summon_ert, - /client/proc/toggle_nuke, - /client/proc/toggle_random_events, - /client/proc/admin_change_title_screen, /*SKYRAT EDIT ADDITION*/ - /client/proc/change_title_screen_html, /*SKYRAT EDIT ADDITION*/ - /client/proc/change_title_screen_notice, /*SKYRAT EDIT ADDITION*/ - /client/proc/fix_say, /*SKYRAT EDIT ADDITION*/ - /client/proc/one_click_antag, /*ONE CLICK ANTAG - SKYRAT EDIT ADDITION*/ - /client/proc/request_more_opfor, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_liquid, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_mob_spawner, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_pollution, /*SKYRAT EDIT ADDITION*/ - /client/proc/spawn_sunbeam, /*SKYRAT EDIT ADDITION*/ - /client/proc/intensity_credits_panel, /*SKYRAT EDIT ADDITION*/ - /client/proc/toggle_bsa, /*SKYRAT EDIT ADDITION*/ - /client/proc/try_stop_delam, /*SKYRAT EDIT ADDITION*/ - /client/proc/toggle_delam_suppression, /*SKYRAT EDIT ADDITION*/ - )) -GLOBAL_PROTECT(admin_verbs_fun) -GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character, /datum/admins/proc/beaker_panel)) -GLOBAL_PROTECT(admin_verbs_spawn) -GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer()) -GLOBAL_PROTECT(admin_verbs_server) -/world/proc/AVerbsServer() - return list( -// Admin datums - /datum/admins/proc/delay, - /datum/admins/proc/delay_round_end, - /datum/admins/proc/end_round, - /datum/admins/proc/restart, - /datum/admins/proc/startnow, - /datum/admins/proc/toggleaban, - /datum/admins/proc/toggleAI, -// Client procs - /client/proc/adminchangemap, - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ - /client/proc/cmd_debug_del_all, - /client/proc/cmd_debug_force_del_all, - /client/proc/cmd_debug_hard_del_all, - /client/proc/everyone_random, - /client/proc/forcerandomrotate, - /client/proc/generate_job_config, - /client/proc/panicbunker, - /client/proc/toggle_cdn, - /client/proc/toggle_hub, - /client/proc/toggle_interviews, - /client/proc/toggle_random_events, - ) -GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug()) -GLOBAL_PROTECT(admin_verbs_debug) -/world/proc/AVerbsDebug() - return list( - #ifdef TESTING /* Keep these at the top to not make the list look fugly */ - /client/proc/check_missing_sprites, - #endif - /proc/machine_upgrade, - /datum/admins/proc/create_or_modify_area, - /client/proc/adventure_manager, - /client/proc/atmos_control, - /client/proc/callproc, - /client/proc/callproc_datum, - /client/proc/check_bomb_impacts, - /client/proc/check_timer_sources, - /client/proc/clear_dynamic_transit, - /client/proc/cmd_admin_debug_traitor_objectives, - /client/proc/cmd_admin_delete, - /client/proc/cmd_admin_list_open_jobs, - /client/proc/cmd_admin_toggle_fov, - /client/proc/cmd_debug_del_all, - /client/proc/cmd_debug_force_del_all, - /client/proc/cmd_debug_hard_del_all, - /client/proc/cmd_debug_make_powernets, - /client/proc/cmd_debug_mob_lists, - /client/proc/cmd_display_del_log, - /client/proc/cmd_display_init_log, - /client/proc/cmd_display_overlay_log, - /client/proc/Debug2, - /client/proc/debug_controller, - /client/proc/debug_hallucination_weighted_list_per_type, - /client/proc/debug_huds, - /client/proc/debugNatureMapGenerator, - /client/proc/debug_plane_masters, - /client/proc/debug_spell_requirements, - /client/proc/display_sendmaps, - /client/proc/enable_mapping_verbs, - /client/proc/generate_wikichem_list, - /client/proc/get_dynex_power, /*debug verbs for dynex explosions.*/ - /client/proc/get_dynex_range, /*debug verbs for dynex explosions.*/ - /client/proc/jump_to_ruin, - /client/proc/load_circuit, - /client/proc/map_export, - /client/proc/map_template_load, - /client/proc/map_template_upload, - /client/proc/modify_goals, - /client/proc/open_colorblind_test, - /client/proc/open_lua_editor, - /client/proc/outfit_manager, - /client/proc/populate_world, - /client/proc/pump_random_event, - /client/proc/print_cards, - /client/proc/reestablish_tts_connection, - /client/proc/reload_cards, - /client/proc/reload_configuration, - /client/proc/restart_controller, - /client/proc/run_empty_query, - /client/proc/SDQL2_query, - /client/proc/set_dynex_scale, - /client/proc/spawn_debug_full_crew, - /client/proc/test_cardpack_distribution, - /client/proc/test_movable_UI, - /client/proc/test_snap_UI, - /client/proc/toggle_cdn, - /client/proc/toggle_medal_disable, - /client/proc/unload_ctf, - /client/proc/validate_cards, - /client/proc/validate_puzzgrids, - /client/proc/GeneratePipeSpritesheet, - /client/proc/view_runtimes, - /client/proc/stop_weather, - /client/proc/reload_interactions, /*SKYRAT EDIT ADDITION*/ - /client/proc/test_area_spawner, /*AUTOMAPPER - SKYRAT EDIT ADDITION*/ - /client/proc/toggle_liquid_debug, /*SKYRAT EDIT ADDITION*/ - ) -GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, GLOBAL_PROC_REF(release))) -GLOBAL_PROTECT(admin_verbs_possess) -/// SKYRAT EDIT BEGIN - Player Rank Manager - ORIGINAL: GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions)) -GLOBAL_LIST_INIT(admin_verbs_permissions, list( - /client/proc/edit_admin_permissions, - /client/proc/manage_player_ranks, - /client/proc/migrate_player_ranks, - )) -/// SKYRAT EDIT END -GLOBAL_PROTECT(admin_verbs_permissions) -GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/poll_panel)) -GLOBAL_PROTECT(admin_verbs_poll) - /client/proc/add_admin_verbs() - if(holder) - control_freak = CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS - - var/rights = holder.rank_flags() - add_verb(src, GLOB.admin_verbs_default) - if(rights & R_BUILD) - add_verb(src, /client/proc/togglebuildmodeself) - if(rights & R_ADMIN) - add_verb(src, GLOB.admin_verbs_admin) - if(rights & R_BAN) - add_verb(src, GLOB.admin_verbs_ban) - if(rights & R_FUN) - add_verb(src, GLOB.admin_verbs_fun) - if(rights & R_SERVER) - add_verb(src, GLOB.admin_verbs_server) - if(rights & R_DEBUG) - add_verb(src, GLOB.admin_verbs_debug) - if(rights & R_POSSESS) - add_verb(src, GLOB.admin_verbs_possess) - if(rights & R_PERMISSIONS) - add_verb(src, GLOB.admin_verbs_permissions) - if(rights & R_STEALTH) - add_verb(src, /client/proc/stealth) - if(rights & R_POLL) - add_verb(src, GLOB.admin_verbs_poll) - if(rights & R_SOUND) - add_verb(src, GLOB.admin_verbs_sounds) - if(CONFIG_GET(string/invoke_youtubedl)) - add_verb(src, /client/proc/play_web_sound) - if(rights & R_SPAWN) - add_verb(src, GLOB.admin_verbs_spawn) -#ifdef MAP_TEST - remove_verb(src, /client/proc/enable_mapping_verbs) - add_verb(src, list(/client/proc/disable_mapping_verbs, GLOB.admin_verbs_debug_mapping)) -#endif + control_freak = CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS + SSadmin_verbs.assosciate_admin(src) /client/proc/remove_admin_verbs() - remove_verb(src, list( - GLOB.admin_verbs_default, - /client/proc/togglebuildmodeself, - GLOB.admin_verbs_admin, - GLOB.admin_verbs_ban, - GLOB.admin_verbs_fun, - GLOB.admin_verbs_server, - GLOB.admin_verbs_debug, - GLOB.admin_verbs_possess, - GLOB.admin_verbs_permissions, - /client/proc/stealth, - GLOB.admin_verbs_poll, - GLOB.admin_verbs_sounds, - /client/proc/play_web_sound, - GLOB.admin_verbs_spawn, - /*Debug verbs added by "show debug verbs"*/ - GLOB.admin_verbs_debug_mapping, - /client/proc/disable_mapping_verbs, - /client/proc/readmin - )) + control_freak = initial(control_freak) + SSadmin_verbs.deassosciate_admin(src) -/client/proc/hide_verbs() - set name = "Adminverbs - Hide All" - set category = "Admin" +ADMIN_VERB(hide_verbs, R_NONE, "Adminverbs - Hide All", "Hide most of your admin verbs.", ADMIN_CATEGORY_MAIN) + user.remove_admin_verbs() + add_verb(user, /client/proc/show_verbs) - remove_admin_verbs() - add_verb(src, /client/proc/show_verbs) - - to_chat(src, span_interface("Almost all of your adminverbs have been hidden."), confidential = TRUE) + to_chat(user, span_interface("Almost all of your adminverbs have been hidden."), confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Hide All Adminverbs") - return -/client/proc/show_verbs() - set name = "Adminverbs - Show" - set category = "Admin" - - remove_verb(src, /client/proc/show_verbs) - add_admin_verbs() - - to_chat(src, span_interface("All of your adminverbs are now visible."), confidential = TRUE) - BLACKBOX_LOG_ADMIN_VERB("Show Adminverbs") - - - - -/client/proc/admin_ghost() - set category = "Admin.Game" - set name = "Aghost" - if(!holder) - return +ADMIN_VERB(admin_ghost, R_ADMIN, "AGhost", "Become a ghost without DNR.", ADMIN_CATEGORY_GAME) . = TRUE - if(isobserver(mob)) + if(isobserver(user.mob)) //re-enter - var/mob/dead/observer/ghost = mob + var/mob/dead/observer/ghost = user.mob if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body return FALSE if(!ghost.can_reenter_corpse) - log_admin("[key_name(usr)] re-entered corpse") - message_admins("[key_name_admin(usr)] re-entered corpse") + log_admin("[key_name(user)] re-entered corpse") + message_admins("[key_name_admin(user)] re-entered corpse") ghost.can_reenter_corpse = 1 //force re-entering even when otherwise not possible ghost.reenter_corpse() BLACKBOX_LOG_ADMIN_VERB("Admin Reenter") - else if(isnewplayer(mob)) - to_chat(src, "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.", confidential = TRUE) + else if(isnewplayer(user.mob)) + to_chat(user, "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.", confidential = TRUE) return FALSE else //ghostize - log_admin("[key_name(usr)] admin ghosted.") - message_admins("[key_name_admin(usr)] admin ghosted.") - var/mob/body = mob + log_admin("[key_name(user)] admin ghosted.") + message_admins("[key_name_admin(user)] admin ghosted.") + var/mob/body = user.mob body.ghostize(TRUE) - init_verbs() + user.init_verbs() if(body && !body.key) - body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus + body.key = "@[user.key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus BLACKBOX_LOG_ADMIN_VERB("Admin Ghost") -/client/proc/invisimin() - set name = "Invisimin" - set category = "Admin.Game" - set desc = "Toggles ghost-like invisibility (Don't abuse this)" - - if(isnull(holder) || isnull(mob)) +ADMIN_VERB(invisimin, R_ADMIN, "Invisimin", "Toggles ghost-like invisibility.", ADMIN_CATEGORY_GAME) + if(HAS_TRAIT(user.mob, TRAIT_INVISIMIN)) + REMOVE_TRAIT(user.mob, TRAIT_INVISIMIN, ADMIN_TRAIT) + user.mob.add_to_all_human_data_huds() + user.mob.RemoveInvisibility(INVISIBILITY_SOURCE_INVISIMIN) + to_chat(user, span_adminnotice(span_bold("Invisimin off. Invisibility reset.")), confidential = TRUE) return - if(HAS_TRAIT(mob, TRAIT_INVISIMIN)) - REMOVE_TRAIT(mob, TRAIT_INVISIMIN, ADMIN_TRAIT) - mob.add_to_all_human_data_huds() - mob.RemoveInvisibility(INVISIBILITY_SOURCE_INVISIMIN) - to_chat(mob, span_adminnotice(span_bold("Invisimin off. Invisibility reset.")), confidential = TRUE) - return + ADD_TRAIT(user.mob, TRAIT_INVISIMIN, ADMIN_TRAIT) + user.mob.remove_from_all_data_huds() + user.mob.SetInvisibility(INVISIBILITY_OBSERVER, INVISIBILITY_SOURCE_INVISIMIN, INVISIBILITY_PRIORITY_ADMIN) + to_chat(user, span_adminnotice(span_bold("Invisimin on. You are now as invisible as a ghost.")), confidential = TRUE) - ADD_TRAIT(mob, TRAIT_INVISIMIN, ADMIN_TRAIT) - mob.remove_from_all_data_huds() - mob.SetInvisibility(INVISIBILITY_OBSERVER, INVISIBILITY_SOURCE_INVISIMIN, INVISIBILITY_PRIORITY_ADMIN) - to_chat(mob, span_adminnotice(span_bold("Invisimin on. You are now as invisible as a ghost.")), confidential = TRUE) - -/client/proc/check_antagonists() - set name = "Check Antagonists" - set category = "Admin.Game" - if(holder) - holder.check_antagonists() - log_admin("[key_name(usr)] checked antagonists.") //for tsar~ - if(!isobserver(usr) && SSticker.HasRoundStarted()) - message_admins("[key_name_admin(usr)] checked antagonists.") +ADMIN_VERB(check_antagonists, R_ADMIN, "Check Antagonists", "See all antagonists for the round.", ADMIN_CATEGORY_GAME) + user.holder.check_antagonists() + log_admin("[key_name(user)] checked antagonists.") + if(!isobserver(user.mob) && SSticker.HasRoundStarted()) + message_admins("[key_name_admin(user)] checked antagonists.") BLACKBOX_LOG_ADMIN_VERB("Check Antagonists") -/client/proc/list_bombers() - set name = "List Bombers" - set category = "Admin.Game" - if(!holder) - return - holder.list_bombers() +ADMIN_VERB(list_bombers, R_ADMIN, "List Bombers", "Look at all bombs and their likely culprit.", ADMIN_CATEGORY_GAME) + user.holder.list_bombers() BLACKBOX_LOG_ADMIN_VERB("List Bombers") -/client/proc/list_signalers() - set name = "List Signalers" - set category = "Admin.Game" - if(!holder) - return - holder.list_signalers() +ADMIN_VERB(list_signalers, R_ADMIN, "List Signalers", "View all signalers.", ADMIN_CATEGORY_GAME) + user.holder.list_signalers() BLACKBOX_LOG_ADMIN_VERB("List Signalers") -/client/proc/list_law_changes() - set name = "List Law Changes" - set category = "Debug" - if(!holder) - return - holder.list_law_changes() +ADMIN_VERB(list_law_changes, R_ADMIN, "List Law Changes", "View all AI law changes.", ADMIN_CATEGORY_DEBUG) + user.holder.list_law_changes() BLACKBOX_LOG_ADMIN_VERB("List Law Changes") -/client/proc/show_manifest() - set name = "Show Manifest" - set category = "Debug" - if(!holder) - return - holder.show_manifest() +ADMIN_VERB(show_manifest, R_ADMIN, "Show Manifest", "View the shift's Manifest.", ADMIN_CATEGORY_DEBUG) + user.holder.show_manifest() BLACKBOX_LOG_ADMIN_VERB("Show Manifest") -/client/proc/list_dna() - set name = "List DNA" - set category = "Debug" - if(!holder) - return - holder.list_dna() +ADMIN_VERB(list_dna, R_ADMIN, "List DNA", "View DNA.", ADMIN_CATEGORY_DEBUG) + user.holder.list_dna() BLACKBOX_LOG_ADMIN_VERB("List DNA") -/client/proc/list_fingerprints() - set name = "List Fingerprints" - set category = "Debug" - if(!holder) - return - holder.list_fingerprints() +ADMIN_VERB(list_fingerprints, R_ADMIN, "List Fingerprints", "View fingerprints.", ADMIN_CATEGORY_DEBUG) + user.holder.list_fingerprints() BLACKBOX_LOG_ADMIN_VERB("List Fingerprints") -/client/proc/ban_panel() - set name = "Banning Panel" - set category = "Admin" - if(!check_rights(R_BAN)) - return - holder.ban_panel() +ADMIN_VERB(ban_panel, R_BAN, "Banning Panel", "Ban players here.", ADMIN_CATEGORY_MAIN) + user.holder.ban_panel() BLACKBOX_LOG_ADMIN_VERB("Banning Panel") -/client/proc/unban_panel() - set name = "Unbanning Panel" - set category = "Admin" - if(!check_rights(R_BAN)) - return - holder.unban_panel() +ADMIN_VERB(unban_panel, R_BAN, "Unbanning Panel", "Unban players here.", ADMIN_CATEGORY_MAIN) + user.holder.unban_panel() BLACKBOX_LOG_ADMIN_VERB("Unbanning Panel") -/client/proc/game_panel() - set name = "Game Panel" - set category = "Admin.Game" - if(holder) - holder.Game() +ADMIN_VERB(game_panel, R_ADMIN, "Game Panel", "Look at the state of the game.", ADMIN_CATEGORY_GAME) + user.holder.Game() BLACKBOX_LOG_ADMIN_VERB("Game Panel") -/client/proc/poll_panel() - set name = "Server Poll Management" - set category = "Admin" - if(!check_rights(R_POLL)) - return - holder.poll_list_panel() +ADMIN_VERB(poll_panel, R_POLL, "Server Poll Management", "View and manage polls.", ADMIN_CATEGORY_MAIN) + user.holder.poll_list_panel() BLACKBOX_LOG_ADMIN_VERB("Server Poll Management") /// Returns this client's stealthed ckey @@ -533,16 +133,11 @@ GLOBAL_PROTECT(admin_verbs_poll) /client/proc/createStealthKey() GLOB.stealthminID["[ckey]"] = generateStealthCkey() -/client/proc/stealth() - set category = "Admin" - set name = "Stealth Mode" - if(!holder) - return - - if(holder.fakekey) - disable_stealth_mode() +ADMIN_VERB(stealth, R_STEALTH, "Stealth Mode", "Toggle stealth.", ADMIN_CATEGORY_MAIN) + if(user.holder.fakekey) + user.disable_stealth_mode() else - enable_stealth_mode() + user.enable_stealth_mode() BLACKBOX_LOG_ADMIN_VERB("Stealth Mode") @@ -587,117 +182,86 @@ GLOBAL_PROTECT(admin_verbs_poll) #undef STEALTH_MODE_TRAIT -/client/proc/drop_bomb() - set category = "Admin.Fun" - set name = "Drop Bomb" - set desc = "Cause an explosion of varying strength at your location." - +ADMIN_VERB(drop_bomb, R_FUN, "Drop Bomb", "Cause an explosion of varying strength at your location", ADMIN_CATEGORY_FUN) var/list/choices = list("Small Bomb (1, 2, 3, 3)", "Medium Bomb (2, 3, 4, 4)", "Big Bomb (3, 5, 7, 5)", "Maxcap", "Custom Bomb") - var/choice = tgui_input_list(src, "What size explosion would you like to produce? NOTE: You can do all this rapidly and in an IC manner (using cruise missiles!) with the Config/Launch Supplypod verb. WARNING: These ignore the maxcap", "Drop Bomb", choices) + var/choice = tgui_input_list(user, "What size explosion would you like to produce? NOTE: You can do all this rapidly and in an IC manner (using cruise missiles!) with the Config/Launch Supplypod verb. WARNING: These ignore the maxcap", "Drop Bomb", choices) if(isnull(choice)) return - var/turf/epicenter = mob.loc + var/turf/epicenter = user.mob.loc switch(choice) if("Small Bomb (1, 2, 3, 3)") - explosion(epicenter, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 3, flash_range = 3, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) + explosion(epicenter, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 3, flash_range = 3, adminlog = TRUE, ignorecap = TRUE, explosion_cause = user.mob) if("Medium Bomb (2, 3, 4, 4)") - explosion(epicenter, devastation_range = 2, heavy_impact_range = 3, light_impact_range = 4, flash_range = 4, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) + explosion(epicenter, devastation_range = 2, heavy_impact_range = 3, light_impact_range = 4, flash_range = 4, adminlog = TRUE, ignorecap = TRUE, explosion_cause = user.mob) if("Big Bomb (3, 5, 7, 5)") - explosion(epicenter, devastation_range = 3, heavy_impact_range = 5, light_impact_range = 7, flash_range = 5, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) + explosion(epicenter, devastation_range = 3, heavy_impact_range = 5, light_impact_range = 7, flash_range = 5, adminlog = TRUE, ignorecap = TRUE, explosion_cause = user.mob) if("Maxcap") - explosion(epicenter, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) + explosion(epicenter, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE, adminlog = TRUE, ignorecap = TRUE, explosion_cause = user.mob) if("Custom Bomb") - var/range_devastation = input("Devastation range (in tiles):") as null|num + var/range_devastation = input(user, "Devastation range (in tiles):") as null|num if(range_devastation == null) return - var/range_heavy = input("Heavy impact range (in tiles):") as null|num + var/range_heavy = input(user, "Heavy impact range (in tiles):") as null|num if(range_heavy == null) return - var/range_light = input("Light impact range (in tiles):") as null|num + var/range_light = input(user, "Light impact range (in tiles):") as null|num if(range_light == null) return - var/range_flash = input("Flash range (in tiles):") as null|num + var/range_flash = input(user, "Flash range (in tiles):") as null|num if(range_flash == null) return if(range_devastation > GLOB.MAX_EX_DEVESTATION_RANGE || range_heavy > GLOB.MAX_EX_HEAVY_RANGE || range_light > GLOB.MAX_EX_LIGHT_RANGE || range_flash > GLOB.MAX_EX_FLASH_RANGE) - if(tgui_alert(usr, "Bomb is bigger than the maxcap. Continue?",,list("Yes","No")) != "Yes") + if(tgui_alert(user, "Bomb is bigger than the maxcap. Continue?",,list("Yes","No")) != "Yes") return - epicenter = mob.loc //We need to reupdate as they may have moved again - explosion(epicenter, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash, adminlog = TRUE, ignorecap = TRUE, explosion_cause = mob) - message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") - log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") + epicenter = get_turf(user.mob) //We need to reupdate as they may have moved again + explosion(epicenter, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash, adminlog = TRUE, ignorecap = TRUE, explosion_cause = user.mob) + message_admins("[ADMIN_LOOKUPFLW(user.mob)] creating an admin explosion at [epicenter.loc].") + log_admin("[key_name(user)] created an admin explosion at [epicenter.loc].") BLACKBOX_LOG_ADMIN_VERB("Drop Bomb") -/client/proc/drop_dynex_bomb() - set category = "Admin.Fun" - set name = "Drop DynEx Bomb" - set desc = "Cause an explosion of varying strength at your location." +ADMIN_VERB(drop_bomb_dynex, R_FUN, "Drop DynEx Bomb", "Cause an explosion of varying strength at your location.", ADMIN_CATEGORY_FUN) + var/ex_power = input(user, "Explosive Power:") as null|num + var/turf/epicenter = get_turf(user.mob) + if(!ex_power || !epicenter) + return + dyn_explosion(epicenter, ex_power) + message_admins("[ADMIN_LOOKUPFLW(user.mob)] creating an admin explosion at [epicenter.loc].") + log_admin("[key_name(user)] created an admin explosion at [epicenter.loc].") + BLACKBOX_LOG_ADMIN_VERB("Drop Dynamic Bomb") - var/ex_power = input("Explosive Power:") as null|num - var/turf/epicenter = mob.loc - if(ex_power && epicenter) - dyn_explosion(epicenter, ex_power) - message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [epicenter.loc].") - log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].") - BLACKBOX_LOG_ADMIN_VERB("Drop Dynamic Bomb") - -/client/proc/get_dynex_range() - set category = "Debug" - set name = "Get DynEx Range" - set desc = "Get the estimated range of a bomb, using explosive power." - - var/ex_power = input("Explosive Power:") as null|num +ADMIN_VERB(get_dynex_range, R_FUN, "Get DynEx Range", "Get the estimated range of a bomb using explosive power.", ADMIN_CATEGORY_DEBUG) + var/ex_power = input(user, "Explosive Power:") as null|num if (isnull(ex_power)) return var/range = round((2 * ex_power)**GLOB.DYN_EX_SCALE) - to_chat(usr, "Estimated Explosive Range: (Devastation: [round(range*0.25)], Heavy: [round(range*0.5)], Light: [round(range)])", confidential = TRUE) + to_chat(user, "Estimated Explosive Range: (Devastation: [round(range*0.25)], Heavy: [round(range*0.5)], Light: [round(range)])", confidential = TRUE) -/client/proc/get_dynex_power() - set category = "Debug" - set name = "Get DynEx Power" - set desc = "Get the estimated required power of a bomb, to reach a specific range." - - var/ex_range = input("Light Explosion Range:") as null|num +ADMIN_VERB(get_dynex_power, R_FUN, "Get DynEx Power", "Get the estimated required power of a bomb to reach the given range.", ADMIN_CATEGORY_DEBUG) + var/ex_range = input(user, "Light Explosion Range:") as null|num if (isnull(ex_range)) return var/power = (0.5 * ex_range)**(1/GLOB.DYN_EX_SCALE) - to_chat(usr, "Estimated Explosive Power: [power]", confidential = TRUE) + to_chat(user, "Estimated Explosive Power: [power]", confidential = TRUE) -/client/proc/set_dynex_scale() - set category = "Debug" - set name = "Set DynEx Scale" - set desc = "Set the scale multiplier of dynex explosions. The default is 0.5." - - var/ex_scale = input("New DynEx Scale:") as null|num +ADMIN_VERB(set_dynex_scale, R_FUN, "Set DynEx Scale", "Set the scale multiplier on dynex explosions. Default 0.5.", ADMIN_CATEGORY_DEBUG) + var/ex_scale = input(user, "New DynEx Scale:") as null|num if(!ex_scale) return GLOB.DYN_EX_SCALE = ex_scale - log_admin("[key_name(usr)] has modified Dynamic Explosion Scale: [ex_scale]") - message_admins("[key_name_admin(usr)] has modified Dynamic Explosion Scale: [ex_scale]") + log_admin("[key_name(user)] has modified Dynamic Explosion Scale: [ex_scale]") + message_admins("[key_name_admin(user)] has modified Dynamic Explosion Scale: [ex_scale]") -/client/proc/atmos_control() - set name = "Atmos Control Panel" - set category = "Debug" - if(!check_rights(R_DEBUG)) - return - SSair.ui_interact(mob) +ADMIN_VERB(atmos_control, R_DEBUG|R_SERVER, "Atmos Control Panel", "Open the atmospherics control panel.", ADMIN_CATEGORY_DEBUG) + SSair.ui_interact(user.mob) -/client/proc/reload_cards() - set name = "Reload Cards" - set category = "Debug" - if(!check_rights(R_DEBUG)) - return +ADMIN_VERB(reload_cards, R_DEBUG, "Reload Cards", "Reload all TCG cards.", ADMIN_CATEGORY_DEBUG) if(!SStrading_card_game.loaded) message_admins("The card subsystem is not currently loaded") return SStrading_card_game.reloadAllCardFiles() -/client/proc/validate_cards() - set name = "Validate Cards" - set category = "Debug" - if(!check_rights(R_DEBUG)) - return +ADMIN_VERB(validate_cards, R_DEBUG, "Validate Cards", "Validate the card settings.", ADMIN_CATEGORY_DEBUG) if(!SStrading_card_game.loaded) message_admins("The card subsystem is not currently loaded") return @@ -708,66 +272,55 @@ GLOBAL_PROTECT(admin_verbs_poll) else message_admins("No errors found in card rarities or overrides.") -/client/proc/test_cardpack_distribution() - set name = "Test Cardpack Distribution" - set category = "Debug" - if(!check_rights(R_DEBUG)) - return +ADMIN_VERB(test_cardpack_distribution, R_DEBUG, "Test Cardpack Distribution", "Test the distribution of a card pack.", ADMIN_CATEGORY_DEBUG) if(!SStrading_card_game.loaded) message_admins("The card subsystem is not currently loaded") return - var/pack = tgui_input_list(usr, "Which pack should we test?", "You fucked it didn't you", sort_list(SStrading_card_game.card_packs)) + var/pack = tgui_input_list(user, "Which pack should we test?", "You fucked it didn't you", sort_list(SStrading_card_game.card_packs)) if(!pack) return - var/batch_count = tgui_input_number(usr, "How many times should we open it?", "Don't worry, I understand") - var/batch_size = tgui_input_number(usr, "How many cards per batch?", "I hope you remember to check the validation") - var/guar = tgui_input_number(usr, "Should we use the pack's guaranteed rarity? If so, how many?", "We've all been there. Man you should have seen the old system") - + var/batch_count = tgui_input_number(user, "How many times should we open it?", "Don't worry, I understand") + var/batch_size = tgui_input_number(user, "How many cards per batch?", "I hope you remember to check the validation") + var/guar = tgui_input_number(user, "Should we use the pack's guaranteed rarity? If so, how many?", "We've all been there. Man you should have seen the old system") SStrading_card_game.check_card_distribution(pack, batch_size, batch_count, guar) -/client/proc/print_cards() - set name = "Print Cards" - set category = "Debug" +ADMIN_VERB(print_cards, R_DEBUG, "Print Cards", "Print all cards to chat.", ADMIN_CATEGORY_DEBUG) SStrading_card_game.printAllCards() -/client/proc/give_mob_action(mob/ability_recipient in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Give Mob Action" - set desc = "Gives a mob ability to a mob." - +ADMIN_VERB(give_mob_action, R_FUN, "Give Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/ability_recipient) var/static/list/all_mob_actions = sort_list(subtypesof(/datum/action/cooldown/mob_cooldown), GLOBAL_PROC_REF(cmp_typepaths_asc)) var/static/list/actions_by_name = list() if (!length(actions_by_name)) for (var/datum/action/cooldown/mob_cooldown as anything in all_mob_actions) actions_by_name["[initial(mob_cooldown.name)] ([mob_cooldown])"] = mob_cooldown - var/ability = tgui_input_list(usr, "Choose an ability", "Ability", actions_by_name) + var/ability = tgui_input_list(user, "Choose an ability", "Ability", actions_by_name) if(isnull(ability)) return var/ability_type = actions_by_name[ability] var/datum/action/cooldown/mob_cooldown/add_ability - var/make_sequence = tgui_alert(usr, "Would you like this action to be a sequence of multiple abilities?", "Sequence Ability", list("Yes", "No")) + var/make_sequence = tgui_alert(user, "Would you like this action to be a sequence of multiple abilities?", "Sequence Ability", list("Yes", "No")) if(make_sequence == "Yes") add_ability = new /datum/action/cooldown/mob_cooldown(ability_recipient) add_ability.sequence_actions = list() while(!isnull(ability_type)) - var/ability_delay = tgui_input_number(usr, "Enter the delay in seconds before the next ability in the sequence is used", "Ability Delay", 2) + var/ability_delay = tgui_input_number(user, "Enter the delay in seconds before the next ability in the sequence is used", "Ability Delay", 2) if(isnull(ability_delay) || ability_delay < 0) ability_delay = 0 add_ability.sequence_actions[ability_type] = ability_delay * 1 SECONDS - ability = tgui_input_list(usr, "Choose a new sequence ability", "Sequence Ability", actions_by_name) + ability = tgui_input_list(user, "Choose a new sequence ability", "Sequence Ability", actions_by_name) ability_type = actions_by_name[ability] - var/ability_cooldown = tgui_input_number(usr, "Enter the sequence abilities cooldown in seconds", "Ability Cooldown", 2) + var/ability_cooldown = tgui_input_number(user, "Enter the sequence abilities cooldown in seconds", "Ability Cooldown", 2) if(isnull(ability_cooldown) || ability_cooldown < 0) ability_cooldown = 2 add_ability.cooldown_time = ability_cooldown * 1 SECONDS - var/ability_melee_cooldown = tgui_input_number(usr, "Enter the abilities melee cooldown in seconds", "Melee Cooldown", 2) + var/ability_melee_cooldown = tgui_input_number(user, "Enter the abilities melee cooldown in seconds", "Melee Cooldown", 2) if(isnull(ability_melee_cooldown) || ability_melee_cooldown < 0) ability_melee_cooldown = 2 add_ability.melee_cooldown_time = ability_melee_cooldown * 1 SECONDS - add_ability.name = tgui_input_text(usr, "Choose ability name", "Ability name", "Generic Ability") + add_ability.name = tgui_input_text(user, "Choose ability name", "Ability name", "Generic Ability") add_ability.create_sequence_actions() else add_ability = new ability_type(ability_recipient) @@ -776,15 +329,11 @@ GLOBAL_PROTECT(admin_verbs_poll) return add_ability.Grant(ability_recipient) - message_admins("[key_name_admin(usr)] added mob ability [ability_type] to mob [ability_recipient].") - log_admin("[key_name(usr)] added mob ability [ability_type] to mob [ability_recipient].") + message_admins("[key_name_admin(user)] added mob ability [ability_type] to mob [ability_recipient].") + log_admin("[key_name(user)] added mob ability [ability_type] to mob [ability_recipient].") BLACKBOX_LOG_ADMIN_VERB("Add Mob Ability") -/client/proc/remove_mob_action(mob/removal_target in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Remove Mob Action" - set desc = "Remove a special ability from the selected mob." - +ADMIN_VERB(remove_mob_action, R_FUN, "Remove Mob Action", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) var/list/target_abilities = list() for(var/datum/action/cooldown/mob_cooldown/ability in removal_target.actions) target_abilities[ability.name] = ability @@ -792,7 +341,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!length(target_abilities)) return - var/chosen_ability = tgui_input_list(usr, "Choose the spell to remove from [removal_target]", "Depower", sort_list(target_abilities)) + var/chosen_ability = tgui_input_list(user, "Choose the spell to remove from [removal_target]", "Depower", sort_list(target_abilities)) if(isnull(chosen_ability)) return var/datum/action/cooldown/mob_cooldown/to_remove = target_abilities[chosen_ability] @@ -800,20 +349,16 @@ GLOBAL_PROTECT(admin_verbs_poll) return qdel(to_remove) - log_admin("[key_name(usr)] removed the ability [chosen_ability] from [key_name(removal_target)].") - message_admins("[key_name_admin(usr)] removed the ability [chosen_ability] from [key_name_admin(removal_target)].") + log_admin("[key_name(user)] removed the ability [chosen_ability] from [key_name(removal_target)].") + message_admins("[key_name_admin(user)] removed the ability [chosen_ability] from [key_name_admin(removal_target)].") BLACKBOX_LOG_ADMIN_VERB("Remove Mob Ability") -/client/proc/give_spell(mob/spell_recipient in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Give Spell" - set desc = "Gives a spell to a mob." - - var/which = tgui_alert(usr, "Chose by name or by type path?", "Chose option", list("Name", "Typepath")) +ADMIN_VERB(give_spell, R_FUN, "Give Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/spell_recipient) + var/which = tgui_alert(user, "Chose by name or by type path?", "Chose option", list("Name", "Typepath")) if(!which) return if(QDELETED(spell_recipient)) - to_chat(usr, span_warning("The intended spell recipient no longer exists.")) + to_chat(user, span_warning("The intended spell recipient no longer exists.")) return var/list/spell_list = list() @@ -827,22 +372,22 @@ GLOBAL_PROTECT(admin_verbs_poll) else spell_list += to_add - var/chosen_spell = tgui_input_list(usr, "Choose the spell to give to [spell_recipient]", "ABRAKADABRA", sort_list(spell_list)) + var/chosen_spell = tgui_input_list(user, "Choose the spell to give to [spell_recipient]", "ABRAKADABRA", sort_list(spell_list)) if(isnull(chosen_spell)) return var/datum/action/cooldown/spell/spell_path = which == "Typepath" ? chosen_spell : spell_list[chosen_spell] if(!ispath(spell_path)) return - var/robeless = (tgui_alert(usr, "Would you like to force this spell to be robeless?", "Robeless Casting?", list("Force Robeless", "Use Spell Setting")) == "Force Robeless") + var/robeless = (tgui_alert(user, "Would you like to force this spell to be robeless?", "Robeless Casting?", list("Force Robeless", "Use Spell Setting")) == "Force Robeless") if(QDELETED(spell_recipient)) - to_chat(usr, span_warning("The intended spell recipient no longer exists.")) + to_chat(user, span_warning("The intended spell recipient no longer exists.")) return BLACKBOX_LOG_ADMIN_VERB("Give Spell") - log_admin("[key_name(usr)] gave [key_name(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") - message_admins("[key_name_admin(usr)] gave [key_name_admin(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") + log_admin("[key_name(user)] gave [key_name(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") + message_admins("[key_name_admin(user)] gave [key_name_admin(spell_recipient)] the spell [chosen_spell][robeless ? " (Forced robeless)" : ""].") var/datum/action/cooldown/spell/new_spell = new spell_path(spell_recipient.mind || spell_recipient) @@ -852,14 +397,10 @@ GLOBAL_PROTECT(admin_verbs_poll) new_spell.Grant(spell_recipient) if(!spell_recipient.mind) - to_chat(usr, span_userdanger("Spells given to mindless mobs will belong to the mob and not their mind, \ + to_chat(user, span_userdanger("Spells given to mindless mobs will belong to the mob and not their mind, \ and as such will not be transferred if their mind changes body (Such as from Mindswap).")) -/client/proc/remove_spell(mob/removal_target in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Remove Spell" - set desc = "Remove a spell from the selected mob." - +ADMIN_VERB(remove_spell, R_FUN, "Remove Spell", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/removal_target) var/list/target_spell_list = list() for(var/datum/action/cooldown/spell/spell in removal_target.actions) target_spell_list[spell.name] = spell @@ -867,7 +408,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(!length(target_spell_list)) return - var/chosen_spell = tgui_input_list(usr, "Choose the spell to remove from [removal_target]", "ABRAKADABRA", sort_list(target_spell_list)) + var/chosen_spell = tgui_input_list(user, "Choose the spell to remove from [removal_target]", "ABRAKADABRA", sort_list(target_spell_list)) if(isnull(chosen_spell)) return var/datum/action/cooldown/spell/to_remove = target_spell_list[chosen_spell] @@ -875,58 +416,39 @@ GLOBAL_PROTECT(admin_verbs_poll) return qdel(to_remove) - log_admin("[key_name(usr)] removed the spell [chosen_spell] from [key_name(removal_target)].") - message_admins("[key_name_admin(usr)] removed the spell [chosen_spell] from [key_name_admin(removal_target)].") + log_admin("[key_name(user)] removed the spell [chosen_spell] from [key_name(removal_target)].") + message_admins("[key_name_admin(user)] removed the spell [chosen_spell] from [key_name_admin(removal_target)].") BLACKBOX_LOG_ADMIN_VERB("Remove Spell") -/client/proc/give_disease(mob/living/T in GLOB.mob_living_list) - set category = "Admin.Fun" - set name = "Give Disease" - set desc = "Gives a Disease to a mob." - if(!istype(T)) - to_chat(src, span_notice("You can only give a disease to a mob of type /mob/living."), confidential = TRUE) - return - var/datum/disease/D = input("Choose the disease to give to that guy", "ACHOO") as null|anything in sort_list(SSdisease.diseases, GLOBAL_PROC_REF(cmp_typepaths_asc)) +ADMIN_VERB(give_disease, R_FUN, "Give Disease", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/victim) + var/datum/disease/D = input(user, "Choose the disease to give to that guy", "ACHOO") as null|anything in sort_list(SSdisease.diseases, GLOBAL_PROC_REF(cmp_typepaths_asc)) if(!D) return - T.ForceContractDisease(new D, FALSE, TRUE) + victim.ForceContractDisease(new D, FALSE, TRUE) BLACKBOX_LOG_ADMIN_VERB("Give Disease") - log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].") - message_admins(span_adminnotice("[key_name_admin(usr)] gave [key_name_admin(T)] the disease [D].")) + log_admin("[key_name(user)] gave [key_name(victim)] the disease [D].") + message_admins(span_adminnotice("[key_name_admin(user)] gave [key_name_admin(victim)] the disease [D].")) -/client/proc/object_say(obj/O in world) - set category = "Admin.Events" - set name = "OSay" - set desc = "Makes an object say something." - var/message = tgui_input_text(usr, "What do you want the message to be?", "Make Sound", encode = FALSE) +ADMIN_VERB_AND_CONTEXT_MENU(object_say, R_FUN, "OSay", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, obj/speaker in world) + var/message = tgui_input_text(user, "What do you want the message to be?", "Make Sound", encode = FALSE) if(!message) return - O.say(message, sanitize = FALSE) - log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"") - message_admins(span_adminnotice("[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"")) + speaker.say(message, sanitize = FALSE) + log_admin("[key_name(user)] made [speaker] at [AREACOORD(speaker)] say \"[message]\"") + message_admins(span_adminnotice("[key_name_admin(user)] made [speaker] at [AREACOORD(speaker)]. say \"[message]\"")) BLACKBOX_LOG_ADMIN_VERB("Object Say") -/client/proc/togglebuildmodeself() - set name = "Toggle Build Mode Self" - set category = "Admin.Events" - if (!(holder.rank_flags() & R_BUILD)) - return - if(src.mob) - togglebuildmode(src.mob) + +ADMIN_VERB(build_mode_self, R_BUILD, "Toggle Build Mode Self", "Toggle build mode for yourself.", ADMIN_CATEGORY_EVENTS) + togglebuildmode(user.mob) // why is this a global proc??? BLACKBOX_LOG_ADMIN_VERB("Toggle Build Mode") -/client/proc/check_ai_laws() - set name = "Check AI Laws" - set category = "Admin.Game" - if(holder) - src.holder.output_ai_laws() - -/client/proc/manage_sect() - set name = "Manage Religious Sect" - set category = "Admin.Game" +ADMIN_VERB(check_ai_laws, R_ADMIN, "Check AI Laws", "View the current AI laws.", ADMIN_CATEGORY_GAME) + user.holder.output_ai_laws() +ADMIN_VERB(manage_sect, R_ADMIN, "Manage Religious Sect", "Manages the chaplain's religion.", ADMIN_CATEGORY_GAME) if (!isnull(GLOB.religious_sect)) var/you_sure = tgui_alert( - usr, + user, "The Chaplain has already chosen [GLOB.religious_sect.name], override their selection?", "Replace God?", list("Yes", "Cancel"), @@ -939,7 +461,7 @@ GLOBAL_PROTECT(admin_verbs_poll) choices["nothing"] = null for(var/datum/religion_sect/sect as anything in subtypesof(/datum/religion_sect)) choices[initial(sect.name)] = sect - var/choice = tgui_input_list(usr, "Set new Chaplain sect", "God Picker", choices) + var/choice = tgui_input_list(user, "Set new Chaplain sect", "God Picker", choices) if(isnull(choice)) return if(choice == "nothing") @@ -947,122 +469,51 @@ GLOBAL_PROTECT(admin_verbs_poll) return set_new_religious_sect(choices[choice], reset_existing = TRUE) -/client/proc/deadmin() - set name = "Deadmin" - set category = "Admin" - set desc = "Shed your admin powers." - - if(!holder) - return - - holder.deactivate() - - to_chat(src, span_interface("You are now a normal player.")) - log_admin("[src] deadminned themselves.") - message_admins("[src] deadminned themselves.") +ADMIN_VERB(deadmin, R_NONE, "DeAdmin", "Shed your admin powers.", ADMIN_CATEGORY_MAIN) + user.holder.deactivate() + to_chat(user, span_interface("You are now a normal player.")) + log_admin("[key_name(user)] deadminned themselves.") + message_admins("[key_name_admin(user)] deadminned themselves.") BLACKBOX_LOG_ADMIN_VERB("Deadmin") -/client/proc/readmin() - set name = "Readmin" - set category = "Admin" - set desc = "Regain your admin powers." - - var/datum/admins/A = GLOB.deadmins[ckey] - - if(!A) - A = GLOB.admin_datums[ckey] - if (!A) - var/msg = " is trying to readmin but they have no deadmin entry" - message_admins("[key_name_admin(src)][msg]") - log_admin_private("[key_name(src)][msg]") - return - - A.associate(src) - - if (!holder) - return //This can happen if an admin attempts to vv themself into somebody elses's deadmin datum by getting ref via brute force - - to_chat(src, span_interface("You are now an admin."), confidential = TRUE) - message_admins("[src] re-adminned themselves.") - log_admin("[src] re-adminned themselves.") - BLACKBOX_LOG_ADMIN_VERB("Readmin") - -/client/proc/populate_world(amount = 50) - set name = "Populate World" - set category = "Debug" - set desc = "(\"Amount of mobs to create\") Populate the world with test mobs." - +ADMIN_VERB(populate_world, R_DEBUG, "Populate World", "Populate the world with test mobs.", ADMIN_CATEGORY_DEBUG, amount = 50 as num) for (var/i in 1 to amount) var/turf/tile = get_safe_random_station_turf() var/mob/living/carbon/human/hooman = new(tile) hooman.equipOutfit(pick(subtypesof(/datum/outfit))) testing("Spawned test mob at [get_area_name(tile, TRUE)] ([tile.x],[tile.y],[tile.z])") -/client/proc/toggle_AI_interact() - set name = "Toggle Admin AI Interact" - set category = "Admin.Game" - set desc = "Allows you to interact with most machines as an AI would as a ghost" +ADMIN_VERB(toggle_ai_interact, R_ADMIN, "Toggle Admin AI Interact", "Allows you to interact with most machines as an AI would as a ghost.", ADMIN_CATEGORY_GAME) + user.AI_Interact = !user.AI_Interact + if(user.mob && isAdminGhostAI(user.mob)) + user.mob.has_unlimited_silicon_privilege = user.AI_Interact - AI_Interact = !AI_Interact - if(mob && isAdminGhostAI(mob)) - mob.has_unlimited_silicon_privilege = AI_Interact + log_admin("[key_name(user)] has [user.AI_Interact ? "activated" : "deactivated"] Admin AI Interact") + message_admins("[key_name_admin(user)] has [user.AI_Interact ? "activated" : "deactivated"] their AI interaction") - log_admin("[key_name(usr)] has [AI_Interact ? "activated" : "deactivated"] Admin AI Interact") - message_admins("[key_name_admin(usr)] has [AI_Interact ? "activated" : "deactivated"] their AI interaction") +ADMIN_VERB(debug_statpanel, R_DEBUG, "Debug Stat Panel", "Toggles local debug of the stat panel", ADMIN_CATEGORY_DEBUG) + user.stat_panel.send_message("create_debug") -/client/proc/debugstatpanel() - set name = "Debug Stat Panel" - set category = "Debug" - - src.stat_panel.send_message("create_debug") - -/client/proc/admin_2fa_verify() - set name = "Verify Admin" - set category = "Admin" - - var/datum/admins/admin = GLOB.admin_datums[ckey] - admin?.associate(src) - -/client/proc/display_sendmaps() - set name = "Send Maps Profile" - set category = "Debug" - - src << link("?debug=profile&type=sendmaps&window=test") - -/** - * Debug verb that spawns human crewmembers - * of each job type, gives them a mind and assigns the role, - * and injects them into the manifest, as if they were a "player". - * - * This spawns humans with minds and jobs, but does NOT make them 'players'. - * They're all clientles mobs with minds / jobs. - */ -/client/proc/spawn_debug_full_crew() - set name = "Spawn Debug Full Crew" - set desc = "Creates a full crew for the station, filling the datacore and assigning them all minds / jobs. Don't do this on live" - set category = "Debug" - - if(!check_rights(R_DEBUG)) - return - - var/mob/admin = usr +ADMIN_VERB(display_sendmaps, R_DEBUG, "Send Maps Profile", "View the profile.", ADMIN_CATEGORY_DEBUG) + user << link("?debug=profile&type=sendmaps&window=test") +ADMIN_VERB(spawn_debug_full_crew, R_DEBUG, "Spawn Debug Full Crew", "Creates a full crew for the station, flling datacore and assigning minds and jobs.", ADMIN_CATEGORY_DEBUG) if(SSticker.current_state != GAME_STATE_PLAYING) - to_chat(admin, "You should only be using this after a round has setup and started.") + to_chat(user, "You should only be using this after a round has setup and started.") return // Two input checks here to make sure people are certain when they're using this. - if(tgui_alert(admin, "This command will create a bunch of dummy crewmembers with minds, job, and datacore entries, which will take a while and fill the manifest.", "Spawn Crew", list("Yes", "Cancel")) != "Yes") + if(tgui_alert(user, "This command will create a bunch of dummy crewmembers with minds, job, and datacore entries, which will take a while and fill the manifest.", "Spawn Crew", list("Yes", "Cancel")) != "Yes") return - if(tgui_alert(admin, "I sure hope you aren't doing this on live. Are you sure?", "Spawn Crew (Be certain)", list("Yes", "Cancel")) != "Yes") + if(tgui_alert(user, "I sure hope you aren't doing this on live. Are you sure?", "Spawn Crew (Be certain)", list("Yes", "Cancel")) != "Yes") return // Find the observer spawn, so we have a place to dump the dummies. var/obj/effect/landmark/observer_start/observer_point = locate(/obj/effect/landmark/observer_start) in GLOB.landmarks_list var/turf/destination = get_turf(observer_point) if(!destination) - to_chat(admin, "Failed to find the observer spawn to send the dummies.") + to_chat(user, "Failed to find the observer spawn to send the dummies.") return // Okay, now go through all nameable occupations. @@ -1084,7 +535,7 @@ GLOBAL_PROTECT(admin_verbs_poll) // Assign the rank to the new player dummy. if(!SSjob.AssignRole(new_guy, job, do_eligibility_checks = FALSE)) qdel(new_guy) - to_chat(admin, "[rank] wasn't able to be spawned.") + to_chat(user, "[rank] wasn't able to be spawned.") continue // It's got a job, spawn in a human and shove it in the human. @@ -1105,13 +556,9 @@ GLOBAL_PROTECT(admin_verbs_poll) number_made++ CHECK_TICK - to_chat(admin, "[number_made] crewmembers have been created.") - -/// Debug verb for seeing at a glance what all spells have as set requirements -/client/proc/debug_spell_requirements() - set name = "Show Spell Requirements" - set category = "Debug" + to_chat(user, "[number_made] crewmembers have been created.") +ADMIN_VERB(debug_spell_requirements, R_DEBUG, "Debug Spell Requirements", "View all spells and their requirements.", ADMIN_CATEGORY_DEBUG) var/header = "Name Requirements" var/all_requirements = list() for(var/datum/action/cooldown/spell/spell as anything in typesof(/datum/action/cooldown/spell)) @@ -1139,69 +586,52 @@ GLOBAL_PROTECT(admin_verbs_poll) var/page_style = "" var/page_contents = "[page_style][header][jointext(all_requirements, "")]
" - var/datum/browser/popup = new(mob, "spellreqs", "Spell Requirements", 600, 400) + var/datum/browser/popup = new(user.mob, "spellreqs", "Spell Requirements", 600, 400) popup.set_content(page_contents) popup.open() -/client/proc/force_load_lazy_template() - set name = "Load/Jump Lazy Template" - set category = "Admin.Events" - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(load_lazy_template, R_ADMIN, "Load/Jump Lazy Template", "Loads a lazy template and/or jumps to it.", ADMIN_CATEGORY_EVENTS) var/list/choices = LAZY_TEMPLATE_KEY_LIST_ALL() - var/choice = tgui_input_list(usr, "Key?", "Lazy Loader", choices) + var/choice = tgui_input_list(user, "Key?", "Lazy Loader", choices) if(!choice) return choice = choices[choice] if(!choice) - to_chat(usr, span_warning("No template with that key found, report this!")) + to_chat(user, span_warning("No template with that key found, report this!")) return var/already_loaded = LAZYACCESS(SSmapping.loaded_lazy_templates, choice) var/force_load = FALSE - if(already_loaded && (tgui_alert(usr, "Template already loaded.", "", list("Jump", "Load Again")) == "Load Again")) + if(already_loaded && (tgui_alert(user, "Template already loaded.", "", list("Jump", "Load Again")) == "Load Again")) force_load = TRUE var/datum/turf_reservation/reservation = SSmapping.lazy_load_template(choice, force = force_load) if(!reservation) - to_chat(usr, span_boldwarning("Failed to load template!")) + to_chat(user, span_boldwarning("Failed to load template!")) return - if(!isobserver(usr)) - admin_ghost() - usr.forceMove(reservation.bottom_left_turfs[1]) + if(!isobserver(user.mob)) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) + user.mob.forceMove(reservation.bottom_left_turfs[1]) - message_admins("[key_name_admin(usr)] has loaded lazy template '[choice]'") - to_chat(usr, span_boldnicegreen("Template loaded, you have been moved to the bottom left of the reservation.")) + message_admins("[key_name_admin(user)] has loaded lazy template '[choice]'") + to_chat(user, span_boldnicegreen("Template loaded, you have been moved to the bottom left of the reservation.")) -/client/proc/library_control() - set name = "Library Management" - set category = "Admin" - if(!check_rights(R_BAN)) - return - - if(!holder.library_manager) - holder.library_manager = new() - holder.library_manager.ui_interact(usr) +ADMIN_VERB(library_control, R_BAN, "Library Management", "List and manage the Library.", ADMIN_CATEGORY_MAIN) + if(!user.holder.library_manager) + user.holder.library_manager = new + user.holder.library_manager.ui_interact(user.mob) BLACKBOX_LOG_ADMIN_VERB("Library Management") -/client/proc/create_mob_worm() - set category = "Admin.Fun" - set name = "Create Mob Worm" - set desc = "Attached a linked list of mobs to a marked mob" - if (!check_rights(R_FUN)) +ADMIN_VERB(create_mob_worm, R_FUN, "Create Mob Worm", "Attach a linked list of mobs to your marked mob.", ADMIN_CATEGORY_FUN) + if(!isliving(user.holder.marked_datum)) + to_chat(user, span_warning("Error: Please mark a mob to attach mobs to.")) return - if(isnull(holder)) - return - if(!isliving(holder.marked_datum)) - to_chat(usr, span_warning("Error: Please mark a mob to attach mobs to.")) - return - var/mob/living/head = holder.marked_datum + var/mob/living/head = user.holder.marked_datum var/attempted_target_path = tgui_input_text( - usr, + user, "Enter typepath of a mob you'd like to make your chain from.", "Typepath", "[/mob/living/basic/pet/dog/corgi/ian]", @@ -1216,7 +646,7 @@ GLOBAL_PROTECT(admin_verbs_poll) if(isnull(desired_mob) || !ispath(desired_mob) || QDELETED(head)) return //The user pressed "Cancel" - var/amount = tgui_input_number(usr, "How long should our tail be?", "Worm Configurator", default = 3, min_value = 1) + var/amount = tgui_input_number(user, "How long should our tail be?", "Worm Configurator", default = 3, min_value = 1) if (isnull(amount) || amount < 1 || QDELETED(head)) return head.AddComponent(/datum/component/mob_chain) diff --git a/code/modules/admin/adminmenu.dm b/code/modules/admin/adminmenu.dm deleted file mode 100644 index 9a93856aa4e..00000000000 --- a/code/modules/admin/adminmenu.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/verbs/menu/Admin/Generate_list(client/C) - if (C.holder) - . = ..() - -/datum/verbs/menu/Admin/verb/playerpanel() - set name = "Player Panel" - set desc = "Player Panel" - set category = "Admin.Game" - if(usr.client.holder) - usr.client.holder.player_panel_new() - BLACKBOX_LOG_ADMIN_VERB("Player Panel New") diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 1680304679e..823a4a9e64b 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -92,11 +92,8 @@ GLOBAL_PROTECT(AdminProcCallHandler) usr = lastusr handler.remove_caller(user) -/client/proc/callproc() - set category = "Debug" - set name = "Advanced ProcCall" - set waitfor = FALSE - callproc_blocking() +ADMIN_VERB(advanced_proc_call, R_DEBUG, "Advanced ProcCall", "Call a proc on any datum in the server.", ADMIN_CATEGORY_DEBUG) + user.callproc_blocking() /client/proc/callproc_blocking(list/get_retval) if(!check_rights(R_DEBUG)) @@ -230,37 +227,30 @@ GLOBAL_PROTECT(LastAdminCalledProc) return (GLOB.AdminProcCaller && GLOB.AdminProcCaller == usr?.client?.ckey) || (GLOB.AdminProcCallHandler && usr == GLOB.AdminProcCallHandler) #endif -/client/proc/callproc_datum(datum/A as null|area|mob|obj|turf) - set category = "Debug" - set name = "Atom ProcCall" - set waitfor = FALSE - - if(!check_rights(R_DEBUG)) - return - - var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null +ADMIN_VERB_ONLY_CONTEXT_MENU(call_proc_datum, R_DEBUG, "Atom ProcCall", datum/thing as null|area|mob|obj|turf) + var/procname = input(user, "Proc name, eg: fake_blood","Proc:", null) as text|null if(!procname) return - if(!hascall(A,procname)) - to_chat(usr, "Error: callproc_datum(): type [A.type] has no proc named [procname].", confidential = TRUE) + if(!hascall(thing, procname)) + to_chat(user, "Error: callproc_datum(): type [thing.type] has no proc named [procname].", confidential = TRUE) return - var/list/lst = get_callproc_args() + var/list/lst = user.get_callproc_args() if(!lst) return - if(!A || !is_valid_src(A)) - to_chat(usr, span_warning("Error: callproc_datum(): owner of proc no longer exists."), confidential = TRUE) + if(!thing || !is_valid_src(thing)) + to_chat(user, span_warning("Error: callproc_datum(): owner of proc no longer exists."), confidential = TRUE) return - log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]." + log_admin("[key_name(user)] called [thing]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + var/msg = "[key_name(user)] called [thing]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]." message_admins(msg) - admin_ticket_log(A, msg) + admin_ticket_log(thing, msg) BLACKBOX_LOG_ADMIN_VERB("Atom ProcCall") - var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc - . = get_callproc_returnval(returnval,procname) + var/returnval = WrapAdminProcCall(thing, procname, lst) // Pass the lst as an argument list to the proc + . = user.get_callproc_returnval(returnval,procname) if(.) - to_chat(usr, ., confidential = TRUE) + to_chat(user, ., confidential = TRUE) /client/proc/get_callproc_args() var/argnum = input("Number of arguments","Number:",0) as num|null diff --git a/code/modules/admin/force_event.dm b/code/modules/admin/force_event.dm index 20066547de9..519adbd8a9e 100644 --- a/code/modules/admin/force_event.dm +++ b/code/modules/admin/force_event.dm @@ -1,12 +1,6 @@ -///Allows an admin to force an event -/client/proc/forceEvent() - set name = "Trigger Event" - set category = "Admin.Events" - if(!holder || !check_rights(R_FUN)) - return - - holder.forceEvent() +ADMIN_VERB(force_event, R_FUN, "Trigger Event", "Forces an event to occur.", ADMIN_CATEGORY_EVENTS) + user.holder.forceEvent() ///Opens up the Force Event Panel /datum/admins/proc/forceEvent() diff --git a/code/modules/admin/known_alts.dm b/code/modules/admin/known_alts.dm index d6486f77bd7..4105c7f4edc 100644 --- a/code/modules/admin/known_alts.dm +++ b/code/modules/admin/known_alts.dm @@ -187,8 +187,5 @@ GLOBAL_DATUM_INIT(known_alts, /datum/known_alts, new) client << browse(html, "window=known_alts;size=700x400") -/datum/admins/proc/known_alts_panel() - set name = "Known Alts Panel" - set category = "Admin" - - GLOB.known_alts.show_panel(usr.client) +ADMIN_VERB(known_alts_panel, R_ADMIN, "Known Alts Panel", "View a panel of known alts.", ADMIN_CATEGORY_MAIN) + GLOB.known_alts.show_panel(user) diff --git a/code/modules/admin/outfit_manager.dm b/code/modules/admin/outfit_manager.dm index fcb41b3f2f1..f3ef7d2685c 100644 --- a/code/modules/admin/outfit_manager.dm +++ b/code/modules/admin/outfit_manager.dm @@ -1,18 +1,8 @@ -/client/proc/outfit_manager() - set category = "Debug" - set name = "Outfit Manager" - - if(!check_rights(R_DEBUG)) - return - var/datum/outfit_manager/ui = new(usr) - ui.ui_interact(usr) - +ADMIN_VERB(outfit_manager, R_DEBUG|R_ADMIN, "Outfit Manager", "View and edit outfits.", ADMIN_CATEGORY_DEBUG) + var/static/datum/outfit_manager/ui = new + ui.ui_interact(user.mob) /datum/outfit_manager - var/client/owner - -/datum/outfit_manager/New(user) - owner = CLIENT_FROM_VAR(user) /datum/outfit_manager/ui_state(mob/user) return GLOB.admin_state @@ -53,24 +43,24 @@ switch(action) if("new") - owner.open_outfit_editor(new /datum/outfit) + ui.user.client.open_outfit_editor(new /datum/outfit) if("load") - owner.holder.load_outfit(owner.mob) + ui.user.client.holder.load_outfit(ui.user) if("copy") - var/datum/outfit/outfit = tgui_input_list(owner, "Pick an outfit to copy from", "Outfit Manager", subtypesof(/datum/outfit)) + var/datum/outfit/outfit = tgui_input_list(ui.user, "Pick an outfit to copy from", "Outfit Manager", subtypesof(/datum/outfit)) if(isnull(outfit)) return if(!ispath(outfit)) return - owner.open_outfit_editor(new outfit) + ui.user.client.open_outfit_editor(new outfit) var/datum/outfit/target_outfit = locate(params["outfit"]) if(!istype(target_outfit)) return switch(action) //wow we're switching through action again this is horrible optimization smh if("edit") - owner.open_outfit_editor(target_outfit) + ui.user.client.open_outfit_editor(target_outfit) if("save") - owner.holder.save_outfit(owner.mob, target_outfit) + ui.user.client.holder.save_outfit(ui.user, target_outfit) if("delete") - owner.holder.delete_outfit(owner.mob, target_outfit) + ui.user.client.holder.delete_outfit(ui.user, target_outfit) diff --git a/code/modules/admin/painting_manager.dm b/code/modules/admin/painting_manager.dm index bd7d28fb73f..7a8bd7127a4 100644 --- a/code/modules/admin/painting_manager.dm +++ b/code/modules/admin/painting_manager.dm @@ -1,11 +1,6 @@ -/datum/admins/proc/paintings_manager() - set name = "Paintings Manager" - set category = "Admin" - - if(!check_rights(R_ADMIN)) - return - var/datum/paintings_manager/ui = new(usr) - ui.ui_interact(usr) +ADMIN_VERB(painting_manager, R_ADMIN, "Paintings Manager", "View and redact paintings.", ADMIN_CATEGORY_MAIN) + var/static/datum/paintings_manager/ui = new + ui.ui_interact(user.mob) /// Painting Admin Management Panel /datum/paintings_manager diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index cf816fef8a7..e92ab1729e2 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -1,10 +1,6 @@ -/client/proc/edit_admin_permissions() - set category = "Admin" - set name = "Permissions Panel" - set desc = "Edit admin permissions" - if(!check_rights(R_PERMISSIONS)) - return - usr.client.holder.edit_admin_permissions() + +ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit admin permissions.", ADMIN_CATEGORY_MAIN) + user.holder.edit_admin_permissions() /datum/admins/proc/edit_admin_permissions(action, target, operation, page) if(!check_rights(R_PERMISSIONS)) diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm index 537e0b92acb..fede9724ab1 100644 --- a/code/modules/admin/stickyban.dm +++ b/code/modules/admin/stickyban.dm @@ -481,10 +481,5 @@ . = list2params(.) - -/client/proc/stickybanpanel() - set name = "Sticky Ban Panel" - set category = "Admin" - if (!holder) - return - holder.stickyban_show() +ADMIN_VERB(panel_sticky_ban, R_BAN, "Sticky Ban Panel", "List and manage sticky bans.", ADMIN_CATEGORY_MAIN) + user.holder.stickyban_show() diff --git a/code/modules/admin/tag.dm b/code/modules/admin/tag.dm index 64c6c16fc40..e52112eba14 100644 --- a/code/modules/admin/tag.dm +++ b/code/modules/admin/tag.dm @@ -49,21 +49,14 @@ [X.getToxLoss()] \ [X.getOxyLoss()]" -/// Display all of the tagged datums -/datum/admins/proc/display_tags() - set category = "Admin.Game" - set name = "View Tags" - - if (!istype(src, /datum/admins)) - src = usr.client.holder - if (!istype(src, /datum/admins)) - to_chat(usr, "Error: you are not an admin!", confidential = TRUE) - return - +ADMIN_VERB(display_tags, R_ADMIN, "View Tags", "Display all of the tagged datums.", ADMIN_CATEGORY_GAME) var/index = 0 var/list/dat = list("
Tag Menu

") - dat += "
Refresh
" + var/list/tagged_datums = user.holder.tagged_datums + var/list/marked_datum = user.holder.marked_datum + + dat += "
Refresh
" if(LAZYLEN(tagged_datums)) for(var/datum/iter_datum as anything in tagged_datums) index++ @@ -71,7 +64,7 @@ if(isnull(iter_datum)) dat += "\t[index]: Null reference - Check runtime logs!" - stack_trace("Null datum found in tagged datum menu! User: [usr]") + stack_trace("Null datum found in tagged datum menu! User: [user]") continue else if(iscarbon(iter_datum)) var/mob/living/carbon/resolved_carbon = iter_datum @@ -99,7 +92,7 @@ dat += "No datums tagged :(" dat = dat.Join("
") - usr << browse(dat, "window=tag;size=800x480") + user << browse(dat, "window=tag;size=800x480") #undef TAG_DEL #undef TAG_MARK diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 75aa5f4f3db..6c18d4dc0f7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -171,8 +171,7 @@ to_chat(usr, "[shuttle_console] was [shuttle_console.admin_controlled ? "locked" : "unlocked"].", confidential = TRUE) else if(href_list["delay_round_end"]) - // Permissions are checked in delay_round_end - delay_round_end() + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/delay_round_end) else if(href_list["undelay_round_end"]) if(!check_rights(R_SERVER)) @@ -767,21 +766,10 @@ our_mob.AIize(our_mob.client, move) else if(href_list["makerobot"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/our_mob = locate(href_list["makerobot"]) - if(!istype(our_mob)) - return - if(iscyborg(our_mob)) - to_chat(usr, "That's already a cyborg.", confidential = TRUE) - return - - usr.client.cmd_admin_robotize(our_mob) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/cmd_admin_robotize, locate(href_list["makerobot"])) else if(href_list["adminplayeropts"]) - var/mob/M = locate(href_list["adminplayeropts"]) - show_player_panel(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_player_panel, locate(href_list["adminplayeropts"])) else if(href_list["ppbyckey"]) var/target_ckey = href_list["ppbyckey"] @@ -796,7 +784,7 @@ return to_chat(usr, span_notice("Jumping to [target_ckey]'s new mob: [target_mob]!")) - show_player_panel(target_mob) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_player_panel, target_mob) else if(href_list["adminplayerobservefollow"]) if(!isobserver(usr) && !check_rights(R_ADMIN)) @@ -813,20 +801,13 @@ AM.forceMove(get_turf(usr)) else if(href_list["adminplayerobservecoodjump"]) - if(!isobserver(usr) && !check_rights(R_ADMIN)) - return - if(isnewplayer(usr)) - return - - var/x = text2num(href_list["X"]) - var/y = text2num(href_list["Y"]) - var/z = text2num(href_list["Z"]) - - var/client/C = usr.client - if(!isobserver(usr)) - C.admin_ghost() - sleep(0.2 SECONDS) - C.jumptocoord(x,y,z) + return SSadmin_verbs.dynamic_invoke_verb( + usr, + /datum/admin_verb/jump_to_coord, + text2num(href_list["X"]), + text2num(href_list["Y"]), + text2num(href_list["Z"]), + ) else if(href_list["adminchecklaws"]) if(!check_rights(R_ADMIN)) @@ -1026,15 +1007,7 @@ give_admin_popup(target, owner, message) else if(href_list["adminsmite"]) - if(!check_rights(R_ADMIN|R_FUN)) - return - - var/mob/living/carbon/human/H = locate(href_list["adminsmite"]) in GLOB.mob_list - if(!H || !istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human", confidential = TRUE) - return - - usr.client.smite(H) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/admin_smite, locate(href_list["adminsmite"])) else if(href_list["CentComReply"]) if(!check_rights(R_ADMIN)) @@ -1063,42 +1036,21 @@ var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"]) if(istype(charter)) charter.reject_proposed(usr) - else if(href_list["jumpto"]) - if(!isobserver(usr) && !check_rights(R_ADMIN)) - return - var/mob/M = locate(href_list["jumpto"]) - usr.client.jumptomob(M) + else if(href_list["jumpto"]) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/jump_to_mob, locate(href_list["jumpto"])) else if(href_list["getmob"]) - if(!check_rights(R_ADMIN)) - return - - if(tgui_alert(usr, "Confirm?", "Message", list("Yes", "No")) != "Yes") - return - var/mob/M = locate(href_list["getmob"]) - usr.client.Getmob(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/get_mob, locate(href_list["getmob"])) else if(href_list["sendmob"]) - if(!check_rights(R_ADMIN)) - return - - var/mob/M = locate(href_list["sendmob"]) - usr.client.sendmob(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/send_mob, locate(href_list["sendmob"])) else if(href_list["narrateto"]) - if(!check_rights(R_ADMIN)) - return - - var/mob/M = locate(href_list["narrateto"]) - usr.client.cmd_admin_direct_narrate(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/cmd_admin_direct_narrate, locate(href_list["narrateto"])) else if(href_list["subtlemessage"]) - if(!check_rights(R_ADMIN)) - return - - var/mob/M = locate(href_list["subtlemessage"]) - usr.client.cmd_admin_subtle_message(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/cmd_admin_subtle_message, locate(href_list["subtlemessage"])) else if(href_list["playsoundto"]) if(!check_rights(R_SOUND)) @@ -1107,7 +1059,7 @@ var/mob/M = locate(href_list["playsoundto"]) var/S = input("", "Select a sound file",) as null|sound if(S) - usr.client.play_direct_mob_sound(S, M) + SSadmin_verbs.dynamic_invoke_verb(usr.client, /datum/admin_verb/play_direct_mob_sound, S, M) else if(href_list["individuallog"]) if(!check_rights(R_ADMIN)) @@ -1146,7 +1098,8 @@ else D.traitor_panel() else - show_traitor_panel(M) + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_traitor_panel, M) + return else if(href_list["skill"]) if(!check_rights(R_ADMIN)) @@ -1166,17 +1119,11 @@ else to_chat(usr, "This can only be used on instances of type /mob and /mind", confidential = TRUE) return - show_skill_panel(target_mind) + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_skill_panel, target_mind) + return else if(href_list["borgpanel"]) - if(!check_rights(R_ADMIN)) - return - - var/mob/M = locate(href_list["borgpanel"]) - if(!iscyborg(M)) - to_chat(usr, "This can only be used on cyborgs", confidential = TRUE) - else - open_borgopanel(M) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/borg_panel, locate(href_list["borgpanel"])) else if(href_list["initmind"]) if(!check_rights(R_ADMIN)) @@ -1348,9 +1295,7 @@ return else if(href_list["check_antagonist"]) - if(!check_rights(R_ADMIN)) - return - usr.client.check_antagonists() + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/check_antagonists) else if(href_list["kick_all_from_lobby"]) if(!check_rights(R_ADMIN)) @@ -1420,7 +1365,7 @@ log_admin("[key_name(usr)] turned a Lag Switch measure at index ([switch_index]) [LAZYACCESS(SSlag_switch.measures, switch_index) ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] turned a Lag Switch measure [LAZYACCESS(SSlag_switch.measures, switch_index) ? "ON" : "OFF"]") - src.show_lag_switch_panel() + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/lag_switch_panel) else if(href_list["change_lag_switch_option"]) if(!check_rights(R_ADMIN)) @@ -1449,7 +1394,7 @@ log_admin("[key_name(usr)] set the Lag Switch slowmode cooldown to [new_num] seconds.") message_admins("[key_name_admin(usr)] set the Lag Switch slowmode cooldown to [new_num] seconds.") - src.show_lag_switch_panel() + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/lag_switch_panel) else if(href_list["viewruntime"]) var/datum/error_viewer/error_viewer = locate(href_list["viewruntime"]) @@ -1565,13 +1510,7 @@ toggle_id_ctf(usr, CTF_GHOST_CTF_GAME_ID) else if(href_list["rebootworld"]) - if(!check_rights(R_ADMIN)) - return - var/confirm = tgui_alert(usr,"Are you sure you want to reboot the server?", "Confirm Reboot", list("Yes", "No")) - if(confirm == "No") - return - if(confirm == "Yes") - restart() + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/restart) else if(href_list["check_teams"]) if(!check_rights(R_ADMIN)) @@ -1790,9 +1729,7 @@ return remove_tagged_datum(datum_to_remove) else if(href_list["show_tags"]) - if(!check_rights(R_ADMIN)) - return - return display_tags() + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/display_tags) else if(href_list["mark_datum"]) if(!check_rights(R_ADMIN)) @@ -1848,7 +1785,4 @@ web_sound(usr, link_url, credit) else if(href_list["debug_z_levels"]) - if(!check_rights(R_DEBUG)) - return - - owner.debug_z_levels() + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/debug_z_levels) diff --git a/code/modules/admin/trophy_manager.dm b/code/modules/admin/trophy_manager.dm index 6a45afb8e45..5ad703b0994 100644 --- a/code/modules/admin/trophy_manager.dm +++ b/code/modules/admin/trophy_manager.dm @@ -1,11 +1,6 @@ -/datum/admins/proc/trophy_manager() - set name = "Trophy Manager" - set category = "Admin" - - if(!check_rights(R_ADMIN)) - return - var/datum/trophy_manager/ui = new(usr) - ui.ui_interact(usr) +ADMIN_VERB(trophy_manager, R_ADMIN, "Trophy Manager", "View all trophies.", ADMIN_CATEGORY_MAIN) + var/static/datum/trophy_manager/ui = new + ui.ui_interact(user.mob) /// Trophy Admin Management Panel /datum/trophy_manager diff --git a/code/modules/admin/verb_datums/_admin_verb_datum.dm b/code/modules/admin/verb_datums/_admin_verb_datum.dm new file mode 100644 index 00000000000..6255d962c40 --- /dev/null +++ b/code/modules/admin/verb_datums/_admin_verb_datum.dm @@ -0,0 +1,27 @@ +GENERAL_PROTECT_DATUM(/datum/admin_verb) + +/** + * This is the admin verb datum. It is used to store the verb's information and handle the verb's functionality. + * All of this is setup for you, and you should not be defining this manually. + * That means you reader. + */ +/datum/admin_verb + var/name //! The name of the verb. + var/description //! The description of the verb. + var/category //! The category of the verb. + var/permissions //! The permissions required to use the verb. + var/visibility_flag //! The flag that determines if the verb is visible. + VAR_PROTECTED/verb_path //! The path to the verb proc. + +/datum/admin_verb/Destroy(force) + if(!force) + return QDEL_HINT_LETMELIVE + return ..() + +/// Assigns the verb to the admin. +/datum/admin_verb/proc/assign_to_client(client/admin) + add_verb(admin, verb_path) + +/// Unassigns the verb from the admin. +/datum/admin_verb/proc/unassign_from_client(client/admin) + remove_verb(admin, verb_path) diff --git a/code/modules/admin/verb_datums/_admin_verb_holder.dm b/code/modules/admin/verb_datums/_admin_verb_holder.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 17047dbcd68..47da593fc9e 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -195,20 +195,15 @@ state = SDQL2_STATE_ERROR;\ CRASH("SDQL2 fatal error");}; -/client/proc/SDQL2_query(query_text as message) - set category = "Debug" - if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe. - message_admins(span_danger("ERROR: Non-admin [key_name(usr)] attempted to execute a SDQL query!")) - usr.log_message("non-admin attempted to execute a SDQL query!", LOG_ADMIN) - return FALSE - var/prompt = tgui_alert(usr, "Run SDQL2 Query?", "SDQL2", list("Yes", "Cancel")) +ADMIN_VERB(sdql2_query, R_DEBUG, "SDQL2 Query", "Run a SDQL2 query.", ADMIN_CATEGORY_DEBUG, query_text as message) + var/prompt = tgui_alert(user, "Run SDQL2 Query?", "SDQL2", list("Yes", "Cancel")) if (prompt != "Yes") return - var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[key_name(usr)]") + var/list/results = world.SDQL2_query(query_text, key_name_admin(user), "[key_name(user)]") if(length(results) == 3) for(var/I in 1 to 3) - to_chat(usr, span_admin(results[I]), confidential = TRUE) - SSblackbox.record_feedback("nested tally", "SDQL query", 1, list(ckey, query_text)) + to_chat(user, span_admin(results[I]), confidential = TRUE) + SSblackbox.record_feedback("nested tally", "SDQL query", 1, list(user.ckey, query_text)) /world/proc/SDQL2_query(query_text, log_entry1, log_entry2, silent = FALSE) var/query_log = "executed SDQL query(s): \"[query_text]\"." diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index d78014e84d2..f6517b13564 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -1,15 +1,5 @@ -// Admin Tab - Admin Verbs - -/client/proc/show_tip() - set category = "Admin" - set name = "Show Tip" - set desc = "Sends a tip (that you specify) to all players. After all \ - you're the experienced player here." - - if(!check_rights(R_ADMIN)) - return - - var/input = input(usr, "Please specify your tip that you want to send to the players.", "Tip", "") as message|null +ADMIN_VERB(show_tip, R_ADMIN, "Show Tip", "Sends a tip to all players.", ADMIN_CATEGORY_MAIN) + var/input = input(user, "Please specify your tip that you want to send to the players.", "Tip", "") as message|null if(!input) return @@ -22,44 +12,34 @@ else SSticker.selected_tip = input - message_admins("[key_name_admin(usr)] sent a tip of the round.") - log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.") + message_admins("[key_name_admin(user)] sent a tip of the round.") + log_admin("[key_name(user)] sent \"[input]\" as the Tip of the Round.") BLACKBOX_LOG_ADMIN_VERB("Show Tip") -/datum/admins/proc/announce() - set category = "Admin" - set name = "Announce" - set desc="Announce your desires to the world" - if(!check_rights(0)) +ADMIN_VERB(announce, R_ADMIN, "Announce", "Announce your desires to the world.", ADMIN_CATEGORY_MAIN) + var/message = input(user, "Global message to send:", "Admin Announce") as message|null + if(!message) return - var/message = input("Global message to send:", "Admin Announce", null, null) as message|null - if(message) - if(!check_rights(R_SERVER,0)) - message = adminscrub(message,500) - send_ooc_announcement(message, "From [usr.client.holder.fakekey ? "Administrator" : usr.key]") - log_admin("Announce: [key_name(usr)] : [message]") + if(!user.holder.check_for_rights(R_SERVER)) + message = adminscrub(message,500) + send_ooc_announcement(message, "From [user.holder.fakekey ? "Administrator" : user.key]") + log_admin("Announce: [key_name(user)] : [message]") BLACKBOX_LOG_ADMIN_VERB("Announce") -/datum/admins/proc/unprison(mob/M in GLOB.mob_list) - set category = "Admin" - set name = "Unprison" - if (is_centcom_level(M.z)) - SSjob.SendToLateJoin(M) - message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]") - log_admin("[key_name(usr)] has unprisoned [key_name(M)]") - else - tgui_alert(usr,"[M.name] is not prisoned.") - BLACKBOX_LOG_ADMIN_VERB("Unprison") - -/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)) +ADMIN_VERB(unprison, R_ADMIN, "UnPrison", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/prisoner in GLOB.mob_list) + if(!is_centcom_level(prisoner.z)) + tgui_alert(user, "[prisoner.name] is not prisoned.") return + SSjob.SendToLateJoin(prisoner) + message_admins("[key_name_admin(user)] has unprisoned [key_name_admin(prisoner)]") + log_admin("[key_name(user)] has unprisoned [key_name(prisoner)]") + BLACKBOX_LOG_ADMIN_VERB("Unprison") + +ADMIN_VERB(cmd_admin_check_player_exp, R_ADMIN, "Player Playtime", "View player playtime.", ADMIN_CATEGORY_MAIN) if(!CONFIG_GET(flag/use_exp_tracking)) - to_chat(usr, span_warning("Tracking is disabled in the server configuration file."), confidential = TRUE) + to_chat(user, span_warning("Tracking is disabled in the server configuration file."), confidential = TRUE) return var/list/msg = list() @@ -67,7 +47,7 @@ for(var/client/client in sort_list(GLOB.clients, GLOBAL_PROC_REF(cmp_playtime_asc))) msg += "
  • [ADMIN_PP(client.mob)] [key_name_admin(client)]: " + client.get_exp_living() + "
  • " msg += "" - src << browse(msg.Join(), "window=Player_playtime_check") + user << browse(msg.Join(), "window=Player_playtime_check") /client/proc/trigger_centcom_recall() if(!check_rights(R_ADMIN)) @@ -164,23 +144,18 @@ /////////////////////////////////////////////////////////////////////////////////////////////// -/client/proc/cmd_admin_drop_everything(mob/M in GLOB.mob_list) - set category = null - set name = "Drop Everything" - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "Make [M] drop everything?", "Message", list("Yes", "No")) +ADMIN_VERB(drop_everything, R_ADMIN, "Drop Everything", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/dropee in GLOB.mob_list) + var/confirm = tgui_alert(user, "Make [dropee] drop everything?", "Message", list("Yes", "No")) if(confirm != "Yes") return - M.drop_everything(del_on_drop = FALSE, force = TRUE, del_if_nodrop = TRUE) - M.regenerate_icons() + dropee.drop_everything(del_on_drop = FALSE, force = TRUE, del_if_nodrop = TRUE) + dropee.regenerate_icons() - log_admin("[key_name(usr)] made [key_name(M)] drop everything!") - var/msg = "[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] drop everything!" + log_admin("[key_name(user)] made [key_name(dropee)] drop everything!") + var/msg = "[key_name_admin(user)] made [ADMIN_LOOKUPFLW(dropee)] drop everything!" message_admins(msg) - admin_ticket_log(M, msg) + admin_ticket_log(dropee, msg) BLACKBOX_LOG_ADMIN_VERB("Drop Everything") /proc/cmd_admin_mute(whom, mute_type, automute = 0) diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index 2f6870394c2..0439cfa8811 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -1,17 +1,6 @@ -/datum/admins/proc/access_news_network() //MARKER - set category = "Admin.Events" - set name = "Access Newscaster Network" - set desc = "Allows you to view, add and edit news feeds." - - if (!istype(src, /datum/admins)) - src = usr.client.holder - if (!istype(src, /datum/admins)) - to_chat(usr, "Error: you are not an admin!", confidential = TRUE) - return - +ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows you to view, add, and edit news feeds.", ADMIN_CATEGORY_EVENTS) var/datum/newspanel/new_newspanel = new - - new_newspanel.ui_interact(usr) + new_newspanel.ui_interact(user.mob) /datum/newspanel ///What newscaster channel is currently being viewed by the player? diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index 26219353cce..32e49cf2e73 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -1,37 +1,24 @@ // Admin Tab - Event Verbs -/client/proc/cmd_admin_subtle_message(mob/M in GLOB.mob_list) - set category = "Admin.Events" - set name = "Subtle Message" - - if(!ismob(M)) - return - if(!check_rights(R_ADMIN)) - return - - message_admins("[key_name_admin(src)] has started answering [ADMIN_LOOKUPFLW(M)]'s prayer.") - var/msg = input("Message:", "Subtle PM to [M.key]") as text|null +ADMIN_VERB_AND_CONTEXT_MENU(cmd_admin_subtle_message, R_ADMIN, "Subtle Message", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/target in world) + message_admins("[key_name_admin(user)] has started answering [ADMIN_LOOKUPFLW(target)]'s prayer.") + var/msg = input(user, "Message:", "Subtle PM to [target.key]") as text|null if(!msg) - message_admins("[key_name_admin(src)] decided not to answer [ADMIN_LOOKUPFLW(M)]'s prayer") + message_admins("[key_name_admin(user)] decided not to answer [ADMIN_LOOKUPFLW(target)]'s prayer") return - if(usr) - if (usr.client) - if(usr.client.holder) - M.balloon_alert(M, "you hear a voice") - to_chat(M, "You hear a voice in your head... [msg]", confidential = TRUE) - log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]") - msg = span_adminnotice(" SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]") + target.balloon_alert(target, "you hear a voice") + to_chat(target, "You hear a voice in your head... [msg]", confidential = TRUE) + + log_admin("SubtlePM: [key_name(user)] -> [key_name(target)] : [msg]") + msg = span_adminnotice(" SubtleMessage: [key_name_admin(user)] -> [key_name_admin(target)] : [msg]") message_admins(msg) - admin_ticket_log(M, msg) + admin_ticket_log(target, msg) BLACKBOX_LOG_ADMIN_VERB("Subtle Message") -/client/proc/cmd_admin_headset_message(mob/M in GLOB.mob_list) - set category = "Admin.Events" - set name = "Headset Message" - - admin_headset_message(M) +ADMIN_VERB_AND_CONTEXT_MENU(cmd_admin_headset_message, R_ADMIN, "Headset Message", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/target in world) + user.admin_headset_message(target) /client/proc/admin_headset_message(mob/target in GLOB.mob_list, sender = null) var/mob/living/carbon/human/human_recipient @@ -73,102 +60,64 @@ BLACKBOX_LOG_ADMIN_VERB("Headset Message") -/client/proc/cmd_admin_world_narrate() - set category = "Admin.Events" - set name = "Global Narrate" - - if(!check_rights(R_ADMIN)) - return - - var/msg = input("Message:", "Enter the text you wish to appear to everyone:") as text|null - +ADMIN_VERB(cmd_admin_world_narrate, R_ADMIN, "Global Narrate", "Send a direct narration to all connected players.", ADMIN_CATEGORY_EVENTS) + var/msg = input(user, "Message:", "Enter the text you wish to appear to everyone:") as text|null if (!msg) return to_chat(world, "[msg]", confidential = TRUE) - log_admin("GlobalNarrate: [key_name(usr)] : [msg]") - message_admins(span_adminnotice("[key_name_admin(usr)] Sent a global narrate")) + log_admin("GlobalNarrate: [key_name(user)] : [msg]") + message_admins(span_adminnotice("[key_name_admin(user)] Sent a global narrate")) BLACKBOX_LOG_ADMIN_VERB("Global Narrate") -/client/proc/cmd_admin_local_narrate(atom/A) - set category = "Admin.Events" - set name = "Local Narrate" - - if(!check_rights(R_ADMIN)) - return - if(!A) - return - var/range = input("Range:", "Narrate to mobs within how many tiles:", 7) as num|null +ADMIN_VERB_AND_CONTEXT_MENU(cmd_admin_local_narrate, R_ADMIN, "Local Narrate", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/locale in world) + var/range = input(user, "Range:", "Narrate to mobs within how many tiles:", 7) as num|null if(!range) return - var/msg = input("Message:", "Enter the text you wish to appear to everyone within view:") as text|null + var/msg = input(user, "Message:", "Enter the text you wish to appear to everyone within view:") as text|null if (!msg) return - for(var/mob/M in view(range,A)) + for(var/mob/M in view(range, locale)) to_chat(M, msg, confidential = TRUE) - log_admin("LocalNarrate: [key_name(usr)] at [AREACOORD(A)]: [msg]") - message_admins(span_adminnotice(" LocalNarrate: [key_name_admin(usr)] at [ADMIN_VERBOSEJMP(A)]: [msg]
    ")) + log_admin("LocalNarrate: [key_name(user)] at [AREACOORD(locale)]: [msg]") + message_admins(span_adminnotice(" LocalNarrate: [key_name_admin(user)] at [ADMIN_VERBOSEJMP(locale)]: [msg]
    ")) BLACKBOX_LOG_ADMIN_VERB("Local Narrate") -/client/proc/cmd_admin_direct_narrate(mob/M) - set category = "Admin.Events" - set name = "Direct Narrate" - - if(!check_rights(R_ADMIN)) - return - - if(!M) - M = input("Direct narrate to whom?", "Active Players") as null|anything in GLOB.player_list - - if(!M) - return - - var/msg = input("Message:", "Enter the text you wish to appear to your target:") as text|null +ADMIN_VERB_AND_CONTEXT_MENU(cmd_admin_direct_narrate, R_ADMIN, "Direct Narrate", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/target) + var/msg = input(user, "Message:", "Enter the text you wish to appear to your target:") as text|null if( !msg ) return - to_chat(M, msg, confidential = TRUE) - log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]") - msg = span_adminnotice(" DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
    ") + to_chat(target, msg, confidential = TRUE) + log_admin("DirectNarrate: [key_name(user)] to ([key_name(target)]): [msg]") + msg = span_adminnotice(" DirectNarrate: [key_name_admin(user)] to ([key_name_admin(target)]): [msg]
    ") message_admins(msg) - admin_ticket_log(M, msg) + admin_ticket_log(target, msg) BLACKBOX_LOG_ADMIN_VERB("Direct Narrate") -/client/proc/cmd_admin_add_freeform_ai_law() - set category = "Admin.Events" - set name = "Add Custom AI law" - - if(!check_rights(R_ADMIN)) - return - - var/input = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null +ADMIN_VERB(cmd_admin_add_freeform_ai_law, R_ADMIN, "Add Custom AI Law", "Add a custom law to the Silicons.", ADMIN_CATEGORY_EVENTS) + var/input = input(user, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null if(!input) return - log_admin("Admin [key_name(usr)] has added a new AI law - [input]") - message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]") + log_admin("Admin [key_name(user)] has added a new AI law - [input]") + message_admins("Admin [key_name_admin(user)] has added a new AI law - [input]") - var/show_log = tgui_alert(usr, "Show ion message?", "Message", list("Yes", "No")) + var/show_log = tgui_alert(user, "Show ion message?", "Message", list("Yes", "No")) var/announce_ion_laws = (show_log == "Yes" ? 100 : 0) - var/datum/round_event/ion_storm/add_law_only/ion = new() + var/datum/round_event/ion_storm/add_law_only/ion = new ion.announce_chance = announce_ion_laws ion.ionMessage = input BLACKBOX_LOG_ADMIN_VERB("Add Custom AI Law") -/client/proc/admin_call_shuttle() - set category = "Admin.Events" - set name = "Call Shuttle" - +ADMIN_VERB(call_shuttle, R_ADMIN, "Call Shuttle", "Force a shuttle call with additional modifiers.", ADMIN_CATEGORY_EVENTS) if(EMERGENCY_AT_LEAST_DOCKED) return - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "You sure?", "Confirm", list("Yes", "Yes (No Recall)", "No")) + var/confirm = tgui_alert(user, "You sure?", "Confirm", list("Yes", "Yes (No Recall)", "No")) switch(confirm) if(null, "No") return @@ -178,46 +127,30 @@ SSshuttle.emergency.request() BLACKBOX_LOG_ADMIN_VERB("Call Shuttle") - log_admin("[key_name(usr)] admin-called the emergency shuttle.") - message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle[confirm == "Yes (No Recall)" ? " (non-recallable)" : ""].")) - return - -/client/proc/admin_cancel_shuttle() - set category = "Admin.Events" - set name = "Cancel Shuttle" - if(!check_rights(0)) - return - if(tgui_alert(usr, "You sure?", "Confirm", list("Yes", "No")) != "Yes") - return - - if(SSshuttle.admin_emergency_no_recall) - SSshuttle.admin_emergency_no_recall = FALSE + log_admin("[key_name(user)] admin-called the emergency shuttle.") + message_admins(span_adminnotice("[key_name_admin(user)] admin-called the emergency shuttle[confirm == "Yes (No Recall)" ? " (non-recallable)" : ""].")) +ADMIN_VERB(cancel_shuttle, R_ADMIN, "Cancel Shuttle", "Recall the shuttle, regardless of circumstances.", ADMIN_CATEGORY_EVENTS) if(EMERGENCY_AT_LEAST_DOCKED) return + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + return + SSshuttle.admin_emergency_no_recall = FALSE SSshuttle.emergency.cancel() BLACKBOX_LOG_ADMIN_VERB("Cancel Shuttle") - log_admin("[key_name(usr)] admin-recalled the emergency shuttle.") - message_admins(span_adminnotice("[key_name_admin(usr)] admin-recalled the emergency shuttle.")) - - return - -/client/proc/admin_disable_shuttle() - set category = "Admin.Events" - set name = "Disable Shuttle" - - if(!check_rights(R_ADMIN)) - return + log_admin("[key_name(user)] admin-recalled the emergency shuttle.") + message_admins(span_adminnotice("[key_name_admin(user)] admin-recalled the emergency shuttle.")) +ADMIN_VERB(disable_shuttle, R_ADMIN, "Disable Shuttle", "Those fuckers aren't getting out.", ADMIN_CATEGORY_EVENTS) if(SSshuttle.emergency.mode == SHUTTLE_DISABLED) - to_chat(usr, span_warning("Error, shuttle is already disabled.")) + to_chat(user, span_warning("Error, shuttle is already disabled.")) return - if(tgui_alert(usr, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") return - message_admins(span_adminnotice("[key_name_admin(usr)] disabled the shuttle.")) + message_admins(span_adminnotice("[key_name_admin(user)] disabled the shuttle.")) SSshuttle.last_mode = SSshuttle.emergency.mode SSshuttle.last_call_time = SSshuttle.emergency.timeLeft(1) @@ -232,21 +165,15 @@ color_override = "grey", ) -/client/proc/admin_enable_shuttle() - set category = "Admin.Events" - set name = "Enable Shuttle" - - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(enable_shuttle, R_ADMIN, "Enable Shuttle", "Those fuckers ARE getting out.", ADMIN_CATEGORY_EVENTS) if(SSshuttle.emergency.mode != SHUTTLE_DISABLED) - to_chat(usr, span_warning("Error, shuttle not disabled.")) + to_chat(user, span_warning("Error, shuttle not disabled.")) return - if(tgui_alert(usr, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") return - message_admins(span_adminnotice("[key_name_admin(usr)] enabled the emergency shuttle.")) + message_admins(span_adminnotice("[key_name_admin(user)] enabled the emergency shuttle.")) SSshuttle.admin_emergency_no_recall = FALSE SSshuttle.emergency_no_recall = FALSE if(SSshuttle.last_mode == SHUTTLE_DISABLED) //If everything goes to shit, fix it. @@ -264,136 +191,77 @@ color_override = "green", ) -/client/proc/admin_hostile_environment() - set category = "Admin.Events" - set name = "Hostile Environment" - - if(!check_rights(R_ADMIN)) - return - - switch(tgui_alert(usr, "Select an Option", "Hostile Environment Manager", list("Enable", "Disable", "Clear All"))) +ADMIN_VERB(hostile_environment, R_ADMIN, "Hostile Environment", "Disable the shuttle, naturally.", ADMIN_CATEGORY_EVENTS) + switch(tgui_alert(user, "Select an Option", "Hostile Environment Manager", list("Enable", "Disable", "Clear All"))) if("Enable") if (SSshuttle.hostile_environments["Admin"] == TRUE) - to_chat(usr, span_warning("Error, admin hostile environment already enabled.")) + to_chat(user, span_warning("Error, admin hostile environment already enabled.")) else - message_admins(span_adminnotice("[key_name_admin(usr)] Enabled an admin hostile environment")) + message_admins(span_adminnotice("[key_name_admin(user)] Enabled an admin hostile environment")) SSshuttle.registerHostileEnvironment("Admin") if("Disable") if (!SSshuttle.hostile_environments["Admin"]) - to_chat(usr, span_warning("Error, no admin hostile environment found.")) + to_chat(user, span_warning("Error, no admin hostile environment found.")) else - message_admins(span_adminnotice("[key_name_admin(usr)] Disabled the admin hostile environment")) + message_admins(span_adminnotice("[key_name_admin(user)] Disabled the admin hostile environment")) SSshuttle.clearHostileEnvironment("Admin") if("Clear All") - message_admins(span_adminnotice("[key_name_admin(usr)] Disabled all current hostile environment sources")) + message_admins(span_adminnotice("[key_name_admin(user)] Disabled all current hostile environment sources")) SSshuttle.hostile_environments.Cut() SSshuttle.checkHostileEnvironment() -/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb)) - set category = "Admin.Events" - set name = "Toggle Nuke" - set popup_menu = FALSE - if(!check_rights(R_DEBUG)) - return - - if(!N.timing) - var/newtime = input(usr, "Set activation timer.", "Activate Nuke", "[N.timer_set]") as num|null +ADMIN_VERB(toggle_nuke, R_DEBUG|R_ADMIN, "Toggle Nuke", "Arm or disarm a nuke.", ADMIN_CATEGORY_EVENTS, obj/machinery/nuclearbomb/nuke in world) + if(!nuke.timing) + var/newtime = input(user, "Set activation timer.", "Activate Nuke", "[nuke.timer_set]") as num|null if(!newtime) return - N.timer_set = newtime - N.toggle_nuke_safety() - N.toggle_nuke_armed() + nuke.timer_set = newtime + nuke.toggle_nuke_safety() + nuke.toggle_nuke_armed() - log_admin("[key_name(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [AREACOORD(N)].") - message_admins("[ADMIN_LOOKUPFLW(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [ADMIN_VERBOSEJMP(N)].") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Nuke", "[N.timing]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + log_admin("[key_name(user)] [nuke.timing ? "activated" : "deactivated"] a nuke at [AREACOORD(nuke)].") + message_admins("[ADMIN_LOOKUPFLW(user)] [nuke.timing ? "activated" : "deactivated"] a nuke at [ADMIN_VERBOSEJMP(nuke)].") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Nuke", "[nuke.timing]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/client/proc/admin_change_sec_level() - set category = "Admin.Events" - set name = "Set Security Level" - set desc = "Changes the security level. Announcement only, i.e. setting to Delta won't activate nuke" - - if(!check_rights(R_ADMIN)) - return - - var/level = tgui_input_list(usr, "Select Security Level:", "Set Security Level", SSsecurity_level.available_levels) +ADMIN_VERB(change_sec_level, R_ADMIN, "Set Security Level", "Changes the security level. Announcement effects only.", ADMIN_CATEGORY_EVENTS) + var/level = tgui_input_list(user, "Select Security Level:", "Set Security Level", SSsecurity_level.available_levels) if(!level) return SSsecurity_level.set_level(level) - log_admin("[key_name(usr)] changed the security level to [level]") - message_admins("[key_name_admin(usr)] changed the security level to [level]") + log_admin("[key_name(user)] changed the security level to [level]") + message_admins("[key_name_admin(user)] changed the security level to [level]") BLACKBOX_LOG_ADMIN_VERB("Set Security Level [capitalize(level)]") -/client/proc/run_weather() - set category = "Admin.Events" - set name = "Run Weather" - set desc = "Triggers a weather on the z-level you choose." - - if(!holder) - return - - var/weather_type = input("Choose a weather", "Weather") as null|anything in sort_list(subtypesof(/datum/weather), GLOBAL_PROC_REF(cmp_typepaths_asc)) +ADMIN_VERB(run_weather, R_FUN, "Run Weather", "Triggers specific weather on the z-level you choose.", ADMIN_CATEGORY_EVENTS) + var/weather_type = input(user, "Choose a weather", "Weather") as null|anything in sort_list(subtypesof(/datum/weather), GLOBAL_PROC_REF(cmp_typepaths_asc)) if(!weather_type) return - var/turf/T = get_turf(mob) - var/z_level = input("Z-Level to target?", "Z-Level", T?.z) as num|null + var/turf/T = get_turf(user.mob) + var/z_level = input(user, "Z-Level to target?", "Z-Level", T?.z) as num|null if(!isnum(z_level)) return SSweather.run_weather(weather_type, z_level) - message_admins("[key_name_admin(usr)] started weather of type [weather_type] on the z-level [z_level].") - log_admin("[key_name(usr)] started weather of type [weather_type] on the z-level [z_level].") + message_admins("[key_name_admin(user)] started weather of type [weather_type] on the z-level [z_level].") + log_admin("[key_name(user)] started weather of type [weather_type] on the z-level [z_level].") BLACKBOX_LOG_ADMIN_VERB("Run Weather") -/client/proc/add_marked_mob_ability() - set category = "Admin.Events" - set name = "Add Mob Ability (Marked Mob)" - set desc = "Adds an ability to a marked mob." - - if(!holder) - return - - if(!isliving(holder.marked_datum)) - to_chat(usr, span_warning("Error: Please mark a mob to add actions to it.")) - return - give_mob_action(holder.marked_datum) - -/client/proc/remove_marked_mob_ability() - set category = "Admin.Events" - set name = "Remove Mob Ability (Marked Mob)" - set desc = "Removes an ability from marked mob." - - if(!holder) - return - - if(!isliving(holder.marked_datum)) - to_chat(usr, span_warning("Error: Please mark a mob to remove actions from it.")) - return - remove_mob_action(holder.marked_datum) - - -/client/proc/command_report_footnote() - set category = "Admin.Events" - set name = "Command Report Footnote" - set desc = "Adds a footnote to the roundstart command report." - - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a footnote to the roundstart command report.", ADMIN_CATEGORY_EVENTS) var/datum/command_footnote/command_report_footnote = new /datum/command_footnote() - SScommunications.block_command_report++ //Add a blocking condition to the counter until the inputs are done. - - command_report_footnote.message = tgui_input_text(usr, "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", "P.S.") + SScommunications.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. + command_report_footnote.message = tgui_input_text(user, "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", "P.S.") if(!command_report_footnote.message) + SScommunications.block_command_report -= 1 + qdel(command_report_footnote) return - command_report_footnote.signature = tgui_input_text(usr, "Whose signature will appear on this footnote?", "Also sign here, here, aaand here.") + command_report_footnote.signature = tgui_input_text(user, "Whose signature will appear on this footnote?", "Also sign here, here, aaand here.") if(!command_report_footnote.signature) command_report_footnote.signature = "Classified" @@ -401,24 +269,12 @@ SScommunications.command_report_footnotes += command_report_footnote SScommunications.block_command_report-- - message_admins("[usr] has added a footnote to the command report: [command_report_footnote.message], signed [command_report_footnote.signature]") + message_admins("[user] has added a footnote to the command report: [command_report_footnote.message], signed [command_report_footnote.signature]") /datum/command_footnote var/message var/signature -/client/proc/delay_command_report() - set category = "Admin.Events" - set name = "Delay Command Report" - set desc = "Prevents the roundstart command report from being sent until toggled." - - if(!check_rights(R_ADMIN)) - return - - if(SScommunications.block_command_report) //If it's anything other than 0, decrease. If 0, increase. - SScommunications.block_command_report-- - message_admins("[usr] has enabled the roundstart command report.") - else - SScommunications.block_command_report++ - message_admins("[usr] has delayed the roundstart command report.") - +ADMIN_VERB(delay_command_report, R_FUN, "Delay Command Report", "Prevents the roundstart command report from being sent; or forces it to send it delayed.", ADMIN_CATEGORY_EVENTS) + SScommunications.block_command_report = !SScommunications.block_command_report + message_admins("[key_name_admin(user)] has [(SScommunications.block_command_report ? "delayed" : "sent")] the roundstart command report.") diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index fcba8d40928..8bc7a611b35 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -1,74 +1,54 @@ -// Admin Tab - Fun Verbs - -/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world) - set category = "Admin.Fun" - set name = "Explosion" - - if(!check_rights(R_ADMIN)) - return - - var/devastation = input("Range of total devastation. -1 to none", "Input") as num|null +ADMIN_VERB(admin_explosion, R_ADMIN|R_FUN, "Explosion", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/orignator as obj|mob|turf) + var/devastation = input(user, "Range of total devastation. -1 to none", "Input") as num|null if(devastation == null) return - var/heavy = input("Range of heavy impact. -1 to none", "Input") as num|null + var/heavy = input(user, "Range of heavy impact. -1 to none", "Input") as num|null if(heavy == null) return - var/light = input("Range of light impact. -1 to none", "Input") as num|null + var/light = input(user, "Range of light impact. -1 to none", "Input") as num|null if(light == null) return - var/flash = input("Range of flash. -1 to none", "Input") as num|null + var/flash = input(user, "Range of flash. -1 to none", "Input") as num|null if(flash == null) return - var/flames = input("Range of flames. -1 to none", "Input") as num|null + var/flames = input(user, "Range of flames. -1 to none", "Input") as num|null if(flames == null) return if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1)) if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20)) - if (tgui_alert(usr, "Are you sure you want to do this? It will laaag.", "Confirmation", list("Yes", "No")) == "No") + if (tgui_alert(user, "Are you sure you want to do this? It will laaag.", "Confirmation", list("Yes", "No")) == "No") return - explosion(O, devastation, heavy, light, flames, flash, explosion_cause = mob) - log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at [AREACOORD(O)]") - message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at [AREACOORD(O)]") + explosion(orignator, devastation, heavy, light, flames, flash, explosion_cause = user.mob) + log_admin("[key_name(user)] created an explosion ([devastation],[heavy],[light],[flames]) at [AREACOORD(orignator)]") + message_admins("[key_name_admin(user)] created an explosion ([devastation],[heavy],[light],[flames]) at [AREACOORD(orignator)]") BLACKBOX_LOG_ADMIN_VERB("Explosion") -/client/proc/cmd_admin_emp(atom/O as obj|mob|turf in world) - set category = "Admin.Fun" - set name = "EM Pulse" - - if(!check_rights(R_ADMIN)) - return - - var/heavy = input("Range of heavy pulse.", "Input") as num|null +ADMIN_VERB(admin_emp, R_ADMIN|R_FUN, "EM Pulse", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/orignator as obj|mob|turf) + var/heavy = input(user, "Range of heavy pulse.", "Input") as num|null if(heavy == null) return - var/light = input("Range of light pulse.", "Input") as num|null + var/light = input(user, "Range of light pulse.", "Input") as num|null if(light == null) return if (heavy || light) - empulse(O, heavy, light) - log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at [AREACOORD(O)]") - message_admins("[key_name_admin(usr)] created an EM Pulse ([heavy],[light]) at [AREACOORD(O)]") + empulse(orignator, heavy, light) + log_admin("[key_name(user)] created an EM Pulse ([heavy],[light]) at [AREACOORD(orignator)]") + message_admins("[key_name_admin(user)] created an EM Pulse ([heavy],[light]) at [AREACOORD(orignator)]") BLACKBOX_LOG_ADMIN_VERB("EM Pulse") -/client/proc/cmd_admin_gib(mob/victim in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Gib" - - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "Drop a brain?", "Confirm", list("Yes", "No","Cancel")) || "Cancel" +ADMIN_VERB(gib_them, R_ADMIN, "Gib", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/victim in GLOB.mob_list) + var/confirm = tgui_alert(user, "Drop a brain?", "Confirm", list("Yes", "No","Cancel")) || "Cancel" if(confirm == "Cancel") return //Due to the delay here its easy for something to have happened to the mob if(isnull(victim)) return - log_admin("[key_name(usr)] has gibbed [key_name(victim)]") - message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(victim)]") + log_admin("[key_name(user)] has gibbed [key_name(victim)]") + message_admins("[key_name_admin(user)] has gibbed [key_name_admin(victim)]") if(isobserver(victim)) new /obj/effect/gibspawner/generic(get_turf(victim)) @@ -84,62 +64,47 @@ BLACKBOX_LOG_ADMIN_VERB("Gib") -/client/proc/cmd_admin_gib_self() - set name = "Gibself" - set category = "Admin.Fun" - - var/confirm = tgui_alert(usr, "You sure?", "Confirm", list("Yes", "No")) +ADMIN_VERB(gib_self, R_ADMIN, "Gibself", "Give yourself the same treatment you give others.", ADMIN_CATEGORY_FUN) + var/confirm = tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) if(confirm != "Yes") return - log_admin("[key_name(usr)] used gibself.") - message_admins(span_adminnotice("[key_name_admin(usr)] used gibself.")) + log_admin("[key_name(user)] used gibself.") + message_admins(span_adminnotice("[key_name_admin(user)] used gibself.")) BLACKBOX_LOG_ADMIN_VERB("Gib Self") - var/mob/living/ourself = mob + var/mob/living/ourself = user.mob if (istype(ourself)) ourself.gib() -/client/proc/everyone_random() - set category = "Admin.Fun" - set name = "Make Everyone Random" - set desc = "Make everyone have a random appearance. You can only use this before rounds!" - +ADMIN_VERB(everyone_random, R_SERVER, "Make Everyone Random", "Make everyone have a random appearance.", ADMIN_CATEGORY_FUN) if(SSticker.HasRoundStarted()) - to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!", confidential = TRUE) + to_chat(user, "Nope you can't do this, the game's already started. This only works before rounds!", confidential = TRUE) return var/frn = CONFIG_GET(flag/force_random_names) if(frn) CONFIG_SET(flag/force_random_names, FALSE) - message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.") - to_chat(usr, "Disabled.", confidential = TRUE) + message_admins("Admin [key_name_admin(user)] has disabled \"Everyone is Special\" mode.") + to_chat(user, "Disabled.", confidential = TRUE) return - var/notifyplayers = tgui_alert(usr, "Do you want to notify the players?", "Options", list("Yes", "No", "Cancel")) || "Cancel" + var/notifyplayers = tgui_alert(user, "Do you want to notify the players?", "Options", list("Yes", "No", "Cancel")) || "Cancel" if(notifyplayers == "Cancel") return - log_admin("Admin [key_name(src)] has forced the players to have random appearances.") - message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.") + log_admin("Admin [key_name(user)] has forced the players to have random appearances.") + message_admins("Admin [key_name_admin(user)] has forced the players to have random appearances.") if(notifyplayers == "Yes") - to_chat(world, span_adminnotice("Admin [usr.key] has forced the players to have completely random identities!"), confidential = TRUE) + to_chat(world, span_adminnotice("Admin [user.key] has forced the players to have completely random identities!"), confidential = TRUE) - to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.", confidential = TRUE) + to_chat(user, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.", confidential = TRUE) CONFIG_SET(flag/force_random_names, TRUE) BLACKBOX_LOG_ADMIN_VERB("Make Everyone Random") -/client/proc/mass_zombie_infection() - set category = "Admin.Fun" - set name = "Mass Zombie Infection" - set desc = "Infects all humans with a latent organ that will zombify \ - them on death." - - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "Please confirm you want to add latent zombie organs in all humans?", "Confirm Zombies", list("Yes", "No")) +ADMIN_VERB(mass_zombie_infection, R_ADMIN, "Mass Zombie Infection", "Infects all humans with a latent organ that will zombify them on death.", ADMIN_CATEGORY_FUN) + var/confirm = tgui_alert(user, "Please confirm you want to add latent zombie organs in all humans?", "Confirm Zombies", list("Yes", "No")) if(confirm != "Yes") return @@ -147,45 +112,32 @@ var/mob/living/carbon/human/H = i new /obj/item/organ/internal/zombie_infection/nodamage(H) - message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.") - log_admin("[key_name(usr)] added a latent zombie infection to all humans.") + message_admins("[key_name_admin(user)] added a latent zombie infection to all humans.") + log_admin("[key_name(user)] added a latent zombie infection to all humans.") BLACKBOX_LOG_ADMIN_VERB("Mass Zombie Infection") -/client/proc/mass_zombie_cure() - set category = "Admin.Fun" - set name = "Mass Zombie Cure" - set desc = "Removes the zombie infection from all humans, returning them to normal." - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "Please confirm you want to cure all zombies?", "Confirm Zombie Cure", list("Yes", "No")) +ADMIN_VERB(mass_zombie_cure, R_ADMIN, "Mass Zombie Cure", "Removes the zombie infection from all humans, returning them to normal.", ADMIN_CATEGORY_FUN) + var/confirm = tgui_alert(user, "Please confirm you want to cure all zombies?", "Confirm Zombie Cure", list("Yes", "No")) if(confirm != "Yes") return for(var/obj/item/organ/internal/zombie_infection/nodamage/I in GLOB.zombie_infection_list) qdel(I) - message_admins("[key_name_admin(usr)] cured all zombies.") - log_admin("[key_name(usr)] cured all zombies.") + message_admins("[key_name_admin(user)] cured all zombies.") + log_admin("[key_name(user)] cured all zombies.") BLACKBOX_LOG_ADMIN_VERB("Mass Zombie Cure") -/client/proc/polymorph_all() - set category = "Admin.Fun" - set name = "Polymorph All" - set desc = "Applies the effects of the bolt of change to every single mob." - - if(!check_rights(R_ADMIN)) - return - - var/confirm = tgui_alert(usr, "Please confirm you want polymorph all mobs?", "Confirm Polymorph", list("Yes", "No")) +ADMIN_VERB(polymorph_all, R_ADMIN, "Polymorph All", "Applies the effects of the bolt of change to every single mob.", ADMIN_CATEGORY_FUN) + var/confirm = tgui_alert(user, "Please confirm you want polymorph all mobs?", "Confirm Polymorph", list("Yes", "No")) if(confirm != "Yes") return var/list/mobs = shuffle(GLOB.alive_mob_list.Copy()) // might change while iterating - var/who_did_it = key_name_admin(usr) + var/who_did_it = key_name_admin(user) - message_admins("[key_name_admin(usr)] started polymorphed all living mobs.") - log_admin("[key_name(usr)] polymorphed all living mobs.") + message_admins("[key_name_admin(user)] started polymorphed all living mobs.") + log_admin("[key_name(user)] polymorphed all living mobs.") BLACKBOX_LOG_ADMIN_VERB("Polymorph All") for(var/mob/living/M in mobs) @@ -201,23 +153,18 @@ message_admins("Mass polymorph started by [who_did_it] is complete.") -/client/proc/smite(mob/living/target as mob) - set category = "Admin.Fun" - set name = "Smite" - if(!check_rights(R_ADMIN) || !check_rights(R_FUN)) - return - - var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in GLOB.smites +ADMIN_VERB_AND_CONTEXT_MENU(admin_smite, R_ADMIN|R_FUN, "Smite", "Smite a player with divine power.", ADMIN_CATEGORY_FUN, mob/living/target in world) + var/punishment = input(user, "Choose a punishment", "DIVINE SMITING") as null|anything in GLOB.smites if(QDELETED(target) || !punishment) return var/smite_path = GLOB.smites[punishment] var/datum/smite/smite = new smite_path - var/configuration_success = smite.configure(usr) + var/configuration_success = smite.configure(user) if (configuration_success == FALSE) return - smite.effect(src, target) + smite.effect(user, target) /// "Turns" people into objects. Really, we just add them to the contents of the item. /proc/objectify(atom/movable/target, path) diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index a3124c6ee41..28082af0597 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -1,177 +1,171 @@ -// Admin Tab - Game Verbs +ADMIN_VERB(cmd_player_panel, R_ADMIN, "Player Panel", "See all players and their Player Panel.", ADMIN_CATEGORY_GAME) + user.holder.player_panel_new() -/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list) - set category = "Admin.Game" - set name = "Show Player Panel" - set desc="Edit player (respawn, ban, heal, etc)" +ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mob/player in world) + log_admin("[key_name(user)] checked the individual player panel for [key_name(player)][isobserver(user.mob)?"":" while in game"].") - if(!check_rights()) + if(!player) + to_chat(user, span_warning("You seem to be selecting a mob that doesn't exist anymore."), confidential = TRUE) return - log_admin("[key_name(usr)] checked the individual player panel for [key_name(M)][isobserver(usr)?"":" while in game"].") - - if(!M) - to_chat(usr, span_warning("You seem to be selecting a mob that doesn't exist anymore."), confidential = TRUE) - return - - var/body = "Options for [M.key]" - body += "Options panel for [M]" - if(M.client) - body += " played by [M.client] " - body += "\[[M.client.holder ? M.client.holder.rank_names() : "Player"]\]" + var/body = "Options for [player.key]" + body += "Options panel for [player]" + if(player.client) + body += " played by [player.client] " + body += "\[[player.client.holder ? player.client.holder.rank_names() : "Player"]\]" if(CONFIG_GET(flag/use_exp_tracking)) - body += "\[" + M.client.get_exp_living(FALSE) + "\]" + body += "\[" + player.client.get_exp_living(FALSE) + "\]" - if(isnewplayer(M)) + if(isnewplayer(player)) body += " Hasn't Entered Game " else - body += " \[Heal\] " + body += " \[Heal\] " - if(M.ckey) - body += "
    \[Find Updated Panel\]" + if(player.ckey) + body += "
    \[Find Updated Panel\]" - if(M.client) - body += "
    \[First Seen: [M.client.player_join_date]\]\[Byond account registered on: [M.client.account_join_date]\]" + if(player.client) + body += "
    \[First Seen: [player.client.player_join_date]\]\[Byond account registered on: [player.client.account_join_date]\]" // SKYRAT EDIT ADDITION START - Player Ranks var/list/player_ranks = list() - if(SSplayer_ranks.is_donator(M.client, admin_bypass = FALSE)) + if(SSplayer_ranks.is_donator(player.client, admin_bypass = FALSE)) player_ranks += "Donator" - if(SSplayer_ranks.is_mentor(M.client, admin_bypass = FALSE)) + if(SSplayer_ranks.is_mentor(player.client, admin_bypass = FALSE)) player_ranks += "Mentor" - if(SSplayer_ranks.is_veteran(M.client, admin_bypass = FALSE)) + if(SSplayer_ranks.is_veteran(player.client, admin_bypass = FALSE)) player_ranks += "Veteran" body += "

    Player Ranks: [length(player_ranks) ? player_ranks.Join(", ") : "None"]" // SKYRAT EDIT END body += "

    CentCom Galactic Ban DB: " if(CONFIG_GET(string/centcom_ban_db)) - body += "Search" + body += "Search" else body += "Disabled" body += "

    Show related accounts by: " - body += "\[ CID | " - body += "IP \]" + body += "\[ CID | " + body += "IP \]" var/full_version = "Unknown" - if(M.client.byond_version) - full_version = "[M.client.byond_version].[M.client.byond_build ? M.client.byond_build : "xxx"]" + if(player.client.byond_version) + full_version = "[player.client.byond_version].[player.client.byond_build ? player.client.byond_build : "xxx"]" body += "
    \[Byond version: [full_version]\]
    " body += "

    \[ " - body += "VV - " - if(M.mind) - body += "TP - " - body += "SKILLS - " + body += "VV - " + if(player.mind) + body += "TP - " + body += "SKILLS - " else - body += "Init Mind - " - if (iscyborg(M)) - body += "BP - " - body += "PM - " - body += "SM - " - if (ishuman(M) && M.mind) - body += "HM - " - body += "FLW - " + body += "Init Mind - " + if (iscyborg(player)) + body += "BP - " + body += "PM - " + body += "SM - " + if (ishuman(player) && player.mind) + body += "HM - " + body += "FLW - " //Default to client logs if available var/source = LOGSRC_MOB - if(M.ckey) + if(player.ckey) source = LOGSRC_CKEY - body += "LOGS\]
    " + body += "LOGS\]
    " - body += "Mob type = [M.type]

    " + body += "Mob type = [player.type]

    " - if(M.client) + if(player.client) body += "Old names: " - var/datum/player_details/deets = GLOB.player_details[M.ckey] + var/datum/player_details/deets = GLOB.player_details[player.ckey] if(deets) body += deets.get_played_names() else body += "None?!" body += "

    " - body += "Kick | " - if(M.client) - body += "Ban | " + body += "Kick | " + if(player.client) + body += "Ban | " else - body += "Ban | " + body += "Ban | " - body += "Notes | Messages | Watchlist | " - if(M.client) - body += "| Prison | " - body += "\ Send back to Lobby | " - var/muted = M.client.prefs.muted + body += "Notes | Messages | Watchlist | " + if(player.client) + body += "| Prison | " + body += "\ Send back to Lobby | " + var/muted = player.client.prefs.muted body += "
    Mute: " - body += "\[IC | " - body += "OOC | " - body += "PRAY | " - body += "ADMINHELP | " + body += "\[IC | " + body += "OOC | " + body += "PRAY | " + body += "ADMINHELP | " //Skyrat Addition Begin - LOOC muting again. - body += "DEADCHAT | " - body += "LOOC\]" + body += "DEADCHAT | " + body += "LOOC\]" //Skyrat Addition End - LOOC muting again. - body += " WEBREQ | " - body += "DEADCHAT\]" - body += "(toggle all)" + body += "WEBREQ | " + body += "DEADCHAT\]" + body += "(toggle all)" body += "

    " - body += "Jump to | " - body += "Get | " - body += "Send To" + body += "Jump to | " + body += "Get | " + body += "Send To" body += "

    " - body += "Traitor panel | " - body += "Narrate to | " - body += "Subtle message | " - body += "Play sound to | " - body += "Language Menu" + body += "Traitor panel | " + body += "Narrate to | " + body += "Subtle message | " + body += "Play sound to | " + body += "Language Menu" - if(M.client) - if(!isnewplayer(M)) + if(player.client) + if(!isnewplayer(player)) body += "

    " body += "Transformation:
    " - if(isobserver(M)) + if(isobserver(player)) body += "Ghost | " else - body += "Make Ghost | " + body += "Make Ghost | " - if(ishuman(M) && !ismonkey(M)) + if(ishuman(player) && !ismonkey(player)) body += "Human | " else - body += "Make Human | " + body += "Make Human | " - if(ismonkey(M)) + if(ismonkey(player)) body += "Monkey | " else - body += "Make Monkey | " + body += "Make Monkey | " - if(iscyborg(M)) + if(iscyborg(player)) body += "Cyborg | " else - body += "Make Cyborg | " + body += "Make Cyborg | " - if(isAI(M)) + if(isAI(player)) body += "AI" else - body += "Make AI" + body += "Make AI" body += "

    " body += "Other actions:" body += "
    " - if(!isnewplayer(M)) - body += "Forcesay | " - body += "Apply Client Quirks | " - body += "Thunderdome 1 | " - body += "Thunderdome 2 | " - body += "Thunderdome Admin | " - body += "Thunderdome Observer | " - body += "Commend Behavior | " + if(!isnewplayer(player)) + body += "Forcesay | " + body += "Apply Client Quirks | " + body += "Thunderdome 1 | " + body += "Thunderdome 2 | " + body += "Thunderdome Admin | " + body += "Thunderdome Observer | " + body += "Commend Behavior | " body += "
    " body += "" - usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515") + user << browse(body, "window=adminplayeropts-[REF(player)];size=550x515") BLACKBOX_LOG_ADMIN_VERB("Player Panel") /client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list) @@ -194,14 +188,8 @@ If a guy was gibbed and you want to revive him, this is a good way to do so. Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one. Traitors and the like can also be revived with the previous role mostly intact. /N */ -/client/proc/respawn_character() - set category = "Admin.Game" - set name = "Respawn Character" - set desc = "Respawn a person that has been gibbed/dusted/killed. They must be a ghost for this to work and preferably should not have a body to go back into." - if(!check_rights(R_ADMIN)) - return - - var/input = ckey(input(src, "Please specify which key will be respawned.", "Key", "")) +ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player that has been round removed in some manner. They must be a ghost.", ADMIN_CATEGORY_GAME) + var/input = ckey(input(user, "Please specify which key will be respawned.", "Key", "")) if(!input) return @@ -212,19 +200,19 @@ Traitors and the like can also be revived with the previous role mostly intact. break if(!G_found)//If a ghost was not found. - to_chat(usr, "There is no active key like that in the game or the person is not currently a ghost.", confidential = TRUE) + to_chat(user, "There is no active key like that in the game or the person is not currently a ghost.", confidential = TRUE) return if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something //check if they were a monkey if(findtext(G_found.real_name,"monkey")) - if(tgui_alert(usr,"This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No")) == "Yes") + if(tgui_alert(user,"This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No")) == "Yes") var/mob/living/carbon/human/species/monkey/new_monkey = new SSjob.SendToLateJoin(new_monkey) G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use new_monkey.key = G_found.key to_chat(new_monkey, "You have been fully respawned. Enjoy the game.", confidential = TRUE) - var/msg = span_adminnotice("[key_name_admin(usr)] has respawned [new_monkey.key] as a filthy monkey.") + var/msg = span_adminnotice("[key_name_admin(user)] has respawned [new_monkey.key] as a filthy monkey.") message_admins(msg) admin_ticket_log(new_monkey, msg) return //all done. The ghost is auto-deleted @@ -266,7 +254,7 @@ Traitors and the like can also be revived with the previous role mostly intact. */ //Two variables to properly announce later on. - var/admin = key_name_admin(src) + var/admin = key_name_admin(user) var/player_key = G_found.key //Now for special roles and equipment. @@ -321,13 +309,8 @@ Traitors and the like can also be revived with the previous role mostly intact. BLACKBOX_LOG_ADMIN_VERB("Respawn Character") return new_character -/client/proc/cmd_admin_list_open_jobs() - set category = "Admin.Game" - set name = "Manage Job Slots" - - if(!check_rights(R_ADMIN)) - return - holder.manage_free_slots() +ADMIN_VERB(manage_job_slots, R_ADMIN, "Manage Job Slots", "Manage the number of available job slots.", ADMIN_CATEGORY_GAME) + user.holder.manage_free_slots() BLACKBOX_LOG_ADMIN_VERB("Manage Job Slots") /datum/admins/proc/manage_free_slots() @@ -370,38 +353,25 @@ Traitors and the like can also be revived with the previous role mostly intact. browser.set_content(dat.Join()) browser.open() -/client/proc/toggle_view_range() - set category = "Admin.Game" - set name = "Change View Range" - set desc = "switches between 1x and custom views" - - if(view_size.getView() == view_size.default) - view_size.setTo(input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,37) - 7) +ADMIN_VERB(toggle_view_range, R_ADMIN, "Change View Range", "Switch between 1x and custom views.", ADMIN_CATEGORY_GAME) + if(user.view_size.getView() == user.view_size.default) + user.view_size.setTo(input(user, "Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,37) - 7) else - view_size.resetToDefault(getScreenSize(prefs.read_preference(/datum/preference/toggle/widescreen))) + user.view_size.resetToDefault(getScreenSize(user.prefs.read_preference(/datum/preference/toggle/widescreen))) - log_admin("[key_name(usr)] changed their view range to [view].") - //message_admins("\blue [key_name_admin(usr)] changed their view range to [view].") //why? removed by order of XSI + log_admin("[key_name(user)] changed their view range to [user.view].") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Change View Range", "[user.view]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Change View Range", "[view]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! - -/client/proc/toggle_combo_hud() - set category = "Admin.Game" - set name = "Toggle Combo HUD" - set desc = "Toggles the Admin Combo HUD (antag, sci, med, eng)" - - if(!check_rights(R_ADMIN)) - return - - if (combo_hud_enabled) - disable_combo_hud() +ADMIN_VERB(combo_hud, R_ADMIN, "Toggle Combo HUD", "Toggles the Admin Combo HUD.", ADMIN_CATEGORY_GAME) + if(user.combo_hud_enabled) + user.disable_combo_hud() else - enable_combo_hud() + user.enable_combo_hud() - to_chat(usr, "You toggled your admin combo HUD [combo_hud_enabled ? "ON" : "OFF"].", confidential = TRUE) - message_admins("[key_name_admin(usr)] toggled their admin combo HUD [combo_hud_enabled ? "ON" : "OFF"].") - log_admin("[key_name(usr)] toggled their admin combo HUD [combo_hud_enabled ? "ON" : "OFF"].") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Combo HUD", "[combo_hud_enabled ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + to_chat(user, "You toggled your admin combo HUD [user.combo_hud_enabled ? "ON" : "OFF"].", confidential = TRUE) + message_admins("[key_name_admin(user)] toggled their admin combo HUD [user.combo_hud_enabled ? "ON" : "OFF"].") + log_admin("[key_name(user)] toggled their admin combo HUD [user.combo_hud_enabled ? "ON" : "OFF"].") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Combo HUD", "[user.combo_hud_enabled ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! /client/proc/enable_combo_hud() if (combo_hud_enabled) @@ -435,47 +405,31 @@ Traitors and the like can also be revived with the previous role mostly intact. mob.lighting_cutoff = mob.default_lighting_cutoff() mob.update_sight() -/datum/admins/proc/show_traitor_panel(mob/target_mob in GLOB.mob_list) - set category = "Admin.Game" - set desc = "Edit mobs's memory and role" - set name = "Show Traitor Panel" +ADMIN_VERB(show_traitor_panel, R_ADMIN, "Show Traitor Panel", "Edit mobs's memory and role", ADMIN_CATEGORY_GAME, mob/target_mob) var/datum/mind/target_mind = target_mob.mind if(!target_mind) - to_chat(usr, "This mob has no mind!", confidential = TRUE) + to_chat(user, "This mob has no mind!", confidential = TRUE) return if(!istype(target_mob) && !istype(target_mind)) - to_chat(usr, "This can only be used on instances of type /mob and /mind", confidential = TRUE) + to_chat(user, "This can only be used on instances of type /mob and /mind", confidential = TRUE) return target_mind.traitor_panel() BLACKBOX_LOG_ADMIN_VERB("Traitor Panel") -/datum/admins/proc/show_skill_panel(target) - set category = "Admin.Game" - set desc = "Edit mobs's experience and skill levels" - set name = "Show Skill Panel" +ADMIN_VERB(show_skill_panel, R_ADMIN, "Show Skill Panel", "Edit mobs's experience and skill levels", ADMIN_CATEGORY_GAME, mob/target_mob) var/datum/mind/target_mind - if(ismob(target)) - var/mob/target_mob = target - target_mind = target_mob.mind - else if (istype(target, /datum/mind)) - target_mind = target + if(istype(target_mob, /datum/mind)) + target_mind = target_mob else - to_chat(usr, "This can only be used on instances of type /mob and /mind", confidential = TRUE) - return - var/datum/skill_panel/SP = new(usr, target_mind) - SP.ui_interact(usr) + target_mind = target_mob.mind -/datum/admins/proc/show_lag_switch_panel() - set category = "Admin.Game" - set name = "Show Lag Switches" - set desc="Display the controls for drastic lag mitigation measures." + var/datum/skill_panel/SP = new(user, target_mind) + SP.ui_interact(user.mob) +ADMIN_VERB(lag_switch_panel, R_ADMIN, "Show Lag Switches", "Display the controls for drastic lag mitigation.", ADMIN_CATEGORY_GAME) if(!SSlag_switch.initialized) - to_chat(usr, span_notice("The Lag Switch subsystem has not yet been initialized.")) + to_chat(user, span_notice("The Lag Switch subsystem has not yet been initialized.")) return - if(!check_rights()) - return - var/list/dat = list("Lag Switches

    Lag (Reduction) Switches

    ") dat += "Automatic Trigger: [SSlag_switch.auto_switch ? "On" : "Off"]
    " dat += "Population Threshold: [SSlag_switch.trigger_pop]
    " @@ -494,4 +448,4 @@ Traitors and the like can also be revived with the previous role mostly intact. dat += "Disable footsteps: [SSlag_switch.measures[DISABLE_FOOTSTEPS] ? "On" : "Off"] - trait applies to character
    " dat += "Disable character creator: [SSlag_switch.measures[DISABLE_CREATOR] ? "On" : "Off"] - trait applies to all
    " // SKRYAT EDIT ADDITION dat += "" - usr << browse(dat.Join(), "window=lag_switch_panel;size=420x480") + user << browse(dat.Join(), "window=lag_switch_panel;size=420x480") diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index dfcc5f60dd0..0248ccd9975 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,114 +1,66 @@ -/client/proc/jumptoarea(area/A in get_sorted_areas()) - set name = "Jump to Area" - set desc = "Area to jump to" - set category = "Admin.Game" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) +ADMIN_VERB(jump_to_area, R_ADMIN, "Jump To Area", "Jumps to the specified area.", ADMIN_CATEGORY_GAME, area/target in get_sorted_areas()) + var/turf/drop_location + top_level: + for(var/list/zlevel_turfs as anything in target.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + if(area_turf.density) + continue + drop_location = area_turf + break top_level + + if(isnull(drop_location)) + to_chat(user, span_warning("No valid drop location found in the area!")) return - if(!A) - return + user.mob.abstract_move(drop_location) + log_admin("[key_name(user)] jumped to [AREACOORD(drop_location)]") + message_admins("[key_name_admin(user)] jumped to [AREACOORD(drop_location)]") + BLACKBOX_LOG_ADMIN_VERB("Jump To Area") - var/list/turfs = list() - for (var/list/zlevel_turfs as anything in A.get_zlevel_turf_lists()) - for (var/turf/area_turf as anything in zlevel_turfs) - if(!area_turf.density) - turfs.Add(area_turf) - - if(length(turfs)) - var/turf/T = pick(turfs) - usr.forceMove(T) - log_admin("[key_name(usr)] jumped to [AREACOORD(T)]") - message_admins("[key_name_admin(usr)] jumped to [AREACOORD(T)]") - BLACKBOX_LOG_ADMIN_VERB("Jump To Area") - else - to_chat(src, "Nowhere to jump to!", confidential = TRUE) - return - - -/client/proc/jumptoturf(turf/T in world) - set name = "Jump to Turf" - set category = "Admin.Game" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - - log_admin("[key_name(usr)] jumped to [AREACOORD(T)]") - message_admins("[key_name_admin(usr)] jumped to [AREACOORD(T)]") - usr.forceMove(T) +ADMIN_VERB_AND_CONTEXT_MENU(jump_to_turf, R_ADMIN, "Jump To Turf", "Jump to any turf in the game. This will lag your client.", ADMIN_CATEGORY_GAME, turf/locale in world) + log_admin("[key_name(user)] jumped to [AREACOORD(locale)]") + message_admins("[key_name_admin(user)] jumped to [AREACOORD(locale)]") + user.mob.abstract_move(locale) BLACKBOX_LOG_ADMIN_VERB("Jump To Turf") - return -/client/proc/jumptomob(mob/M in GLOB.mob_list) - set category = "Admin.Game" - set name = "Jump to Mob" +ADMIN_VERB_AND_CONTEXT_MENU(jump_to_mob, R_ADMIN, "Jump To Mob", "Jump to any mob in the game.", ADMIN_CATEGORY_GAME, mob/target in world) + user.mob.abstract_move(target.loc) + log_admin("[key_name(user)] jumped to [key_name(target)]") + message_admins("[key_name_admin(user)] jumped to [ADMIN_LOOKUPFLW(target)] at [AREACOORD(target)]") + BLACKBOX_LOG_ADMIN_VERB("Jump To Mob") - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) +ADMIN_VERB(jump_to_coord, R_ADMIN, "Jump To Coordinate", "Jump to a specific coordinate in the game world.", ADMIN_CATEGORY_GAME, cx as num, cy as num, cz as num) + var/turf/where_we_droppin = locate(cx, cy, cz) + if(isnull(where_we_droppin)) + to_chat(user, span_warning("Invalid coordinates.")) return - log_admin("[key_name(usr)] jumped to [key_name(M)]") - message_admins("[key_name_admin(usr)] jumped to [ADMIN_LOOKUPFLW(M)] at [AREACOORD(M)]") - if(src.mob) - var/mob/A = src.mob - var/turf/T = get_turf(M) - if(T && isturf(T)) - BLACKBOX_LOG_ADMIN_VERB("Jump To Mob") - A.forceMove(M.loc) - else - to_chat(A, "This mob is not located in the game world.", confidential = TRUE) + user.mob.abstract_move(where_we_droppin) + message_admins("[key_name_admin(user)] jumped to coordinates [cx], [cy], [cz]") + BLACKBOX_LOG_ADMIN_VERB("Jump To Coordiate") -/client/proc/jumptocoord(tx as num, ty as num, tz as num) - set category = "Admin.Game" - set name = "Jump to Coordinate" - - if (!holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - - if(src.mob) - var/mob/A = src.mob - var/turf/T = locate(tx,ty,tz) - A.forceMove(T) - BLACKBOX_LOG_ADMIN_VERB("Jump To Coordiate") - message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") - -/client/proc/jumptokey() - set category = "Admin.Game" - set name = "Jump to Key" - - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return +ADMIN_VERB(jump_to_key, R_ADMIN, "Jump To Key", "Jump to a specific player.", ADMIN_CATEGORY_GAME) + if(!isobserver(user.mob)) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) var/list/keys = list() for(var/mob/M in GLOB.player_list) keys += M.client - var/client/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sort_key(keys) + var/client/selection = input(user, "Please, select a player!", "Admin Jumping") as null|anything in sort_key(keys) if(!selection) - to_chat(src, "No keys found.", confidential = TRUE) + to_chat(user, "No keys found.", confidential = TRUE) return var/mob/M = selection.mob - log_admin("[key_name(usr)] jumped to [key_name(M)]") - message_admins("[key_name_admin(usr)] jumped to [ADMIN_LOOKUPFLW(M)]") - - usr.forceMove(M.loc) - + log_admin("[key_name(user)] jumped to [key_name(M)]") + message_admins("[key_name_admin(user)] jumped to [ADMIN_LOOKUPFLW(M)]") + user.mob.abstract_move(M.loc) BLACKBOX_LOG_ADMIN_VERB("Jump To Key") -/client/proc/Getmob(mob/M in GLOB.mob_list - GLOB.dummy_mob_list) - set category = "Admin.Game" - set name = "Get Mob" - set desc = "Mob to teleport" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - - var/atom/loc = get_turf(usr) - M.admin_teleport(loc) +ADMIN_VERB_AND_CONTEXT_MENU(get_mob, R_ADMIN, "Get Mob", "Teleport a mob to your location.", ADMIN_CATEGORY_GAME, mob/target in world) + var/atom/loc = get_turf(user.mob) + target.admin_teleport(loc) BLACKBOX_LOG_ADMIN_VERB("Get Mob") - /// Proc to hook user-enacted teleporting behavior and keep logging of the event. /atom/movable/proc/admin_teleport(atom/new_location) if(isnull(new_location)) @@ -126,56 +78,41 @@ admin_ticket_log(src, msg) return ..() - -/client/proc/Getkey() - set category = "Admin.Game" - set name = "Get Key" - set desc = "Key to teleport" - - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - +ADMIN_VERB(get_key, R_ADMIN, "Get Key", "Teleport the player with the provided key to you.", ADMIN_CATEGORY_GAME) var/list/keys = list() for(var/mob/M in GLOB.player_list) keys += M.client - var/client/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sort_key(keys) + var/client/selection = input(user, "Please, select a player!", "Admin Jumping") as null|anything in sort_key(keys) if(!selection) return var/mob/M = selection.mob if(!M) return - log_admin("[key_name(usr)] teleported [key_name(M)]") - var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)]" + log_admin("[key_name(user)] teleported [key_name(M)]") + var/msg = "[key_name_admin(user)] teleported [ADMIN_LOOKUPFLW(M)]" message_admins(msg) admin_ticket_log(M, msg) if(M) - M.forceMove(get_turf(usr)) - usr.forceMove(M.loc) + M.forceMove(get_turf(user)) BLACKBOX_LOG_ADMIN_VERB("Get Key") -/client/proc/sendmob(mob/jumper in sort_mobs()) - set category = "Admin.Game" - set name = "Send Mob" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return +ADMIN_VERB_AND_CONTEXT_MENU(send_mob, R_ADMIN, "Send Mob", "Teleport the specified mob to an area of your choosing.", ADMIN_CATEGORY_GAME, mob/jumper) var/list/sorted_areas = get_sorted_areas() if(!length(sorted_areas)) - to_chat(src, "No areas found.", confidential = TRUE) + to_chat(user, "No areas found.", confidential = TRUE) return - var/area/target_area = tgui_input_list(src, "Pick an area", "Send Mob", sorted_areas) + var/area/target_area = tgui_input_list(user, "Pick an area", "Send Mob", sorted_areas) if(isnull(target_area)) return if(!istype(target_area)) return var/list/turfs = get_area_turfs(target_area) if(length(turfs) && jumper.forceMove(pick(turfs))) - log_admin("[key_name(usr)] teleported [key_name(jumper)] to [AREACOORD(jumper)]") - var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(jumper)] to [AREACOORD(jumper)]" + log_admin("[key_name(user)] teleported [key_name(jumper)] to [AREACOORD(jumper)]") + var/msg = "[key_name_admin(user)] teleported [ADMIN_LOOKUPFLW(jumper)] to [AREACOORD(jumper)]" message_admins(msg) admin_ticket_log(jumper, msg) else - to_chat(src, "Failed to move mob to a valid location.", confidential = TRUE) + to_chat(user, "Failed to move mob to a valid location.", confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Send Mob") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 529cf4d8a77..ae1630243cd 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -13,36 +13,19 @@ // We also make SURE to fail loud, IE: if something stops the message from reaching the recipient, the sender HAS to know // If you "refactor" this to make it "cleaner" I will send you to hell -/// Allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm -/client/proc/cmd_admin_pm_context(mob/M in GLOB.mob_list) - set category = null - set name = "Admin PM Mob" - if(!holder) - to_chat(src, - type = MESSAGE_TYPE_ADMINPM, - html = span_danger("Error: Admin-PM-Context: Only administrators may use this command."), - confidential = TRUE) - return - if(!ismob(M)) - to_chat(src, +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_pm_context, R_NONE, "Admin PM Mob", mob/target in world) + if(!ismob(target)) + to_chat( + src, type = MESSAGE_TYPE_ADMINPM, html = span_danger("Error: Admin-PM-Context: Target mob is not a mob, somehow."), - confidential = TRUE) + confidential = TRUE, + ) return - cmd_admin_pm(M.client, null) + user.cmd_admin_pm(target.client, null) BLACKBOX_LOG_ADMIN_VERB("Admin PM Mob") -/// Shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm -/client/proc/cmd_admin_pm_panel() - set category = "Admin" - set name = "Admin PM" - if(!holder) - to_chat(src, - type = MESSAGE_TYPE_ADMINPM, - html = span_danger("Error: Admin-PM-Panel: Only administrators may use this command."), - confidential = TRUE) - return - +ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM", ADMIN_CATEGORY_MAIN) var/list/targets = list() for(var/client/client in GLOB.clients) var/nametag = "" @@ -62,7 +45,7 @@ var/target = input(src,"To whom shall we send a message?", "Admin PM", null) as null|anything in sort_list(targets) if (isnull(target)) return - cmd_admin_pm(targets[target], null) + user.cmd_admin_pm(targets[target], null) BLACKBOX_LOG_ADMIN_VERB("Admin PM") /// Replys to some existing ahelp, reply to whom, which can be a client or ckey diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index ad7a89a228d..87410528ab3 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -1,18 +1,12 @@ -/client/proc/cmd_admin_say(msg as text) - set category = "Admin" - set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite - set hidden = TRUE - if(!check_rights(0)) +ADMIN_VERB(cmd_admin_say, R_NONE, "ASay", "Send a message to other admins", ADMIN_CATEGORY_MAIN, message as text) + message = emoji_parse(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) + if(!message) return - msg = emoji_parse(copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)) - if(!msg) - return - - if(findtext(msg, "@") || findtext(msg, "#")) - var/list/link_results = check_asay_links(msg) + if(findtext(message, "@") || findtext(message, "#")) + var/list/link_results = check_asay_links(message) if(length(link_results)) - msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX] + message = link_results[ASAY_LINK_NEW_MESSAGE_INDEX] link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX] for(var/iter_ckey in pinged_admin_clients) @@ -22,19 +16,19 @@ window_flash(iter_admin_client) SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg')) - mob.log_talk(msg, LOG_ASAY) - msg = keywords_lookup(msg) - send_asay_to_other_server(ckey, msg) //SKYRAT EDIT ADDITION - var/asay_color = prefs.read_preference(/datum/preference/color/asay_color) + user.mob.log_talk(message, LOG_ASAY) + message = keywords_lookup(message) + send_asay_to_other_server(user.ckey, message) //SKYRAT EDIT ADDITION + var/asay_color = user.prefs.read_preference(/datum/preference/color/asay_color) var/custom_asay_color = (CONFIG_GET(flag/allow_admin_asaycolor) && asay_color) ? "" : "" - msg = "[span_adminsay("[span_prefix("ADMIN:")] [key_name(usr, 1)] [ADMIN_FLW(mob)]: [custom_asay_color][msg]")][custom_asay_color ? "":null]" + message = "[span_adminsay("[span_prefix("ADMIN:")] [key_name_admin(user)] [ADMIN_FLW(user.mob)]: [custom_asay_color][message]")][custom_asay_color ? "":null]" to_chat(GLOB.admins, type = MESSAGE_TYPE_ADMINCHAT, - html = msg, + html = message, confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Asay") /client/proc/get_admin_say() var/msg = input(src, null, "asay \"text\"") as text|null - cmd_admin_say(msg) + SSadmin_verbs.dynamic_invoke_verb(src, /datum/admin_verb/cmd_admin_say, msg) diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 2e73a9955f7..9f744ff0147 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -1,35 +1,27 @@ -/client/proc/atmosscan() - set category = "Mapping" - set name = "Check Plumbing" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return +ADMIN_VERB_VISIBILITY(atmos_debug, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(atmos_debug, R_DEBUG, "Check Plumbing", "Verifies the integrity of the plumbing network.", ADMIN_CATEGORY_MAPPING) BLACKBOX_LOG_ADMIN_VERB("Check Plumbing") //all plumbing - yes, some things might get stated twice, doesn't matter. for(var/obj/machinery/atmospherics/components/pipe as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components)) if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) - to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE) + to_chat(user, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE) //Pipes for(var/obj/machinery/atmospherics/pipe/pipe as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/pipe)) if(istype(pipe, /obj/machinery/atmospherics/pipe/smart) || istype(pipe, /obj/machinery/atmospherics/pipe/layer_manifold)) continue if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) - to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE) + to_chat(user, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE) //Nodes for(var/obj/machinery/atmospherics/node1 as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics)) for(var/obj/machinery/atmospherics/node2 in node1.nodes) if(!(node1 in node2.nodes)) - to_chat(usr, "One-way connection in [node1.name] located at [ADMIN_VERBOSEJMP(node1)]", confidential = TRUE) + to_chat(user, "One-way connection in [node1.name] located at [ADMIN_VERBOSEJMP(node1)]", confidential = TRUE) -/client/proc/powerdebug() - set category = "Mapping" - set name = "Check Power" - if(!src.holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return +ADMIN_VERB_VISIBILITY(power_debug, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(power_debug, R_DEBUG, "Check Power", "Verifies the integrity of the power network.", ADMIN_CATEGORY_MAPPING) BLACKBOX_LOG_ADMIN_VERB("Check Power") var/list/results = list() @@ -56,4 +48,4 @@ var/obj/structure/cable/C = locate(/obj/structure/cable) in T.contents if(!C) results += "Unwired terminal at [ADMIN_VERBOSEJMP(term)]" - to_chat(usr, "[results.Join("\n")]", confidential = TRUE) + to_chat(user, "[results.Join("\n")]", confidential = TRUE) diff --git a/code/modules/admin/verbs/beakerpanel.dm b/code/modules/admin/verbs/beakerpanel.dm index 5ba32ae7b6c..7088fba92f1 100644 --- a/code/modules/admin/verbs/beakerpanel.dm +++ b/code/modules/admin/verbs/beakerpanel.dm @@ -60,14 +60,11 @@ reagents.add_reagent(reagenttype, amount) return container -/datum/admins/proc/beaker_panel() - set category = "Admin.Events" - set name = "Spawn reagent container" - if(!check_rights()) - return +ADMIN_VERB(beaker_panel, R_SPAWN, "Spawn Reagent Container", "Spawn a reagent container.", ADMIN_CATEGORY_EVENTS) var/datum/asset/asset_datum = get_asset_datum(/datum/asset/simple/namespaced/common) - asset_datum.send(usr) + asset_datum.send(user) //Could somebody tell me why this isn't using the browser datum, given that it copypastes all of browser datum's html + // fuck if I know, but im not touching it var/dat = {" @@ -320,4 +317,4 @@ "} - usr << browse(dat, "window=beakerpanel;size=1100x720") + user << browse(dat, "window=beakerpanel;size=1100x720") diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index b8fd3698a56..6a8e1efdb56 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -1,21 +1,6 @@ -/datum/admins/proc/open_borgopanel(borgo in GLOB.silicon_mobs) - set category = "Admin.Game" - set name = "Show Borg Panel" - set desc = "Show borg panel" - - if(!check_rights(R_ADMIN)) - return - - if (!iscyborg(borgo)) - borgo = input("Select a borg", "Select a borg", null, null) as null|anything in sort_names(GLOB.silicon_mobs) - if (!iscyborg(borgo)) - to_chat(usr, span_warning("Borg is required for borgpanel"), confidential = TRUE) - - var/datum/borgpanel/borgpanel = new(usr, borgo) - - borgpanel.ui_interact(usr) - - +ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/silicon/robot/borgo) + var/datum/borgpanel/borgpanel = new(user.mob, borgo) + borgpanel.ui_interact(user.mob) /datum/borgpanel var/mob/living/silicon/robot/borg diff --git a/code/modules/admin/verbs/change_shuttle_events.dm b/code/modules/admin/verbs/change_shuttle_events.dm index 4ec8a7cd7b8..90f7e03672e 100644 --- a/code/modules/admin/verbs/change_shuttle_events.dm +++ b/code/modules/admin/verbs/change_shuttle_events.dm @@ -1,20 +1,9 @@ -///Manipulate the events that are gonna run/are running on the escape shuttle -/datum/admins/proc/change_shuttle_events() - set category = "Admin.Events" - set name = "Change Shuttle Events" - set desc = "Allows you to change the events on a shuttle." - - if (!istype(src, /datum/admins)) - src = usr.client.holder - if (!istype(src, /datum/admins)) - to_chat(usr, "Error: you are not an admin!", confidential = TRUE) - return - +ADMIN_VERB(change_shuttle_events, R_ADMIN|R_FUN, "Change Shuttle Events", "Change the events on a shuttle.", ADMIN_CATEGORY_EVENTS) //At least for now, just letting admins modify the emergency shuttle is fine var/obj/docking_port/mobile/port = SSshuttle.emergency if(!port) - to_chat(usr, span_admin("Uh oh, couldn't find the escape shuttle!")) + to_chat(user, span_admin("Uh oh, couldn't find the escape shuttle!")) var/list/options = list("Clear"="Clear") @@ -27,16 +16,16 @@ options[((event in active) ? "(Remove)" : "(Add)") + initial(event.name)] = event //Throw up an ugly menu with the shuttle events and the options to add or remove them, or clear them all - var/result = input(usr, "Choose an event to add/remove", "Shuttle Events") as null|anything in sort_list(options) + var/result = input(user, "Choose an event to add/remove", "Shuttle Events") as null|anything in sort_list(options) if(result == "Clear") port.event_list.Cut() - message_admins("[key_name_admin(usr)] has cleared the shuttle events on: [port]") + message_admins("[key_name_admin(user)] has cleared the shuttle events on: [port]") else if(options[result]) var/typepath = options[result] if(typepath in active) port.event_list.Remove(active[options[result]]) - message_admins("[key_name_admin(usr)] has removed '[active[result]]' from [port].") + message_admins("[key_name_admin(user)] has removed '[active[result]]' from [port].") else port.event_list.Add(new typepath (port)) - message_admins("[key_name_admin(usr)] has added '[typepath]' to [port].") + message_admins("[key_name_admin(user)] has added '[typepath]' to [port].") diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index b001099d283..f9e96c89cd0 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -1,14 +1,10 @@ -/client/proc/cinematic() - set name = "Cinematic" - set category = "Admin.Fun" - set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. - set hidden = TRUE - - if(!SSticker) - return - - var/datum/cinematic/choice = tgui_input_list(usr, "Chose a cinematic to play to everyone in the server.", "Choose Cinematic", sort_list(subtypesof(/datum/cinematic), GLOBAL_PROC_REF(cmp_typepaths_asc))) +ADMIN_VERB(cinematic, R_FUN, "Cinematic", "Show a cinematic to all players.", ADMIN_CATEGORY_FUN) + var/datum/cinematic/choice = tgui_input_list( + user, + "Chose a cinematic to play to everyone in the server.", + "Choose Cinematic", + sort_list(subtypesof(/datum/cinematic), GLOBAL_PROC_REF(cmp_typepaths_asc)), + ) if(!choice || !ispath(choice, /datum/cinematic)) return - play_cinematic(choice, world) diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm index 86e7ec1328b..047ef04a0b7 100644 --- a/code/modules/admin/verbs/commandreport.dm +++ b/code/modules/admin/verbs/commandreport.dm @@ -7,32 +7,19 @@ #define WIZARD_PRESET "The Wizard Federation" #define CUSTOM_PRESET "Custom Command Name" -/// Verb to change the global command name. -/client/proc/cmd_change_command_name() - set category = "Admin.Events" - set name = "Change Command Name" - - if(!check_rights(R_ADMIN)) - return - - var/input = input(usr, "Please input a new name for Central Command.", "What?", "") as text|null +ADMIN_VERB(change_command_name, R_ADMIN, "Change Command Name", "Change the name of Central Command.", ADMIN_CATEGORY_EVENTS) + var/input = input(user, "Please input a new name for Central Command.", "What?", "") as text|null if(!input) return change_command_name(input) - message_admins("[key_name_admin(src)] has changed Central Command's name to [input]") - log_admin("[key_name(src)] has changed the Central Command name to: [input]") + message_admins("[key_name_admin(user)] has changed Central Command's name to [input]") + log_admin("[key_name(user)] has changed the Central Command name to: [input]") /// Verb to open the create command report window and send command reports. -/client/proc/cmd_admin_create_centcom_report() - set category = "Admin.Events" - set name = "Create Command Report" - - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(create_command_report, R_ADMIN, "Create Command Report", "Create a command report to be sent to the station.", ADMIN_CATEGORY_EVENTS) BLACKBOX_LOG_ADMIN_VERB("Create Command Report") - var/datum/command_report_menu/tgui = new(usr) - tgui.ui_interact(usr) + var/datum/command_report_menu/tgui = new /datum/command_report_menu(user.mob) + tgui.ui_interact(user.mob) /// Datum for holding the TGUI window for command reports. /datum/command_report_menu diff --git a/code/modules/admin/verbs/config_helpers.dm b/code/modules/admin/verbs/config_helpers.dm index 013c7b63f8a..c043274d427 100644 --- a/code/modules/admin/verbs/config_helpers.dm +++ b/code/modules/admin/verbs/config_helpers.dm @@ -1,19 +1,14 @@ -/// Verbs created to help server operators with generating certain config files. +#define GENERATE_JOB_CONFIG_VERB_DESC "Generate a job configuration (jobconfig.toml) file for the server. If TOML file already exists, will re-generate it based off the already existing config values. Will migrate from the old jobs.txt format if necessary." -/client/proc/generate_job_config() - set name = "Generate Job Configuration" - set category = "Server" - set desc = "Generate a job configuration (jobconfig.toml) file for the server. If TOML file already exists, will re-generate it based off the already existing config values. Will migrate from the old jobs.txt format if necessary." - - if(!check_rights(R_SERVER)) +ADMIN_VERB(generate_job_config, R_SERVER, "Generate Job Configuration", GENERATE_JOB_CONFIG_VERB_DESC, ADMIN_CATEGORY_SERVER) + if(tgui_alert(user, "This verb is not at all useful if you are not a server operator with access to the configuration folder. Do you wish to proceed?", "Generate jobconfig.toml for download", list("Yes", "No")) != "Yes") return - if(tgui_alert(usr, "This verb is not at all useful if you are not a server operator with access to the configuration folder. Do you wish to proceed?", "Generate jobconfig.toml for download", list("Yes", "No")) != "Yes") - return - - if(SSjob.generate_config(usr)) - to_chat(usr, span_notice("Job configuration file generated. Download prompt should appear now.")) + if(SSjob.generate_config(user)) + to_chat(user, span_notice("Job configuration file generated. Download prompt should appear now.")) else - to_chat(usr, span_warning("Job configuration file could not be generated. Check the server logs / runtimes / above warning messages for more information.")) + to_chat(user, span_warning("Job configuration file could not be generated. Check the server logs / runtimes / above warning messages for more information.")) BLACKBOX_LOG_ADMIN_VERB("Generate Job Configuration") + +#undef GENERATE_JOB_CONFIG_VERB_DESC diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 032a4d4fa48..c330618d8b4 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -1,39 +1,30 @@ -/client/proc/dsay(msg as text) - set category = "Admin.Game" - set name = "Dsay" - set hidden = TRUE - if(!holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - if(!mob) - return - if(prefs.muted & MUTE_DEADCHAT) - to_chat(src, span_danger("You cannot send DSAY messages (muted)."), confidential = TRUE) + +ADMIN_VERB(dsay, R_NONE, "DSay", "Speak to the dead.", ADMIN_CATEGORY_GAME, message as text) + if(user.prefs.muted & MUTE_DEADCHAT) + to_chat(user, span_danger("You cannot send DSAY messages (muted)."), confidential = TRUE) return - if (handle_spam_prevention(msg,MUTE_DEADCHAT)) + if (user.handle_spam_prevention(message,MUTE_DEADCHAT)) return - msg = copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN) - mob.log_talk(msg, LOG_DSAY) + message = copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN) + user.mob.log_talk(message, LOG_DSAY) - if (!msg) + if (!message) return - var/rank_name = holder.rank_names() - var/admin_name = key - if(holder.fakekey) + var/rank_name = user.holder.rank_names() + var/admin_name = user.key + if(user.holder.fakekey) rank_name = pick(strings("admin_nicknames.json", "ranks", "config")) admin_name = pick(strings("admin_nicknames.json", "names", "config")) var/name_and_rank = "[span_tooltip(rank_name, "STAFF")] ([admin_name])" - deadchat_broadcast("[span_prefix("DEAD:")] [name_and_rank] says, \"[emoji_parse(msg)]\"") + deadchat_broadcast("[span_prefix("DEAD:")] [name_and_rank] says, \"[emoji_parse(message)]\"") BLACKBOX_LOG_ADMIN_VERB("Dsay") /client/proc/get_dead_say() var/msg = input(src, null, "dsay \"text\"") as text|null - if (isnull(msg)) return - - dsay(msg) + SSadmin_verbs.dynamic_invoke_verb(src, /datum/admin_verb/dsay, msg) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 35b1baa063d..e56eb1e5101 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1,40 +1,27 @@ -/client/proc/Debug2() - set category = "Debug" - set name = "Debug-Game" - if(!check_rights(R_DEBUG)) - return - - if(GLOB.Debug2) - GLOB.Debug2 = 0 - message_admins("[key_name(src)] toggled debugging off.") - log_admin("[key_name(src)] toggled debugging off.") - else - GLOB.Debug2 = 1 - message_admins("[key_name(src)] toggled debugging on.") - log_admin("[key_name(src)] toggled debugging on.") - +ADMIN_VERB(toggle_game_debug, R_DEBUG, "Debug-Game", "Toggles game debugging.", ADMIN_CATEGORY_DEBUG) + GLOB.Debug2 = !GLOB.Debug2 + var/message = "toggled debugging [(GLOB.Debug2 ? "ON" : "OFF")]" + message_admins("[key_name_admin(user)] [message].") + log_admin("[key_name(user)] [message].") BLACKBOX_LOG_ADMIN_VERB("Toggle Debug Two") -/client/proc/Cell() - set category = "Debug" - set name = "Air Status in Location" - if(!mob) +ADMIN_VERB_VISIBILITY(air_status, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(air_status, R_DEBUG, "Air Status In Location", "Gets the air status for your current turf.", ADMIN_CATEGORY_DEBUG) + var/turf/user_turf = get_turf(user.mob) + if(!isturf(user_turf)) return - var/turf/T = get_turf(mob) - if(!isturf(T)) - return - atmos_scan(user=usr, target=T, silent=TRUE) + atmos_scan(user.mob, user_turf, silent = TRUE) BLACKBOX_LOG_ADMIN_VERB("Air Status In Location") -/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Make Cyborg" - +ADMIN_VERB(cmd_admin_robotize, R_FUN, "Make Cyborg", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/target) if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") + tgui_alert(user, "Wait until the game starts") return - log_admin("[key_name(src)] has robotized [M.key].") - INVOKE_ASYNC(M, TYPE_PROC_REF(/mob, Robotize)) + if(issilicon(target)) + tgui_alert(user, "They are already a cyborg.") + return + log_admin("[key_name(user)] has robotized [target.key].") + INVOKE_ASYNC(target, TYPE_PROC_REF(/mob, Robotize)) /client/proc/poll_type_to_del(search_string) var/list/types = get_fancy_list_of_atom_types() @@ -50,13 +37,8 @@ return return types[key] -//TODO: merge the vievars version into this or something maybe mayhaps -/client/proc/cmd_debug_del_all(object as text) - set category = "Debug" - set name = "Del-All" - - var/type_to_del = poll_type_to_del(object) - +ADMIN_VERB(cmd_del_all, R_DEBUG|R_SPAWN, "Del-All", "Delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) + var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return @@ -66,16 +48,12 @@ counter++ qdel(O) CHECK_TICK - log_admin("[key_name(src)] has deleted all ([counter]) instances of [type_to_del].") - message_admins("[key_name_admin(src)] has deleted all ([counter]) instances of [type_to_del].") + log_admin("[key_name(user)] has deleted all ([counter]) instances of [type_to_del].") + message_admins("[key_name_admin(user)] has deleted all ([counter]) instances of [type_to_del].") BLACKBOX_LOG_ADMIN_VERB("Delete All") -/client/proc/cmd_debug_force_del_all(object as text) - set category = "Debug" - set name = "Force-Del-All" - - var/type_to_del = poll_type_to_del(object) - +ADMIN_VERB(cmd_del_all_force, R_DEBUG|R_SPAWN, "Force-Del-All", "Forcibly delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) + var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return @@ -85,29 +63,25 @@ counter++ qdel(O, force = TRUE) CHECK_TICK - log_admin("[key_name(src)] has force-deleted all ([counter]) instances of [type_to_del].") - message_admins("[key_name_admin(src)] has force-deleted all ([counter]) instances of [type_to_del].") + log_admin("[key_name(user)] has force-deleted all ([counter]) instances of [type_to_del].") + message_admins("[key_name_admin(user)] has force-deleted all ([counter]) instances of [type_to_del].") BLACKBOX_LOG_ADMIN_VERB("Force-Delete All") -/client/proc/cmd_debug_hard_del_all(object as text) - set category = "Debug" - set name = "Hard-Del-All" - - var/type_to_del = poll_type_to_del(object) - +ADMIN_VERB(cmd_del_all_hard, R_DEBUG|R_SPAWN, "Hard-Del-All", "Hard delete all datums with the specified type.", ADMIN_CATEGORY_DEBUG, object as text) + var/type_to_del = user.poll_type_to_del(object) if(!type_to_del) return - var/choice = alert("ARE YOU SURE that you want to hard delete this type? It will cause MASSIVE lag.", "Hoooo lad what happen?", "Yes", "No") + var/choice = alert(user, "ARE YOU SURE that you want to hard delete this type? It will cause MASSIVE lag.", "Hoooo lad what happen?", "Yes", "No") if(choice != "Yes") return - choice = alert("Do you want to pre qdelete the atom? This will speed things up significantly, but may break depending on your level of fuckup.", "How do you even get it that bad", "Yes", "No") + choice = alert(user, "Do you want to pre qdelete the atom? This will speed things up significantly, but may break depending on your level of fuckup.", "How do you even get it that bad", "Yes", "No") var/should_pre_qdel = TRUE if(choice == "No") should_pre_qdel = FALSE - choice = alert("Ok one last thing, do you want to yield to the game? or do it all at once. These are hard deletes remember.", "Jesus christ man", "Yield", "Ignore the server") + choice = alert(user, "Ok one last thing, do you want to yield to the game? or do it all at once. These are hard deletes remember.", "Jesus christ man", "Yield", "Ignore the server") var/should_check_tick = TRUE if(choice == "Ignore the server") should_check_tick = FALSE @@ -129,24 +103,20 @@ qdel(O) del(O) CHECK_TICK - log_admin("[key_name(src)] has hard deleted all ([counter]) instances of [type_to_del].") - message_admins("[key_name_admin(src)] has hard deleted all ([counter]) instances of [type_to_del].") + log_admin("[key_name(user)] has hard deleted all ([counter]) instances of [type_to_del].") + message_admins("[key_name_admin(user)] has hard deleted all ([counter]) instances of [type_to_del].") BLACKBOX_LOG_ADMIN_VERB("Hard Delete All") -/client/proc/cmd_debug_make_powernets() - set category = "Debug" - set name = "Make Powernets" +ADMIN_VERB(cmd_debug_make_powernets, R_DEBUG|R_SERVER, "Make Powernets", "Regenerates all powernets for all cables.", ADMIN_CATEGORY_DEBUG) SSmachines.makepowernets() - log_admin("[key_name(src)] has remade the powernet. makepowernets() called.") - message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.") + log_admin("[key_name(user)] has remade the powernet. makepowernets() called.") + message_admins("[key_name_admin(user)] has remade the powernets. makepowernets() called.") BLACKBOX_LOG_ADMIN_VERB("Make Powernets") -/client/proc/cmd_admin_grantfullaccess(mob/M in GLOB.mob_list) - set category = "Debug" - set name = "Grant Full Access" - +ADMIN_VERB_VISIBILITY(cmd_admin_grantfullaccess, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_admin_grantfullaccess, R_DEBUG, "Grant Full Access", "Grant full access to a mob.", ADMIN_CATEGORY_DEBUG, mob/M in world) if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") + tgui_alert(user, "Wait until the game starts") return if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -180,51 +150,44 @@ H.equip_to_slot(id, ITEM_SLOT_ID) else - tgui_alert(usr,"Invalid mob") + tgui_alert(user,"Invalid mob") BLACKBOX_LOG_ADMIN_VERB("Grant Full Access") - log_admin("[key_name(src)] has granted [M.key] full access.") - message_admins(span_adminnotice("[key_name_admin(usr)] has granted [M.key] full access.")) - -/client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list) - set category = "Admin.Game" - set name = "Assume direct control" - set desc = "Direct intervention" + log_admin("[key_name(user)] has granted [M.key] full access.") + message_admins(span_adminnotice("[key_name_admin(user)] has granted [M.key] full access.")) +ADMIN_VERB(cmd_assume_direct_control, R_ADMIN, "Assume Direct Control", "Assume direct control of a mob.", ADMIN_CATEGORY_DEBUG, mob/M) if(M.ckey) - if(tgui_alert(usr,"This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") + if(tgui_alert(user,"This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") return if(!M || QDELETED(M)) - to_chat(usr, span_warning("The target mob no longer exists.")) + to_chat(user, span_warning("The target mob no longer exists.")) return - message_admins(span_adminnotice("[key_name_admin(usr)] assumed direct control of [M].")) - log_admin("[key_name(usr)] assumed direct control of [M].") - var/mob/adminmob = mob + message_admins(span_adminnotice("[key_name_admin(user)] assumed direct control of [M].")) + log_admin("[key_name(user)] assumed direct control of [M].") + var/mob/adminmob = user.mob if(M.ckey) M.ghostize(FALSE) - M.key = key - init_verbs() + M.key = user.key + user.init_verbs() if(isobserver(adminmob)) qdel(adminmob) BLACKBOX_LOG_ADMIN_VERB("Assume Direct Control") -/client/proc/cmd_give_direct_control(mob/M in GLOB.mob_list) - set category = "Admin.Game" - set name = "Give direct control" - +ADMIN_VERB(cmd_give_direct_control, R_ADMIN, "Give Direct Control", "Give direct control of a mob to another player.", ADMIN_CATEGORY_GAME, mob/M) if(!M) return if(M.ckey) - if(tgui_alert(usr,"This mob is being controlled by [M.key]. Are you sure you wish to give someone else control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") + if(tgui_alert(user,"This mob is being controlled by [M.key]. Are you sure you wish to give someone else control of it? [M.key] will be made a ghost.",,list("Yes","No")) != "Yes") return - var/client/newkey = input(src, "Pick the player to put in control.", "New player") as null|anything in sort_list(GLOB.clients) + var/client/newkey = input(user, "Pick the player to put in control.", "New player") as null|anything in sort_list(GLOB.clients) if(isnull(newkey)) return var/mob/oldmob = newkey.mob var/delmob = FALSE - if((isobserver(oldmob) || tgui_alert(usr,"Do you want to delete [newkey]'s old mob?","Delete?",list("Yes","No")) != "No")) + if((isobserver(oldmob) || tgui_alert(user,"Do you want to delete [newkey]'s old mob?","Delete?",list("Yes","No")) != "No")) delmob = TRUE if(!M || QDELETED(M)) - to_chat(usr, span_warning("The target mob no longer exists, aborting.")) + to_chat(user, span_warning("The target mob no longer exists, aborting.")) return if(M.ckey) M.ghostize(FALSE) @@ -232,14 +195,12 @@ M.client?.init_verbs() if(delmob) qdel(oldmob) - message_admins(span_adminnotice("[key_name_admin(usr)] gave away direct control of [M] to [newkey].")) - log_admin("[key_name(usr)] gave away direct control of [M] to [newkey].") + message_admins(span_adminnotice("[key_name_admin(user)] gave away direct control of [M] to [newkey].")) + log_admin("[key_name(user)] gave away direct control of [M] to [newkey].") BLACKBOX_LOG_ADMIN_VERB("Give Direct Control") -/client/proc/cmd_admin_areatest(on_station, filter_maint) - set category = "Mapping" - set name = "Test Areas" - +ADMIN_VERB_VISIBILITY(cmd_admin_areatest, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_admin_areatest, R_DEBUG, "Test Areas", "Tests the areas for various machinery.", ADMIN_CATEGORY_MAPPING, on_station as num, filter_maint as num) var/list/dat = list() var/list/areas_all = list() var/list/areas_with_APC = list() @@ -270,7 +231,7 @@ )) if(SSticker.current_state == GAME_STATE_STARTUP) - to_chat(usr, "Game still loading, please hold!", confidential = TRUE) + to_chat(user, "Game still loading, please hold!", confidential = TRUE) return var/log_message @@ -283,8 +244,8 @@ dat += "Maintenance Areas Filtered Out" log_message += ", with no maintenance areas" - message_admins(span_adminnotice("[key_name_admin(usr)] used the Test Areas debug command checking [log_message].")) - log_admin("[key_name(usr)] used the Test Areas debug command checking [log_message].") + message_admins(span_adminnotice("[key_name_admin(user)] used the Test Areas debug command checking [log_message].")) + log_admin("[key_name(user)] used the Test Areas debug command checking [log_message].") for(var/area/A as anything in GLOB.areas) if(on_station) @@ -425,28 +386,23 @@ if(!(areas_with_APC.len || areas_with_multiple_APCs.len || areas_with_air_alarm.len || areas_with_RC.len || areas_with_light.len || areas_with_LS.len || areas_with_intercom.len || areas_with_camera.len)) dat += "No problem areas!" - var/datum/browser/popup = new(usr, "testareas", "Test Areas", 500, 750) + var/datum/browser/popup = new(user.mob, "testareas", "Test Areas", 500, 750) popup.set_content(dat.Join()) popup.open() +ADMIN_VERB_VISIBILITY(cmd_admin_areatest_station, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_admin_areatest_station, R_DEBUG, "Test Areas (STATION ONLY)", "Tests the areas for various machinery on station z-levels.", ADMIN_CATEGORY_MAPPING) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/cmd_admin_areatest, /* on_station = */ TRUE) -/client/proc/cmd_admin_areatest_station() - set category = "Mapping" - set name = "Test Areas (STATION ONLY)" - cmd_admin_areatest(TRUE) +ADMIN_VERB_VISIBILITY(cmd_admin_areatest_station_no_maintenance, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_admin_areatest_station_no_maintenance, R_DEBUG, "Test Areas (STATION - NO MAINT)", "Tests the areas for various machinery on station z-levels, excluding maintenance areas.", ADMIN_CATEGORY_MAPPING) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/cmd_admin_areatest, /* on_station = */ TRUE, /* filter_maint = */ TRUE) -/client/proc/cmd_admin_areatest_station_no_maintenance() - set category = "Mapping" - set name = "Test Areas (STATION - NO MAINT)" - cmd_admin_areatest(on_station = TRUE, filter_maint = TRUE) - -/client/proc/cmd_admin_areatest_all() - set category = "Mapping" - set name = "Test Areas (ALL)" - cmd_admin_areatest(FALSE) +ADMIN_VERB_VISIBILITY(cmd_admin_areatest_all, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_admin_areatest_all, R_DEBUG, "Test Areas (ALL)", "Tests the areas for various machinery on all z-levels.", ADMIN_CATEGORY_MAPPING) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/cmd_admin_areatest) /client/proc/robust_dress_shop() - var/list/baseoutfits = list("Naked","Custom","As Job...", "As Plasmaman...") var/list/outfits = list() var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/plasmaman) @@ -497,52 +453,29 @@ return dresscode -/client/proc/cmd_admin_rejuvenate(mob/living/M in GLOB.mob_list) - set category = "Debug" - set name = "Rejuvenate" - - if(!check_rights(R_ADMIN)) - return - - if(!mob) - return +ADMIN_VERB_ONLY_CONTEXT_MENU(cmd_admin_rejuvenate, R_ADMIN, "Rejuvenate", mob/living/M in world) if(!istype(M)) - tgui_alert(usr,"Cannot revive a ghost") + tgui_alert(user,"Cannot revive a ghost") return M.revive(ADMIN_HEAL_ALL) - log_admin("[key_name(usr)] healed / revived [key_name(M)]") - var/msg = span_danger("Admin [key_name_admin(usr)] healed / revived [ADMIN_LOOKUPFLW(M)]!") + log_admin("[key_name(user)] healed / revived [key_name(M)]") + var/msg = span_danger("Admin [key_name_admin(user)] healed / revived [ADMIN_LOOKUPFLW(M)]!") message_admins(msg) admin_ticket_log(M, msg) BLACKBOX_LOG_ADMIN_VERB("Rejuvenate") -/client/proc/cmd_admin_delete(atom/A as obj|mob|turf in world) - set category = "Debug" - set name = "Delete" +ADMIN_VERB_AND_CONTEXT_MENU(cmd_admin_delete, R_DEBUG|R_SPAWN, "Delete", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, atom/target as obj|mob|turf in world) + user.admin_delete(target) - if(!check_rights(R_SPAWN|R_DEBUG)) - return - - admin_delete(A) - -/client/proc/cmd_admin_check_contents(mob/living/M in GLOB.mob_list) - set category = "Debug" - set name = "Check Contents" - - var/list/L = M.get_contents() - for(var/t in L) - to_chat(usr, "[t] [ADMIN_VV(t)] [ADMIN_TAG(t)]", confidential = TRUE) +ADMIN_VERB_AND_CONTEXT_MENU(cmd_check_contents, R_ADMIN, "Check Contents", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, mob/living/mob) + var/list/mob_contents = mob.get_contents() + for(var/content in mob_contents) + to_chat(user, "[content] [ADMIN_VV(content)] [ADMIN_TAG(content)]", confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Check Contents") -/client/proc/modify_goals() - set category = "Debug" - set name = "Modify goals" - - if(!check_rights(R_ADMIN)) - return - - holder.modify_goals() +ADMIN_VERB(modify_goals, R_ADMIN, "Modify Goals", "Modify the station goals for the shift.", ADMIN_CATEGORY_DEBUG) + user.holder.modify_goals() /datum/admins/proc/modify_goals() var/dat = "" @@ -551,34 +484,27 @@ dat += "
    Add New Goal" usr << browse(dat, "window=goals;size=400x400") -/client/proc/cmd_debug_mob_lists() - set category = "Debug" - set name = "Debug Mob Lists" - set desc = "For when you just gotta know" - var/chosen_list = tgui_input_list(usr, "Which list?", "Select List", list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients")) +ADMIN_VERB(debug_mob_lists, R_DEBUG, "Debug Mob Lists", "For when you just gotta know.", ADMIN_CATEGORY_DEBUG) + var/chosen_list = tgui_input_list(user, "Which list?", "Select List", list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients")) if(isnull(chosen_list)) return switch(chosen_list) if("Players") - to_chat(usr, jointext(GLOB.player_list,","), confidential = TRUE) + to_chat(user, jointext(GLOB.player_list,","), confidential = TRUE) if("Admins") - to_chat(usr, jointext(GLOB.admins,","), confidential = TRUE) + to_chat(user, jointext(GLOB.admins,","), confidential = TRUE) if("Mobs") - to_chat(usr, jointext(GLOB.mob_list,","), confidential = TRUE) + to_chat(user, jointext(GLOB.mob_list,","), confidential = TRUE) if("Living Mobs") - to_chat(usr, jointext(GLOB.alive_mob_list,","), confidential = TRUE) + to_chat(user, jointext(GLOB.alive_mob_list,","), confidential = TRUE) if("Dead Mobs") - to_chat(usr, jointext(GLOB.dead_mob_list,","), confidential = TRUE) + to_chat(user, jointext(GLOB.dead_mob_list,","), confidential = TRUE) if("Clients") - to_chat(usr, jointext(GLOB.clients,","), confidential = TRUE) + to_chat(user, jointext(GLOB.clients,","), confidential = TRUE) if("Joined Clients") - to_chat(usr, jointext(GLOB.joined_player_list,","), confidential = TRUE) - -/client/proc/cmd_display_del_log() - set category = "Debug" - set name = "Display del() Log" - set desc = "Display del's log of everything that's passed through it." + to_chat(user, jointext(GLOB.joined_player_list,","), confidential = TRUE) +ADMIN_VERB(del_log, R_DEBUG, "Display del() Log", "Display del's log of everything that's passed through it.", ADMIN_CATEGORY_DEBUG) var/list/dellog = list("List of things that have gone through qdel this round

      ") sortTim(SSgarbage.items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) for(var/path in SSgarbage.items) @@ -609,37 +535,19 @@ dellog += "
    " - usr << browse(dellog.Join(), "window=dellog") + user << browse(dellog.Join(), "window=dellog") -/client/proc/cmd_display_overlay_log() - set category = "Debug" - set name = "Display overlay Log" - set desc = "Display SSoverlays log of everything that's passed through it." +ADMIN_VERB(display_overlay_log, R_DEBUG, "Display Overlay Log", "Display SSoverlays log of everything that's passed through it.", ADMIN_CATEGORY_DEBUG) + render_stats(SSoverlays.stats, user) - render_stats(SSoverlays.stats, src) +ADMIN_VERB(init_log, R_DEBUG, "Display Initialize() Log", "Displays a list of things that didn't handle Initialize() properly.", ADMIN_CATEGORY_DEBUG) + user << browse(replacetext(SSatoms.InitLog(), "\n", "
    "), "window=initlog") -/client/proc/cmd_display_init_log() - set category = "Debug" - set name = "Display Initialize() Log" - set desc = "Displays a list of things that didn't handle Initialize() properly" +ADMIN_VERB(debug_color_test, R_DEBUG, "Colorblind Testing", "Change your view to a budget version of colorblindness to test for usability.", ADMIN_CATEGORY_DEBUG) + user.holder.color_test.ui_interact(user.mob) - usr << browse(replacetext(SSatoms.InitLog(), "\n", "
    "), "window=initlog") - -/client/proc/open_colorblind_test() - set category = "Debug" - set name = "Colorblind Testing" - set desc = "Change your view to a budget version of colorblindness to test for usability" - - if(!holder) - return - holder.color_test.ui_interact(mob) - -/client/proc/debug_plane_masters() - set category = "Debug" - set name = "Edit/Debug Planes" - set desc = "Edit and visualize plane masters and their connections (relays)" - - edit_plane_masters() +ADMIN_VERB(debug_plane_masters, R_DEBUG, "Edit/Debug Planes", "Edit and visualize plane masters and their connections (relays).", ADMIN_CATEGORY_DEBUG) + user.edit_plane_masters() /client/proc/edit_plane_masters(mob/debug_on) if(!holder) @@ -651,21 +559,10 @@ holder.plane_debug.set_mirroring(FALSE) holder.plane_debug.ui_interact(mob) -/client/proc/debug_huds(i as num) - set category = "Debug" - set name = "Debug HUDs" - set desc = "Debug the data or antag HUDs" +ADMIN_VERB(debug_huds, R_DEBUG, "Debug HUDs", "Debug the data or antag HUDs.", ADMIN_CATEGORY_DEBUG, i as num) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/debug_variables, GLOB.huds[i]) - if(!holder) - return - debug_variables(GLOB.huds[i]) - -/client/proc/jump_to_ruin() - set category = "Debug" - set name = "Jump to Ruin" - set desc = "Displays a list of all placed ruins to teleport to." - if(!holder) - return +ADMIN_VERB(jump_to_ruin, R_DEBUG, "Jump to Ruin", "Displays a list of all placed ruins to teleport to.", ADMIN_CATEGORY_DEBUG) var/list/names = list() for(var/obj/effect/landmark/ruin/ruin_landmark as anything in GLOB.ruin_landmarks) var/datum/map_template/ruin/template = ruin_landmark.ruin_template @@ -680,23 +577,17 @@ names[name] = ruin_landmark - var/ruinname = tgui_input_list(usr, "Select ruin", "Jump to Ruin", sort_list(names)) - + var/ruinname = tgui_input_list(user, "Select ruin", "Jump to Ruin", sort_list(names)) var/obj/effect/landmark/ruin/landmark = names[ruinname] - - if(istype(landmark)) - var/datum/map_template/ruin/template = landmark.ruin_template - usr.forceMove(get_turf(landmark)) - to_chat(usr, span_name("[template.name]"), confidential = TRUE) - to_chat(usr, "[template.description]", confidential = TRUE) - -/client/proc/place_ruin() - set category = "Debug" - set name = "Spawn Ruin" - set desc = "Attempt to randomly place a specific ruin." - if (!holder) + if(!istype(landmark)) return + var/datum/map_template/ruin/template = landmark.ruin_template + user.mob.forceMove(get_turf(landmark)) + to_chat(user, span_name("[template.name]"), confidential = TRUE) + to_chat(user, "[template.description]", confidential = TRUE) +ADMIN_VERB_VISIBILITY(place_ruin, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(place_ruin, R_DEBUG, "Spawn Ruin", "Attempt to randomly place a specific ruin.", ADMIN_CATEGORY_MAPPING) var/list/exists = list() for(var/landmark in GLOB.ruin_landmarks) var/obj/effect/landmark/ruin/L = landmark @@ -714,15 +605,15 @@ themed_names[name] = list(ruin, theme, list(ruin.default_area)) names += sort_list(themed_names) - var/ruinname = tgui_input_list(usr, "Select ruin", "Spawn Ruin", sort_list(names)) + var/ruinname = tgui_input_list(user, "Select ruin", "Spawn Ruin", sort_list(names)) var/data = names[ruinname] if (!data) return var/datum/map_template/ruin/template = data[1] if (exists[template]) - var/response = tgui_alert(usr,"There is already a [template] in existence.", "Spawn Ruin", list("Jump", "Place Another", "Cancel")) + var/response = tgui_alert(user,"There is already a [template] in existence.", "Spawn Ruin", list("Jump", "Place Another", "Cancel")) if (response == "Jump") - usr.forceMove(get_turf(exists[template])) + user.mob.forceMove(get_turf(exists[template])) return else if (response == "Cancel") return @@ -731,25 +622,17 @@ seedRuins(SSmapping.levels_by_trait(data[2]), max(1, template.cost), data[3], list(ruinname = template)) if (GLOB.ruin_landmarks.len > len) var/obj/effect/landmark/ruin/landmark = GLOB.ruin_landmarks[GLOB.ruin_landmarks.len] - log_admin("[key_name(src)] randomly spawned ruin [ruinname] at [COORD(landmark)].") - usr.forceMove(get_turf(landmark)) - to_chat(src, span_name("[template.name]"), confidential = TRUE) - to_chat(src, "[template.description]", confidential = TRUE) + log_admin("[key_name(user)] randomly spawned ruin [ruinname] at [COORD(landmark)].") + user.mob.forceMove(get_turf(landmark)) + to_chat(user, span_name("[template.name]"), confidential = TRUE) + to_chat(user, "[template.description]", confidential = TRUE) else - to_chat(src, span_warning("Failed to place [template.name]."), confidential = TRUE) + to_chat(user, span_warning("Failed to place [template.name]."), confidential = TRUE) -/client/proc/unload_ctf() - set category = "Debug" - set name = "Unload CTF" - set desc = "Despawns the majority of CTF" - - toggle_id_ctf(usr, CTF_GHOST_CTF_GAME_ID, unload=TRUE) - -/client/proc/run_empty_query(val as num) - set category = "Debug" - set name = "Run empty query" - set desc = "Amount of queries to run" +ADMIN_VERB(unload_ctf, R_DEBUG, "Unload CTF", "Despawns the majority of CTF.", ADMIN_CATEGORY_DEBUG) + toggle_id_ctf(user, CTF_GHOST_CTF_GAME_ID, unload=TRUE) +ADMIN_VERB(run_empty_query, R_DEBUG, "Run Empty Query", "Runs a specified number of empty queries.", ADMIN_CATEGORY_DEBUG, val as num) var/list/queries = list() for(var/i in 1 to val) var/datum/db_query/query = SSdbcore.NewQuery("NULL") @@ -761,45 +644,31 @@ qdel(query) queries.Cut() - message_admins("[key_name_admin(src)] ran [val] empty queries.") + message_admins("[key_name_admin(user)] ran [val] empty queries.") -/client/proc/clear_dynamic_transit() - set category = "Debug" - set name = "Clear Dynamic Turf Reservations" - set desc = "Deallocates all reserved space, restoring it to round start conditions." - if(!holder) - return - var/answer = tgui_alert(usr,"WARNING: THIS WILL WIPE ALL RESERVED SPACE TO A CLEAN SLATE! ANY MOVING SHUTTLES, ELEVATORS, OR IN-PROGRESS PHOTOGRAPHY WILL BE DELETED!", "Really wipe dynamic turfs?", list("YES", "NO")) +ADMIN_VERB(clear_turf_reservations, R_DEBUG, "Clear Dynamic Turf Reservations", "Deallocates all reserved space, restoring it to round start conditions.", ADMIN_CATEGORY_DEBUG) + var/answer = tgui_alert( + user, + "WARNING: THIS WILL WIPE ALL RESERVED SPACE TO A CLEAN SLATE! ANY MOVING SHUTTLES, ELEVATORS, OR IN-PROGRESS PHOTOGRAPHY WILL BE DELETED!", + "Really wipe dynamic turfs?", + list("YES", "NO"), + ) if(answer != "YES") return - message_admins(span_adminnotice("[key_name_admin(src)] cleared dynamic transit space.")) - BLACKBOX_LOG_ADMIN_VERB("Clear Dynamic Transit") - log_admin("[key_name(src)] cleared dynamic transit space.") + message_admins(span_adminnotice("[key_name_admin(user)] cleared dynamic transit space.")) + BLACKBOX_LOG_ADMIN_VERB("Clear Dynamic Turf Reservations") + log_admin("[key_name(user)] cleared dynamic turf reservations.") SSmapping.wipe_reservations() //this goes after it's logged, incase something horrible happens. -/client/proc/toggle_medal_disable() - set category = "Debug" - set name = "Toggle Medal Disable" - set desc = "Toggles the safety lock on trying to contact the medal hub." - - if(!check_rights(R_DEBUG)) - return - +ADMIN_VERB(toggle_medal_disable, R_DEBUG, "Toggle Medal Disable", "Toggles the safety lock on trying to contact the medal hub.", ADMIN_CATEGORY_DEBUG) SSachievements.achievements_enabled = !SSachievements.achievements_enabled - message_admins(span_adminnotice("[key_name_admin(src)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.")) + message_admins(span_adminnotice("[key_name_admin(user)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.")) BLACKBOX_LOG_ADMIN_VERB("Toggle Medal Disable") - log_admin("[key_name(src)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.") + log_admin("[key_name(user)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.") -/client/proc/view_runtimes() - set category = "Debug" - set name = "View Runtimes" - set desc = "Open the runtime Viewer" - - if(!holder) - return - - GLOB.error_cache.show_to(src) +ADMIN_VERB(view_runtimes, R_DEBUG, "View Runtimes", "Opens the runtime viewer.", ADMIN_CATEGORY_DEBUG) + GLOB.error_cache.show_to(user) // The runtime viewer has the potential to crash the server if there's a LOT of runtimes // this has happened before, multiple times, so we'll just leave an alert on it @@ -808,80 +677,54 @@ if(GLOB.total_runtimes >= 100000) warning = "There are a TON of runtimes, clicking any button (especially \"linear\") WILL LIKELY crash the server" // Not using TGUI alert, because it's view runtimes, stuff is probably broken - alert(usr, "[warning]. Proceed with caution. If you really need to see the runtimes, download the runtime log and view it in a text editor.", "HEED THIS WARNING CAREFULLY MORTAL") - -/client/proc/pump_random_event() - set category = "Debug" - set name = "Pump Random Event" - set desc = "Schedules the event subsystem to fire a new random event immediately. Some events may fire without notification." - if(!holder) - return + alert(user, "[warning]. Proceed with caution. If you really need to see the runtimes, download the runtime log and view it in a text editor.", "HEED THIS WARNING CAREFULLY MORTAL") +ADMIN_VERB(pump_random_event, R_DEBUG, "Pump Random Event", "Schedules the event subsystem to fire a new random event immediately. Some events may fire without notification.", ADMIN_CATEGORY_DEBUG) SSevents.scheduled = world.time - message_admins(span_adminnotice("[key_name_admin(src)] pumped a random event.")) + message_admins(span_adminnotice("[key_name_admin(user)] pumped a random event.")) BLACKBOX_LOG_ADMIN_VERB("Pump Random Event") - log_admin("[key_name(src)] pumped a random event.") - -/client/proc/start_line_profiling() - set category = "Profile" - set name = "Start Line Profiling" - set desc = "Starts tracking line by line profiling for code lines that support it" + log_admin("[key_name(user)] pumped a random event.") +ADMIN_VERB_VISIBILITY(start_line_profiling, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(start_line_profiling, R_DEBUG, "Start Line Profiling", "Starts tracking line by line profiling for code lines that support it.", ADMIN_CATEGORY_PROFILE) LINE_PROFILE_START - message_admins(span_adminnotice("[key_name_admin(src)] started line by line profiling.")) + message_admins(span_adminnotice("[key_name_admin(user)] started line by line profiling.")) BLACKBOX_LOG_ADMIN_VERB("Start Line Profiling") - log_admin("[key_name(src)] started line by line profiling.") - -/client/proc/stop_line_profiling() - set category = "Profile" - set name = "Stops Line Profiling" - set desc = "Stops tracking line by line profiling for code lines that support it" + log_admin("[key_name(user)] started line by line profiling.") +ADMIN_VERB_VISIBILITY(stop_line_profiling, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(stop_line_profiling, R_DEBUG, "Stop Line Profiling", "Stops tracking line by line profiling for code lines that support it.", ADMIN_CATEGORY_PROFILE) LINE_PROFILE_STOP - message_admins(span_adminnotice("[key_name_admin(src)] stopped line by line profiling.")) + message_admins(span_adminnotice("[key_name_admin(user)] stopped line by line profiling.")) BLACKBOX_LOG_ADMIN_VERB("Stop Line Profiling") - log_admin("[key_name(src)] stopped line by line profiling.") - -/client/proc/show_line_profiling() - set category = "Profile" - set name = "Show Line Profiling" - set desc = "Shows tracked profiling info from code lines that support it" + log_admin("[key_name(user)] stopped line by line profiling.") +ADMIN_VERB_VISIBILITY(show_line_profiling, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(show_line_profiling, R_DEBUG, "Show Line Profiling", "Shows tracked profiling info from code lines that support it.", ADMIN_CATEGORY_PROFILE) var/sortlist = list( "Avg time" = GLOBAL_PROC_REF(cmp_profile_avg_time_dsc), "Total Time" = GLOBAL_PROC_REF(cmp_profile_time_dsc), "Call Count" = GLOBAL_PROC_REF(cmp_profile_count_dsc) ) - var/sort = input(src, "Sort type?", "Sort Type", "Avg time") as null|anything in sortlist + var/sort = input(user, "Sort type?", "Sort Type", "Avg time") as null|anything in sortlist if (!sort) return sort = sortlist[sort] - profile_show(src, sort) + profile_show(user, sort) -/client/proc/reload_configuration() - set category = "Debug" - set name = "Reload Configuration" - set desc = "Force config reload to world default" - if(!check_rights(R_DEBUG)) - return - if(tgui_alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modifications?", "Really reset?", list("No", "Yes")) == "Yes") - config.admin_reload() - -/// A debug verb to check the sources of currently running timers -/client/proc/check_timer_sources() - set category = "Debug" - set name = "Check Timer Sources" - set desc = "Checks the sources of the running timers" - if (!check_rights(R_DEBUG)) +ADMIN_VERB(reload_configuration, R_DEBUG, "Reload Configuration", "Reloads the configuration from the default path on the disk, wiping any in-round modifications.", ADMIN_CATEGORY_DEBUG) + if(!tgui_alert(user, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modifications?", "Really reset?", list("No", "Yes")) == "Yes") return + config.admin_reload() +ADMIN_VERB(check_timer_sources, R_DEBUG, "Check Timer Sources", "Checks the sources of running timers.", ADMIN_CATEGORY_DEBUG) var/bucket_list_output = generate_timer_source_output(SStimer.bucket_list) var/second_queue = generate_timer_source_output(SStimer.second_queue) - usr << browse({" + user << browse({"

    bucket_list

    [bucket_list_output] @@ -889,24 +732,16 @@ [second_queue] "}, "window=check_timer_sources;size=700x700") -/// A debug verb to try and re-establish a connection with the TTS server and to refetch TTS voices. -/// Since voices are cached beforehand, this is unlikely to update preferences. -/client/proc/reestablish_tts_connection() - set category = "Debug" - set name = "Re-establish Connection To TTS" - set desc = "Re-establishes connection to the TTS server if possible" - if (!check_rights(R_DEBUG)) - return - - message_admins("[key_name_admin(usr)] attempted to re-establish connection to the TTS HTTP server.") - log_admin("[key_name(usr)] attempted to re-establish connection to the TTS HTTP server.") +ADMIN_VERB(reestablish_tts_connection, R_DEBUG, "Re-establish Connection To TTS", "Re-establishes connection to the TTS server if possible", ADMIN_CATEGORY_DEBUG) + message_admins("[key_name_admin(user)] attempted to re-establish connection to the TTS HTTP server.") + log_admin("[key_name(user)] attempted to re-establish connection to the TTS HTTP server.") var/success = SStts.establish_connection_to_tts() if(!success) - message_admins("[key_name_admin(usr)] failed to re-established the connection to the TTS HTTP server.") - log_admin("[key_name(usr)] failed to re-established the connection to the TTS HTTP server.") + message_admins("[key_name_admin(user)] failed to re-established the connection to the TTS HTTP server.") + log_admin("[key_name(user)] failed to re-established the connection to the TTS HTTP server.") return - message_admins("[key_name_admin(usr)] successfully re-established the connection to the TTS HTTP server.") - log_admin("[key_name(usr)] successfully re-established the connection to the TTS HTTP server.") + message_admins("[key_name_admin(user)] successfully re-established the connection to the TTS HTTP server.") + log_admin("[key_name(user)] successfully re-established the connection to the TTS HTTP server.") /proc/generate_timer_source_output(list/datum/timedevent/events) var/list/per_source = list() @@ -950,10 +785,14 @@ return b["count"] - a["count"] #ifdef TESTING -/client/proc/check_missing_sprites() - set category = "Debug" - set name = "Debug Worn Item Sprites" - set desc = "We're cancelling the Spritemageddon. (This will create a LOT of runtimes! Don't use on a live server!)" +ADMIN_VERB_CUSTOM_EXIST_CHECK(check_missing_sprites) + return TRUE +#else +ADMIN_VERB_CUSTOM_EXIST_CHECK(check_missing_sprites) + return FALSE +#endif + +ADMIN_VERB(check_missing_sprites, R_DEBUG, "Debug Worn Item Sprites", "We're cancelling the Spritemageddon. (This will create a LOT of runtimes! Don't use on a live server!)", ADMIN_CATEGORY_DEBUG) var/actual_file_name for(var/test_obj in subtypesof(/obj/item)) var/obj/item/sprite = new test_obj @@ -962,55 +801,54 @@ //Is there an explicit worn_icon to pick against the worn_icon_state? Easy street expected behavior. if(sprite.worn_icon) if(!(sprite.icon_state in icon_states(sprite.worn_icon))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Slot Flags are [sprite.slot_flags]."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Slot Flags are [sprite.slot_flags]."), confidential = TRUE) else if(sprite.worn_icon_state) if(sprite.slot_flags & ITEM_SLOT_MASK) actual_file_name = 'icons/mob/clothing/mask.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_NECK) actual_file_name = 'icons/mob/clothing/neck.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_BACK) actual_file_name = 'icons/mob/clothing/back.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_HEAD) actual_file_name = 'icons/mob/clothing/head/default.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_BELT) actual_file_name = 'icons/mob/clothing/belt.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_SUITSTORE) actual_file_name = 'icons/mob/clothing/belt_mirror.dmi' if(!(sprite.worn_icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE) else if(sprite.icon_state) if(sprite.slot_flags & ITEM_SLOT_MASK) actual_file_name = 'icons/mob/clothing/mask.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_NECK) actual_file_name = 'icons/mob/clothing/neck.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_BACK) actual_file_name = 'icons/mob/clothing/back.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_HEAD) actual_file_name = 'icons/mob/clothing/head/default.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_BELT) actual_file_name = 'icons/mob/clothing/belt.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE) + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE) if(sprite.slot_flags & ITEM_SLOT_SUITSTORE) actual_file_name = 'icons/mob/clothing/belt_mirror.dmi' if(!(sprite.icon_state in icon_states(actual_file_name))) - to_chat(src, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE) -#endif + to_chat(user, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE) diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index a6a9a204b85..4575614bb94 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -1,15 +1,10 @@ -/client/proc/air_status(turf/target) - set category = "Debug" - set name = "Display Air Status" - - if(!isturf(target)) - return - atmos_scan(user=usr, target=target, silent=TRUE) +ADMIN_VERB_VISIBILITY(debug_air_status, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(debug_air_status, R_DEBUG, "Debug Air Status" , ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, turf/target in world) + atmos_scan(user.mob, target, silent = TRUE) BLACKBOX_LOG_ADMIN_VERB("Show Air Status") -/client/proc/fix_next_move() - set category = "Debug" - set name = "Unfreeze Everyone" +ADMIN_VERB_VISIBILITY(fix_next_move, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(fix_next_move, R_DEBUG, "Fix Next Move", "Unfreezes all frozen mobs.", ADMIN_CATEGORY_DEBUG) var/largest_move_time = 0 var/largest_click_time = 0 var/mob/largest_move_mob = null @@ -34,12 +29,9 @@ message_admins("[ADMIN_LOOKUPFLW(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [DisplayTimeText(largest_click_time)]!") message_admins("world.time = [world.time]") BLACKBOX_LOG_ADMIN_VERB("Unfreeze Everyone") - return - -/client/proc/radio_report() - set category = "Debug" - set name = "Radio report" +ADMIN_VERB_VISIBILITY(radio_report, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(radio_report, R_DEBUG, "Radio Report", "Shows a report of all radio devices and their filters.", ADMIN_CATEGORY_DEBUG) var/output = "Radio Report
    " for (var/fq in SSradio.frequencies) output += "Freq: [fq]
    " @@ -64,29 +56,21 @@ else output += "    [device]
    " - usr << browse(output,"window=radioreport") + user << browse(output,"window=radioreport") BLACKBOX_LOG_ADMIN_VERB("Show Radio Report") -/client/proc/reload_admins() - set name = "Reload Admins" - set category = "Admin" - - if(!src.holder) - return - - var/confirm = tgui_alert(usr, "Are you sure you want to reload all admins?", "Confirm", list("Yes", "No")) +ADMIN_VERB(reload_admins, R_NONE, "Reload Admins", "Reloads all admins from the database.", ADMIN_CATEGORY_MAIN) + var/confirm = tgui_alert(user, "Are you sure you want to reload all admins?", "Confirm", list("Yes", "No")) if(confirm != "Yes") return load_admins() BLACKBOX_LOG_ADMIN_VERB("Reload All Admins") - message_admins("[key_name_admin(usr)] manually reloaded admins") + message_admins("[key_name_admin(user)] manually reloaded admins") -/client/proc/toggle_cdn() - set name = "Toggle CDN" - set category = "Server" +ADMIN_VERB(toggle_cdn, R_SERVER|R_DEBUG, "Toggle CDN", "Toggles the CDN for the server.", ADMIN_CATEGORY_SERVER) var/static/admin_disabled_cdn_transport = null - if (alert(usr, "Are you sure you want to toggle the CDN asset transport?", "Confirm", "Yes", "No") != "Yes") + if (alert(user, "Are you sure you want to toggle the CDN asset transport?", "Confirm", "Yes", "No") != "Yes") return var/current_transport = CONFIG_GET(string/asset_transport) if (!current_transport || current_transport == "simple") @@ -94,17 +78,17 @@ CONFIG_SET(string/asset_transport, admin_disabled_cdn_transport) admin_disabled_cdn_transport = null SSassets.OnConfigLoad() - message_admins("[key_name_admin(usr)] re-enabled the CDN asset transport") - log_admin("[key_name(usr)] re-enabled the CDN asset transport") + message_admins("[key_name_admin(user)] re-enabled the CDN asset transport") + log_admin("[key_name(user)] re-enabled the CDN asset transport") else - to_chat(usr, span_adminnotice("The CDN is not enabled!")) - if (tgui_alert(usr, "The CDN asset transport is not enabled! If you having issues with assets you can also try disabling filename mutations.", "The CDN asset transport is not enabled!", list("Try disabling filename mutations", "Nevermind")) == "Try disabling filename mutations") + to_chat(user, span_adminnotice("The CDN is not enabled!")) + if (tgui_alert(user, "The CDN asset transport is not enabled! If you having issues with assets you can also try disabling filename mutations.", "The CDN asset transport is not enabled!", list("Try disabling filename mutations", "Nevermind")) == "Try disabling filename mutations") SSassets.transport.dont_mutate_filenames = !SSassets.transport.dont_mutate_filenames - message_admins("[key_name_admin(usr)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms") - log_admin("[key_name(usr)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms") + message_admins("[key_name_admin(user)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms") + log_admin("[key_name(user)] [(SSassets.transport.dont_mutate_filenames ? "disabled" : "re-enabled")] asset filename transforms") else admin_disabled_cdn_transport = current_transport CONFIG_SET(string/asset_transport, "simple") SSassets.OnConfigLoad() - message_admins("[key_name_admin(usr)] disabled the CDN asset transport") - log_admin("[key_name(usr)] disabled the CDN asset transport") + message_admins("[key_name_admin(user)] disabled the CDN asset transport") + log_admin("[key_name(user)] disabled the CDN asset transport") diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index c99e226d310..1695a993bd5 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -269,18 +269,14 @@ return -/client/proc/summon_ert() - set category = "Admin.Fun" - set name = "Summon ERT" - set desc = "Summons an emergency response team" - - message_admins("[key_name(usr)] is creating a CentCom response team...") - if(holder?.makeEmergencyresponseteam()) - message_admins("[key_name(usr)] created a CentCom response team.") - log_admin("[key_name(usr)] created a CentCom response team.") +ADMIN_VERB(summon_ert, R_FUN, "Summon ERT", "Summons an emergency response team.", ADMIN_CATEGORY_FUN) + message_admins("[key_name_admin(user)] is creating a CentCom response team...") + if(user.holder?.makeEmergencyresponseteam()) + message_admins("[key_name_admin(user)] created a CentCom response team.") + log_admin("[key_name(user)] created a CentCom response team.") else - message_admins("[key_name_admin(usr)] tried to create a CentCom response team. Unfortunately, there were not enough candidates available.") - log_admin("[key_name(usr)] failed to create a CentCom response team.") + message_admins("[key_name_admin(user)] tried to create a CentCom response team. Unfortunately, there were not enough candidates available.") + log_admin("[key_name(user)] failed to create a CentCom response team.") #undef ERT_EXPERIENCED_LEADER_CHOOSE_TOP #undef DUMMY_HUMAN_SLOT_ADMIN diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm index fb4a342c3d4..0f67200f61b 100644 --- a/code/modules/admin/verbs/fix_air.dm +++ b/code/modules/admin/verbs/fix_air.dm @@ -1,23 +1,16 @@ // Proc taken from yogstation, credit to nichlas0010 for the original -/client/proc/fix_air(turf/open/T in world) - set name = "Fix Air" - set category = "Admin.Game" - set desc = "Fixes air in specified radius." +ADMIN_VERB_AND_CONTEXT_MENU(fix_air, R_ADMIN, "Fix Air", "Fixes air in a specified radius.", ADMIN_CATEGORY_GAME, turf/open/locale in world, range = 2 as num) + message_admins("[key_name_admin(user)] fixed air with range [range] in area [locale.loc.name]") + user.mob.log_message("fixed air with range [range] in area [locale.loc.name]", LOG_ADMIN) - if(!holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - if(check_rights(R_ADMIN,1)) - var/range=input("Enter range:","Num",2) as num - message_admins("[key_name_admin(usr)] fixed air with range [range] in area [T.loc.name]") - usr.log_message("fixed air with range [range] in area [T.loc.name]", LOG_ADMIN) - for(var/turf/open/F in range(range,T)) - if(F.blocks_air) - //skip walls - continue - var/datum/gas_mixture/GM = SSair.parse_gas_string(F.initial_gas_mix, /datum/gas_mixture/turf) - F.copy_air(GM) - F.update_visuals() - - if(F.pollution) //SKYRAT EDIT ADDITION - qdel(F.pollution) + for(var/turf/open/valid_range_turf in range(range,locale)) + if(valid_range_turf.blocks_air) + //skip walls + continue + //SKYRAT EDIT ADDITION START + if(valid_range_turf.pollution) + qdel(valid_range_turf.pollution) + //SKYRAT EDIT ADDITION END + var/datum/gas_mixture/GM = SSair.parse_gas_string(valid_range_turf.initial_gas_mix, /datum/gas_mixture/turf) + valid_range_turf.copy_air(GM) + valid_range_turf.update_visuals() diff --git a/code/modules/admin/verbs/fov.dm b/code/modules/admin/verbs/fov.dm index f74ba6f8058..afcd379e4a0 100644 --- a/code/modules/admin/verbs/fov.dm +++ b/code/modules/admin/verbs/fov.dm @@ -1,14 +1,8 @@ -/client/proc/cmd_admin_toggle_fov() - set name = "Enable/Disable Field of View" - set category = "Debug" - - if(!check_rights(R_ADMIN) || !check_rights(R_DEBUG)) - return - +ADMIN_VERB(toggle_fov, R_ADMIN|R_DEBUG, "Enable/Disable Field Of View", "Toggle FOV globally.", ADMIN_CATEGORY_DEBUG) var/on_off = CONFIG_GET(flag/native_fov) - message_admins("[key_name_admin(usr)] has [on_off ? "disabled" : "enabled"] the Native Field of View configuration..") - log_admin("[key_name(usr)] has [on_off ? "disabled" : "enabled"] the Native Field of View configuration.") + message_admins("[key_name_admin(user)] has [on_off ? "disabled" : "enabled"] the Native Field of View configuration..") + log_admin("[key_name(user)] has [on_off ? "disabled" : "enabled"] the Native Field of View configuration.") CONFIG_SET(flag/native_fov, !on_off) SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Field of View", "[on_off ? "Enabled" : "Disabled"]")) diff --git a/code/modules/admin/verbs/fps.dm b/code/modules/admin/verbs/fps.dm index 578a0c09514..7af7968cde4 100644 --- a/code/modules/admin/verbs/fps.dm +++ b/code/modules/admin/verbs/fps.dm @@ -1,23 +1,16 @@ -//replaces the old Ticklag verb, fps is easier to understand -/client/proc/set_server_fps() - set category = "Debug" - set name = "Set Server FPS" - set desc = "Sets game speed in frames-per-second. Can potentially break the game" - - if(!check_rights(R_DEBUG)) - return - +ADMIN_VERB_VISIBILITY(set_server_fps, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(set_server_fps, R_DEBUG, "Set Server FPS", "Sets game speed in frames-per-second. Can potentially break the game", ADMIN_CATEGORY_DEBUG) var/cfg_fps = CONFIG_GET(number/fps) - var/new_fps = round(input("Sets game frames-per-second. Can potentially break the game (default: [cfg_fps])","FPS", world.fps) as num|null) + var/new_fps = round(input(user, "Sets game frames-per-second. Can potentially break the game (default: [cfg_fps])","FPS", world.fps) as num|null) if(new_fps <= 0) - to_chat(src, span_danger("Error: set_server_fps(): Invalid world.fps value. No changes made."), confidential = TRUE) + to_chat(user, span_danger("Error: set_server_fps(): Invalid world.fps value. No changes made."), confidential = TRUE) return if(new_fps > cfg_fps * 1.5) - if(tgui_alert(usr, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [cfg_fps]","Warning!",list("Confirm","ABORT-ABORT-ABORT")) != "Confirm") + if(tgui_alert(user, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [cfg_fps]","Warning!",list("Confirm","ABORT-ABORT-ABORT")) != "Confirm") return - var/msg = "[key_name(src)] has modified world.fps to [new_fps]" + var/msg = "[key_name(user)] has modified world.fps to [new_fps]" log_admin(msg, 0) message_admins(msg, 0) SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Set Server FPS", "[new_fps]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index 77b43f9b49f..bceac01cbe0 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -1,17 +1,8 @@ -//This proc allows download of past server logs saved within the data/logs/ folder. -/client/proc/getserverlogs() - set name = "Get Server Logs" - set desc = "View/retrieve logfiles." - set category = "Admin" +ADMIN_VERB(get_server_logs, R_ADMIN, "Get Server Logs", "View or retrieve logfiles.", ADMIN_CATEGORY_MAIN) + user.browseserverlogs() - browseserverlogs() - -/client/proc/getcurrentlogs() - set name = "Get Current Logs" - set desc = "View/retrieve logfiles for the current round." - set category = "Admin" - - browseserverlogs(current=TRUE) +ADMIN_VERB(get_current_logs, R_ADMIN, "Get Current Logs", "View or retrieve logfiles for the current round.", ADMIN_CATEGORY_MAIN) + user.browseserverlogs(current=TRUE) /client/proc/browseserverlogs(current=FALSE) var/path = browse_files(current ? BROWSE_ROOT_CURRENT_LOGS : BROWSE_ROOT_ALL_LOGS) @@ -32,4 +23,3 @@ else return to_chat(src, "Attempting to send [path], this may take a fair few minutes if the file is very large.", confidential = TRUE) - return diff --git a/code/modules/admin/verbs/ghost_pool_protection.dm b/code/modules/admin/verbs/ghost_pool_protection.dm index 843f6868e70..439f4a37b89 100644 --- a/code/modules/admin/verbs/ghost_pool_protection.dm +++ b/code/modules/admin/verbs/ghost_pool_protection.dm @@ -1,11 +1,8 @@ //very similar to centcom_podlauncher in terms of how this is coded, so i kept a lot of comments from it -/client/proc/ghost_pool_protection() //Creates a verb for admins to open up the ui - set name = "Ghost Pool Protection" - set desc = "Choose which ways people can get into the round, or just clear it out completely for admin events." - set category = "Admin.Events" - var/datum/ghost_pool_menu/tgui = new(usr)//create the datum - tgui.ui_interact(usr)//datum has a tgui component, here we open the window +ADMIN_VERB(ghost_pool_protection, R_ADMIN, "Ghost Pool Protection", "Choose which ways people can get into the round, or just clear it out completely for admin events.", ADMIN_CATEGORY_EVENTS) + var/datum/ghost_pool_menu/tgui = new(user) + tgui.ui_interact(user.mob) /datum/ghost_pool_menu var/client/holder //client of whoever is using this datum diff --git a/code/modules/admin/verbs/lawpanel.dm b/code/modules/admin/verbs/lawpanel.dm index 9b52c8d7339..f1daaf17576 100644 --- a/code/modules/admin/verbs/lawpanel.dm +++ b/code/modules/admin/verbs/lawpanel.dm @@ -1,15 +1,9 @@ -/client/proc/cmd_admin_law_panel() - set category = "Admin.Events" - set name = "Law Panel" - - if(!check_rights(R_ADMIN)) - return - if(!isobserver(usr) && SSticker.HasRoundStarted()) - message_admins("[key_name_admin(usr)] checked AI laws via the Law Panel.") - +ADMIN_VERB(law_panel, R_ADMIN, "Law Panel", "View the AI laws.", ADMIN_CATEGORY_EVENTS) + if(!isobserver(user) && SSticker.HasRoundStarted()) + message_admins("[key_name_admin(user)] checked AI laws via the Law Panel.") + var/datum/law_panel/tgui = new + tgui.ui_interact(user.mob) BLACKBOX_LOG_ADMIN_VERB("Law Panel") - var/datum/law_panel/tgui = new() - tgui.ui_interact(usr) /datum/law_panel @@ -211,7 +205,7 @@ switch(action) if("lawchange_logs") - usr.client?.list_law_changes() + ui.user?.client?.holder?.list_law_changes() return FALSE if("force_state_laws") diff --git a/code/modules/admin/verbs/lua/lua_editor.dm b/code/modules/admin/verbs/lua/lua_editor.dm index 9e1b851824b..d4a4bc2ee50 100644 --- a/code/modules/admin/verbs/lua/lua_editor.dm +++ b/code/modules/admin/verbs/lua/lua_editor.dm @@ -233,10 +233,6 @@ . = ..() qdel(src) -/client/proc/open_lua_editor() - set name = "Open Lua Editor" - set category = "Debug" - if(!check_rights_for(src, R_DEBUG)) - return - var/datum/lua_editor/editor = new() - editor.ui_interact(usr) +ADMIN_VERB(lua_editor, R_DEBUG, "Open Lua Editor", "Its codin' time.", ADMIN_CATEGORY_DEBUG) + var/datum/lua_editor/editor = new + editor.ui_interact(user.mob) diff --git a/code/modules/admin/verbs/machine_upgrade.dm b/code/modules/admin/verbs/machine_upgrade.dm index 2f681574d5d..258de6bcf4d 100644 --- a/code/modules/admin/verbs/machine_upgrade.dm +++ b/code/modules/admin/verbs/machine_upgrade.dm @@ -1,13 +1,7 @@ -/proc/machine_upgrade(obj/machinery/M in world) - set name = "Tweak Component Ratings" - set category = "Debug" - if (!istype(M)) - return - - var/new_rating = input("Enter new rating:","Num") as num|null - if(new_rating && M.component_parts) - for(var/obj/item/stock_parts/P in M.component_parts) +ADMIN_VERB(machine_upgrade, R_DEBUG, "Tweak Component Ratings", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, obj/machinery/machine in world) + var/new_rating = input(user, "Enter new rating:","Num") as num|null + if(new_rating && machine.component_parts) + for(var/obj/item/stock_parts/P in machine.component_parts) P.rating = new_rating - M.RefreshParts() - + machine.RefreshParts() SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Machine Upgrade", "[new_rating]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 30f198bfba9..bfb5050dafa 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -1,7 +1,6 @@ -/client/proc/manipulate_organs(mob/living/carbon/carbon_victim in world) - set name = "Manipulate Organs" - set category = "Debug" - var/operation = tgui_input_list(usr, "Select organ operation", "Organ Manipulation", list("add organ", "add implant", "drop organ/implant", "remove organ/implant")) +ADMIN_VERB_VISIBILITY(manipulate_organs, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(manipulate_organs, R_DEBUG, "Manipulate Organs", "Manipulate the organs of a living carbon.", ADMIN_CATEGORY_DEBUG, mob/living/carbon/carbon_victim in world) + var/operation = tgui_input_list(user, "Select organ operation", "Organ Manipulation", list("add organ", "add implant", "drop organ/implant", "remove organ/implant")) if (isnull(operation)) return @@ -12,7 +11,7 @@ var/dat = replacetext("[path]", "/obj/item/organ/", ":") organs[dat] = path - var/obj/item/organ/organ_to_grant = tgui_input_list(usr, "Select organ type", "Organ Manipulation", organs) + var/obj/item/organ/organ_to_grant = tgui_input_list(user, "Select organ type", "Organ Manipulation", organs) if(isnull(organ_to_grant)) return if(isnull(organs[organ_to_grant])) @@ -20,18 +19,18 @@ organ_to_grant = organs[organ_to_grant] organ_to_grant = new organ_to_grant if(!organ_to_grant.Insert(carbon_victim)) - to_chat(usr, span_notice("[carbon_victim] is unable to carry this organ!")) + to_chat(user, span_notice("[carbon_victim] is unable to carry this organ!")) qdel(organ_to_grant) return - log_admin("[key_name(usr)] has added organ [organ_to_grant.type] to [key_name(carbon_victim)]") - message_admins("[key_name_admin(usr)] has added organ [organ_to_grant.type] to [ADMIN_LOOKUPFLW(carbon_victim)]") + log_admin("[key_name(user)] has added organ [organ_to_grant.type] to [key_name(carbon_victim)]") + message_admins("[key_name_admin(user)] has added organ [organ_to_grant.type] to [ADMIN_LOOKUPFLW(carbon_victim)]") if("add implant") for(var/path in subtypesof(/obj/item/implant)) var/dat = replacetext("[path]", "/obj/item/implant/", ":") organs[dat] = path - var/obj/item/implant/implant_to_grant = tgui_input_list(usr, "Select implant type", "Organ Manipulation", organs) + var/obj/item/implant/implant_to_grant = tgui_input_list(user, "Select implant type", "Organ Manipulation", organs) if(isnull(implant_to_grant)) return if(isnull(organs[implant_to_grant])) @@ -39,11 +38,11 @@ implant_to_grant = organs[implant_to_grant] implant_to_grant = new implant_to_grant if(!implant_to_grant.implant(carbon_victim)) - to_chat(usr, span_notice("[carbon_victim] is unable to hold this implant!")) + to_chat(user, span_notice("[carbon_victim] is unable to hold this implant!")) qdel(implant_to_grant) return - log_admin("[key_name(usr)] has added implant [implant_to_grant.type] to [key_name(carbon_victim)]") - message_admins("[key_name_admin(usr)] has added implant [implant_to_grant.type] to [ADMIN_LOOKUPFLW(carbon_victim)]") + log_admin("[key_name(user)] has added implant [implant_to_grant.type] to [key_name(carbon_victim)]") + message_admins("[key_name_admin(user)] has added implant [implant_to_grant.type] to [ADMIN_LOOKUPFLW(carbon_victim)]") if("drop organ/implant", "remove organ/implant") for(var/obj/item/organ/user_organs as anything in carbon_victim.organs) @@ -52,15 +51,15 @@ for(var/obj/item/implant/user_implants as anything in carbon_victim.implants) organs["[user_implants.name] ([user_implants.type])"] = user_implants - var/obj/item/organ_to_modify = tgui_input_list(usr, "Select organ/implant", "Organ Manipulation", organs) + var/obj/item/organ_to_modify = tgui_input_list(user, "Select organ/implant", "Organ Manipulation", organs) if(isnull(organ_to_modify)) return if(isnull(organs[organ_to_modify])) return organ_to_modify = organs[organ_to_modify] - log_admin("[key_name(usr)] has removed [organ_to_modify.type] from [key_name(carbon_victim)]") - message_admins("[key_name_admin(usr)] has removed [organ_to_modify.type] from [ADMIN_LOOKUPFLW(carbon_victim)]") + log_admin("[key_name(user)] has removed [organ_to_modify.type] from [key_name(carbon_victim)]") + message_admins("[key_name_admin(user)] has removed [organ_to_modify.type] from [ADMIN_LOOKUPFLW(carbon_victim)]") var/obj/item/organ/organ_holder var/obj/item/implant/implant_holder diff --git a/code/modules/admin/verbs/map_export.dm b/code/modules/admin/verbs/map_export.dm index 8233ce4389d..056a2ea1f8a 100644 --- a/code/modules/admin/verbs/map_export.dm +++ b/code/modules/admin/verbs/map_export.dm @@ -1,23 +1,22 @@ -/client/proc/map_export() - set category = "Debug" - set name = "Map Export" - set desc = "Select a part of the map by coordinates and download it." - - var/z_level = tgui_input_number(usr, "Export Which Z-Level?", "Map Exporter", usr.z || 2) - var/start_x = tgui_input_number(usr, "Start X?", "Map Exporter", usr.x || 1, world.maxx, 1) - var/start_y = tgui_input_number(usr, "Start Y?", "Map Exporter", usr.y || 1, world.maxy, 1) - var/end_x = tgui_input_number(usr, "End X?", "Map Exporter", usr.x || 1, world.maxx, 1) - var/end_y = tgui_input_number(usr, "End Y?", "Map Exporter", usr.y || 1, world.maxy, 1) +ADMIN_VERB(map_export, R_DEBUG, "Map Export", "Select a part of the map by coordinates and download it.", ADMIN_CATEGORY_DEBUG) + var/user_x = user.mob.x + var/user_y = user.mob.y + var/user_z = user.mob.z + var/z_level = tgui_input_number(user, "Export Which Z-Level?", "Map Exporter", user_z || 2) + var/start_x = tgui_input_number(user, "Start X?", "Map Exporter", user_x || 1, world.maxx, 1) + var/start_y = tgui_input_number(user, "Start Y?", "Map Exporter", user_y || 1, world.maxy, 1) + var/end_x = tgui_input_number(user, "End X?", "Map Exporter", user_x || 1, world.maxx, 1) + var/end_y = tgui_input_number(user, "End Y?", "Map Exporter", user_y || 1, world.maxy, 1) var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss") - var/file_name = sanitize_filename(tgui_input_text(usr, "Filename?", "Map Exporter", "exported_map_[date]")) - var/confirm = tgui_alert(usr, "Are you sure you want to do this? This will cause extreme lag!", "Map Exporter", list("Yes", "No")) + var/file_name = sanitize_filename(tgui_input_text(user, "Filename?", "Map Exporter", "exported_map_[date]")) + var/confirm = tgui_alert(user, "Are you sure you want to do this? This will cause extreme lag!", "Map Exporter", list("Yes", "No")) - if(confirm != "Yes" || !check_rights(R_DEBUG)) + if(confirm != "Yes") return var/map_text = write_map(start_x, start_y, z_level, end_x, end_y, z_level) - log_admin("Build Mode: [key_name(usr)] is exporting the map area from ([start_x], [start_y], [z_level]) through ([end_x], [end_y], [z_level])") - send_exported_map(usr, file_name, map_text) + log_admin("Build Mode: [key_name(user)] is exporting the map area from ([start_x], [start_y], [z_level]) through ([end_x], [end_y], [z_level])") + send_exported_map(user, file_name, map_text) /** * A procedure for saving DMM text to a file and then sending it to the user. diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 827bbfb16e8..a27aca0f014 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -1,20 +1,17 @@ -/client/proc/map_template_load() - set category = "Debug" - set name = "Map template - Place" - +ADMIN_VERB(map_template_load, R_DEBUG, "Map Template - Place", "Place a map template at your current location.", ADMIN_CATEGORY_DEBUG) var/datum/map_template/template - var/map = tgui_input_list(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template", sort_list(SSmapping.map_templates)) + var/map = tgui_input_list(user, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template", sort_list(SSmapping.map_templates)) if(!map) return template = SSmapping.map_templates[map] - var/turf/T = get_turf(mob) + var/turf/T = get_turf(user.mob) if(!T) return var/list/preview = list() var/center - var/centeralert = tgui_alert(usr,"Center Template.","Template Centering",list("Yes","No")) + var/centeralert = tgui_alert(user,"Center Template.","Template Centering",list("Yes","No")) switch(centeralert) if("Yes") center = TRUE @@ -26,8 +23,8 @@ var/image/item = image('icons/turf/overlays.dmi', place_on,"greenOverlay") SET_PLANE(item, ABOVE_LIGHTING_PLANE, place_on) preview += item - images += preview - if(tgui_alert(usr,"Confirm location.","Template Confirm",list("Yes","No")) == "Yes") + user.images += preview + if(tgui_alert(user,"Confirm location.","Template Confirm",list("Yes","No")) == "Yes") if(template.load(T, centered = center)) var/affected = template.get_affected_turfs(T, centered = center) for(var/AT in affected) @@ -36,23 +33,20 @@ template.post_load(P) break - message_admins(span_adminnotice("[key_name_admin(src)] has placed a map template ([template.name]) at [ADMIN_COORDJMP(T)]")) + message_admins(span_adminnotice("[key_name_admin(user)] has placed a map template ([template.name]) at [ADMIN_COORDJMP(T)]")) else - to_chat(src, "Failed to place map", confidential = TRUE) - images -= preview + to_chat(user, "Failed to place map", confidential = TRUE) + user.images -= preview -/client/proc/map_template_upload() - set category = "Debug" - set name = "Map Template - Upload" - - var/map = input(src, "Choose a Map Template to upload to template storage","Upload Map Template") as null|file +ADMIN_VERB(map_template_upload, R_DEBUG, "Map Template - Upload", "Upload a map template to the server.", ADMIN_CATEGORY_DEBUG) + var/map = input(user, "Choose a Map Template to upload to template storage","Upload Map Template") as null|file if(!map) return if(copytext("[map]", -4) != ".dmm")//4 == length(".dmm") - to_chat(src, span_warning("Filename must end in '.dmm': [map]"), confidential = TRUE) + to_chat(user, span_warning("Filename must end in '.dmm': [map]"), confidential = TRUE) return var/datum/map_template/M - switch(tgui_alert(usr, "What kind of map is this?", "Map type", list("Normal", "Shuttle", "Cancel"))) + switch(tgui_alert(user, "What kind of map is this?", "Map type", list("Normal", "Shuttle", "Cancel"))) if("Normal") M = new /datum/map_template(map, "[map]", TRUE) if("Shuttle") @@ -60,23 +54,23 @@ else return if(!M.cached_map) - to_chat(src, span_warning("Map template '[map]' failed to parse properly."), confidential = TRUE) + to_chat(user, span_warning("Map template '[map]' failed to parse properly."), confidential = TRUE) return var/datum/map_report/report = M.cached_map.check_for_errors() var/report_link if(report) - report.show_to(src) + report.show_to(user) report_link = " - validation report" - to_chat(src, span_warning("Map template '[map]' failed validation."), confidential = TRUE) + to_chat(user, span_warning("Map template '[map]' failed validation."), confidential = TRUE) if(report.loadable) - var/response = tgui_alert(usr, "The map failed validation, would you like to load it anyways?", "Map Errors", list("Cancel", "Upload Anyways")) + var/response = tgui_alert(user, "The map failed validation, would you like to load it anyways?", "Map Errors", list("Cancel", "Upload Anyways")) if(response != "Upload Anyways") return else - tgui_alert(usr, "The map failed validation and cannot be loaded.", "Map Errors", list("Oh Darn")) + tgui_alert(user, "The map failed validation and cannot be loaded.", "Map Errors", list("Oh Darn")) return SSmapping.map_templates[M.name] = M - message_admins(span_adminnotice("[key_name_admin(src)] has uploaded a map template '[map]' ([M.width]x[M.height])[report_link].")) - to_chat(src, span_notice("Map template '[map]' ready to place ([M.width]x[M.height])"), confidential = TRUE) + message_admins(span_adminnotice("[key_name_admin(user)] has uploaded a map template '[map]' ([M.width]x[M.height])[report_link].")) + to_chat(user, span_notice("Map template '[map]' ready to place ([M.width]x[M.height])"), confidential = TRUE) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 8f4206ca905..69dd533e097 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -1,69 +1,5 @@ -//- Are all the floors with or without air, as they should be? (regular or airless) -//- Does the area have an APC? -//- Does the area have an Air Alarm? -//- Does the area have a Request Console? -//- Does the area have lights? -//- Does the area have a light switch? -//- Does the area have enough intercoms? -//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) -//- Is the area connected to the scrubbers air loop? -//- Is the area connected to the vent air loop? (vent pumps) -//- Is everything wired properly? -//- Does the area have a fire alarm and firedoors? -//- Do all pod doors work properly? -//- Are accesses set properly on doors, pod buttons, etc. -//- Are all items placed properly? (not below vents, scrubbers, tables) -//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? -//- Check for any misplaced or stacked piece of pipe (air and disposal) -//- Check for any misplaced or stacked piece of wire -//- Identify how hard it is to break into the area and where the weak points are -//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. - -GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( - /client/proc/camera_view, //-errorage - /client/proc/sec_camera_report, //-errorage - /client/proc/intercom_view, //-errorage - /client/proc/air_status, //Air things - /client/proc/Cell, //More air things - /client/proc/atmosscan, //check plumbing - /client/proc/powerdebug, //check power - /client/proc/count_objects_on_z_level, - /client/proc/count_objects_all, - /client/proc/cmd_assume_direct_control, //-errorage - /client/proc/cmd_give_direct_control, - /client/proc/set_server_fps, //allows you to set the ticklag. - /client/proc/cmd_admin_grantfullaccess, - /client/proc/cmd_admin_areatest_all, - /client/proc/cmd_admin_areatest_station, - /client/proc/cmd_admin_areatest_station_no_maintenance, - #ifdef TESTING - /client/proc/see_dirty_varedits, - #endif - /client/proc/cmd_admin_rejuvenate, - /datum/admins/proc/show_traitor_panel, - /client/proc/disable_communication, - /client/proc/show_map_reports, - /client/proc/cmd_show_at_list, - /client/proc/cmd_show_at_markers, - /client/proc/manipulate_organs, - /client/proc/start_line_profiling, - /client/proc/stop_line_profiling, - /client/proc/show_line_profiling, - /client/proc/create_mapping_job_icons, - /client/proc/debug_z_levels, - /client/proc/place_ruin, - /client/proc/station_food_debug, - /client/proc/station_stack_debug, - /client/proc/check_for_obstructed_atmospherics, - /client/proc/modify_lights, - /client/proc/visualize_lights, -)) -GLOBAL_PROTECT(admin_verbs_debug_mapping) - -/client/proc/camera_view() - set category = "Mapping" - set name = "Camera Range Display" - +ADMIN_VERB_VISIBILITY(camera_view, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(camera_view, R_DEBUG, "Camera Range Display", "Shows the range of cameras on the station.", ADMIN_CATEGORY_MAPPING) var/on = FALSE for(var/turf/T in world) if(T.maptext) @@ -82,28 +18,20 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) #ifdef TESTING GLOBAL_LIST_EMPTY(dirty_vars) -/client/proc/see_dirty_varedits() - set category = "Mapping" - set name = "Dirty Varedits" - +ADMIN_VERB_VISIBILITY(see_dirty_varedits, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(see_dirty_varedits, R_DEBUG, "Dirty Varedits", "Shows all dirty varedits.", ADMIN_CATEGORY_MAPPING) var/list/dat = list() dat += "

    Abandon all hope ye who enter here



    " for(var/thing in GLOB.dirty_vars) dat += "[thing]
    " CHECK_TICK - var/datum/browser/popup = new(usr, "dirty_vars", "Dirty Varedits", 900, 750) + var/datum/browser/popup = new(user, "dirty_vars", "Dirty Varedits", 900, 750) popup.set_content(dat.Join()) popup.open() #endif -/client/proc/sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - if(!Master) - tgui_alert(usr,"Master_controller not found.","Sec Camera Report") - return FALSE - +ADMIN_VERB_VISIBILITY(sec_camera_report, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(sec_camera_report, R_DEBUG, "Camera Report", "Get a printout of all camera issues.", ADMIN_CATEGORY_MAPPING) var/list/obj/machinery/camera/CL = list() for(var/obj/machinery/camera/C as anything in GLOB.cameranet.cameras) @@ -133,15 +61,13 @@ GLOBAL_LIST_EMPTY(dirty_vars) output += "
  • Camera not connected to wall at [ADMIN_VERBOSEJMP(C1)] Network: [json_encode(C1.network)]
  • " output += "" - usr << browse(output,"window=airreport;size=1000x500") + user << browse(output,"window=airreport;size=1000x500") BLACKBOX_LOG_ADMIN_VERB("Show Camera Report") -/client/proc/intercom_view() - set category = "Mapping" - set name = "Intercom Range Display" - +ADMIN_VERB_VISIBILITY(intercom_view, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(intercom_view, R_DEBUG, "Intercom Range Display", "Shows the range of intercoms on the station.", ADMIN_CATEGORY_MAPPING) var/static/intercom_range_display_status = FALSE - intercom_range_display_status = !intercom_range_display_status //blame cyberboss if this breaks something //blamed + intercom_range_display_status = !intercom_range_display_status for(var/obj/effect/abstract/marker/intercom/marker in GLOB.all_abstract_markers) qdel(marker) @@ -153,23 +79,17 @@ GLOBAL_LIST_EMPTY(dirty_vars) new /obj/effect/abstract/marker/intercom(turf) BLACKBOX_LOG_ADMIN_VERB("Show Intercom Range") -/client/proc/show_map_reports() - set category = "Mapping" - set name = "Show map report list" - set desc = "Displays a list of map reports" - +ADMIN_VERB_VISIBILITY(show_map_reports, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(show_map_reports, R_DEBUG, "Show Map Reports", "Displays a list of map reports.", ADMIN_CATEGORY_MAPPING) var/dat = {"List of all map reports:
    "} for(var/datum/map_report/report as anything in GLOB.map_reports) dat += "[report.tag] ([report.original_path]) - View
    " - usr << browse(dat, "window=map_reports") - -/client/proc/cmd_show_at_list() - set category = "Mapping" - set name = "Show roundstart AT list" - set desc = "Displays a list of active turfs coordinates at roundstart" + user << browse(dat, "window=map_reports") +ADMIN_VERB_VISIBILITY(cmd_show_at_list, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_show_at_list, R_DEBUG, "Show roundstart AT list", "Displays a list of active turfs coordinates at roundstart.", ADMIN_CATEGORY_MAPPING) var/dat = {"Coordinate list of Active Turfs at Roundstart
    Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
    "} @@ -178,50 +98,39 @@ GLOBAL_LIST_EMPTY(dirty_vars) dat += "[ADMIN_VERBOSEJMP(T)]\n" dat += "
    " - usr << browse(dat, "window=at_list") + user << browse(dat, "window=at_list") BLACKBOX_LOG_ADMIN_VERB("Show Roundstart Active Turfs") -/client/proc/cmd_show_at_markers() - set category = "Mapping" - set name = "Show roundstart AT markers" - set desc = "Places a marker on all active-at-roundstart turfs" - +ADMIN_VERB_VISIBILITY(cmd_show_at_markers, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(cmd_show_at_markers, R_DEBUG, "Show roundstart AT markers", "Places a marker on all active-at-roundstart turfs.", ADMIN_CATEGORY_MAPPING) var/count = 0 for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers) qdel(AT) count++ if(count) - to_chat(usr, "[count] AT markers removed.", confidential = TRUE) + to_chat(user, "[count] AT markers removed.", confidential = TRUE) else for(var/t in GLOB.active_turfs_startlist) new /obj/effect/abstract/marker/at(t) count++ - to_chat(usr, "[count] AT markers placed.", confidential = TRUE) + to_chat(user, "[count] AT markers placed.", confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Show Roundstart Active Turf Markers") -/client/proc/enable_mapping_verbs() - set category = "Debug" - set name = "Mapping verbs - Enable" - if(!check_rights(R_DEBUG)) - return - remove_verb(src, /client/proc/enable_mapping_verbs) - add_verb(src, list(/client/proc/disable_mapping_verbs, GLOB.admin_verbs_debug_mapping)) +ADMIN_VERB(enable_mapping_verbs, R_DEBUG, "Enable Mapping Verbs", "Enable all mapping verbs.", ADMIN_CATEGORY_MAPPING) + SSadmin_verbs.update_visibility_flag(user, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG, TRUE) BLACKBOX_LOG_ADMIN_VERB("Enable Debug Verbs") -/client/proc/disable_mapping_verbs() - set category = "Debug" - set name = "Mapping verbs - Disable" - remove_verb(src, list(/client/proc/disable_mapping_verbs, GLOB.admin_verbs_debug_mapping)) - add_verb(src, /client/proc/enable_mapping_verbs) +ADMIN_VERB_VISIBILITY(disable_mapping_verbs, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(disable_mapping_verbs, R_DEBUG, "Disable Mapping Verbs", "Disable all mapping verbs.", ADMIN_CATEGORY_MAPPING) + SSadmin_verbs.update_visibility_flag(user, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG, FALSE) BLACKBOX_LOG_ADMIN_VERB("Disable Debug Verbs") -/client/proc/count_objects_on_z_level() - set category = "Mapping" - set name = "Count Objects On Level" - var/level = input("Which z-level?","Level?") as text|null +ADMIN_VERB_VISIBILITY(count_objects_on_z_level, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(count_objects_on_z_level, R_DEBUG, "Count Objects On Z-Level", "Counts the number of objects of a certain type on a specific z-level.", ADMIN_CATEGORY_MAPPING) + var/level = input(user, "Which z-level?","Level?") as text|null if(!level) return var/num_level = text2num(level) @@ -230,7 +139,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) if(!isnum(num_level)) return - var/type_text = input("Which type path?","Path?") as text|null + var/type_text = input(user, "Which type path?","Path?") as text|null if(!type_text) return var/type_path = text2path(type_text) @@ -257,11 +166,9 @@ GLOBAL_LIST_EMPTY(dirty_vars) to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]", confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Count Objects Zlevel") -/client/proc/count_objects_all() - set category = "Mapping" - set name = "Count Objects All" - - var/type_text = input("Which type path?","") as text|null +ADMIN_VERB_VISIBILITY(count_objects_all, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(count_objects_all, R_DEBUG, "Count Objects All", "Counts the number of objects of a certain type in the game world.", ADMIN_CATEGORY_MAPPING) + var/type_text = input(user, "Which type path?","") as text|null if(!type_text) return var/type_path = text2path(type_text) @@ -277,84 +184,51 @@ GLOBAL_LIST_EMPTY(dirty_vars) to_chat(world, "There are [count] objects of type [type_path] in the game world", confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Count Objects All") - -//This proc is intended to detect lag problems relating to communication procs GLOBAL_VAR_INIT(say_disabled, FALSE) -/client/proc/disable_communication() - set category = "Mapping" - set name = "Disable all communication verbs" - +ADMIN_VERB_VISIBILITY(disable_communication, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(disable_communication, R_DEBUG, "Disable all communication verbs", "Disables all communication verbs.", ADMIN_CATEGORY_MAPPING) GLOB.say_disabled = !GLOB.say_disabled if(GLOB.say_disabled) - message_admins("[key] used 'Disable all communication verbs', killing all communication methods.") + message_admins("[key_name_admin(user)] used 'Disable all communication verbs', killing all communication methods.") else - message_admins("[key] used 'Disable all communication verbs', restoring all communication methods.") -/* SKYRAT EDIT: lol, lmao, fuck icon bugs from byond -//This generates the icon states for job starting location landmarks. -/client/proc/create_mapping_job_icons() - set name = "Generate job landmarks icons" - set category = "Mapping" + message_admins("[key_name_admin(user)] used 'Disable all communication verbs', restoring all communication methods.") + +ADMIN_VERB_VISIBILITY(create_mapping_job_icons, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(create_mapping_job_icons, R_DEBUG, "Generate job landmarks icons", "Generates job starting location landmarks.", ADMIN_CATEGORY_MAPPING) var/icon/final = icon() + var/list/job_key_to_icon = list() // SKYRAT EDIT ADDITION var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted D.setDir(SOUTH) for(var/job in subtypesof(/datum/job)) var/datum/job/JB = new job switch(JB.title) if(JOB_AI) - final.Insert(icon('icons/mob/silicon/ai.dmi', "ai", SOUTH, 1), "AI") + job_key_to_icon["AI"] = icon('icons/mob/silicon/ai.dmi', "ai", SOUTH, 1) // SKYRAT EDIT CHANGE - ORIGINAL: final.Insert(icon('icons/mob/silicon/ai.dmi', "ai", SOUTH, 1), "AI") if(JOB_CYBORG) - final.Insert(icon('icons/mob/silicon/robots.dmi', "robot", SOUTH, 1), "Cyborg") + job_key_to_icon["Cyborg"] = icon('icons/mob/silicon/robots.dmi', "robot", SOUTH, 1) // SKYRAT EDIT CHANGE - ORIGINAL: final.Insert(icon('icons/mob/silicon/robots.dmi', "robot", SOUTH, 1), "Cyborg") else for(var/obj/item/I in D) qdel(I) randomize_human(D) - D.dress_up_as_job(JB, TRUE) - var/icon/I = icon(getFlatIcon(D), frame = 1) - final.Insert(I, JB.title) - qdel(D) - //Also add the x - for(var/x_number in 1 to 4) - final.Insert(icon('icons/hud/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]") - fcopy(final, "icons/mob/landmarks.dmi") -*/ -// SKYRAT EDIT BEGIN: THIS SHIT WAS BROKEN due to an issue with byond and how icons cache -//This generates the icon states for job starting location landmarks. -/client/proc/create_mapping_job_icons() - set name = "Generate job landmarks icons" - set category = "Mapping" - var/list/job_key_to_icon = list() - for(var/job in subtypesof(/datum/job)) - var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted - D.setDir(SOUTH) - var/datum/job/JB = new job - to_chat(world, "Generating icon for job [JB.title]") - switch(JB.title) - if("AI") - job_key_to_icon["AI"] = icon('icons/mob/silicon/ai.dmi', "ai", SOUTH, 1) - if("Cyborg") - job_key_to_icon["Cyborg"] = icon('icons/mob/silicon/robots.dmi', "robot", SOUTH, 1) - else - randomize_human(D) + // SKYRAT EDIT CHANGE START - ORIGINAL: D.dress_up_as_job(JB, TRUE) if(JB.outfit) D.equipOutfit(JB.outfit, TRUE) + // SKYRAT EDIT CHANGE END var/icon/I = icon(getFlatIcon(D), frame = 1) - job_key_to_icon[JB.title] = I - qdel(D) - to_chat(world, "Done generating icons.") - var/icon/final = icon() + job_key_to_icon[JB.title] = I // SKYRAT EDIT CHANGE - ORIGINAL: final.Insert(I, JB.title) + qdel(D) + // SKYRAT EDIT ADDITION START for(var/job_key in job_key_to_icon) final.Insert(job_key_to_icon[job_key], job_key) + // SKYRAT EDIT ADDITION END //Also add the x for(var/x_number in 1 to 4) final.Insert(icon('icons/hud/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]") fcopy(final, "icons/mob/landmarks.dmi") - to_chat(world, "Done generating landmarks.dmi.") -// SKYRAT EDIT END -/client/proc/debug_z_levels() - set name = "Debug Z-Levels" - set category = "Mapping" - to_chat(src, examine_block(gather_z_level_information(append_grid = TRUE)), confidential = TRUE) +ADMIN_VERB_VISIBILITY(debug_z_levels, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(debug_z_levels, R_DEBUG, "Debug Z-Levels", "Displays a list of all z-levels and their linkages.", ADMIN_CATEGORY_MAPPING) + to_chat(user, examine_block(gather_z_level_information(append_grid = TRUE)), confidential = TRUE) /// Returns all necessary z-level information. Argument `append_grid` allows the user to see a table showing all of the z-level linkages, which is only visible and useful in-game. /proc/gather_z_level_information(append_grid = FALSE) @@ -416,9 +290,8 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) return messages.Join("\n") -/client/proc/station_food_debug() - set name = "Count Station Food" - set category = "Mapping" +ADMIN_VERB_VISIBILITY(station_food_debug, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(station_food_debug, R_DEBUG, "Count Station Food", "Counts the number of food items on the station.", ADMIN_CATEGORY_MAPPING) var/list/foodcount = list() for(var/obj/item/food/fuck_me in world) var/turf/location = get_turf(fuck_me) @@ -435,13 +308,12 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) var/page_style = "" var/page_contents = "[page_style][table_header][jointext(table_contents, "")]
    " - var/datum/browser/popup = new(mob, "fooddebug", "Station Food Count", 600, 400) + var/datum/browser/popup = new(user.mob, "fooddebug", "Station Food Count", 600, 400) popup.set_content(page_contents) popup.open() -/client/proc/station_stack_debug() - set name = "Count Station Stacks" - set category = "Mapping" +ADMIN_VERB_VISIBILITY(station_stack_debug, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(station_stack_debug, R_DEBUG, "Count Station Stacks", "Count the stacks of materials on station.", ADMIN_CATEGORY_MAPPING) var/list/stackcount = list() for(var/obj/item/stack/fuck_me in world) var/turf/location = get_turf(fuck_me) @@ -458,18 +330,13 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) var/page_style = "" var/page_contents = "[page_style][table_header][jointext(table_contents, "")]
    " - var/datum/browser/popup = new(mob, "stackdebug", "Station Stack Count", 600, 400) + var/datum/browser/popup = new(user.mob, "stackdebug", "Station Stack Count", 600, 400) popup.set_content(page_contents) popup.open() -/// Check all tiles with a vent or scrubber on it and ensure that nothing is covering it up. -/client/proc/check_for_obstructed_atmospherics() - set name = "Check For Obstructed Atmospherics" - set category = "Mapping" - if(!holder) - to_chat(src, "Only administrators may use this command.", confidential = TRUE) - return - message_admins(span_adminnotice("[key_name_admin(usr)] is checking for obstructed atmospherics through the debug command.")) +ADMIN_VERB_VISIBILITY(check_for_obstructed_atmospherics, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(check_for_obstructed_atmospherics, R_DEBUG, "Check For Obstructed Atmospherics", "Checks for obstructions on atmospherics machines.", ADMIN_CATEGORY_MAPPING) + message_admins(span_adminnotice("[key_name_admin(user)] is checking for obstructed atmospherics through the debug command.")) BLACKBOX_LOG_ADMIN_VERB("Check For Obstructed Atmospherics") var/list/results = list() @@ -518,17 +385,14 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) results += "There is an obstruction on top of an atmospherics machine at: [ADMIN_VERBOSEJMP(iterated_turf)].
    " if(results.len == 1) // only the header is in the list, we're good - to_chat(src, "No obstructions detected.", confidential = TRUE) + to_chat(user, "No obstructions detected.", confidential = TRUE) else - var/datum/browser/popup = new(usr, "atmospherics_obstructions", "Atmospherics Obstructions", 900, 750) + var/datum/browser/popup = new(user.mob, "atmospherics_obstructions", "Atmospherics Obstructions", 900, 750) popup.set_content(results.Join()) popup.open() -/client/proc/modify_lights() - set name = "Toggle Light Debug" - set category = "Mapping" - if(!check_rights(R_DEBUG)) - return +ADMIN_VERB_VISIBILITY(modify_lights, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(modify_lights, R_DEBUG, "Toggle Light Debug", "Toggles light debug mode.", ADMIN_CATEGORY_MAPPING) if(GLOB.light_debug_enabled) undebug_sources() return @@ -540,10 +404,6 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) CHECK_TICK debug_sources() -/client/proc/visualize_lights() - set name = "Visualize Lighting Corners" - set category = "Mapping" - if(!check_rights(R_DEBUG)) - return - +ADMIN_VERB_VISIBILITY(visualize_lights, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(visualize_lights, R_DEBUG, "Visualize Lighting Corners", "Visualizes the corners of all lights on the station.", ADMIN_CATEGORY_MAPPING) display_corners() diff --git a/code/modules/admin/verbs/maprotation.dm b/code/modules/admin/verbs/maprotation.dm index c41677db37c..09d6d93bee6 100644 --- a/code/modules/admin/verbs/maprotation.dm +++ b/code/modules/admin/verbs/maprotation.dm @@ -1,16 +1,13 @@ -/client/proc/forcerandomrotate() - set category = "Server" - set name = "Trigger Random Map Rotation" - var/rotate = tgui_alert(usr,"Force a random map rotation to trigger?", "Rotate map?", list("Yes", "Cancel")) + +ADMIN_VERB(force_random_rotate, R_SERVER, "Trigger 'Random' Map Rotation", "Force a map vote.", ADMIN_CATEGORY_SERVER) + var/rotate = tgui_alert(user,"Force a random map rotation to trigger?", "Rotate map?", list("Yes", "Cancel")) if (rotate != "Yes") return - message_admins("[key_name_admin(usr)] is forcing a random map rotation.") - log_admin("[key_name(usr)] is forcing a random map rotation.") + message_admins("[key_name_admin(user)] is forcing a random map rotation.") + log_admin("[key_name(user)] is forcing a random map rotation.") SSmapping.maprotate() -/client/proc/adminchangemap() - set category = "Server" - set name = "Change Map" +ADMIN_VERB(admin_change_map, R_SERVER, "Change Map", "Set the next map.", ADMIN_CATEGORY_SERVER) var/list/maprotatechoices = list() for (var/map in config.maplist) var/datum/map_config/virtual_map = config.maplist[map] @@ -32,21 +29,21 @@ mapname += "\]" maprotatechoices[mapname] = virtual_map - var/chosenmap = tgui_input_list(usr, "Choose a map to change to", "Change Map", sort_list(maprotatechoices)|"Custom") + var/chosenmap = tgui_input_list(user, "Choose a map to change to", "Change Map", sort_list(maprotatechoices)|"Custom") if (isnull(chosenmap)) return if(chosenmap == "Custom") - message_admins("[key_name_admin(usr)] is changing the map to a custom map") - log_admin("[key_name(usr)] is changing the map to a custom map") + message_admins("[key_name_admin(user)] is changing the map to a custom map") + log_admin("[key_name(user)] is changing the map to a custom map") var/datum/map_config/virtual_map = new - var/map_file = input("Pick file:", "Map File") as null|file + var/map_file = input(user, "Pick file:", "Map File") as null|file if(isnull(map_file)) return if(copytext("[map_file]", -4) != ".dmm")//4 == length(".dmm") - to_chat(src, span_warning("Filename must end in '.dmm': [map_file]")) + to_chat(user, span_warning("Filename must end in '.dmm': [map_file]")) return if(fexists("_maps/custom/[map_file]")) @@ -56,20 +53,20 @@ // This is to make sure the map works so the server does not start without a map. var/datum/parsed_map/M = new (map_file) if(!M) - to_chat(src, span_warning("Map '[map_file]' failed to parse properly.")) + to_chat(user, span_warning("Map '[map_file]' failed to parse properly.")) return if(!M.bounds) - to_chat(src, span_warning("Map '[map_file]' has non-existant bounds.")) + to_chat(user, span_warning("Map '[map_file]' has non-existant bounds.")) qdel(M) return qdel(M) var/config_file = null var/list/json_value = list() - var/config = tgui_alert(usr,"Would you like to upload an additional config for this map?", "Map Config", list("Yes", "No")) + var/config = tgui_alert(user,"Would you like to upload an additional config for this map?", "Map Config", list("Yes", "No")) if(config == "Yes") - config_file = input("Pick file:", "Config JSON File") as null|file + config_file = input(user, "Pick file:", "Config JSON File") as null|file if(isnull(config_file)) return if(copytext("[config_file]", -5) != ".json") @@ -94,18 +91,18 @@ ) else virtual_map = load_map_config() - virtual_map.map_name = input("Choose the name for the map", "Map Name") as null|text + virtual_map.map_name = input(user, "Choose the name for the map", "Map Name") as null|text if(isnull(virtual_map.map_name)) virtual_map.map_name = "Custom" - var/shuttles = tgui_alert(usr,"Do you want to modify the shuttles?", "Map Shuttles", list("Yes", "No")) + var/shuttles = tgui_alert(user,"Do you want to modify the shuttles?", "Map Shuttles", list("Yes", "No")) if(shuttles == "Yes") for(var/s in virtual_map.shuttles) - var/shuttle = input(s, "Map Shuttles") as null|text + var/shuttle = input(user, s, "Map Shuttles") as null|text if(!shuttle) continue if(!SSmapping.shuttle_templates[shuttle]) - to_chat(usr, span_warning("No such shuttle as '[shuttle]' exists, using default.")) + to_chat(user, span_warning("No such shuttle as '[shuttle]' exists, using default.")) continue virtual_map.shuttles[s] = shuttle @@ -123,13 +120,13 @@ text2file(json_encode(json_value), PATH_TO_NEXT_MAP_JSON) if(SSmapping.changemap(virtual_map)) - message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]") + message_admins("[key_name_admin(user)] has changed the map to [virtual_map.map_name]") SSmapping.map_force_chosen = TRUE fdel("data/custom_map_json/[config_file]") else var/datum/map_config/virtual_map = maprotatechoices[chosenmap] - message_admins("[key_name_admin(usr)] is changing the map to [virtual_map.map_name]") - log_admin("[key_name(usr)] is changing the map to [virtual_map.map_name]") + message_admins("[key_name_admin(user)] is changing the map to [virtual_map.map_name]") + log_admin("[key_name(user)] is changing the map to [virtual_map.map_name]") if (SSmapping.changemap(virtual_map)) - message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]") + message_admins("[key_name_admin(user)] has changed the map to [virtual_map.map_name]") SSmapping.map_force_chosen = TRUE diff --git a/code/modules/admin/verbs/panicbunker.dm b/code/modules/admin/verbs/panicbunker.dm index c8c47858669..57aba1ee8d9 100644 --- a/code/modules/admin/verbs/panicbunker.dm +++ b/code/modules/admin/verbs/panicbunker.dm @@ -1,8 +1,6 @@ -/client/proc/panicbunker() - set category = "Server" - set name = "Toggle Panic Bunker" +ADMIN_VERB(panic_bunker, R_SERVER, "Toggle Panic Bunker", "Toggles the panic bunker for the server.", ADMIN_CATEGORY_SERVER) if (!CONFIG_GET(flag/sql_enabled)) - to_chat(usr, span_adminnotice("The Database is not enabled!"), confidential = TRUE) + to_chat(user, span_adminnotice("The Database is not enabled!"), confidential = TRUE) return var/new_pb = !CONFIG_GET(flag/panic_bunker) @@ -10,28 +8,26 @@ var/time_rec = 0 var/message = "" if(new_pb) - time_rec = input(src, "How many living minutes should they need to play? 0 to disable.", "Shit's fucked isn't it", CONFIG_GET(number/panic_bunker_living)) as num - message = input(src, "What should they see when they log in?", "MMM", CONFIG_GET(string/panic_bunker_message)) as text + time_rec = input(user, "How many living minutes should they need to play? 0 to disable.", "Shit's fucked isn't it", CONFIG_GET(number/panic_bunker_living)) as num + message = input(user, "What should they see when they log in?", "MMM", CONFIG_GET(string/panic_bunker_message)) as text message = replacetext(message, "%minutes%", time_rec) CONFIG_SET(number/panic_bunker_living, time_rec) CONFIG_SET(string/panic_bunker_message, message) - var/interview_sys = tgui_alert(usr, "Should the interview system be enabled? (Allows players to connect under the hour limit and force them to be manually approved to play)", "Enable interviews?", list("Enable", "Disable")) + var/interview_sys = tgui_alert(user, "Should the interview system be enabled? (Allows players to connect under the hour limit and force them to be manually approved to play)", "Enable interviews?", list("Enable", "Disable")) interview = interview_sys == "Enable" CONFIG_SET(flag/panic_bunker_interview, interview) CONFIG_SET(flag/panic_bunker, new_pb) - log_admin("[key_name(usr)] has toggled the Panic Bunker, it is now [new_pb ? "on and set to [time_rec] with a message of [message]. The interview system is [interview ? "enabled" : "disabled"]" : "off"].") - message_admins("[key_name_admin(usr)] has toggled the Panic Bunker, it is now [new_pb ? "enabled with a living minutes requirement of [time_rec]. The interview system is [interview ? "enabled" : "disabled"]" : "disabled"].") + log_admin("[key_name(user)] has toggled the Panic Bunker, it is now [new_pb ? "on and set to [time_rec] with a message of [message]. The interview system is [interview ? "enabled" : "disabled"]" : "off"].") + message_admins("[key_name_admin(user)] has toggled the Panic Bunker, it is now [new_pb ? "enabled with a living minutes requirement of [time_rec]. The interview system is [interview ? "enabled" : "disabled"]" : "disabled"].") if (new_pb && !SSdbcore.Connect()) message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/client/proc/toggle_interviews() - set category = "Server" - set name = "Toggle PB Interviews" +ADMIN_VERB(toggle_interviews, R_SERVER, "Toggle PB Interviews", "Toggle whether new players will be interviewed or blocked from connecting.", ADMIN_CATEGORY_SERVER) if (!CONFIG_GET(flag/panic_bunker)) - to_chat(usr, span_adminnotice("NOTE: The panic bunker is not enabled, so this change will not effect anything until it is enabled."), confidential = TRUE) + to_chat(user, span_adminnotice("NOTE: The panic bunker is not enabled, so this change will not effect anything until it is enabled."), confidential = TRUE) var/new_interview = !CONFIG_GET(flag/panic_bunker_interview) CONFIG_SET(flag/panic_bunker_interview, new_interview) - log_admin("[key_name(usr)] has toggled the Panic Bunker's interview system, it is now [new_interview ? "enabled" : "disabled"].") - message_admins("[key_name(usr)] has toggled the Panic Bunker's interview system, it is now [new_interview ? "enabled" : "disabled"].") + log_admin("[key_name(user)] has toggled the Panic Bunker's interview system, it is now [new_interview ? "enabled" : "disabled"].") + message_admins("[key_name(user)] has toggled the Panic Bunker's interview system, it is now [new_interview ? "enabled" : "disabled"].") diff --git a/code/modules/admin/verbs/player_ticket_history.dm b/code/modules/admin/verbs/player_ticket_history.dm index ac87707e98d..b7d8fd21d4c 100644 --- a/code/modules/admin/verbs/player_ticket_history.dm +++ b/code/modules/admin/verbs/player_ticket_history.dm @@ -19,13 +19,8 @@ GENERAL_PROTECT_DATUM(/datum/ticket_log_entry) GLOBAL_DATUM_INIT(player_ticket_history, /datum/ticket_history_holder, new) GLOBAL_PROTECT(player_ticket_history) -/client/proc/player_ticket_history() - set name = "Player Ticket History" - set desc = "Allows you to view the ticket history of a player." - set category = "Admin" - if(!check_rights(R_ADMIN)) - return - GLOB.player_ticket_history.ui_interact(mob) +ADMIN_VERB(player_ticket_history, R_ADMIN, "Player Ticket History", "Allows you to view the ticket history of a player.", ADMIN_CATEGORY_MAIN) + GLOB.player_ticket_history.ui_interact(user.mob) /datum/ticket_history_holder /// Assosciative list of ticket histories. ckey -> list/datum/ticket_history diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 1b63c83529b..c4e4257e84f 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -3,20 +3,15 @@ #define SHELLEO_STDOUT 2 #define SHELLEO_STDERR 3 -/client/proc/play_sound(S as sound) - set category = "Admin.Fun" - set name = "Play Global Sound" - if(!check_rights(R_SOUND)) - return - +ADMIN_VERB(play_sound, R_SOUND, "Play Global Sound", "Play a sound to all connected players.", ADMIN_CATEGORY_FUN, sound as sound) var/freq = 1 - var/vol = input(usr, "What volume would you like the sound to play at?",, 100) as null|num + var/vol = tgui_input_number(user, "What volume would you like the sound to play at?", max_value = 100) if(!vol) return vol = clamp(vol, 1, 100) - var/sound/admin_sound = new() - admin_sound.file = S + var/sound/admin_sound = new + admin_sound.file = sound admin_sound.priority = 250 admin_sound.channel = CHANNEL_ADMIN admin_sound.frequency = freq @@ -25,15 +20,15 @@ admin_sound.status = SOUND_STREAM admin_sound.volume = vol - var/res = tgui_alert(usr, "Show the title of this song to the players?",, list("Yes","No", "Cancel")) + var/res = tgui_alert(user, "Show the title of this song to the players?",, list("Yes","No", "Cancel")) switch(res) if("Yes") - to_chat(world, span_boldannounce("An admin played: [S]"), confidential = TRUE) + to_chat(world, span_boldannounce("An admin played: [sound]"), confidential = TRUE) if("Cancel") return - log_admin("[key_name(src)] played sound [S]") - message_admins("[key_name_admin(src)] played sound [S]") + log_admin("[key_name(user)] played sound [sound]") + message_admins("[key_name_admin(user)] played sound [sound]") for(var/mob/M in GLOB.player_list) if(M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) @@ -43,31 +38,20 @@ BLACKBOX_LOG_ADMIN_VERB("Play Global Sound") - -/client/proc/play_local_sound(S as sound) - set category = "Admin.Fun" - set name = "Play Local Sound" - if(!check_rights(R_SOUND)) - return - - log_admin("[key_name(src)] played a local sound [S]") - message_admins("[key_name_admin(src)] played a local sound [S]") - playsound(get_turf(src.mob), S, 50, FALSE, FALSE) +ADMIN_VERB(play_local_sound, R_SOUND, "Play Local Sound", "Plays a sound only you can hear.", ADMIN_CATEGORY_FUN, sound as sound) + log_admin("[key_name(user)] played a local sound [sound]") + message_admins("[key_name_admin(user)] played a local sound [sound]") + playsound(get_turf(user.mob), sound, 50, FALSE, FALSE) BLACKBOX_LOG_ADMIN_VERB("Play Local Sound") -/client/proc/play_direct_mob_sound(S as sound, mob/M) - set category = "Admin.Fun" - set name = "Play Direct Mob Sound" - if(!check_rights(R_SOUND)) +ADMIN_VERB(play_direct_mob_sound, R_SOUND, "Play Direct Mob Sound", "Play a sound directly to a mob.", ADMIN_CATEGORY_FUN, sound as sound, mob/target in world) + if(!target) + target = input(user, "Choose a mob to play the sound to. Only they will hear it.", "Play Mob Sound") as null|anything in sort_names(GLOB.player_list) + if(QDELETED(target)) return - - if(!M) - M = input(usr, "Choose a mob to play the sound to. Only they will hear it.", "Play Mob Sound") as null|anything in sort_names(GLOB.player_list) - if(!M || QDELETED(M)) - return - log_admin("[key_name(src)] played a direct mob sound [S] to [M].") - message_admins("[key_name_admin(src)] played a direct mob sound [S] to [ADMIN_LOOKUPFLW(M)].") - SEND_SOUND(M, S) + log_admin("[key_name(user)] played a direct mob sound [sound] to [key_name_admin(target)].") + message_admins("[key_name_admin(user)] played a direct mob sound [sound] to [ADMIN_LOOKUPFLW(target)].") + SEND_SOUND(target, sound) BLACKBOX_LOG_ADMIN_VERB("Play Direct Mob Sound") ///Takes an input from either proc/play_web_sound or the request manager and runs it through youtube-dl and prompts the user before playing it to the server. @@ -169,59 +153,41 @@ BLACKBOX_LOG_ADMIN_VERB("Play Internet Sound") +ADMIN_VERB_CUSTOM_EXIST_CHECK(play_web_sound) + return !!CONFIG_GET(string/invoke_youtubedl) -/client/proc/play_web_sound() - set category = "Admin.Fun" - set name = "Play Internet Sound" - if(!check_rights(R_SOUND)) - return - - var/ytdl = CONFIG_GET(string/invoke_youtubedl) - if(!ytdl) - to_chat(src, span_boldwarning("Youtube-dl was not configured, action unavailable"), confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value - return - +ADMIN_VERB(play_web_sound, R_SOUND, "Play Internet Sound", "Play a given internet sound to all players.", ADMIN_CATEGORY_FUN) if(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND)) - if(tgui_alert(usr, "Someone else is already playing an Internet sound! It has [DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND), 1)] remaining. \ + if(tgui_alert(user, "Someone else is already playing an Internet sound! It has [DisplayTimeText(S_TIMER_COOLDOWN_TIMELEFT(SStimer, COOLDOWN_INTERNET_SOUND), 1)] remaining. \ Would you like to override?", "Musicalis Interruptus", list("No","Yes")) != "Yes") return - var/web_sound_input = tgui_input_text(usr, "Enter content URL (supported sites only, leave blank to stop playing)", "Play Internet Sound", null) + var/web_sound_input = tgui_input_text(user, "Enter content URL (supported sites only, leave blank to stop playing)", "Play Internet Sound", null) if(length(web_sound_input)) web_sound_input = trim(web_sound_input) if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) - to_chat(src, span_boldwarning("Non-http(s) URIs are not allowed."), confidential = TRUE) - to_chat(src, span_warning("For youtube-dl shortcuts like ytsearch: please use the appropriate full URL from the website."), confidential = TRUE) + to_chat(user, span_boldwarning("Non-http(s) URIs are not allowed."), confidential = TRUE) + to_chat(user, span_warning("For youtube-dl shortcuts like ytsearch: please use the appropriate full URL from the website."), confidential = TRUE) return - web_sound(usr, web_sound_input) + web_sound(user.mob, web_sound_input) else - web_sound(usr, null) + web_sound(user.mob, null) -/client/proc/set_round_end_sound(S as sound) - set category = "Admin.Fun" - set name = "Set Round End Sound" - if(!check_rights(R_SOUND)) - return +ADMIN_VERB(set_round_end_sound, R_SOUND, "Set Round End Sound", "Set the sound that plays on round end.", ADMIN_CATEGORY_FUN, sound as sound) + SSticker.SetRoundEndSound(sound) - SSticker.SetRoundEndSound(S) - - log_admin("[key_name(src)] set the round end sound to [S]") - message_admins("[key_name_admin(src)] set the round end sound to [S]") + log_admin("[key_name(user)] set the round end sound to [sound]") + message_admins("[key_name_admin(user)] set the round end sound to [sound]") BLACKBOX_LOG_ADMIN_VERB("Set Round End Sound") -/client/proc/stop_sounds() - set category = "Debug" - set name = "Stop All Playing Sounds" - if(!src.holder) - return - - log_admin("[key_name(src)] stopped all currently playing sounds.") - message_admins("[key_name_admin(src)] stopped all currently playing sounds.") - for(var/mob/M in GLOB.player_list) - SEND_SOUND(M, sound(null)) - var/client/C = M.client - C?.tgui_panel?.stop_music() +ADMIN_VERB(stop_sounds, R_NONE, "Stop All Playing Sounds", "Stops all playing sounds for EVERYONE.", ADMIN_CATEGORY_DEBUG) + log_admin("[key_name(user)] stopped all currently playing sounds.") + message_admins("[key_name_admin(user)] stopped all currently playing sounds.") + for(var/mob/player as anything in GLOB.player_list) + SEND_SOUND(player, sound(null)) + var/client/player_client = player.client + player_client?.tgui_panel?.stop_music() S_TIMER_COOLDOWN_RESET(SStimer, COOLDOWN_INTERNET_SOUND) BLACKBOX_LOG_ADMIN_VERB("Stop All Playing Sounds") diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 63304104ab5..a7e50840f5e 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -1,32 +1,20 @@ -/proc/possess(obj/target in world) - set name = "Possess Obj" - set category = "Object" - var/result = usr.AddComponent(/datum/component/object_possession, target) +ADMIN_VERB(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_OBJECT, obj/target in world) + var/result = user.mob.AddComponent(/datum/component/object_possession, target) if(isnull(result)) // trigger a safety movement just in case we yonk - usr.forceMove(get_turf(usr)) + user.mob.forceMove(get_turf(user.mob)) return var/turf/target_turf = get_turf(target) - var/message = "[key_name(usr)] has possessed [target] ([target.type]) at [AREACOORD(target_turf)]" + var/message = "[key_name(user)] has possessed [target] ([target.type]) at [AREACOORD(target_turf)]" message_admins(message) log_admin(message) BLACKBOX_LOG_ADMIN_VERB("Possess Object") -/proc/release() - set name = "Release Obj" - set category = "Object" - - qdel(usr.GetComponent(/datum/component/object_possession)) +ADMIN_VERB(release, R_POSSESS, "Release Object", "Stop possessing an object.", ADMIN_CATEGORY_OBJECT) + var/possess_component = user.mob.GetComponent(/datum/component/object_possession) + if(!isnull(possess_component)) + qdel(possess_component) BLACKBOX_LOG_ADMIN_VERB("Release Object") - -/proc/give_possession_verbs(mob/dude in GLOB.mob_list) - set desc = "Give this guy possess/release verbs" - set category = "Debug" - set name = "Give Possessing Verbs" - - add_verb(dude, GLOBAL_PROC_REF(possess)) - add_verb(dude, GLOBAL_PROC_REF(release)) - BLACKBOX_LOG_ADMIN_VERB("Give Possessing Verbs") diff --git a/code/modules/admin/verbs/reestablish_db_connection.dm b/code/modules/admin/verbs/reestablish_db_connection.dm index a299eb43b0f..5c3701c97b0 100644 --- a/code/modules/admin/verbs/reestablish_db_connection.dm +++ b/code/modules/admin/verbs/reestablish_db_connection.dm @@ -1,26 +1,24 @@ -/client/proc/reestablish_db_connection() - set category = "Server" - set name = "Reestablish DB Connection" +ADMIN_VERB(reestablish_db_connection, R_NONE, "Reestablish DB Connection", "Attempts to (re)establish the DB Connection", ADMIN_CATEGORY_SERVER) if (!CONFIG_GET(flag/sql_enabled)) - to_chat(usr, span_adminnotice("The Database is not enabled!"), confidential = TRUE) + to_chat(user, span_adminnotice("The Database is not enabled!"), confidential = TRUE) return if (SSdbcore.IsConnected()) - if (!check_rights(R_DEBUG,0)) - tgui_alert(usr,"The database is already connected! (Only those with +debug can force a reconnection)", "The database is already connected!") + if (!user.holder.check_for_rights(R_DEBUG)) + tgui_alert(user,"The database is already connected! (Only those with +debug can force a reconnection)", "The database is already connected!") return - var/reconnect = tgui_alert(usr,"The database is already connected! If you *KNOW* that this is incorrect, you can force a reconnection", "The database is already connected!", list("Force Reconnect", "Cancel")) + var/reconnect = tgui_alert(user,"The database is already connected! If you *KNOW* that this is incorrect, you can force a reconnection", "The database is already connected!", list("Force Reconnect", "Cancel")) if (reconnect != "Force Reconnect") return SSdbcore.Disconnect() - log_admin("[key_name(usr)] has forced the database to disconnect") - message_admins("[key_name_admin(usr)] has forced the database to disconnect!") + log_admin("[key_name(user)] has forced the database to disconnect") + message_admins("[key_name_admin(user)] has forced the database to disconnect!") BLACKBOX_LOG_ADMIN_VERB("Force Reestablished Database Connection") - log_admin("[key_name(usr)] is attempting to re-establish the DB Connection") - message_admins("[key_name_admin(usr)] is attempting to re-establish the DB Connection") + log_admin("[key_name(user)] is attempting to re-establish the DB Connection") + message_admins("[key_name_admin(user)] is attempting to re-establish the DB Connection") BLACKBOX_LOG_ADMIN_VERB("Reestablished Database Connection") SSdbcore.failed_connections = 0 diff --git a/code/modules/admin/verbs/requests.dm b/code/modules/admin/verbs/requests.dm index 2cd32648b67..53d3e092f81 100644 --- a/code/modules/admin/verbs/requests.dm +++ b/code/modules/admin/verbs/requests.dm @@ -1,7 +1,4 @@ -/// Verb for opening the requests manager panel -/client/proc/requests() - set name = "Requests Manager" - set desc = "Open the request manager panel to view all requests during this round" - set category = "Admin.Game" - BLACKBOX_LOG_ADMIN_VERB("Request Manager") + +ADMIN_VERB(requests, R_NONE, "Requests Manager", "Open the request manager panel to view all requests during this round", ADMIN_CATEGORY_GAME) GLOB.requests.ui_interact(usr) + BLACKBOX_LOG_ADMIN_VERB("Request Manager") diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index e70138ad8ac..b7aa16b6b5f 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -1,12 +1,9 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller) -/client/proc/secrets() //Creates a verb for admins to open up the ui - set name = "Secrets" - set desc = "Abuse harder than you ever have before with this handy dandy semi-misc stuff menu" - set category = "Admin.Game" +ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before with this handy dandy semi-misc stuff menu.", ADMIN_CATEGORY_GAME) + var/datum/secrets_menu/tgui = new(user) + tgui.ui_interact(user.mob) BLACKBOX_LOG_ADMIN_VERB("Secrets Panel") - var/datum/secrets_menu/tgui = new(usr)//create the datum - tgui.ui_interact(usr)//datum has a tgui component, here we open the window /datum/secrets_menu var/client/holder //client of whoever is using this datum @@ -102,25 +99,25 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller) D.cure(0) if("list_bombers") - holder.list_bombers() + holder.holder.list_bombers() if("list_signalers") - holder.list_signalers() + holder.holder.list_signalers() if("list_lawchanges") - holder.list_law_changes() + holder.holder.list_law_changes() if("showailaws") - holder.check_ai_laws() + holder.holder.list_law_changes() if("manifest") - holder.show_manifest() + holder.holder.show_manifest() if("dna") - holder.list_dna() + holder.holder.list_dna() if("fingerprints") - holder.list_fingerprints() + holder.holder.list_fingerprints() if("ctfbutton") toggle_id_ctf(holder, CTF_GHOST_CTF_GAME_ID) diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index 59513db0129..b94fd5cb2e4 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -1,10 +1,6 @@ -/client/proc/cmd_select_equipment(mob/target in GLOB.mob_list) - set category = "Admin.Events" - set name = "Select equipment" - - - var/datum/select_equipment/ui = new(usr, target) - ui.ui_interact(usr) +ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/target in world) + var/datum/select_equipment/ui = new(user, target) + ui.ui_interact(user.mob) /* * This is the datum housing the select equipment UI. @@ -152,7 +148,7 @@ return custom_outfit -/datum/select_equipment/ui_act(action, params) +/datum/select_equipment/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) if(..()) return . = TRUE @@ -181,7 +177,7 @@ user.admin_apply_outfit(target_mob, new_outfit) if("customoutfit") - user.outfit_manager() + return SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/outfit_manager) if("togglefavorite") var/datum/outfit/outfit_path = resolve_outfit(params["path"]) diff --git a/code/modules/admin/verbs/server.dm b/code/modules/admin/verbs/server.dm index d93008996bc..c284b8ef12d 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -1,191 +1,148 @@ // Server Tab - Server Verbs -/client/proc/toggle_random_events() - set category = "Server" - set name = "Toggle random events on/off" - set desc = "Toggles random events such as meteors, black holes, blob (but not space dust) on/off" +ADMIN_VERB(toggle_random_events, R_SERVER, "Toggle Random Events", "Toggles random events on or off.", ADMIN_CATEGORY_SERVER) var/new_are = !CONFIG_GET(flag/allow_random_events) CONFIG_SET(flag/allow_random_events, new_are) - message_admins("[key_name_admin(usr)] has [new_are ? "enabled" : "disabled"] random events.") + message_admins("[key_name_admin(user)] has [new_are ? "enabled" : "disabled"] random events.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Random Events", "[new_are ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/client/proc/toggle_hub() - set category = "Server" - set name = "Toggle Hub" - +ADMIN_VERB(toggle_hub, R_SERVER, "Toggle Hub", "Toggles the server's visilibility on the BYOND Hub.", ADMIN_CATEGORY_SERVER) world.update_hub_visibility(!GLOB.hub_visibility) - log_admin("[key_name(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.") - message_admins("[key_name_admin(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.") + log_admin("[key_name(user)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.") + message_admins("[key_name_admin(user)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.") if (GLOB.hub_visibility && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/datum/admins/proc/restart() - set category = "Server" - set name = "Reboot World" - set desc = "Restarts the world immediately" - if (!usr.client.holder) - return - - var/localhost_addresses = list("127.0.0.1", "::1") +ADMIN_VERB(restart, R_SERVER, "Reboot World", "Restarts the world immediately.", ADMIN_CATEGORY_SERVER) var/list/options = list("Regular Restart", "Regular Restart (with delay)", "Hard Restart (No Delay/Feeback Reason)", "Hardest Restart (No actions, just reboot)") if(world.TgsAvailable()) options += "Server Restart (Kill and restart DD)"; if(SSticker.admin_delay_notice) - if(alert(usr, "Are you sure? An admin has already delayed the round end for the following reason: [SSticker.admin_delay_notice]", "Confirmation", "Yes", "No") != "Yes") + if(alert(user, "Are you sure? An admin has already delayed the round end for the following reason: [SSticker.admin_delay_notice]", "Confirmation", "Yes", "No") != "Yes") return FALSE - var/result = input(usr, "Select reboot method", "World Reboot", options[1]) as null|anything in options - if(result) - BLACKBOX_LOG_ADMIN_VERB("Reboot World") - var/init_by = "Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]." - switch(result) - if("Regular Restart") - if(!(isnull(usr.client.address) || (usr.client.address in localhost_addresses))) - if(alert(usr, "Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart") - return FALSE - SSticker.Reboot(init_by, "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) - if("Regular Restart (with delay)") - var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num|null - if(!delay) + var/result = input(user, "Select reboot method", "World Reboot", options[1]) as null|anything in options + if(isnull(result)) + return + + BLACKBOX_LOG_ADMIN_VERB("Reboot World") + var/init_by = "Initiated by [user.holder.fakekey ? "Admin" : user.key]." + switch(result) + if("Regular Restart") + if(!user.is_localhost()) + if(alert(user, "Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart") return FALSE - if(!(isnull(usr.client.address) || (usr.client.address in localhost_addresses))) - if(alert(usr,"Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart") - return FALSE - SSticker.Reboot(init_by, "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay * 10) - if("Hard Restart (No Delay, No Feeback Reason)") - to_chat(world, "World reboot - [init_by]") - world.Reboot() - if("Hardest Restart (No actions, just reboot)") - to_chat(world, "Hard world reboot - [init_by]") - world.Reboot(fast_track = TRUE) - if("Server Restart (Kill and restart DD)") - to_chat(world, "Server restart - [init_by]") - world.TgsEndProcess() + SSticker.Reboot(init_by, "admin reboot - by [user.key] [user.holder.fakekey ? "(stealth)" : ""]", 10) + if("Regular Restart (with delay)") + var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num|null + if(!delay) + return FALSE + if(!user.is_localhost()) + if(alert(user,"Are you sure you want to restart the server?","This server is live", "Restart", "Cancel") != "Restart") + return FALSE + SSticker.Reboot(init_by, "admin reboot - by [user.key] [user.holder.fakekey ? "(stealth)" : ""]", delay * 10) + if("Hard Restart (No Delay, No Feeback Reason)") + to_chat(world, "World reboot - [init_by]") + world.Reboot() + if("Hardest Restart (No actions, just reboot)") + to_chat(world, "Hard world reboot - [init_by]") + world.Reboot(fast_track = TRUE) + if("Server Restart (Kill and restart DD)") + to_chat(world, "Server restart - [init_by]") + world.TgsEndProcess() -/datum/admins/proc/end_round() - set category = "Server" - set name = "End Round" - set desc = "Attempts to produce a round end report and then restart the server organically." - - if (!usr.client.holder) +ADMIN_VERB(end_round, R_SERVER, "End Round", "Forcibly ends the round and allows the server to restart normally.", ADMIN_CATEGORY_SERVER) + var/confirm = tgui_alert(user, "End the round and restart the game world?", "End Round", list("Yes", "Cancel")) + if(confirm != "Yes") return - var/confirm = tgui_alert(usr, "End the round and restart the game world?", "End Round", list("Yes", "Cancel")) - if(confirm == "Cancel") - return - if(confirm == "Yes") - SSticker.force_ending = FORCE_END_ROUND - BLACKBOX_LOG_ADMIN_VERB("End Round") + SSticker.force_ending = FORCE_END_ROUND + BLACKBOX_LOG_ADMIN_VERB("End Round") -/datum/admins/proc/toggleooc() - set category = "Server" - set desc = "Toggle dis bitch" - set name = "Toggle OOC" +ADMIN_VERB(toggle_ooc, R_ADMIN, "Toggle OOC", "Toggle the OOC channel on or off.", ADMIN_CATEGORY_SERVER) toggle_ooc() - log_admin("[key_name(usr)] toggled OOC.") - message_admins("[key_name_admin(usr)] toggled OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + log_admin("[key_name(user)] toggled OOC.") + message_admins("[key_name_admin(user)] toggled OOC.") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed ? "Enabled" : "Disabled"]")) -/datum/admins/proc/toggleoocdead() - set category = "Server" - set desc = "Toggle dis bitch" - set name = "Toggle Dead OOC" +ADMIN_VERB(toggle_ooc_dead, R_ADMIN, "Toggle Dead OOC", "Toggle the OOC channel for dead players on or off.", ADMIN_CATEGORY_SERVER) toggle_dooc() + log_admin("[key_name(user)] toggled OOC.") + message_admins("[key_name_admin(user)] toggled Dead OOC.") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed ? "Enabled" : "Disabled"]")) - log_admin("[key_name(usr)] toggled OOC.") - message_admins("[key_name_admin(usr)] toggled Dead OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! +ADMIN_VERB(start_now, R_SERVER, "Start Now", "Start the round RIGHT NOW.", ADMIN_CATEGORY_SERVER) + var/static/list/waiting_states = list(GAME_STATE_PREGAME, GAME_STATE_STARTUP) + if(!(SSticker.current_state in waiting_states)) + to_chat(user, span_warning(span_red("The game has already started!"))) + return -/datum/admins/proc/startnow() - set category = "Server" - set desc = "Start the round RIGHT NOW" - set name = "Start Now" - if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP) - if(!SSticker.start_immediately) - var/localhost_addresses = list("127.0.0.1", "::1") - if(!(isnull(usr.client.address) || (usr.client.address in localhost_addresses))) - if(tgui_alert(usr, "Are you sure you want to start the round?","Start Now",list("Start Now","Cancel")) != "Start Now") - return FALSE - SSticker.start_immediately = TRUE - log_admin("[usr.key] has started the game.") - var/msg = "" - if(SSticker.current_state == GAME_STATE_STARTUP) - msg = " (The server is still setting up, but the round will be \ - started as soon as possible.)" - message_admins("[usr.key] has started the game.[msg]") - BLACKBOX_LOG_ADMIN_VERB("Start Now") - return TRUE + if(SSticker.start_immediately) SSticker.start_immediately = FALSE - SSticker.SetTimeLeft(1800) - to_chat(world, "The game will start in 180 seconds.") + SSticker.SetTimeLeft(3 MINUTES) + to_chat(world, span_big(span_notice("The game will start in 3 minutes."))) SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) - message_admins("[usr.key] has cancelled immediate game start. Game will start in 180 seconds.") - log_admin("[usr.key] has cancelled immediate game start.") - else - to_chat(usr, "Error: Start Now: Game has already started.") - return FALSE - -/datum/admins/proc/delay_round_end() - set category = "Server" - set desc = "Prevent the server from restarting" - set name = "Delay Round End" - - if(!check_rights(R_ADMIN)) // SKYRAT EDIT - Admins can delay the round end - ORIGINAL: if(!check_rights(R_SERVER)) + message_admins(span_adminnotice("[key_name_admin(user)] has cancelled immediate game start. Game will start in 3 minutes.")) + log_admin("[key_name(user)] has cancelled immediate game start.") return + if(!user.is_localhost()) + var/response = tgui_alert(user, "Are you sure you want to start the round?", "Start Now", list("Start Now", "Cancel")) + if(response != "Start Now") + return + SSticker.start_immediately = TRUE + + log_admin("[key_name(user)] has started the game.") + message_admins("[key_name_admin(user)] has started the game.") + if(SSticker.current_state == GAME_STATE_STARTUP) + message_admins("The server is still setting up, but the round will be started as soon as possible.") + BLACKBOX_LOG_ADMIN_VERB("Start Now") + +// ADMIN_VERB(delay_round_end, R_SERVER, "Delay Round End", "Prevent the server from restarting.", ADMIN_CATEGORY_SERVER) +ADMIN_VERB(delay_round_end, R_ADMIN, "Delay Round End", "Prevent the server from restarting.", ADMIN_CATEGORY_SERVER) // SKYRAT EDIT -- ORIGINAL ABOVE if(SSticker.delay_end) - tgui_alert(usr, "The round end is already delayed. The reason for the current delay is: \"[SSticker.admin_delay_notice]\"", "Alert", list("Ok")) + tgui_alert(user, "The round end is already delayed. The reason for the current delay is: \"[SSticker.admin_delay_notice]\"", "Alert", list("Ok")) return - var/delay_reason = input(usr, "Enter a reason for delaying the round end", "Round Delay Reason") as null|text + var/delay_reason = input(user, "Enter a reason for delaying the round end", "Round Delay Reason") as null|text if(isnull(delay_reason)) return if(SSticker.delay_end) - tgui_alert(usr, "The round end is already delayed. The reason for the current delay is: \"[SSticker.admin_delay_notice]\"", "Alert", list("Ok")) + tgui_alert(user, "The round end is already delayed. The reason for the current delay is: \"[SSticker.admin_delay_notice]\"", "Alert", list("Ok")) return SSticker.delay_end = TRUE SSticker.admin_delay_notice = delay_reason - log_admin("[key_name(usr)] delayed the round end for reason: [SSticker.admin_delay_notice]") - message_admins("[key_name_admin(usr)] delayed the round end for reason: [SSticker.admin_delay_notice]") + log_admin("[key_name(user)] delayed the round end for reason: [SSticker.admin_delay_notice]") + message_admins("[key_name_admin(user)] delayed the round end for reason: [SSticker.admin_delay_notice]") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Delay Round End", "Reason: [delay_reason]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/datum/admins/proc/toggleenter() - set category = "Server" - set desc = "People can't enter" - set name = "Toggle Entering" +ADMIN_VERB(toggle_enter, R_SERVER, "Toggle Entering", "Toggle the ability to enter the game.", ADMIN_CATEGORY_SERVER) if(!SSlag_switch.initialized) return SSlag_switch.set_measure(DISABLE_NON_OBSJOBS, !SSlag_switch.measures[DISABLE_NON_OBSJOBS]) - log_admin("[key_name(usr)] toggled new player game entering. Lag Switch at index ([DISABLE_NON_OBSJOBS])") - message_admins("[key_name_admin(usr)] toggled new player game entering [SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "OFF" : "ON"].") + log_admin("[key_name(user)] toggled new player game entering. Lag Switch at index ([DISABLE_NON_OBSJOBS])") + message_admins("[key_name_admin(user)] toggled new player game entering [SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "OFF" : "ON"].") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[!SSlag_switch.measures[DISABLE_NON_OBSJOBS] ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/datum/admins/proc/toggleAI() - set category = "Server" - set desc = "People can't be AI" - set name = "Toggle AI" +ADMIN_VERB(toggle_ai, R_SERVER, "Toggle AI", "Toggle the ability to choose AI jobs.", ADMIN_CATEGORY_SERVER) var/alai = CONFIG_GET(flag/allow_ai) CONFIG_SET(flag/allow_ai, !alai) if (alai) to_chat(world, "The AI job is no longer chooseable.", confidential = TRUE) else to_chat(world, "The AI job is chooseable now.", confidential = TRUE) - log_admin("[key_name(usr)] toggled AI allowed.") + log_admin("[key_name(user)] toggled AI allowed.") world.update_status() SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/datum/admins/proc/toggleaban() - set category = "Server" - set desc = "Respawn basically" - set name = "Toggle Respawn" - +ADMIN_VERB(toggle_respawn, R_SERVER, "Toggle Respawn", "Toggle the ability to respawn.", ADMIN_CATEGORY_SERVER) var/respawn_state = CONFIG_GET(flag/allow_respawn) var/new_state = -1 var/new_state_text = "" @@ -203,80 +160,71 @@ if(RESPAWN_FLAG_NEW_CHARACTER) // respawn currently enabled for different slot characters only new_state = RESPAWN_FLAG_DISABLED new_state_text = "Disabled" - to_chat(world, span_bold("You may no longer respawn :("), confidential = TRUE) + to_chat(world, span_bold("You may no longer respawn."), confidential = TRUE) else WARNING("Invalid respawn state in config: [respawn_state]") if(new_state == -1) - to_chat(usr, span_warning("The config for respawn is set incorrectly, please complain to your nearest server host (or fix it yourself). \ + to_chat(user, span_warning("The config for respawn is set incorrectly, please complain to your nearest server host (or fix it yourself). \ In the meanwhile respawn has been set to \"Off\".")) new_state = RESPAWN_FLAG_DISABLED new_state_text = "Disabled" CONFIG_SET(flag/allow_respawn, new_state) - message_admins(span_adminnotice("[key_name_admin(usr)] toggled respawn to \"[new_state_text]\".")) - log_admin("[key_name(usr)] toggled respawn to \"[new_state_text]\".") + message_admins(span_adminnotice("[key_name_admin(user)] toggled respawn to \"[new_state_text]\".")) + log_admin("[key_name(user)] toggled respawn to \"[new_state_text]\".") world.update_status() SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Respawn", "[new_state_text]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! -/datum/admins/proc/delay() - set category = "Server" - set desc = "Delay the game start" - set name = "Delay Pre-Game" - - var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null +ADMIN_VERB(delay, R_SERVER, "Delay Pre-Game", "Delay the game start.", ADMIN_CATEGORY_SERVER) + var/newtime = input(user, "Set a new time in seconds. Set -1 for indefinite delay.", "Set Delay", round(SSticker.GetTimeLeft()/10)) as num|null if(!newtime) return if(SSticker.current_state > GAME_STATE_PREGAME) - return tgui_alert(usr, "Too late... The game has already started!") + return tgui_alert(user, "Too late... The game has already started!") newtime = newtime*10 SSticker.SetTimeLeft(newtime) SSticker.start_immediately = FALSE if(newtime < 0) to_chat(world, "The game start has been delayed.", confidential = TRUE) - log_admin("[key_name(usr)] delayed the round start.") + log_admin("[key_name(user)] delayed the round start.") else to_chat(world, "The game will start in [DisplayTimeText(newtime)].", confidential = TRUE) SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) - log_admin("[key_name(usr)] set the pre-game delay to [DisplayTimeText(newtime)].") + log_admin("[key_name(user)] set the pre-game delay to [DisplayTimeText(newtime)].") BLACKBOX_LOG_ADMIN_VERB("Delay Game Start") -/datum/admins/proc/set_admin_notice() - set category = "Server" - set name = "Set Admin Notice" - set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round" - if(!check_rights(0)) - return - - var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null +ADMIN_VERB(set_admin_notice, R_SERVER, "Set Admin Notice", "Set an announcement that appears to everyone who joins the server. Only lasts this round.", ADMIN_CATEGORY_SERVER) + var/new_admin_notice = input( + user, + "Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):", + "Set Notice", + GLOB.admin_notice, + ) as message|null if(new_admin_notice == null) return if(new_admin_notice == GLOB.admin_notice) return if(new_admin_notice == "") - message_admins("[key_name(usr)] removed the admin notice.") - log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]") + message_admins("[key_name(user)] removed the admin notice.") + log_admin("[key_name(user)] removed the admin notice:\n[GLOB.admin_notice]") else - message_admins("[key_name(usr)] set the admin notice.") - log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]") + message_admins("[key_name(user)] set the admin notice.") + log_admin("[key_name(user)] set the admin notice:\n[new_admin_notice]") to_chat(world, span_adminnotice("Admin Notice:\n \t [new_admin_notice]"), confidential = TRUE) BLACKBOX_LOG_ADMIN_VERB("Set Admin Notice") GLOB.admin_notice = new_admin_notice - return -/datum/admins/proc/toggleguests() - set category = "Server" - set desc = "Guests can't enter" - set name = "Toggle guests" +ADMIN_VERB(toggle_guests, R_SERVER, "Toggle Guests", "Toggle the ability for guests to enter the game.", ADMIN_CATEGORY_SERVER) var/new_guest_ban = !CONFIG_GET(flag/guest_ban) CONFIG_SET(flag/guest_ban, new_guest_ban) if (new_guest_ban) to_chat(world, "Guests may no longer enter the game.", confidential = TRUE) else to_chat(world, "Guests may now enter the game.", confidential = TRUE) - log_admin("[key_name(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") - message_admins(span_adminnotice("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) + log_admin("[key_name(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") + message_admins(span_adminnotice("[key_name_admin(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm index d7050c0467b..0a33acb0692 100644 --- a/code/modules/admin/verbs/shuttlepanel.dm +++ b/code/modules/admin/verbs/shuttlepanel.dm @@ -1,13 +1,5 @@ -/datum/admins/proc/open_shuttlepanel() - set category = "Admin.Events" - set name = "Shuttle Manipulator" - set desc = "Opens the shuttle manipulator UI." - - if(!check_rights(R_ADMIN)) - return - - SSshuttle.ui_interact(usr) - +ADMIN_VERB(shuttle_panel, R_ADMIN, "Shuttle Manipulator", "Opens the shuttle manipulator UI.", ADMIN_CATEGORY_EVENTS) + SSshuttle.ui_interact(user.mob) /obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) var/list/options = list() diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm index 924c9885713..e673202f0ba 100644 --- a/code/modules/admin/verbs/spawnobjasmob.dm +++ b/code/modules/admin/verbs/spawnobjasmob.dm @@ -1,11 +1,4 @@ -/datum/admins/proc/spawn_objasmob(object as text) - set category = "Debug" - set desc = "(obj path) Spawn object-mob" - set name = "Spawn object-mob" - - if(!check_rights(R_SPAWN)) - return - +ADMIN_VERB(spawn_obj_as_mob, R_SPAWN, "Spawn Object-Mob", "Spawn an object as if it were a mob.", ADMIN_CATEGORY_DEBUG, object as text) var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj))) if (!chosen) @@ -15,21 +8,63 @@ var/obj/chosen_obj = text2path(chosen) - var/list/settings = list( - "mainsettings" = list( - "name" = list("desc" = "Name", "type" = "string", "value" = "Bob"), - "maxhealth" = list("desc" = "Max. health", "type" = "number", "value" = 100), - "access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"), - "objtype" = list("desc" = "Base obj type", "type" = "datum", "path" = "/obj", "value" = "[chosen]"), - "googlyeyes" = list("desc" = "Googly eyes", "type" = "boolean", "value" = "No"), - "disableai" = list("desc" = "Disable AI", "type" = "boolean", "value" = "Yes"), - "idledamage" = list("desc" = "Damaged while idle", "type" = "boolean", "value" = "No"), - "dropitem" = list("desc" = "Drop obj on death", "type" = "boolean", "value" = "Yes"), - "mobtype" = list("desc" = "Base mob type", "type" = "datum", "path" = "/mob/living/simple_animal/hostile/mimic/copy", "value" = "/mob/living/simple_animal/hostile/mimic/copy"), - "ckey" = list("desc" = "ckey", "type" = "ckey", "value" = "none"), + var/list/settings = list("mainsettings" = list( + "name" = list( + "desc" = "Name", + "type" = "string", + "value" = "Bob", + ), + "maxhealth" = list( + "desc" = "Max. health", + "type" = "number", + "value" = 100, + ), + "access" = list( + "desc" = "Access ID", + "type" = "datum", + "path" = "/obj/item/card/id", + "value" = "Default", + ), + "objtype" = list( + "desc" = "Base obj type", + "type" = "datum", + "path" = "/obj", + "value" = "[chosen]", + ), + "googlyeyes" = list( + "desc" = "Googly eyes", + "type" = "boolean", + "value" = "No", + ), + "disableai" = list( + "desc" = "Disable AI", + "type" = "boolean", + "value" = "Yes", + ), + "idledamage" = list( + "desc" = "Damaged while idle", + "type" = "boolean", + "value" = "No", + ), + "dropitem" = list( + "desc" = "Drop obj on death", + "type" = "boolean", + "value" = "Yes", + ), + "mobtype" = list( + "desc" = "Base mob type", + "type" = "datum", + "path" = "/mob/living/simple_animal/hostile/mimic/copy", + "value" = "/mob/living/simple_animal/hostile/mimic/copy", + ), + "ckey" = list( + "desc" = "ckey", + "type" = "ckey", + "value" = "none", + ), )) - var/list/prefreturn = presentpreflikepicker(usr,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings) + var/list/prefreturn = presentpreflikepicker(user.mob,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings) if (prefreturn["button"] == 1) settings = prefreturn["settings"] var/mainsettings = settings["mainsettings"] @@ -37,9 +72,9 @@ basemob = text2path(mainsettings["mobtype"]["value"]) if (!ispath(basemob, /mob/living/simple_animal/hostile/mimic/copy) || !ispath(chosen_obj, /obj)) - to_chat(usr, "Mob or object path invalid", confidential = TRUE) + to_chat(user.mob, "Mob or object path invalid", confidential = TRUE) - basemob = new basemob(get_turf(usr), new chosen_obj(get_turf(usr)), usr, mainsettings["dropitem"]["value"] == "Yes" ? FALSE : TRUE, (mainsettings["googlyeyes"]["value"] == "Yes" ? FALSE : TRUE)) + basemob = new basemob(get_turf(user.mob), new chosen_obj(get_turf(user.mob)), user.mob, mainsettings["dropitem"]["value"] == "Yes" ? FALSE : TRUE, (mainsettings["googlyeyes"]["value"] == "Yes" ? FALSE : TRUE)) if (mainsettings["disableai"]["value"] == "Yes") basemob.toggle_ai(AI_OFF) @@ -65,5 +100,5 @@ basemob.ckey = mainsettings["ckey"]["value"] - log_admin("[key_name(usr)] spawned a sentient object-mob [basemob] from [chosen_obj] at [AREACOORD(usr)]") + log_admin("[key_name(user.mob)] spawned a sentient object-mob [basemob] from [chosen_obj] at [AREACOORD(user.mob)]") BLACKBOX_LOG_ADMIN_VERB("Spawn object-mob") diff --git a/code/modules/admin/verbs/special_verbs.dm b/code/modules/admin/verbs/special_verbs.dm new file mode 100644 index 00000000000..309c14d4455 --- /dev/null +++ b/code/modules/admin/verbs/special_verbs.dm @@ -0,0 +1,43 @@ +// Admin Verbs in this file are special and cannot use the AVD system for some reason or another. + +/client/proc/show_verbs() + set name = "Adminverbs - Show" + set category = ADMIN_CATEGORY_MAIN + + remove_verb(src, /client/proc/show_verbs) + add_admin_verbs() + + to_chat(src, span_interface("All of your adminverbs are now visible."), confidential = TRUE) + BLACKBOX_LOG_ADMIN_VERB("Show Adminverbs") + +/client/proc/readmin() + set name = "Readmin" + set category = "Admin" + set desc = "Regain your admin powers." + + var/datum/admins/A = GLOB.deadmins[ckey] + + if(!A) + A = GLOB.admin_datums[ckey] + if (!A) + var/msg = " is trying to readmin but they have no deadmin entry" + message_admins("[key_name_admin(src)][msg]") + log_admin_private("[key_name(src)][msg]") + return + + A.associate(src) + + if (!holder) + return //This can happen if an admin attempts to vv themself into somebody elses's deadmin datum by getting ref via brute force + + to_chat(src, span_interface("You are now an admin."), confidential = TRUE) + message_admins("[src] re-adminned themselves.") + log_admin("[src] re-adminned themselves.") + BLACKBOX_LOG_ADMIN_VERB("Readmin") + +/client/proc/admin_2fa_verify() + set name = "Verify Admin" + set category = "Admin" + + var/datum/admins/admin = GLOB.admin_datums[ckey] + admin?.associate(src) diff --git a/code/modules/admin/view_variables/mark_datum.dm b/code/modules/admin/view_variables/mark_datum.dm index 44c3b2b83b2..1d9dd3a1a37 100644 --- a/code/modules/admin/view_variables/mark_datum.dm +++ b/code/modules/admin/view_variables/mark_datum.dm @@ -8,10 +8,8 @@ holder.RegisterSignal(holder.marked_datum, COMSIG_QDELETING, TYPE_PROC_REF(/datum/admins, handle_marked_del)) vv_update_display(D, "marked", VV_MSG_MARKED) -/client/proc/mark_datum_mapview(datum/D as mob|obj|turf|area in view(view)) - set category = "Debug" - set name = "Mark Object" - mark_datum(D) +ADMIN_VERB_ONLY_CONTEXT_MENU(mark_datum, R_NONE, "Mark Object", datum/target as mob|obj|turf|area in view()) + user.mark_datum(target) /datum/admins/proc/handle_marked_del(datum/source) SIGNAL_HANDLER diff --git a/code/modules/admin/view_variables/tag_datum.dm b/code/modules/admin/view_variables/tag_datum.dm index 3b611e3cdf9..b4ca42860c3 100644 --- a/code/modules/admin/view_variables/tag_datum.dm +++ b/code/modules/admin/view_variables/tag_datum.dm @@ -12,7 +12,5 @@ else holder.add_tagged_datum(target_datum) -/client/proc/tag_datum_mapview(datum/target_datum as mob|obj|turf|area in view(view)) - set category = "Debug" - set name = "Tag Datum" - tag_datum(target_datum) +ADMIN_VERB_ONLY_CONTEXT_MENU(tag_datum, R_NONE, "Tag Datum", datum/target_datum as mob|obj|turf|area in view()) + user.tag_datum(target_datum) diff --git a/code/modules/admin/view_variables/topic_basic.dm b/code/modules/admin/view_variables/topic_basic.dm index 8a27d342578..4f363653127 100644 --- a/code/modules/admin/view_variables/topic_basic.dm +++ b/code/modules/admin/view_variables/topic_basic.dm @@ -140,6 +140,7 @@ return var/datum/greyscale_modify_menu/menu = new(target, usr, SSgreyscale.configurations, unlocked = TRUE) menu.ui_interact(usr) - if(href_list[VV_HK_CALLPROC]) - usr.client.callproc_datum(target) + + if(href_list[VV_HK_CALLPROC]) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/call_proc_datum, target) diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 9f0d86e04f6..b139ec9d488 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -1,3 +1,7 @@ +ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the variables of a datum.", ADMIN_CATEGORY_DEBUG, datum/thing in world) + user.debug_variables(thing) + +// This is kept as a seperate proc because admins are able to show VV to non-admins /client/proc/debug_variables(datum/thing in world) set category = "Debug" set name = "View Variables" diff --git a/code/modules/antagonists/traitor/balance_helper.dm b/code/modules/antagonists/traitor/balance_helper.dm index e78625ff1c1..b2a9661bfeb 100644 --- a/code/modules/antagonists/traitor/balance_helper.dm +++ b/code/modules/antagonists/traitor/balance_helper.dm @@ -1,11 +1,5 @@ -/client/proc/cmd_admin_debug_traitor_objectives() - set name = "Debug Traitor Objectives" - set category = "Debug" - - if(!check_rights(R_DEBUG)) - return - - SStraitor.traitor_debug_panel?.ui_interact(usr) +ADMIN_VERB(debug_traitor_objectives, R_DEBUG, "Debug Traitor Objectives", "Verify functionality of traitor goals.", ADMIN_CATEGORY_DEBUG) + SStraitor.traitor_debug_panel?.ui_interact(user.mob) /datum/traitor_objective_debug var/list/all_objectives diff --git a/code/modules/atmospherics/machinery/pipes/pipe_spritesheet_helper.dm b/code/modules/atmospherics/machinery/pipes/pipe_spritesheet_helper.dm index 6b1997cc3c7..75c85d2a665 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe_spritesheet_helper.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe_spritesheet_helper.dm @@ -1,7 +1,4 @@ -/client/proc/GeneratePipeSpritesheet() - set name = "Generate Pipe Spritesheet" - set category = "Debug" - +ADMIN_VERB(generate_pipe_spritesheet, R_DEBUG, "Generate Pipe Spritesheet", "Generates the pipe spritesheets.", ADMIN_CATEGORY_DEBUG) var/datum/pipe_icon_generator/generator = new generator.Start() fcopy(generator.generated_icons, "icons/obj/pipes_n_cables/!pipes_bitmask.dmi") diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 218aed8c681..cf4a5dfc875 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -16,11 +16,8 @@ //The user can change properties of the supplypod using the UI, and change the way that items are taken from the bay (One at a time, ordered, random, etc) //Many of the effects of the supplypod set here are put into action in supplypod.dm -/client/proc/centcom_podlauncher() //Creates a verb for admins to open up the ui - set name = "Config/Launch Supplypod" - set desc = "Configure and launch a CentCom supplypod full of whatever your heart desires!" - set category = "Admin.Events" - new /datum/centcom_podlauncher(usr)//create the datum +ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure and launch a CentCom supplypod full of whatever your heart desires!", ADMIN_CATEGORY_EVENTS) + new /datum/centcom_podlauncher(user.mob) //Variables declared to change how items in the launch bay are picked and launched. (Almost) all of these are changed in the ui_act proc //Some effect groups are choices, while other are booleans. This is because some effects can stack, while others dont (ex: you can stack explosion and quiet, but you cant stack ordered launch and random launch) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 29eec0802a8..fec58398e03 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -157,6 +157,15 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Only 10 bucks for 3 months! Click Here to find out more.") return FALSE return TRUE + +/client/proc/is_localhost() + var/static/localhost_addresses = list( + "127.0.0.1", + "::1", + null, + ) + return address in localhost_addresses + /* * Call back proc that should be checked in all paths where a client can send messages * @@ -254,32 +263,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.ahelp_tickets.ClientLogin(src) GLOB.interviews.client_login(src) GLOB.requests.client_login(src) - var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. - //Admin Authorisation - var/datum/admins/admin_datum = GLOB.admin_datums[ckey] - if (!isnull(admin_datum)) - admin_datum.associate(src) - connecting_admin = TRUE - else if(GLOB.deadmins[ckey]) - add_verb(src, /client/proc/readmin) - connecting_admin = TRUE - //SKYRAT EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not. - if(!check_population(connecting_admin)) - qdel(src) - return - // SKYRAT EDIT END - if(CONFIG_GET(flag/autoadmin)) - if(!GLOB.admin_datums[ckey]) - var/list/autoadmin_ranks = ranks_from_rank_name(CONFIG_GET(string/autoadmin_rank)) - if (autoadmin_ranks.len == 0) - to_chat(world, "Autoadmin rank not found") - else - new /datum/admins(autoadmin_ranks, ckey) - if(CONFIG_GET(flag/enable_localhost_rank) && !connecting_admin) - var/localhost_addresses = list("127.0.0.1", "::1") - if(isnull(address) || (address in localhost_addresses)) - var/datum/admin_rank/localhost_rank = new("!localhost!", R_EVERYTHING, R_DBRANKS, R_EVERYTHING) //+EVERYTHING -DBRANKS *EVERYTHING - new /datum/admins(list(localhost_rank), ckey, 1, 1) //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) prefs = GLOB.preferences_datums[ckey] if(prefs) @@ -352,6 +335,34 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( . = ..() //calls mob.Login() + + // Admin Verbs need the client's mob to exist. Must be after ..() + var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. + //Admin Authorisation + var/datum/admins/admin_datum = GLOB.admin_datums[ckey] + if (!isnull(admin_datum)) + admin_datum.associate(src) + connecting_admin = TRUE + else if(GLOB.deadmins[ckey]) + add_verb(src, /client/proc/readmin) + connecting_admin = TRUE + //SKYRAT EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not. + if(!check_population(connecting_admin)) + qdel(src) + return + // SKYRAT EDIT END + if(CONFIG_GET(flag/autoadmin)) + if(!GLOB.admin_datums[ckey]) + var/list/autoadmin_ranks = ranks_from_rank_name(CONFIG_GET(string/autoadmin_rank)) + if (autoadmin_ranks.len == 0) + to_chat(world, "Autoadmin rank not found") + else + new /datum/admins(autoadmin_ranks, ckey) + + if(CONFIG_GET(flag/enable_localhost_rank) && !connecting_admin && is_localhost()) + var/datum/admin_rank/localhost_rank = new("!localhost!", R_EVERYTHING, R_DBRANKS, R_EVERYTHING) //+EVERYTHING -DBRANKS *EVERYTHING + new /datum/admins(list(localhost_rank), ckey, 1, 1) + if (length(GLOB.stickybanadminexemptions)) GLOB.stickybanadminexemptions -= ckey if (!length(GLOB.stickybanadminexemptions)) @@ -1197,7 +1208,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return 0 if(!isnum(player_age) || player_age < 0) - return 0 + return 0 if(!isnum(days_needed)) return 0 @@ -1207,13 +1218,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( /// Attempts to make the client orbit the given object, for administrative purposes. /// If they are not an observer, will try to aghost them. /client/proc/admin_follow(atom/movable/target) - var/can_ghost = TRUE - - if (!isobserver(mob)) - can_ghost = admin_ghost() - - if(!can_ghost) - return FALSE + if(!isobserver(mob)) + SSadmin_verbs.dynamic_invoke_verb(src, /datum/admin_verb/admin_ghost) + if(!isobserver(mob)) + return var/mob/dead/observer/observer = mob observer.ManualFollow(target) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index dc55b72b09d..4ca59bf0f3e 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -144,33 +144,28 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") set category = "Server" if(IsAdminAdvancedProcCall()) return - var/newColor = input(src, "Please select the new player OOC color.", "OOC color") as color|null + +ADMIN_VERB(set_ooc_color, R_FUN, "Set Player OOC Color", "Modifies the global OOC color.", ADMIN_CATEGORY_SERVER) + var/newColor = input(user, "Please select the new player OOC color.", "OOC color") as color|null if(isnull(newColor)) return - if(!check_rights(R_FUN)) - message_admins("[usr.key] has attempted to use the Set Player OOC Color verb!") - log_admin("[key_name(usr)] tried to set player ooc color without authorization.") - return var/new_color = sanitize_color(newColor) - message_admins("[key_name_admin(usr)] has set the players' ooc color to [new_color].") - log_admin("[key_name_admin(usr)] has set the player ooc color to [new_color].") + message_admins("[key_name_admin(user)] has set the players' ooc color to [new_color].") + log_admin("[key_name_admin(user)] has set the player ooc color to [new_color].") GLOB.OOC_COLOR = new_color - /client/proc/reset_ooc() set name = "Reset Player OOC Color" set desc = "Returns player OOC Color to default" set category = "Server" if(IsAdminAdvancedProcCall()) return - if(tgui_alert(usr, "Are you sure you want to reset the OOC color of all players?", "Reset Player OOC Color", list("Yes", "No")) != "Yes") + +ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC color to default.", ADMIN_CATEGORY_SERVER) + if(tgui_alert(user, "Are you sure you want to reset the OOC color of all players?", "Reset Player OOC Color", list("Yes", "No")) != "Yes") return - if(!check_rights(R_FUN)) - message_admins("[usr.key] has attempted to use the Reset Player OOC Color verb!") - log_admin("[key_name(usr)] tried to reset player ooc color without authorization.") - return - message_admins("[key_name_admin(usr)] has reset the players' ooc color.") - log_admin("[key_name_admin(usr)] has reset player ooc color.") + message_admins("[key_name_admin(user)] has reset the players' ooc color.") + log_admin("[key_name_admin(user)] has reset player ooc color.") GLOB.OOC_COLOR = null //Checks admin notice diff --git a/code/modules/explorer_drone/manager.dm b/code/modules/explorer_drone/manager.dm index 00909d03abf..ee51a2d5db3 100644 --- a/code/modules/explorer_drone/manager.dm +++ b/code/modules/explorer_drone/manager.dm @@ -83,11 +83,6 @@ . = ..() QDEL_NULL(temp_adventure) -/client/proc/adventure_manager() - set category = "Debug" - set name = "Adventure Manager" - - if(!check_rights(R_DEBUG)) - return +ADMIN_VERB(adventure_manager, R_DEBUG, "Adventure Manager", "View and edit adventures.", ADMIN_CATEGORY_DEBUG) var/datum/adventure_browser/browser = new() - browser.ui_interact(usr) + browser.ui_interact(user.mob) diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm index d1d2c0ae2c5..0a9cfc9d51d 100644 --- a/code/modules/fishing/admin.dm +++ b/code/modules/fishing/admin.dm @@ -1,12 +1,6 @@ -// Helper tool to see fishing probabilities with different setups -/datum/admins/proc/fishing_calculator() - set name = "Fishing Calculator" - set category = "Debug" - - if(!check_rights(R_DEBUG)) - return - var/datum/fishing_calculator/ui = new(usr) - ui.ui_interact(usr) +ADMIN_VERB(fishing_calculator, R_DEBUG, "Fishing Calculator", "A calculator... for fishes?", ADMIN_CATEGORY_DEBUG) + var/datum/fishing_calculator/ui = new + ui.ui_interact(user.mob) /datum/fishing_calculator var/list/current_table diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm index f246dfc4543..b1a43c468df 100644 --- a/code/modules/logging/log_holder.dm +++ b/code/modules/logging/log_holder.dm @@ -32,10 +32,8 @@ GLOBAL_REAL(logger, /datum/log_holder) GENERAL_PROTECT_DATUM(/datum/log_holder) -/client/proc/log_viewer_new() - set name = "View Round Logs" - set category = "Admin" - logger.ui_interact(mob) +ADMIN_VERB(log_viewer_new, R_ADMIN|R_DEBUG, "View Round Logs", "View the rounds logs.", ADMIN_CATEGORY_MAIN) + logger.ui_interact(user.mob) /datum/log_holder/ui_interact(mob/user, datum/tgui/ui) if(!check_rights_for(user.client, R_ADMIN)) diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index e43086349b3..16ef175dddf 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -44,9 +44,9 @@ message = trim_left(copytext_char(message, length(message_mods[RADIO_KEY]) + 2)) switch(message_mods[RADIO_EXTENSION]) if(MODE_ADMIN) - client.cmd_admin_say(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, message) if(MODE_DEADMIN) - client.dsay(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/dsay, message) if(MODE_PUPPET) if(!mind.current.say(message)) to_chat(src, span_warning("Your linked body was unable to speak!")) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 6af6bac4d4c..3222639c5c7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1162,9 +1162,7 @@ admin_ticket_log("[key_name_admin(usr)] has attempted to modify the bodyparts of [src]") if(href_list[VV_HK_MODIFY_ORGANS]) - if(!check_rights(NONE)) - return - usr.client.manipulate_organs(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/manipulate_organs, src) if(href_list[VV_HK_MARTIAL_ART]) if(!check_rights(NONE)) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c0763a67e01..34b2f35a157 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2004,6 +2004,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) VV_DROPDOWN_OPTION(VV_HK_GIVE_HALLUCINATION, "Give Hallucination") VV_DROPDOWN_OPTION(VV_HK_GIVE_DELUSION_HALLUCINATION, "Give Delusion Hallucination") VV_DROPDOWN_OPTION(VV_HK_GIVE_GUARDIAN_SPIRIT, "Give Guardian Spirit") + VV_DROPDOWN_OPTION(VV_HK_ADMIN_RENAME, "Force Change Name") /mob/living/vv_do_topic(list/href_list) . = ..() @@ -2041,6 +2042,29 @@ GLOBAL_LIST_EMPTY(fire_appearances) return admin_give_guardian(usr) + if(href_list[VV_HK_ADMIN_RENAME]) + if(!check_rights(R_ADMIN)) + return + + var/old_name = real_name + var/new_name = sanitize_name(tgui_input_text(usr, "Enter the new name.", "Admin Rename", real_name)) + if(!new_name || new_name == real_name) + return + + fully_replace_character_name(real_name, new_name) + var/replace_preferences = !isnull(client) && (tgui_alert(usr, "Would you like to update the client's preference with the new name?", "Pref Overwrite", list("Yes", "No")) == "Yes") + if(replace_preferences) + client.prefs.write_preference(GLOB.preference_entries[/datum/preference/name/real_name], new_name) + + log_admin("forced rename", list( + "admin" = key_name(usr), + "player" = key_name(src), + "old_name" = old_name, + "new_name" = new_name, + "updated_prefs" = replace_preferences, + )) + message_admins("[key_name_admin(usr)] has forcibly changed the real name of [key_name(src)] from '[old_name]' to '[real_name]'[(replace_preferences ? " and their preferences" : "")]") + /mob/living/proc/move_to_error_room() var/obj/effect/landmark/error/error_landmark = locate(/obj/effect/landmark/error) in GLOB.landmarks_list if(error_landmark) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 1169895e713..52e4f9304be 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -127,11 +127,11 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( return if(message_mods[RADIO_EXTENSION] == MODE_ADMIN) - client?.cmd_admin_say(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, message) return if(message_mods[RADIO_EXTENSION] == MODE_DEADMIN) - client?.dsay(message) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/dsay, message) return // dead is the only state you can never emote diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 36b0844f695..31cb622e447 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1472,9 +1472,7 @@ regenerate_icons() if(href_list[VV_HK_PLAYER_PANEL]) - if(!check_rights(NONE)) - return - usr.client.holder.show_player_panel(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_player_panel, src) if(href_list[VV_HK_GODMODE]) if(!check_rights(R_ADMIN)) @@ -1482,34 +1480,22 @@ usr.client.cmd_admin_godmode(src) if(href_list[VV_HK_GIVE_MOB_ACTION]) - if(!check_rights(NONE)) - return - usr.client.give_mob_action(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/give_mob_action, src) if(href_list[VV_HK_REMOVE_MOB_ACTION]) - if(!check_rights(NONE)) - return - usr.client.remove_mob_action(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/remove_mob_action, src) if(href_list[VV_HK_GIVE_SPELL]) - if(!check_rights(NONE)) - return - usr.client.give_spell(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/give_spell, src) if(href_list[VV_HK_REMOVE_SPELL]) - if(!check_rights(NONE)) - return - usr.client.remove_spell(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/remove_spell, src) if(href_list[VV_HK_GIVE_DISEASE]) - if(!check_rights(NONE)) - return - usr.client.give_disease(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/give_disease, src) if(href_list[VV_HK_GIB]) - if(!check_rights(R_FUN)) - return - usr.client.cmd_admin_gib(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/gib_them, src) if(href_list[VV_HK_BUILDMODE]) if(!check_rights(R_BUILD)) @@ -1517,19 +1503,13 @@ togglebuildmode(src) if(href_list[VV_HK_DROP_ALL]) - if(!check_rights(NONE)) - return - usr.client.cmd_admin_drop_everything(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/drop_everything, src) if(href_list[VV_HK_DIRECT_CONTROL]) - if(!check_rights(NONE)) - return - usr.client.cmd_assume_direct_control(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/cmd_assume_direct_control, src) if(href_list[VV_HK_GIVE_DIRECT_CONTROL]) - if(!check_rights(NONE)) - return - usr.client.cmd_give_direct_control(src) + return SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/cmd_give_direct_control, src) if(href_list[VV_HK_OFFER_GHOSTS]) if(!check_rights(NONE)) diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 420ac9c8d79..58ff5641907 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -136,40 +136,36 @@ // HERE BE DEBUG DRAGONS // /////////////////////////// -/client/proc/debugNatureMapGenerator() - set name = "Test Nature Map Generator" - set category = "Debug" - +ADMIN_VERB(debug_nature_map_generator, R_DEBUG, "Test Nature Map Generator", "Test the nature map generator", ADMIN_CATEGORY_DEBUG) var/datum/map_generator/nature/N = new() - var/startInput = input(usr, "Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null + var/startInput = input(user, "Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null if (isnull(startInput)) return - var/endInput = input(usr, "End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null - + var/endInput = input(user, "End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[user.mob.z]") as text|null if (isnull(endInput)) return //maxx maxy and current z so that if you fuck up, you only fuck up one entire z level instead of the entire universe if(!startInput || !endInput) - to_chat(src, "Missing Input") + to_chat(user, "Missing Input") return var/list/startCoords = splittext(startInput, ";") var/list/endCoords = splittext(endInput, ";") if(!startCoords || !endCoords) - to_chat(src, "Invalid Coords") - to_chat(src, "Start Input: [startInput]") - to_chat(src, "End Input: [endInput]") + to_chat(user, "Invalid Coords") + to_chat(user, "Start Input: [startInput]") + to_chat(user, "End Input: [endInput]") return var/turf/Start = locate(text2num(startCoords[1]),text2num(startCoords[2]),text2num(startCoords[3])) var/turf/End = locate(text2num(endCoords[1]),text2num(endCoords[2]),text2num(endCoords[3])) if(!Start || !End) - to_chat(src, "Invalid Turfs") - to_chat(src, "Start Coords: [startCoords[1]] - [startCoords[2]] - [startCoords[3]]") - to_chat(src, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]") + to_chat(user, "Invalid Turfs") + to_chat(user, "Start Coords: [startCoords[1]] - [startCoords[2]] - [startCoords[3]]") + to_chat(user, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]") return var/static/list/clusters = list( @@ -191,7 +187,7 @@ var/theCluster = 0 if(moduleClusters != "None") if(!clusters[moduleClusters]) - to_chat(src, "Invalid Cluster Flags") + to_chat(user, "Invalid Cluster Flags") return theCluster = clusters[moduleClusters] else @@ -202,9 +198,9 @@ M.clusterCheckFlags = theCluster - to_chat(src, "Defining Region") + to_chat(user, "Defining Region") N.defineRegion(Start, End) - to_chat(src, "Region Defined") - to_chat(src, "Generating Region") + to_chat(user, "Region Defined") + to_chat(user, "Generating Region") N.generate() - to_chat(src, "Generated Region") + to_chat(user, "Generated Region") diff --git a/code/modules/reagents/chemistry/chem_wiki_render.dm b/code/modules/reagents/chemistry/chem_wiki_render.dm index a2ac0af8ffb..99116adc84b 100644 --- a/code/modules/reagents/chemistry/chem_wiki_render.dm +++ b/code/modules/reagents/chemistry/chem_wiki_render.dm @@ -1,10 +1,6 @@ -//Generates a wikitable txt file for use with the wiki - does not support productless reactions at the moment -/client/proc/generate_wikichem_list() - set category = "Debug" - set name = "Parse Wikichems" - +ADMIN_VERB(generate_wikichem_list, R_DEBUG, "Parse Wikichems", "Parse and generate a text file for wikichem.", ADMIN_CATEGORY_DEBUG) //If we're a reaction product - var/prefix_reaction = {"{| class=\"wikitable sortable\" style=\"width:100%; text-align:left; border: 3px solid #FFDD66; cellspacing=0; cellpadding=2; background-color:white;\" + var/static/prefix_reaction = {"{| class=\"wikitable sortable\" style=\"width:100%; text-align:left; border: 3px solid #FFDD66; cellspacing=0; cellpadding=2; background-color:white;\" ! scope=\"col\" style='width:150px; background-color:#FFDD66;'|Name ! scope=\"col\" class=\"unsortable\" style='background-color:#FFDD66;'|Formula ! scope=\"col\" class=\"unsortable\" style='background-color:#FFDD66; width:170px;'|Reaction conditions @@ -13,9 +9,9 @@ |- "} - var/input_text = tgui_input_text(usr, "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get it's wiki table entry", "Recipe") //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name + var/input_text = tgui_input_text(user, "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get it's wiki table entry", "Recipe") //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name if(!input_text) - to_chat(usr, "Input was blank!") + to_chat(user, "Input was blank!") return text2file(prefix_reaction, "[GLOB.log_directory]/chem_parse.txt") var/list/names = splittext("[input_text]", ",") @@ -23,13 +19,13 @@ for(var/name in names) var/datum/reagent/reagent = find_reagent_object_from_type(get_chem_id(name)) if(!reagent) - to_chat(usr, "Could not find [name]. Skipping.") + to_chat(user, "Could not find [name]. Skipping.") continue //Get reaction var/list/reactions = GLOB.chemical_reactions_list_product_index[reagent.type] if(!length(reactions)) - to_chat(usr, "Could not find [name] reaction! Continuing anyways.") + to_chat(user, "Could not find [name] reaction! Continuing anyways.") var/single_parse = generate_chemwiki_line(reagent, null) text2file(single_parse, "[GLOB.log_directory]/chem_parse.txt") continue @@ -38,8 +34,7 @@ var/single_parse = generate_chemwiki_line(reagent, reaction) text2file(single_parse, "[GLOB.log_directory]/chem_parse.txt") text2file("|}", "[GLOB.log_directory]/chem_parse.txt") //Cap off the table - to_chat(usr, "Done! Saved file to (wherever your root folder is, i.e. where the DME is)/[GLOB.log_directory]/chem_parse.txt OR use the Get Current Logs verb under the Admin tab. (if you click Open, and it does nothing, that's because you've not set a .txt default program! Try downloading it instead, and use that file to set a default program! Have a nice day!") - + to_chat(user, "Done! Saved file to (wherever your root folder is, i.e. where the DME is)/[GLOB.log_directory]/chem_parse.txt OR use the Get Current Logs verb under the Admin tab. (if you click Open, and it does nothing, that's because you've not set a .txt default program! Try downloading it instead, and use that file to set a default program! Have a nice day!") /// Generate the big list of reagent based reactions. /proc/generate_chemwiki_line(datum/reagent/reagent, datum/chemical_reaction/reaction) diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm index dd6d8d42a48..74a40304f7a 100644 --- a/code/modules/requests/request_manager.dm +++ b/code/modules/requests/request_manager.dm @@ -163,17 +163,18 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) switch(action) if ("pp") - var/mob/M = request.owner?.mob - usr.client.holder.show_player_panel(M) + SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/show_player_panel, request.owner?.mob) return TRUE + if ("vv") var/mob/M = request.owner?.mob usr.client.debug_variables(M) return TRUE + if ("sm") - var/mob/M = request.owner?.mob - usr.client.cmd_admin_subtle_message(M) + SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/cmd_admin_subtle_message, request.owner?.mob) return TRUE + if ("flw") var/mob/M = request.owner?.mob usr.client.admin_follow(M) @@ -192,8 +193,9 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) D.traitor_panel() return TRUE else - usr.client.holder.show_traitor_panel(M) + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_traitor_panel, M) return TRUE + if ("logs") var/mob/M = request.owner?.mob if(!ismob(M)) @@ -201,16 +203,11 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) return TRUE show_individual_logging_panel(M, null, null) return TRUE + if ("smite") - if(!check_rights(R_FUN)) - to_chat(usr, "Insufficient permissions to smite, you require +FUN", confidential = TRUE) - return TRUE - var/mob/living/carbon/human/H = request.owner?.mob - if (!H || !istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human", confidential = TRUE) - return TRUE - usr.client.smite(H) + SSadmin_verbs.dynamic_invoke_verb(ui.user, /datum/admin_verb/admin_smite, request.owner?.mob) return TRUE + if ("rply") if (request.req_type == REQUEST_PRAYER) to_chat(usr, "Cannot reply to a prayer", confidential = TRUE) diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm index 3cdfb5057d0..8fff832477c 100644 --- a/code/modules/tgui_input/say_modal/speech.dm +++ b/code/modules/tgui_input/say_modal/speech.dm @@ -45,7 +45,7 @@ client.ooc(entry) return TRUE if(ADMIN_CHANNEL) - client.cmd_admin_say(entry) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, entry) return TRUE // SKYRAT EDIT ADDITION START - CUSTOMIZATION if(LOOC_CHANNEL) diff --git a/code/modules/transport/admin.dm b/code/modules/transport/admin.dm index 9d68d967e60..63f1fbfd55a 100644 --- a/code/modules/transport/admin.dm +++ b/code/modules/transport/admin.dm @@ -1,23 +1,14 @@ -/** - * Helper tool to try and resolve tram controller errors, or reset the contents if someone put a million chickens on the tram - * and now it's slow as hell and lagging things. - */ -/datum/admins/proc/reset_tram() - set name = "Reset Tram" - set category = "Debug" +ADMIN_VERB(reset_tram, R_DEBUG|R_ADMIN, "Reset Tram", "Reset a tram controller or its contents.", ADMIN_CATEGORY_DEBUG) var/static/list/debug_tram_list = list( - TRAMSTATION_LINE_1, - BIRDSHOT_LINE_1, - BIRDSHOT_LINE_2, - HILBERT_LINE_1, + TRAMSTATION_LINE_1, + BIRDSHOT_LINE_1, + BIRDSHOT_LINE_2, + HILBERT_LINE_1, ) - if(!check_rights(R_DEBUG)) - return - var/datum/transport_controller/linear/tram/broken_controller - var/selected_transport_id = tgui_input_list(usr, "Which tram?", "Off the rails", debug_tram_list) - var/reset_type = tgui_input_list(usr, "How hard of a reset?", "How bad is it screwed up", list("Clear Tram Contents", "Controller", "Controller and Contents", "Delete Datum", "Cancel")) + var/selected_transport_id = tgui_input_list(user, "Which tram?", "Off the rails", debug_tram_list) + var/reset_type = tgui_input_list(user, "How hard of a reset?", "How bad is it screwed up", list("Clear Tram Contents", "Controller", "Controller and Contents", "Delete Datum", "Cancel")) if(isnull(reset_type) || reset_type == "Cancel") return @@ -28,40 +19,40 @@ break if(isnull(broken_controller)) - to_chat(usr, span_warning("Couldn't find a transport controller datum with ID [selected_transport_id]!")) + to_chat(user, span_warning("Couldn't find a transport controller datum with ID [selected_transport_id]!")) return switch(reset_type) if("Clear Tram Contents") - var/selection = tgui_alert(usr, "Include player mobs in the clearing?", "Contents reset [selected_transport_id]", list("Contents", "Contents and Players", "Cancel")) + var/selection = tgui_alert(user, "Include player mobs in the clearing?", "Contents reset [selected_transport_id]", list("Contents", "Contents and Players", "Cancel")) switch(selection) if("Contents") broken_controller.reset_lift_contents(foreign_objects = TRUE, foreign_non_player_mobs = TRUE, consider_player_mobs = FALSE) - message_admins("[key_name_admin(usr)] performed a contents reset of tram ID [selected_transport_id].") - log_transport("TC: [selected_transport_id]: [key_name_admin(usr)] performed a contents reset.") + message_admins("[key_name_admin(user)] performed a contents reset of tram ID [selected_transport_id].") + log_transport("TC: [selected_transport_id]: [key_name_admin(user)] performed a contents reset.") if("Contents and Players") broken_controller.reset_lift_contents(foreign_objects = TRUE, foreign_non_player_mobs = TRUE, consider_player_mobs = TRUE) - message_admins("[key_name_admin(usr)] performed a contents and player mob reset of tram ID [selected_transport_id].") - log_transport("TC: [selected_transport_id]: [key_name_admin(usr)] performed a contents and player mob reset.") + message_admins("[key_name_admin(user)] performed a contents and player mob reset of tram ID [selected_transport_id].") + log_transport("TC: [selected_transport_id]: [key_name_admin(user)] performed a contents and player mob reset.") else return if("Controller") - log_transport("TC: [selected_transport_id]: [key_name_admin(usr)] performed a controller reset, force operational.") - message_admins("[key_name_admin(usr)] performed a controller reset of tram ID [selected_transport_id].") + log_transport("TC: [selected_transport_id]: [key_name_admin(user)] performed a controller reset, force operational.") + message_admins("[key_name_admin(user)] performed a controller reset of tram ID [selected_transport_id].") broken_controller.set_operational(TRUE) broken_controller.reset_position() if("Controller and Contents") - var/selection = tgui_alert(usr, "Include player mobs in the clearing?", "Contents reset [selected_transport_id]", list("Contents", "Contents and Players", "Cancel")) + var/selection = tgui_alert(user, "Include player mobs in the clearing?", "Contents reset [selected_transport_id]", list("Contents", "Contents and Players", "Cancel")) switch(selection) if("Contents") - message_admins("[key_name_admin(usr)] performed a contents and controller reset of tram ID [selected_transport_id].") - log_transport("TC: [selected_transport_id]: [key_name_admin(usr)] performed a contents reset. Controller reset, force operational.") + message_admins("[key_name_admin(user)] performed a contents and controller reset of tram ID [selected_transport_id].") + log_transport("TC: [selected_transport_id]: [key_name_admin(user)] performed a contents reset. Controller reset, force operational.") broken_controller.reset_lift_contents(foreign_objects = TRUE, foreign_non_player_mobs = TRUE, consider_player_mobs = FALSE) if("Contents and Players") - message_admins("[key_name_admin(usr)] performed a contents/player/controller reset of tram ID [selected_transport_id].") - log_transport("TC: [selected_transport_id]: [key_name_admin(usr)] performed a contents and player mob reset. Controller reset, force operational.") + message_admins("[key_name_admin(user)] performed a contents/player/controller reset of tram ID [selected_transport_id].") + log_transport("TC: [selected_transport_id]: [key_name_admin(user)] performed a contents and player mob reset. Controller reset, force operational.") broken_controller.reset_lift_contents(foreign_objects = TRUE, foreign_non_player_mobs = TRUE, consider_player_mobs = TRUE) else return @@ -70,7 +61,7 @@ broken_controller.reset_position() if("Delete Datum") - var/confirm = tgui_alert(usr, "Deleting [selected_transport_id] will make it unrecoverable this round. Are you sure?", "Delete tram ID [selected_transport_id]", list("Yes", "Cancel")) + var/confirm = tgui_alert(user, "Deleting [selected_transport_id] will make it unrecoverable this round. Are you sure?", "Delete tram ID [selected_transport_id]", list("Yes", "Cancel")) if(confirm != "Yes") return @@ -82,4 +73,4 @@ broken_controller.cycle_doors(CYCLE_OPEN, BYPASS_DOOR_CHECKS) broken_controller.estop() qdel(broken_controller) - message_admins("[key_name_admin(usr)] performed a datum delete of tram ID [selected_transport_id].") + message_admins("[key_name_admin(user)] performed a datum delete of tram ID [selected_transport_id].") diff --git a/code/modules/wiremod/core/admin_panel.dm b/code/modules/wiremod/core/admin_panel.dm index 74e72ad5efe..9a262cb5e4c 100644 --- a/code/modules/wiremod/core/admin_panel.dm +++ b/code/modules/wiremod/core/admin_panel.dm @@ -1,10 +1,7 @@ -/// An admin verb to view all circuits, plus useful information -/datum/admins/proc/view_all_circuits() - set category = "Admin.Game" - set name = "View All Circuits" +ADMIN_VERB(view_all_circuits, R_ADMIN, "View All Circuits", "List all circuits in the game.", ADMIN_CATEGORY_GAME) var/static/datum/circuit_admin_panel/circuit_admin_panel = new - circuit_admin_panel.ui_interact(usr) + circuit_admin_panel.ui_interact(user.mob) /datum/circuit_admin_panel @@ -66,9 +63,10 @@ usr.client?.debug_variables(circuit) if ("open_circuit") circuit.ui_interact(usr) + if ("open_player_panel") var/datum/mind/inserter = circuit.inserter_mind?.resolve() - usr.client?.holder?.show_player_panel(inserter?.current) + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/show_player_panel, inserter?.current) return TRUE diff --git a/code/modules/wiremod/core/duplicator.dm b/code/modules/wiremod/core/duplicator.dm index 2f248d11a89..25e83326804 100644 --- a/code/modules/wiremod/core/duplicator.dm +++ b/code/modules/wiremod/core/duplicator.dm @@ -220,30 +220,24 @@ GLOBAL_LIST_INIT(circuit_dupe_whitelisted_types, list( rel_x = component_data["rel_x"] rel_y = component_data["rel_y"] -/client/proc/load_circuit() - set name = "Load Circuit" - set category = "Admin.Fun" - - if(!check_rights(R_VAREDIT)) - return - +ADMIN_VERB(load_circuit, R_VAREDIT, "Load Circuit", "Loads a circuit from a file or direct input.", ADMIN_CATEGORY_FUN) var/list/errors = list() - var/option = alert(usr, "Load by file or direct input?", "Load by file or string", "File", "Direct Input") + var/option = alert(user, "Load by file or direct input?", "Load by file or string", "File", "Direct Input") var/txt switch(option) if("File") - txt = file2text(input(usr, "Input File") as null|file) + txt = file2text(input(user, "Input File") as null|file) if("Direct Input") - txt = input(usr, "Input JSON", "Input JSON") as text|null + txt = input(user, "Input JSON", "Input JSON") as text|null if(!txt) return - var/obj/item/integrated_circuit/loaded/circuit = new(mob.drop_location()) + var/obj/item/integrated_circuit/loaded/circuit = new(user.mob.drop_location()) circuit.load_circuit_data(txt, errors) if(length(errors)) - to_chat(src, span_warning("The following errors were found whilst compiling the circuit data:")) + to_chat(user, span_warning("The following errors were found whilst compiling the circuit data:")) for(var/error in errors) - to_chat(src, span_warning(error)) + to_chat(user, span_warning(error)) diff --git a/modular_skyrat/master_files/code/modules/admin/admin.dm b/modular_skyrat/master_files/code/modules/admin/admin.dm index 86f86bc7e12..91afc0def67 100644 --- a/modular_skyrat/master_files/code/modules/admin/admin.dm +++ b/modular_skyrat/master_files/code/modules/admin/admin.dm @@ -1,9 +1,6 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE) -/datum/admins/proc/toggledchat() - set category = "Server" - set desc = "Toggle dis bitch" - set name = "Toggle Dead Chat" +ADMIN_VERB(toggledchat, R_ADMIN, "Toggle Dead Chat", "Toggle dis bitch.", ADMIN_CATEGORY_SERVER) toggle_dchat() log_admin("[key_name(usr)] toggled dead chat.") message_admins("[key_name_admin(usr)] toggled dead chat.") @@ -66,12 +63,12 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE) /datum/admin_help/proc/convert_to_mentorhelp(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return FALSE - + if(handler && handler != usr.ckey) var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) if(!response || response == "No") return FALSE - + add_verb(initiator, /client/verb/mentorhelp) // Way to override mentorhelp cooldown. to_chat(initiator, span_adminhelp("Your ticket was converted to Mentorhelp")) diff --git a/modular_skyrat/modules/admin/code/aooc.dm b/modular_skyrat/modules/admin/code/aooc.dm index b679f5c8e0d..b3bfb8be52e 100644 --- a/modular_skyrat/modules/admin/code/aooc.dm +++ b/modular_skyrat/modules/admin/code/aooc.dm @@ -102,9 +102,7 @@ GLOBAL_LIST_EMPTY(ckey_to_aooc_name) var/client/iterated_client = iterated_listener to_chat(iterated_client, span_oocplain("The AOOC channel has been globally [GLOB.aooc_allowed ? "enabled" : "disabled"].")) -/datum/admins/proc/toggleaooc() - set category = "Server" - set name = "Toggle Antag OOC" +ADMIN_VERB(toggleaooc, R_ADMIN, "Toggle Antag OOC", "Toggles Antag OOC.", ADMIN_CATEGORY_SERVER) toggle_aooc() log_admin("[key_name(usr)] toggled Antagonist OOC.") message_admins("[key_name_admin(usr)] toggled Antagonist OOC.") diff --git a/modular_skyrat/modules/admin/code/fix_chat.dm b/modular_skyrat/modules/admin/code/fix_chat.dm index e82c3cf73d7..25649f480b8 100644 --- a/modular_skyrat/modules/admin/code/fix_chat.dm +++ b/modular_skyrat/modules/admin/code/fix_chat.dm @@ -1,6 +1,4 @@ -/client/proc/fix_say() - set name = "Fix say for players" - set category = "Admin" +ADMIN_VERB(fix_say, R_ADMIN, "Fix say", "Fix say for the players.", ADMIN_CATEGORY_MAIN) for(var/player in GLOB.player_list) if(!isnull(player)) continue diff --git a/modular_skyrat/modules/admin/code/loud_say.dm b/modular_skyrat/modules/admin/code/loud_say.dm index 82d73fc3723..15c8c025fc3 100644 --- a/modular_skyrat/modules/admin/code/loud_say.dm +++ b/modular_skyrat/modules/admin/code/loud_say.dm @@ -1,22 +1,16 @@ -/client/proc/cmd_loud_admin_say(msg as text) - set category = "Admin" - set name = "loudAsay" - set hidden = TRUE - if(!check_rights(0)) - return - +ADMIN_VERB(cmd_loud_admin_say, R_NONE, "loudAsay", "Send a message to other admins (loudly).", ADMIN_CATEGORY_MAIN, msg as text) msg = emoji_parse(copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)) if(!msg) return msg = emoji_parse(msg) - mob.log_talk(msg, LOG_ASAY) + user.mob.log_talk(msg, LOG_ASAY) - send_asay_to_other_server(ckey, span_command_headset(msg)) + send_asay_to_other_server(user.ckey, span_command_headset(msg)) msg = keywords_lookup(msg) - var/custom_asay_color = (CONFIG_GET(flag/allow_admin_asaycolor) && prefs?.read_preference(/datum/preference/color/asay_color)) ? "" : "" - msg = span_command_headset("ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [custom_asay_color][msg][custom_asay_color ? "":null]") + var/custom_asay_color = (CONFIG_GET(flag/allow_admin_asaycolor) && user.mob.client?.prefs?.read_preference(/datum/preference/color/asay_color)) ? "" : "" + msg = span_command_headset("ADMIN: [key_name(user, 1)] [ADMIN_FLW(user.mob)]: [custom_asay_color][msg][custom_asay_color ? "":null]") to_chat(GLOB.admins, type = MESSAGE_TYPE_ADMINCHAT, diff --git a/modular_skyrat/modules/admin/code/player_ranks.dm b/modular_skyrat/modules/admin/code/player_ranks.dm index 6e05a42f7d8..242fe92cccb 100644 --- a/modular_skyrat/modules/admin/code/player_ranks.dm +++ b/modular_skyrat/modules/admin/code/player_ranks.dm @@ -1,11 +1,7 @@ /// The list of the available special player ranks #define SKYRAT_PLAYER_RANKS list("Donator", "Mentor", "Veteran") -/client/proc/manage_player_ranks() - set category = "Admin" - set name = "Manage Player Ranks" - set desc = "Manage who has the special player ranks while the server is running." - +ADMIN_VERB(manage_player_ranks, R_PERMISSIONS, "Manage Player Ranks", "Manage who has the special player ranks while the server is running.", ADMIN_CATEGORY_MAIN) if(!check_rights(R_PERMISSIONS)) return @@ -86,16 +82,8 @@ -/client/proc/migrate_player_ranks() - set category = "Debug" - set name = "Migrate Player Ranks" - set desc = "Individually migrate the various player ranks from their legacy system to the SQL-based one." - - if(!check_rights(R_PERMISSIONS | R_DEBUG | R_SERVER)) - return - - usr.client?.holder.migrate_player_ranks() - +ADMIN_VERB(migrate_player_ranks, R_PERMISSIONS|R_DEBUG|R_SERVER, "Migrate Player Ranks", "Individually migrate the various player ranks from their legacy system to the SQL-based one.", ADMIN_CATEGORY_DEBUG) + user.mob.client?.holder.migrate_player_ranks() /datum/admins/proc/migrate_player_ranks() if(IsAdminAdvancedProcCall()) diff --git a/modular_skyrat/modules/admin/code/sooc.dm b/modular_skyrat/modules/admin/code/sooc.dm index 9c60d2347db..051391d658c 100644 --- a/modular_skyrat/modules/admin/code/sooc.dm +++ b/modular_skyrat/modules/admin/code/sooc.dm @@ -104,9 +104,7 @@ GLOBAL_LIST_EMPTY(ckey_to_sooc_name) var/client/iterated_client = iterated_listener to_chat(iterated_client, span_oocplain("The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].")) -/datum/admins/proc/togglesooc() - set category = "Server" - set name = "Toggle Security OOC" +ADMIN_VERB(togglesooc, R_ADMIN, "Toggle Security OOC", "Toggles Security OOC.", ADMIN_CATEGORY_SERVER) toggle_sooc() log_admin("[key_name(usr)] toggled Security OOC.") message_admins("[key_name_admin(usr)] toggled Security OOC.") diff --git a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm index f0e8af0cdba..ccc2cbbb132 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm +++ b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm @@ -358,11 +358,7 @@ SUBSYSTEM_DEF(area_spawn) /** * Show overlay over area of priorities. Wall priority over open priority. */ -/client/proc/test_area_spawner(area/area) - set category = "Debug" - set name = "Test Area Spawner" - set desc = "Show area spawner placement candidates as an overlay." - +ADMIN_VERB(test_area_spawner, R_DEBUG, "Test Area Spawner", "Show area spawner placement candidates as an overlay.", ADMIN_CATEGORY_DEBUG, area/area) for(var/obj/effect/turf_test/old_test in area) qdel(old_test) diff --git a/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm b/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm index aa0082ad244..f0d731c4579 100644 --- a/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm +++ b/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm @@ -1,10 +1,6 @@ -/client/proc/toggle_bsa() - set category = "Admin.Fun" - set name = "Toggle BSA Control" - set desc = "Toggles the BSA control lock on and off." - +ADMIN_VERB(toggle_bsa, R_ADMIN, "Toggle BSA Control", "Toggles the BSA control lock on and off.", ADMIN_CATEGORY_FUN) GLOB.bsa_unlock = !GLOB.bsa_unlock minor_announce("Bluespace Artillery firing protocols have been [GLOB.bsa_unlock? "unlocked" : "locked"]", "Weapons Systems Update:") message_admins("[ADMIN_LOOKUPFLW(usr)] [GLOB.bsa_unlock? "unlocked" : "locked"] BSA firing protocols.") - log_admin("[key_name(usr)] [GLOB.bsa_unlock? "unlocked" : "locked"] BSA firing protocols.") + log_admin("[key_name(user)] [GLOB.bsa_unlock? "unlocked" : "locked"] BSA firing protocols.") diff --git a/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm b/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm index 5ab0c9a713b..9227b8582b2 100644 --- a/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm +++ b/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm @@ -1,9 +1,5 @@ -/client/proc/spawn_mob_spawner() - set category = "Admin.Fun" - set name = "Spawn mob spawner" - set desc = "Spawns a mob spawner structure below the user." - - holder?.spawn_mob_spawner() +ADMIN_VERB(spawn_mob_spawner, R_ADMIN, "Spawn mob spawner", "Spawns a mob spawner structure at your location.", ADMIN_CATEGORY_FUN) + user.holder?.spawn_mob_spawner() /datum/admins/proc/spawn_mob_spawner(chosen_mob as text) if(!check_rights(R_SPAWN)) diff --git a/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm b/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm index fc338d7b214..0d4a99627c3 100644 --- a/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm +++ b/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm @@ -1,12 +1,7 @@ /// Lets an admin activate the delam suppression system -/client/proc/try_stop_delam() - set name = "Delam Emergency Stop" - set category = "Admin.Events" +ADMIN_VERB(try_stop_delam, R_ADMIN, "Delam Emergency Stop", "Activate the delam suppression system.", ADMIN_CATEGORY_EVENTS) var/obj/machinery/atmospherics/components/unary/delam_scram/suppression_system = null - if(!holder || !check_rights(R_FUN)) - return - suppression_system = validate_suppression_status() if(!suppression_system) @@ -14,19 +9,19 @@ // Warn them if they're intervening in the work of God if(world.time - SSticker.round_start_time < 30 MINUTES) - var/go_early = tgui_alert(usr, "The [suppression_system.name] is set to automatically start at the programmed time. \ + var/go_early = tgui_alert(user, "The [suppression_system.name] is set to automatically start at the programmed time. \ Are you sure you want to override this and fire it early? It's less scary that way.", "Suffering premature delamination?", list("No", "Yes")) if(go_early != "Yes") return FALSE - var/double_check = tgui_alert(usr, "You really sure that you want to push this?", "Reticulating Splines", list("No", "Yes")) + var/double_check = tgui_alert(user, "You really sure that you want to push this?", "Reticulating Splines", list("No", "Yes")) if(double_check != "Yes") return FALSE // Send the signal to start, unlock the temp emergency exits - log_admin("[key_name_admin(usr)] started a supermatter emergency stop!") - message_admins("[ADMIN_LOOKUPFLW(usr)] started a supermatter emergency stop! [ADMIN_COORDJMP(suppression_system)]") - suppression_system.investigate_log("[key_name_admin(usr)] started a supermatter emergency stop!", INVESTIGATE_ATMOS) + log_admin("[key_name_admin(user)] started a supermatter emergency stop!") + message_admins("[ADMIN_LOOKUPFLW(user)] started a supermatter emergency stop! [ADMIN_COORDJMP(suppression_system)]") + suppression_system.investigate_log("[key_name_admin(user)] started a supermatter emergency stop!", INVESTIGATE_ATMOS) SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, DIVINE_INTERVENTION) for(var/obj/machinery/door/airlock/escape_route in range(14, suppression_system)) // a little more space here due to positioning if(istype(escape_route, /obj/machinery/door/airlock/command)) @@ -34,13 +29,10 @@ INVOKE_ASYNC(escape_route, TYPE_PROC_REF(/obj/machinery/door/airlock, temp_emergency_exit), 45 SECONDS) /// Lets admins disable/enable the delam suppression system +ADMIN_VERB(toggle_delam_suppression, R_FUN, "Delam Suppression Toggle", "Disable/enable the delam suppression system.", ADMIN_CATEGORY_EVENTS) + user.mob.client?.toggle_delam_suppression() + /client/proc/toggle_delam_suppression() - set name = "Delam Suppression Toggle" - set category = "Admin.Events" - - if(!holder || !check_rights(R_FUN)) - return - var/obj/machinery/atmospherics/components/unary/delam_scram/suppression_system = validate_suppression_status() if(!suppression_system) diff --git a/modular_skyrat/modules/events/code/event_spawner_menu.dm b/modular_skyrat/modules/events/code/event_spawner_menu.dm index 94be670b8ed..7f839bcfc13 100644 --- a/modular_skyrat/modules/events/code/event_spawner_menu.dm +++ b/modular_skyrat/modules/events/code/event_spawner_menu.dm @@ -366,13 +366,7 @@ ShowPanel(usr, null) return -/client/proc/admin_open_event_spawners_menu() - set category = "Admin.Events" - set name = "Event Spawners Menu" - - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(admin_open_event_spawners_menu, R_ADMIN, "Event Spawners Menu", "Event Spawners Menu.", ADMIN_CATEGORY_EVENTS) var/datum/event_spawner_manager/ESM = GLOB.event_spawner_manager ESM.ShowPanel(usr, null) diff --git a/modular_skyrat/modules/ices_events/code/ICES_tgui.dm b/modular_skyrat/modules/ices_events/code/ICES_tgui.dm index fb4c04a3678..6d28556209d 100644 --- a/modular_skyrat/modules/ices_events/code/ICES_tgui.dm +++ b/modular_skyrat/modules/ices_events/code/ICES_tgui.dm @@ -1,12 +1,6 @@ ///Allows an admin to open the panel -/client/proc/intensity_credits_panel() - set name = "ICES Events Panel" - set category = "Admin.Events" - - if(!holder || !check_rights(R_FUN)) - return - - holder.intensity_credits_panel() +ADMIN_VERB(intensity_credits_panel, R_FUN, "ICES Events Panel", "Opens up the ICES panel.", ADMIN_CATEGORY_EVENTS) + user.holder?.intensity_credits_panel() ///Opens up the ICES panel /datum/admins/proc/intensity_credits_panel() diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm b/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm index 6f83d6b41b8..d28aec8e8b0 100644 --- a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm +++ b/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm @@ -261,11 +261,5 @@ GLOBAL_LIST_EMPTY_TYPED(interaction_instances, /datum/interaction) GLOB.interaction_instances[iname] = interaction -/client/proc/reload_interactions() - set category = "Debug" - set name = "Reload Interactions" - set desc = "Force reload interactions" - if(!check_rights(R_DEBUG)) - return - +ADMIN_VERB(reload_interactions, R_DEBUG, "Reload Interactions", "Force reload interactions.", ADMIN_CATEGORY_DEBUG) populate_interaction_instances() diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm b/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm index ed462fceaf5..b53cbc3bf04 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm +++ b/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm @@ -112,10 +112,5 @@ SUBSYSTEM_DEF(liquids) if(T.lgroup) T.lgroup.amount_of_active_turfs-- -/client/proc/toggle_liquid_debug() - set category = "Debug" - set name = "Liquid Groups Color Debug" - set desc = "Liquid Groups Color Debug." - if(!holder) - return +ADMIN_VERB(toggle_liquid_debug, R_DEBUG, "Liquid Groups Color Debug", "Liquid Groups Color Debug.", ADMIN_CATEGORY_DEBUG) GLOB.liquid_debug_colors = !GLOB.liquid_debug_colors diff --git a/modular_skyrat/modules/liquids/code/tools.dm b/modular_skyrat/modules/liquids/code/tools.dm index 1ee43b78a37..2252835f2b2 100644 --- a/modular_skyrat/modules/liquids/code/tools.dm +++ b/modular_skyrat/modules/liquids/code/tools.dm @@ -1,12 +1,8 @@ -/client/proc/spawn_liquid() - set category = "Admin.Fun" - set name = "Spawn Liquid" - set desc = "Spawns an amount of chosen liquid at your current location." - +ADMIN_VERB(spawn_liquid, R_ADMIN, "Spawn Liquid", "Spawns an amount of chosen liquid at your current location.", ADMIN_CATEGORY_FUN) var/choice var/valid_id while(!valid_id) - choice = tgui_input_text(usr, "Enter the ID of the reagent you want to add.", "Search reagents") + choice = tgui_input_text(user, "Enter the ID of the reagent you want to add.", "Search reagents") if(isnull(choice)) //Get me out of here! break if (!ispath(text2path(choice))) @@ -16,26 +12,21 @@ else valid_id = TRUE if(!valid_id) - to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) + to_chat(user, span_warning("A reagent with that ID doesn't exist!")) if(!choice) return - var/volume = tgui_input_number(usr, "Volume:", "Choose volume") + var/volume = tgui_input_number(user, "Volume:", "Choose volume") if(!volume) return - var/turf/epicenter = get_turf(mob) + var/turf/epicenter = get_turf(user.mob) epicenter.add_liquid(choice, volume) - message_admins("[ADMIN_LOOKUPFLW(usr)] spawned liquid at [epicenter.loc] ([choice] - [volume]).") - log_admin("[key_name(usr)] spawned liquid at [epicenter.loc] ([choice] - [volume]).") + message_admins("[ADMIN_LOOKUPFLW(user)] spawned liquid at [epicenter.loc] ([choice] - [volume]).") + log_admin("[key_name(user)] spawned liquid at [epicenter.loc] ([choice] - [volume]).") -/client/proc/remove_liquid(turf/epicenter in world) - set name = "Remove Liquids" - set category = "Admin.Game" - set desc = "Fixes air in specified radius." - - var/range = tgui_input_number(usr, "Enter range:", "Range selection", 2) +ADMIN_VERB_AND_CONTEXT_MENU(remove_liquid, R_ADMIN, "Remove liquids", "Removes all liquids in specified radius.", ADMIN_CATEGORY_GAME, turf/epicenter in world) + var/range = tgui_input_number(user, "Enter range:", "Range selection", 2) for(var/obj/effect/abstract/liquid_turf/liquid in range(range, epicenter)) qdel(liquid, TRUE) - message_admins("[key_name_admin(usr)] removed liquids with range [range] in [epicenter.loc.name]") - log_game("[key_name_admin(usr)] removed liquids with range [range] in [epicenter.loc.name]") + message_admins("[key_name_admin(user)] removed liquids with range [range] in [epicenter.loc.name]") diff --git a/modular_skyrat/modules/lorecaster/code/story_manager.dm b/modular_skyrat/modules/lorecaster/code/story_manager.dm index 3b60915bb69..5bb613c7030 100644 --- a/modular_skyrat/modules/lorecaster/code/story_manager.dm +++ b/modular_skyrat/modules/lorecaster/code/story_manager.dm @@ -1,10 +1,4 @@ -/client/proc/lorecaster_story_manager() - set category = "Admin.Events" - set name = "Lorecaster Stories" - - if(!check_rights(R_ADMIN)) - return - +ADMIN_VERB(lorecaster_story_manager, R_ADMIN, "Lorecaster Stories", "Open the Lorecaster Story Manager.", ADMIN_CATEGORY_EVENTS) var/datum/story_manager_interface/ui = new(usr) ui.ui_interact(usr) diff --git a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm b/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm index e7cec7884bf..480266dd247 100644 --- a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm +++ b/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm @@ -36,14 +36,8 @@ return FALSE return TRUE -/client/proc/one_click_antag() - set name = "Create Antagonist" - set desc = "Auto-create an antagonist of your choice" - set category = "Admin.Events" - - if(holder) - holder.one_click_antag() - return +ADMIN_VERB(one_click_antag, R_ADMIN, "Create Antagonist", "Auto-create an antagonist of your choice", ADMIN_CATEGORY_EVENTS) + user.holder?.one_click_antag() /** If anyone can figure out how to get Obsessed to work I would be very appreciative. diff --git a/modular_skyrat/modules/opposing_force/code/admin_procs.dm b/modular_skyrat/modules/opposing_force/code/admin_procs.dm index 379a1de08cb..9ce7da7c459 100644 --- a/modular_skyrat/modules/opposing_force/code/admin_procs.dm +++ b/modular_skyrat/modules/opposing_force/code/admin_procs.dm @@ -1,19 +1,16 @@ -/client/proc/request_more_opfor() - set category = "Admin.Fun" - set name = "Request OPFOR" - set desc = "Request players sign up for opfor if they have antag on." - +ADMIN_VERB(request_more_opfor, R_FUN, "Request OPFOR", "Request players sign up for opfor if they have antag on.", ADMIN_CATEGORY_FUN) var/asked = 0 for(var/mob/living/carbon/human/human in GLOB.alive_player_list) if(human.client?.prefs?.read_preference(/datum/preference/toggle/be_antag)) to_chat(human, examine_block(span_greentext("The admins are looking for OPFOR players, if you're interested, sign up in the OOC tab!"))) asked++ - message_admins("[ADMIN_LOOKUP(usr)] has requested more OPFOR players! (Asked: [asked] players)") + message_admins("[ADMIN_LOOKUP(user)] has requested more OPFOR players! (Asked: [asked] players)") +ADMIN_VERB(view_opfors, R_ADMIN, "View OPFORs", "View OPFORs.", ADMIN_CATEGORY_GAME) + user.mob.client?.view_opfors() + /client/proc/view_opfors() - set name = "View OPFORs" - set category = "Admin.Game" if(holder) var/list/dat = list("") dat += SSopposing_force.get_check_antag_listing() diff --git a/modular_skyrat/modules/panicbunker/code/panicbunker.dm b/modular_skyrat/modules/panicbunker/code/panicbunker.dm index 1054fdfa851..eb9275f8855 100644 --- a/modular_skyrat/modules/panicbunker/code/panicbunker.dm +++ b/modular_skyrat/modules/panicbunker/code/panicbunker.dm @@ -1,9 +1,6 @@ GLOBAL_LIST_EMPTY(bunker_passthrough) -/client/proc/addbunkerbypass(ckeytobypass as text) - set category = "Admin" - set name = "Add PB Bypass" - set desc = "Allows a given ckey to connect despite the panic bunker for a given round." +ADMIN_VERB(addbunkerbypass, R_ADMIN, "Add PB Bypass", "Allows a given ckey to connect despite the panic bunker for a given round.", ADMIN_CATEGORY_MAIN, ckeytobypass as text|null) if(!CONFIG_GET(flag/sql_enabled)) to_chat(usr, span_adminnotice("The Database is not enabled!")) return @@ -14,11 +11,7 @@ GLOBAL_LIST_EMPTY(bunker_passthrough) log_admin("[key_name(usr)] has added [ckeytobypass] to the current round's bunker bypass list.") message_admins("[key_name_admin(usr)] has added [ckeytobypass] to the current round's bunker bypass list.") -/client/proc/revokebunkerbypass(ckeytobypass as text) - set category = "Admin" - set name = "Revoke PB Bypass" - set desc = "Revoke's a ckey's permission to bypass the panic bunker for a given round." - +ADMIN_VERB(revokebunkerbypass, R_ADMIN, "Revoke PB Bypass", "Revoke's a ckey's permission to bypass the panic bunker for a given round.", ADMIN_CATEGORY_MAIN, ckeytobypass as text|null) if(!CONFIG_GET(flag/sql_enabled)) to_chat(usr, span_adminnotice("The Database is not enabled!")) return diff --git a/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm b/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm index 12102f43f39..125a9fb740b 100644 --- a/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm +++ b/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm @@ -1,16 +1,12 @@ -/client/proc/spawn_pollution() - set category = "Admin.Fun" - set name = "Spawn Pollution" - set desc = "Spawns an amount of chosen pollutant at your current location." - +ADMIN_VERB(spawn_pollution, R_ADMIN, "Spawn Pollution", "Spawns an amount of chosen pollutant at your current location.", ADMIN_CATEGORY_FUN) var/list/singleton_list = SSpollution.singletons - var/choice = tgui_input_list(usr, "What type of pollutant would you like to spawn?", "Spawn Pollution", singleton_list) + var/choice = tgui_input_list(user, "What type of pollutant would you like to spawn?", "Spawn Pollution", singleton_list) if(!choice) return var/amount_choice = input("Amount of pollution:") as null|num if(!amount_choice) return - var/turf/epicenter = get_turf(mob) + var/turf/epicenter = get_turf(user.mob) epicenter.pollute_turf(choice, amount_choice) - message_admins("[ADMIN_LOOKUPFLW(usr)] spawned pollution at [epicenter.loc] ([choice] - [amount_choice]).") - log_admin("[key_name(usr)] spawned pollution at [epicenter.loc] ([choice] - [amount_choice]).") + message_admins("[ADMIN_LOOKUPFLW(user)] spawned pollution at [epicenter.loc] ([choice] - [amount_choice]).") + log_admin("[key_name(user)] spawned pollution at [epicenter.loc] ([choice] - [amount_choice]).") diff --git a/modular_skyrat/modules/server_overflow/code/chat_link.dm b/modular_skyrat/modules/server_overflow/code/chat_link.dm index 843ec276ac5..85489d1dbe1 100644 --- a/modular_skyrat/modules/server_overflow/code/chat_link.dm +++ b/modular_skyrat/modules/server_overflow/code/chat_link.dm @@ -60,19 +60,15 @@ html = msg, confidential = TRUE) -/client/proc/request_help() - set category = "Admin" - set name = "Cross-server Help Request" - set desc = "Sends a loud message to all other servers that we are crosslinked to!" - - var/help_request_message = tgui_input_text(src, "Input help message!", "Help message", "Send help!", 150, FALSE) +ADMIN_VERB(request_help, R_ADMIN, "Cross-server Help Request", "Sends a loud message to all other servers that we are crosslinked to!", ADMIN_CATEGORY_MAIN) + var/help_request_message = tgui_input_text(user, "Input help message!", "Help message", "Send help!", 150, FALSE) if(!help_request_message) return - send2adminchat(ckey, "CROSSLINK HELP REQUEST([CONFIG_GET(string/cross_server_name) ? CONFIG_GET(string/cross_server_name) : station_name()]): [help_request_message]") - send_help_request_to_other_server(ckey, help_request_message) + send2adminchat(user.ckey, "CROSSLINK HELP REQUEST([CONFIG_GET(string/cross_server_name) ? CONFIG_GET(string/cross_server_name) : station_name()]): [help_request_message]") + send_help_request_to_other_server(user.ckey, help_request_message) - message_admins("[ADMIN_LOOKUPFLW(usr)] sent out a cross-server help request with the message: [help_request_message].") - log_admin("[key_name(usr)] sent cross-server help request [help_request_message].") + message_admins("[ADMIN_LOOKUPFLW(user)] sent out a cross-server help request with the message: [help_request_message].") + log_admin("[key_name(user)] sent cross-server help request [help_request_message].") // Oh no, they need help! /proc/send_help_request_to_other_server(exp_name, message) diff --git a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm b/modular_skyrat/modules/title_screen/code/title_screen_controls.dm index 3f241af0f23..f3f550e3ffc 100644 --- a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm +++ b/modular_skyrat/modules/title_screen/code/title_screen_controls.dm @@ -2,19 +2,13 @@ /** * Enables an admin to upload a new titlescreen image. */ -/client/proc/admin_change_title_screen() - set category = "Admin.Fun" - set name = "Title Screen: Change" - - if(!check_rights(R_FUN)) - return - - log_admin("[key_name(usr)] is changing the title screen.") - message_admins("[key_name_admin(usr)] is changing the title screen.") +ADMIN_VERB(admin_change_title_screen, R_FUN, "Title Screen: Change", "Upload a new titlescreen image.", ADMIN_CATEGORY_FUN) + log_admin("[key_name(user)] is changing the title screen.") + message_admins("[key_name_admin(user)] is changing the title screen.") switch(alert(usr, "Please select a new title screen.", "Title Screen", "Change", "Reset", "Cancel")) if("Change") - var/file = input(usr) as icon|null + var/file = input(user) as icon|null if(!file) return SStitle.change_title_screen(file) @@ -26,13 +20,7 @@ /** * Sets a titlescreen notice, a big red text on the main screen. */ -/client/proc/change_title_screen_notice() - set category = "Admin.Fun" - set name = "Title Screen: Set Notice" - - if(!check_rights(R_FUN)) - return - +ADMIN_VERB(change_title_screen_notice, R_FUN, "Title Screen: Set Notice", "Sets a titlescreen notice, a big red text on the main screen.", ADMIN_CATEGORY_FUN) log_admin("[key_name(usr)] is setting the title screen notice.") message_admins("[key_name_admin(usr)] is setting the title screen notice.") @@ -62,15 +50,9 @@ /** * An admin debug command that enables you to change the HTML on the go. */ -/client/proc/change_title_screen_html() - set category = "Admin.Fun" - set name = "Title Screen: Set HTML" - - if(!check_rights(R_DEBUG)) - return - - log_admin("[key_name(usr)] is setting the title screen HTML.") - message_admins("[key_name_admin(usr)] is setting the title screen HTML.") +ADMIN_VERB(change_title_screen_html, R_DEBUG, "Title Screen: Set HTML", "Change lobby screen HTML on the go.", ADMIN_CATEGORY_FUN) + log_admin("[key_name(user)] is setting the title screen HTML.") + message_admins("[key_name_admin(user)] is setting the title screen HTML.") var/new_html = input(usr, "Please enter your desired HTML(WARNING: YOU WILL BREAK SHIT)", "DANGER: TITLE HTML EDIT") as message|null @@ -80,4 +62,4 @@ SStitle.title_html = new_html SStitle.show_title_screen() - message_admins("[key_name_admin(usr)] has changed the title screen HTML.") + message_admins("[key_name_admin(user)] has changed the title screen HTML.") diff --git a/tgstation.dme b/tgstation.dme index 0534ce7674f..dde267fadf8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -31,6 +31,7 @@ #include "code\__DEFINES\actions.dm" #include "code\__DEFINES\actionspeed_modification.dm" #include "code\__DEFINES\admin.dm" +#include "code\__DEFINES\admin_verb.dm" #include "code\__DEFINES\adventure.dm" #include "code\__DEFINES\airlock.dm" #include "code\__DEFINES\alarm.dm" @@ -707,6 +708,7 @@ #include "code\controllers\configuration\entries\resources.dm" #include "code\controllers\subsystem\achievements.dm" #include "code\controllers\subsystem\addiction.dm" +#include "code\controllers\subsystem\admin_verbs.dm" #include "code\controllers\subsystem\ai_controllers.dm" #include "code\controllers\subsystem\air.dm" #include "code\controllers\subsystem\ambience.dm" @@ -2861,7 +2863,6 @@ #include "code\modules\admin\admin_pda_message.dm" #include "code\modules\admin\admin_ranks.dm" #include "code\modules\admin\admin_verbs.dm" -#include "code\modules\admin\adminmenu.dm" #include "code\modules\admin\antag_panel.dm" #include "code\modules\admin\chat_commands.dm" #include "code\modules\admin\check_antagonists.dm" @@ -2921,6 +2922,8 @@ #include "code\modules\admin\smites\smite.dm" #include "code\modules\admin\smites\supply_pod.dm" #include "code\modules\admin\smites\supply_pod_quick.dm" +#include "code\modules\admin\verb_datums\_admin_verb_datum.dm" +#include "code\modules\admin\verb_datums\_admin_verb_holder.dm" #include "code\modules\admin\verbs\admin.dm" #include "code\modules\admin\verbs\admin_newscaster.dm" #include "code\modules\admin\verbs\adminevents.dm" @@ -2975,6 +2978,7 @@ #include "code\modules\admin\verbs\server.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" #include "code\modules\admin\verbs\spawnobjasmob.dm" +#include "code\modules\admin\verbs\special_verbs.dm" #include "code\modules\admin\verbs\lua\_hooks.dm" #include "code\modules\admin\verbs\lua\_wrappers.dm" #include "code\modules\admin\verbs\lua\helpers.dm" diff --git a/tgui/packages/tgui/interfaces/ControllerOverview.tsx b/tgui/packages/tgui/interfaces/ControllerOverview.tsx new file mode 100644 index 00000000000..5b5c210b7bb --- /dev/null +++ b/tgui/packages/tgui/interfaces/ControllerOverview.tsx @@ -0,0 +1,245 @@ +import { BooleanLike } from 'common/react'; +import { createSearch } from 'common/string'; +import { useMemo, useState } from 'react'; + +import { useBackend } from '../backend'; +import { + Button, + Collapsible, + Dropdown, + Input, + LabeledList, + Section, + Stack, +} from '../components'; +import { Window } from '../layouts'; + +type SubsystemData = { + name: string; + ref: string; + init_order: number; + last_fire: number; + next_fire: number; + can_fire: BooleanLike; + doesnt_fire: BooleanLike; + cost_ms: number; + tick_usage: number; + tick_overrun: number; + initialized: BooleanLike; + initialization_failure_message: string | undefined; +}; + +type ControllerData = { + world_time: number; + fast_update: BooleanLike; + map_cpu: number; + subsystems: SubsystemData[]; +}; + +const SubsystemView = (props: { data: SubsystemData }) => { + const { act } = useBackend(); + const { data } = props; + const { + name, + ref, + init_order, + last_fire, + next_fire, + can_fire, + doesnt_fire, + cost_ms, + tick_usage, + tick_overrun, + initialized, + initialization_failure_message, + } = data; + + let icon = 'play'; + if (!initialized) { + icon = 'circle-exclamation'; + } else if (doesnt_fire) { + icon = 'check'; + } else if (!can_fire) { + icon = 'pause'; + } + + return ( + { + act('view_variables', { ref: ref }); + }} + /> + } + > + + {init_order} + {last_fire} + {next_fire} + {cost_ms}ms + + {(tick_usage * 0.01).toFixed(2)}% + + + {(tick_overrun * 0.01).toFixed(2)}% + + {initialization_failure_message ? ( + + {initialization_failure_message} + + ) : undefined} + + + ); +}; + +enum SubsystemSortBy { + INIT_ORDER = 'Init Order', + NAME = 'Name', + LAST_FIRE = 'Last Fire', + NEXT_FIRE = 'Next Fire', + TICK_USAGE = 'Tick Usage', + TICK_OVERRUN = 'Tick Overrun', + COST = 'Cost', +} + +const sortSubsystemBy = ( + subsystems: SubsystemData[], + sortBy: SubsystemSortBy, + asending: boolean = true, +) => { + let sorted = subsystems.sort((left, right) => { + switch (sortBy) { + case SubsystemSortBy.INIT_ORDER: + return left.init_order - right.init_order; + case SubsystemSortBy.NAME: + return left.name.localeCompare(right.name); + case SubsystemSortBy.LAST_FIRE: + return left.last_fire - right.last_fire; + case SubsystemSortBy.NEXT_FIRE: + return left.next_fire - right.next_fire; + case SubsystemSortBy.TICK_USAGE: + return left.tick_usage - right.tick_usage; + case SubsystemSortBy.TICK_OVERRUN: + return left.tick_overrun - right.tick_overrun; + case SubsystemSortBy.COST: + return left.cost_ms - right.cost_ms; + } + }); + if (!asending) { + sorted.reverse(); + } + return sorted; +}; + +export const ControllerOverview = () => { + const { act, data } = useBackend(); + const { world_time, map_cpu, subsystems, fast_update } = data; + + const [filterName, setFilterName] = useState(''); + const [sortBy, setSortBy] = useState(SubsystemSortBy.NAME); + const [sortAscending, setSortAscending] = useState(true); + + let filteredSubsystems = useMemo(() => { + if (!filterName) { + return subsystems; + } + + return subsystems.filter(() => + createSearch(filterName, (subsystem: SubsystemData) => subsystem.name), + ); + }, [filterName, subsystems]); + + let sortedSubsystems = useMemo(() => { + return sortSubsystemBy(filteredSubsystems, sortBy, sortAscending); + }, [sortBy, sortAscending, filteredSubsystems]); + + const overallUsage = subsystems.reduce( + (acc, subsystem) => acc + subsystem.tick_usage, + 0, + ); + const overallOverrun = subsystems.reduce( + (acc, subsystem) => acc + subsystem.tick_overrun, + 0, + ); + + return ( + + +
    + + World Time: {world_time} + Map CPU: {map_cpu.toFixed(2)}% + + Overall Usage: {(overallUsage * 0.01).toFixed(2)}% + + + Overall Overrun: {(overallOverrun * 0.01).toFixed(2)}% + + +
    +
    { + act('toggle_fast_update'); + }} + /> + } + > + setFilterName(value)} + /> + + + + + + +
    +
    + + {sortedSubsystems.map((subsystem) => ( + + ))} + +
    +
    +
    + ); +}; From 144c94d11e39017e1cd15dea913c08d74d9a987c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 23 Apr 2024 20:44:55 +0200 Subject: [PATCH 05/60] [MIRROR] Bioscrambler Anomaly chases you (#27295) * Bioscrambler Anomaly chases you (#82555) ## About The Pull Request I heard reports that people just ignore the bioscrambler anomaly because basically you just don't go into that room any more and depending on where it spawned, that's no big deal. That won't do. Now the Bioscrambler will be attracted to the nearest sign of advanced thinking life (read: nearest humanoid mob controlled by a player) and will very slowly pursue them, travelling through walls and obstacles in order to do so. Also if it decides to target you, you will get a foreboding psychic warning like with the dark matteor, because I think it's funny for dire warnings to have multiple obscuring sources. The Bioscrambler can be blocked with containment fields if you want to make an overly-elaborate pen for it. To accomplish this I refactored containment fields a little bit to apply turf traits instead of making four different `locate()` checks for different objects. Those files smell bad. Oh also I moved the dullahan organs to the Bioscrambler blacklist because they runtimed while I was testing it (see also: my other incoming PRs) and I can't see any other reasonable way to fix it (they expect to be in an abstract body zone...) ## Why It's Good For The Game Anomalies are generally meant to be problems that you deal with or face some kind of consequence. Because the Bioscrambler isn't a timed anomaly with a dramatic detonation effect, being spawned in a poorly-trafficked area could simply mean that it isn't a problem to anyone. Now it will make sure that it is a problem for someone until someone gets rid of it. I thought this solution was funnier than making it do something zany if you leave it alone for 3 minutes. ## Changelog :cl: balance: The Bioscrambler will now actively attempt to get closer to living targets rather than chilling in a closet nobody goes into (unless you trap it in a containment field). balance: Because it can now travel through walls, the Bioscrambler will no longer transform you THROUGH walls. /:cl: * Anomaly Releaser logging and fixes (#82684) ## About The Pull Request I literally do not think I have heard of anyone using this extremely niche space ruin item a single time. _**However**_ if they did it wasn't logged, so now it is. Additionally I found a bunch of bugs while testing it: - You could queue inputs on a bunch of cores and activate all of them at once because it didn't check if had been expended by a concurrent do_after. - It made normally immobile anomalies mobile. - I broke immobility in general in a recent PR, but also it's redundant with a different var I added. I fixed all of these. ## Why It's Good For The Game For the one round that will happen in tg history where someone reactivates a Vortex Anomaly Core on the escape shuttle, it should log who did it. ## Changelog :cl: admin: Reactivating an anomaly core via the anomaly releaser is now logged. fix: Fixes various bugs related to dimensional/spectral anomalies moving when they should not. /:cl: --------- Co-authored-by: Jacquerel --- code/__DEFINES/research/anomalies.dm | 3 ++ code/__DEFINES/traits/declarations.dm | 3 ++ code/_globalvars/traits/_traits.dm | 1 + code/datums/components/singularity.dm | 21 ++------- code/game/machinery/shieldgen.dm | 24 +++++++--- .../objects/effects/anomalies/_anomalies.dm | 15 ++++-- .../anomalies/anomalies_bioscrambler.dm | 47 ++++++++++++++++++- .../anomalies/anomalies_dimensional.dm | 2 +- .../effects/anomalies/anomalies_ectoplasm.dm | 2 +- .../objects/items/devices/anomaly_releaser.dm | 4 ++ code/modules/mob/living/carbon/carbon.dm | 10 ++++ code/modules/mob/living/living.dm | 4 ++ .../power/singularity/containment_field.dm | 1 + .../power/singularity/field_generator.dm | 2 + code/modules/power/singularity/singularity.dm | 10 +--- 15 files changed, 107 insertions(+), 42 deletions(-) diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 29c05d20919..17c93120511 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -39,10 +39,13 @@ GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( /obj/item/organ/internal/brain, /obj/item/organ/internal/body_egg, /obj/item/organ/internal/cyberimp, + /obj/item/organ/internal/ears/dullahan, + /obj/item/organ/internal/eyes/dullahan, /obj/item/organ/internal/heart/cursed, /obj/item/organ/internal/heart/demon, /obj/item/organ/internal/lungs, /obj/item/organ/internal/monster_core, + /obj/item/organ/internal/tongue/dullahan, /obj/item/organ/internal/vocal_cords/colossus, /obj/item/organ/internal/zombie_infection, /obj/item/organ/internal/empowered_borer_egg, // SKYRAT EDIT ADDITION diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 473f62ae6b1..054816f3d0f 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -810,6 +810,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait applied to turfs when an atmos holosign is placed on them. It will stop firedoors from closing. #define TRAIT_FIREDOOR_STOP "firedoor_stop" +///Trait applied to turf blocked by a containment field +#define TRAIT_CONTAINMENT_FIELD "containment_field" + /// Trait applied when the MMI component is added to an [/obj/item/integrated_circuit] #define TRAIT_COMPONENT_MMI "component_mmi" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index da2abb41739..98f4beabe67 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -600,6 +600,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /turf = list( "TRAIT_CHASM_STOPPED" = TRAIT_CHASM_STOPPED, + "TRAIT_CONTAINMENT_FIELD" = TRAIT_CONTAINMENT_FIELD, "TRAIT_FIREDOOR_STOP" = TRAIT_FIREDOOR_STOP, "TRAIT_HYPERSPACE_STOPPED" = TRAIT_HYPERSPACE_STOPPED, "TRAIT_IMMERSE_STOPPED" = TRAIT_IMMERSE_STOPPED, diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm index c1323d01e2f..56a6723f21f 100644 --- a/code/datums/components/singularity.dm +++ b/code/datums/components/singularity.dm @@ -360,8 +360,9 @@ target = potentially_closer //if we lost that target get a new one if(!target || QDELETED(target)) - target = find_new_target() - foreboding_nosebleed(target) + var/mob/living/new_target = find_new_target() + new_target?.ominous_nosebleed() + target = new_target return ..() ///Searches the living list for the closest target, and begins chasing them down. @@ -380,22 +381,6 @@ closest_target = target return closest_target -/// gives a little fluff warning that someone is being hunted. -/datum/component/singularity/bloodthirsty/proc/foreboding_nosebleed(mob/living/target) - if(!iscarbon(target)) - to_chat(target, span_warning("You feel a bit nauseous for just a moment.")) - return - var/mob/living/carbon/carbon_target = target - var/obj/item/bodypart/head = carbon_target.get_bodypart(BODY_ZONE_HEAD) - if(head) - if(HAS_TRAIT(carbon_target, TRAIT_NOBLOOD)) - to_chat(carbon_target, span_notice("You get a headache.")) - return - head.adjustBleedStacks(5) - carbon_target.visible_message(span_notice("[carbon_target] gets a nosebleed."), span_warning("You get a nosebleed.")) - return - to_chat(target, span_warning("You feel a bit nauseous for just a moment.")) - #undef CHANCE_TO_MOVE_TO_TARGET #undef CHANCE_TO_MOVE_TO_TARGET_BLOODTHIRSTY #undef CHANCE_TO_CHANGE_TARGET_BLOODTHIRSTY diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index edcf8269c8f..1e641f02460 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -364,11 +364,8 @@ visible_message(span_danger("[src] shuts down due to lack of power!"), \ "If this message is ever seen, something is wrong.", span_hear("You hear heavy droning fade out.")) - active = FALSE + deactivate() log_game("[src] deactivated due to lack of power at [AREACOORD(src)]") - for(var/d in GLOB.cardinals) - cleanup_field(d) - update_appearance() else update_appearance() for(var/d in GLOB.cardinals) @@ -463,7 +460,6 @@ balloon_alert(user, "malfunctioning!") else balloon_alert(user, "no access!") - return add_fingerprint(user) @@ -493,13 +489,13 @@ user.visible_message(span_notice("[user] turned \the [src] off."), \ span_notice("You turn off \the [src]."), \ span_hear("You hear heavy droning fade out.")) - active = FALSE + deactivate() user.log_message("deactivated [src].", LOG_GAME) else user.visible_message(span_notice("[user] turned \the [src] on."), \ span_notice("You turn on \the [src]."), \ span_hear("You hear heavy droning.")) - active = ACTIVE_SETUPFIELDS + activate() user.log_message("activated [src].", LOG_GAME) add_fingerprint(user) @@ -513,6 +509,19 @@ balloon_alert(user, "access controller shorted") return TRUE +/// Turn the machine on with side effects +/obj/machinery/power/shieldwallgen/proc/activate() + active = ACTIVE_SETUPFIELDS + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + +/// Turn the machine off with side effects +/obj/machinery/power/shieldwallgen/proc/deactivate() + active = FALSE + for(var/d in GLOB.cardinals) + cleanup_field(d) + update_appearance() + RemoveElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + //////////////Containment Field START /obj/machinery/shieldwall name = "shield wall" @@ -538,6 +547,7 @@ L.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) L.gib(DROP_ALL_REMAINS) RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity)) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/shieldwall/Destroy() gen_primary = null diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 530da562827..a3f0b79044b 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -21,8 +21,8 @@ var/drops_core = TRUE ///Do we keep on living forever? var/immortal = FALSE - ///Do we stay in one place? - var/immobile = FALSE + ///Chance per second that we will move + var/move_chance = ANOMALY_MOVECHANCE /obj/effect/anomaly/Initialize(mapload, new_lifespan, drops_core = TRUE) . = ..() @@ -76,8 +76,12 @@ return ..() /obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) - if(!immobile && SPT_PROB(ANOMALY_MOVECHANCE, seconds_per_tick)) - step(src,pick(GLOB.alldirs)) + if(SPT_PROB(move_chance, seconds_per_tick)) + move_anomaly() + +/// Move in a direction +/obj/effect/anomaly/proc/move_anomaly() + step(src, pick(GLOB.alldirs)) /obj/effect/anomaly/proc/detonate() return @@ -116,4 +120,5 @@ if(!has_core) drops_core = FALSE QDEL_NULL(aSignal) - immobile = anchor + if (anchor) + move_chance = 0 diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index b4ee3713a25..214440b92c2 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -4,6 +4,10 @@ icon_state = "bioscrambler" aSignal = /obj/item/assembly/signaler/anomaly/bioscrambler immortal = TRUE + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS + layer = ABOVE_MOB_LAYER + /// Who are we moving towards? + var/datum/weakref/pursuit_target /// Cooldown for every anomaly pulse COOLDOWN_DECLARE(pulse_cooldown) /// How many seconds between each anomaly pulses @@ -11,11 +15,52 @@ /// Range of the anomaly pulse var/range = 5 +/obj/effect/anomaly/bioscrambler/Initialize(mapload, new_lifespan, drops_core) + . = ..() + pursuit_target = WEAKREF(find_nearest_target()) + /obj/effect/anomaly/bioscrambler/anomalyEffect(seconds_per_tick) . = ..() if(!COOLDOWN_FINISHED(src, pulse_cooldown)) return COOLDOWN_START(src, pulse_cooldown, pulse_delay) - for(var/mob/living/carbon/nearby in range(range, src)) + for(var/mob/living/carbon/nearby in hearers(range, src)) nearby.bioscramble(name) + +/obj/effect/anomaly/bioscrambler/move_anomaly() + var/mob/living/current_target = pursuit_target?.resolve() + if (QDELETED(current_target)) + pursuit_target = null + if (isnull(pursuit_target) || prob(20)) + var/mob/living/new_target = find_nearest_target() + if (isnull(new_target)) + pursuit_target = null + else if (new_target != current_target) + current_target = new_target + pursuit_target = WEAKREF(new_target) + new_target.ominous_nosebleed() + if (isnull(pursuit_target)) + return + var/turf/step_turf = get_step(src, get_dir(src, current_target)) + if (!HAS_TRAIT(step_turf, TRAIT_CONTAINMENT_FIELD)) + Move(step_turf) + +/// Returns the closest conscious carbon on our z level or null if there somehow isn't one +/obj/effect/anomaly/bioscrambler/proc/find_nearest_target() + var/closest_distance = INFINITY + var/mob/living/carbon/closest_target = null + for(var/mob/living/carbon/target in GLOB.player_list) + if (target.z != z) + continue + if (target.status_effects & GODMODE) + continue + if (target.stat >= UNCONSCIOUS) + continue // Don't just haunt a corpse + var/distance_from_target = get_dist(src, target) + if(distance_from_target >= closest_distance) + continue + closest_distance = distance_from_target + closest_target = target + + return closest_target diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index 16dd5bafcfa..026c5974d5f 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -4,7 +4,7 @@ icon_state = "dimensional" aSignal = /obj/item/assembly/signaler/anomaly/dimensional immortal = TRUE - immobile = TRUE + move_chance = 0 /// Range of effect, if left alone anomaly will convert a 2(range)+1 squared area. var/range = 3 /// List of turfs this anomaly will try to transform before relocating diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index 412cca04952..51a033f515f 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -4,7 +4,7 @@ icon_state = "ectoplasm" aSignal = /obj/item/assembly/signaler/anomaly/ectoplasm lifespan = ANOMALY_COUNTDOWN_TIMER + 2 SECONDS //This one takes slightly longer, because it can run away. - immobile = TRUE //prevents it from moving around so ghosts can actually move it with decent accuracy + move_chance = 0 //prevents it from moving around so ghosts can actually move it with decent accuracy ///Blocks the anomaly from updating ghost count. Used in case an admin wants to rig the anomaly to be a certain size or intensity. var/override_ghosts = FALSE diff --git a/code/game/objects/items/devices/anomaly_releaser.dm b/code/game/objects/items/devices/anomaly_releaser.dm index a32220685ec..0556b2a2afd 100644 --- a/code/game/objects/items/devices/anomaly_releaser.dm +++ b/code/game/objects/items/devices/anomaly_releaser.dm @@ -28,6 +28,9 @@ if(!do_after(user, 3 SECONDS, target)) return + if(used) + return + var/obj/item/assembly/signaler/anomaly/core = target if(!core.anomaly_type) @@ -35,6 +38,7 @@ var/obj/effect/anomaly/anomaly = new core.anomaly_type(get_turf(core)) anomaly.stabilize() + log_combat(user, anomaly, "released", object = src, addition = "in [get_area(target)].") if(infinite) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3222639c5c7..a88002321d8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1484,3 +1484,13 @@ if (!IS_ORGANIC_LIMB(target_part) || (target_part.bodypart_flags & BODYPART_PSEUDOPART)) return FALSE return ..() + +/mob/living/carbon/ominous_nosebleed() + var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) + if(isnull(head)) + return ..() + if(HAS_TRAIT(src, TRAIT_NOBLOOD)) + to_chat(src, span_notice("You get a headache.")) + return + head.adjustBleedStacks(5) + visible_message(span_notice("[src] gets a nosebleed."), span_warning("You get a nosebleed.")) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 34b2f35a157..7dcdfe54496 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2527,6 +2527,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) apply_damage(rand(5,10), BRUTE, BODY_ZONE_CHEST) lattice.deconstruct(FALSE) +/// Prints an ominous message if something bad is going to happen to you +/mob/living/proc/ominous_nosebleed() + to_chat(src, span_warning("You feel a bit nauseous for just a moment.")) + /** * Proc used by different station pets such as Ian and Poly so that some of their data can persist between rounds. * This base definition only contains a trait and comsig to stop memory from being (over)written. diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 9f19774cc61..932aef0e8e5 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -29,6 +29,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/containment/Destroy() if(field_gen_1) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 527ce9c560b..ba9fde43d49 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -208,6 +208,7 @@ no power level overlay is currently in the overlays list. air_update_turf(TRUE, FALSE) INVOKE_ASYNC(src, PROC_REF(cleanup)) addtimer(CALLBACK(src, PROC_REF(cool_down)), 5 SECONDS) + RemoveElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/generator/proc/cool_down() if(active || warming_up <= 0) @@ -220,6 +221,7 @@ no power level overlay is currently in the overlays list. /obj/machinery/field/generator/proc/turn_on() active = FG_CHARGING addtimer(CALLBACK(src, PROC_REF(warm_up)), 5 SECONDS) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/generator/proc/warm_up() if(!active) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 5b712d52da2..86791fcd6f7 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -386,16 +386,8 @@ /obj/singularity/proc/can_move(turf/considered_turf) if(!considered_turf) return FALSE - if((locate(/obj/machinery/field/containment) in considered_turf) || (locate(/obj/machinery/shieldwall) in considered_turf)) + if (HAS_TRAIT(considered_turf, TRAIT_CONTAINMENT_FIELD)) return FALSE - else if(locate(/obj/machinery/field/generator) in considered_turf) - var/obj/machinery/field/generator/check_generator = locate(/obj/machinery/field/generator) in considered_turf - if(check_generator?.active) - return FALSE - else if(locate(/obj/machinery/power/shieldwallgen) in considered_turf) - var/obj/machinery/power/shieldwallgen/check_shield = locate(/obj/machinery/power/shieldwallgen) in considered_turf - if(check_shield?.active) - return FALSE return TRUE /obj/singularity/proc/event() From 5d797aaa88086dc3191ca94bd124b84604c76562 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 23 Apr 2024 20:45:19 +0200 Subject: [PATCH 06/60] Automatic changelog for PR #27295 [ci skip] --- html/changelogs/AutoChangeLog-pr-27295.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27295.yml diff --git a/html/changelogs/AutoChangeLog-pr-27295.yml b/html/changelogs/AutoChangeLog-pr-27295.yml new file mode 100644 index 00000000000..3649d6beb83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27295.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - balance: "The Bioscrambler will now actively attempt to get closer to living targets rather than chilling in a closet nobody goes into (unless you trap it in a containment field)." + - balance: "Because it can now travel through walls, the Bioscrambler will no longer transform you THROUGH walls." \ No newline at end of file From 8b347b4bedfcc053458619e3b21912e9e5ec848e Mon Sep 17 00:00:00 2001 From: TreePizza <164035230+TreePizza@users.noreply.github.com> Date: Tue, 23 Apr 2024 13:47:54 -0500 Subject: [PATCH 07/60] Tarkon and Charlie QoL (#27447) * Tarkon and Charlie QoL Some basic QoL to a few ghost rolls * Update port_tarkon.dmm * Update port_tarkon.dmm --------- Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> --- .../SpaceRuins/skyrat/port_tarkon.dmm | 26 ++++++++++++------- .../skyrat/port_tarkon/cargo_warehouse.dmm | 4 +-- .../modules/mapping/code/mob_spawns.dm | 15 +++++++++++ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm index 78345ff9f89..af475c05f23 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm @@ -839,6 +839,7 @@ "gd" = ( /obj/structure/table/reinforced, /obj/item/kitchen/rollingpin, +/obj/machinery/light/small/directional/south, /turf/open/floor/iron/cafeteria, /area/ruin/space/has_grav/port_tarkon/kitchen) "gm" = ( @@ -1903,6 +1904,7 @@ /obj/item/storage/part_replacer/cargo, /obj/structure/noticeboard/directional/east, /obj/item/paper/fluff/ruins/tarkon/scisafe, +/obj/machinery/ecto_sniffer, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/port_tarkon/developement) "ns" = ( @@ -2319,11 +2321,10 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon) "pP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) +/obj/structure/closet/secure_closet/freezer/meat/open, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/port_tarkon/kitchen) "pR" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -4421,13 +4422,13 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/port_tarkon/developement) "EE" = ( -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, /obj/effect/turf_decal/tile/purple/half{ dir = 4 }, /obj/structure/table/reinforced, +/obj/item/stack/sheet/mineral/gold{ + amount = 25 + }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/port_tarkon/developement) "EG" = ( @@ -4803,6 +4804,11 @@ "HE" = ( /obj/effect/turf_decal/tile/blue/half, /obj/structure/table/reinforced, +/obj/machinery/fax{ + name = "Port Tarkon Fax Machine"; + fax_name = "Tarkon Industries Bridge"; + special_networks = list("tarkon" = list("fax_name" = "Tarkon TB.", "fax_id" = "tarkon_command", "color" = "brown", "emag_needed" = 0)) + }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/port_tarkon/comms) "HH" = ( @@ -11115,7 +11121,7 @@ iG hG VZ VZ -Ut +pP hG yc qv @@ -11158,7 +11164,7 @@ bt eT YZ Hg -pP +YZ eT bt bt diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/cargo_warehouse.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/cargo_warehouse.dmm index fba73337f80..d871ebca213 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/cargo_warehouse.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/cargo_warehouse.dmm @@ -245,7 +245,7 @@ E x E K -E +w E E "} @@ -273,7 +273,7 @@ B E R E -w +E E "} (11,1,1) = {" diff --git a/modular_skyrat/modules/mapping/code/mob_spawns.dm b/modular_skyrat/modules/mapping/code/mob_spawns.dm index 4db0689b3ad..958ce456fad 100644 --- a/modular_skyrat/modules/mapping/code/mob_spawns.dm +++ b/modular_skyrat/modules/mapping/code/mob_spawns.dm @@ -138,6 +138,21 @@ mob_type = /mob/living/carbon/human/species/lizard/ashwalker; outfit = /datum/outfit/consumed_ashwalker +/obj/effect/mob_spawn/ghost_role/human/oldsec + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + +/obj/effect/mob_spawn/ghost_role/human/oldsci + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + +/obj/effect/mob_spawn/ghost_role/human/oldeng + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + //OUTFITS// /datum/outfit/syndicatespace/syndicrew ears = /obj/item/radio/headset/cybersun From 821d457e79c1324149a95c11eb0e1bf68bf4d168 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 23 Apr 2024 20:56:16 +0200 Subject: [PATCH 08/60] Automatic changelog for PR #27447 [ci skip] --- html/changelogs/AutoChangeLog-pr-27447.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27447.yml diff --git a/html/changelogs/AutoChangeLog-pr-27447.yml b/html/changelogs/AutoChangeLog-pr-27447.yml new file mode 100644 index 00000000000..421a0f66c9d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27447.yml @@ -0,0 +1,11 @@ +author: "TreePizza" +delete-after: True +changes: + - rscadd: "Added a fax machine to the Tarkon bridge, as well as it's unique contact for Tarkon TB (Top Brass)." + - rscadd: "The station can now fax the Tarkon bridge. The Ensign can now finally do their job without having to leave their chair." + - rscadd: "Added an Ectosniffer to the science lab so ghosts may now request a brain to possess." + - rscadd: "~1 \"hidden\" Xenoplush for Monophobia characters.~ Goodnight sweet prince you were too good for this world." + - rscadd: "Added a light to the freezer and an additional one to the kitchen." + - bugfix: "Added that awkwardly missing window to the top airlock and deleted the equally awkward single disposal pipe that was underneath it." + - bugfix: "Moved the glowing resin in the cargo_warehouse variation (the infested one) so that it is no longer under the glass wall.\n### Charlie:" + - qol: "Charlie pods now have pref and loadout spawning.\n:cl:" \ No newline at end of file From 89677f37bad5ce7b2ebc9258904fe2f024f59d0e Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 24 Apr 2024 00:33:48 +0000 Subject: [PATCH 09/60] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-27295.yml | 5 ---- html/changelogs/AutoChangeLog-pr-27427.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27447.yml | 11 --------- html/changelogs/archive/2024-04.yml | 28 ++++++++++++++++++++++ 4 files changed, 28 insertions(+), 20 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-27295.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27427.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27447.yml diff --git a/html/changelogs/AutoChangeLog-pr-27295.yml b/html/changelogs/AutoChangeLog-pr-27295.yml deleted file mode 100644 index 3649d6beb83..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27295.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - balance: "The Bioscrambler will now actively attempt to get closer to living targets rather than chilling in a closet nobody goes into (unless you trap it in a containment field)." - - balance: "Because it can now travel through walls, the Bioscrambler will no longer transform you THROUGH walls." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27427.yml b/html/changelogs/AutoChangeLog-pr-27427.yml deleted file mode 100644 index 41d386d8ca3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27427.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Majkl-J" -delete-after: True -changes: - - bugfix: "Basicmob xenos no longer die to lack of heating" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27447.yml b/html/changelogs/AutoChangeLog-pr-27447.yml deleted file mode 100644 index 421a0f66c9d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27447.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: "TreePizza" -delete-after: True -changes: - - rscadd: "Added a fax machine to the Tarkon bridge, as well as it's unique contact for Tarkon TB (Top Brass)." - - rscadd: "The station can now fax the Tarkon bridge. The Ensign can now finally do their job without having to leave their chair." - - rscadd: "Added an Ectosniffer to the science lab so ghosts may now request a brain to possess." - - rscadd: "~1 \"hidden\" Xenoplush for Monophobia characters.~ Goodnight sweet prince you were too good for this world." - - rscadd: "Added a light to the freezer and an additional one to the kitchen." - - bugfix: "Added that awkwardly missing window to the top airlock and deleted the equally awkward single disposal pipe that was underneath it." - - bugfix: "Moved the glowing resin in the cargo_warehouse variation (the infested one) so that it is no longer under the glass wall.\n### Charlie:" - - qol: "Charlie pods now have pref and loadout spawning.\n:cl:" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 5f4e9588d5d..5ae75201413 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -412,3 +412,31 @@ - admin: icspawning supports quirks & loadout items now - admin: bluespace technician RPED has been significantly upgraded - bugfix: hotfix for loadout wallets not filling properly +2024-04-24: + Majkl-J: + - bugfix: Basicmob xenos no longer die to lack of heating + SkyratBot: + - balance: The Bioscrambler will now actively attempt to get closer to living targets + rather than chilling in a closet nobody goes into (unless you trap it in a containment + field). + - balance: Because it can now travel through walls, the Bioscrambler will no longer + transform you THROUGH walls. + TreePizza: + - rscadd: Added a fax machine to the Tarkon bridge, as well as it's unique contact + for Tarkon TB (Top Brass). + - rscadd: The station can now fax the Tarkon bridge. The Ensign can now finally + do their job without having to leave their chair. + - rscadd: Added an Ectosniffer to the science lab so ghosts may now request a brain + to possess. + - rscadd: ~1 "hidden" Xenoplush for Monophobia characters.~ Goodnight sweet prince + you were too good for this world. + - rscadd: Added a light to the freezer and an additional one to the kitchen. + - bugfix: Added that awkwardly missing window to the top airlock and deleted the + equally awkward single disposal pipe that was underneath it. + - bugfix: 'Moved the glowing resin in the cargo_warehouse variation (the infested + one) so that it is no longer under the glass wall. + + ### Charlie:' + - qol: 'Charlie pods now have pref and loadout spawning. + + :cl:' From 2429a2821ac45f9fa12358cb0b16148ee4edbb4e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:39:06 +0200 Subject: [PATCH 10/60] [MIRROR] Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion. (#27296) Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion. Co-authored-by: Iamgoofball Co-authored-by: Waterpig --- code/__DEFINES/ai/ai.dm | 6 +++++ code/controllers/subsystem/ai_controllers.dm | 26 ++++++++++++++++++- code/datums/ai/_ai_controller.dm | 15 ++++++++--- code/datums/brain_damage/special.dm | 2 +- code/modules/mob/living/basic/bots/bot_ai.dm | 1 + .../mob/living/basic/lavaland/mook/mook_ai.dm | 1 + .../mob/living/basic/ruin_defender/flesh.dm | 3 +-- code/modules/unit_tests/mouse_bite_cable.dm | 1 + 8 files changed, 47 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index e894b32b1f6..d4281a551f8 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -2,17 +2,23 @@ #define GET_TARGETING_STRATEGY(targeting_type) SSai_behaviors.targeting_strategies[targeting_type] #define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) + //AI controller flags //If you add a new status, be sure to add it to the ai_controllers subsystem's ai_controllers_by_status list. ///The AI is currently active. #define AI_STATUS_ON "ai_on" ///The AI is currently offline for any reason. #define AI_STATUS_OFF "ai_off" +///The AI is currently in idle mode. +#define AI_STATUS_IDLE "ai_idle" ///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on #define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles #define AI_BOT_PATH_LENGTH 150 +// How far should we, by default, be looking for interesting things to de-idle? +#define AI_DEFAULT_INTERESTING_DIST 14 + ///Cooldown on planning if planning failed last time #define AI_FAILED_PLANNING_COOLDOWN (1.5 SECONDS) diff --git a/code/controllers/subsystem/ai_controllers.dm b/code/controllers/subsystem/ai_controllers.dm index 44e1948e386..e215f4a4ef7 100644 --- a/code/controllers/subsystem/ai_controllers.dm +++ b/code/controllers/subsystem/ai_controllers.dm @@ -13,9 +13,14 @@ SUBSYSTEM_DEF(ai_controllers) var/list/ai_controllers_by_status = list( AI_STATUS_ON = list(), AI_STATUS_OFF = list(), + AI_STATUS_IDLE = list(), ) ///Assoc List of all AI controllers and the Z level they are on, which we check when someone enters/leaves a Z level to turn them on/off. var/list/ai_controllers_by_zlevel = list() + /// The tick cost of all active AI, calculated on fire. + var/cost_on + /// The tick cost of all idle AI, calculated on fire. + var/cost_idle /datum/controller/subsystem/ai_controllers/Initialize() setup_subtrees() @@ -24,10 +29,20 @@ SUBSYSTEM_DEF(ai_controllers) /datum/controller/subsystem/ai_controllers/stat_entry(msg) var/list/active_list = ai_controllers_by_status[AI_STATUS_ON] var/list/inactive_list = ai_controllers_by_status[AI_STATUS_OFF] - msg = "Active AIs:[length(active_list)]|Inactive:[length(inactive_list)]" + var/list/idle_list = ai_controllers_by_status[AI_STATUS_IDLE] + msg = "Active AIs:[length(active_list)]/[round(cost_on,1)]%|Inactive:[length(inactive_list)]|Idle:[length(idle_list)]/[round(cost_idle,1)]%" return ..() /datum/controller/subsystem/ai_controllers/fire(resumed) + var/timer = TICK_USAGE_REAL + for(var/datum/ai_controller/ai_controller as anything in ai_controllers_by_status[AI_STATUS_IDLE]) + for(var/client/client_found in GLOB.clients) + if(get_dist(get_turf(client_found.mob), get_turf(ai_controller.pawn)) <= ai_controller.interesting_dist) + ai_controller.set_ai_status(AI_STATUS_ON) + break + cost_idle = MC_AVERAGE(cost_idle, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + + timer = TICK_USAGE_REAL for(var/datum/ai_controller/ai_controller as anything in ai_controllers_by_status[AI_STATUS_ON]) if(!COOLDOWN_FINISHED(ai_controller, failed_planning_cooldown)) continue @@ -37,6 +52,15 @@ SUBSYSTEM_DEF(ai_controllers) ai_controller.SelectBehaviors(wait * 0.1) if(!LAZYLEN(ai_controller.current_behaviors)) //Still no plan COOLDOWN_START(ai_controller, failed_planning_cooldown, AI_FAILED_PLANNING_COOLDOWN) + if(ai_controller.can_idle) + var/found_interesting = FALSE + for(var/client/client_found in GLOB.clients) + if(get_dist(get_turf(client_found.mob), get_turf(ai_controller.pawn)) <= ai_controller.interesting_dist) + found_interesting = TRUE + break + if(!found_interesting) + ai_controller.set_ai_status(AI_STATUS_IDLE) + cost_on = MC_AVERAGE(cost_on, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) ///Creates all instances of ai_subtrees and assigns them to the ai_subtrees list. /datum/controller/subsystem/ai_controllers/proc/setup_subtrees() diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 664e89eab09..69d00702202 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -56,6 +56,10 @@ multiple modular subtrees with behaviors // The variables below are fucking stupid and should be put into the blackboard at some point. ///AI paused time var/paused_until = 0 + ///Can this AI idle? + var/can_idle = TRUE + ///What distance should we be checking for interesting things when considering idling/deidling? Defaults to AI_DEFAULT_INTERESTING_DIST + var/interesting_dist = AI_DEFAULT_INTERESTING_DIST /datum/ai_controller/New(atom/new_pawn) change_ai_movement_type(ai_movement) @@ -148,7 +152,7 @@ multiple modular subtrees with behaviors if(ai_traits & CAN_ACT_WHILE_DEAD) return AI_STATUS_ON return AI_STATUS_OFF - + var/turf/pawn_turf = get_turf(mob_pawn) #ifdef TESTING if(!pawn_turf) @@ -175,7 +179,7 @@ multiple modular subtrees with behaviors SSai_controllers.ai_controllers_by_zlevel[new_turf.z] += src var/new_level_clients = SSmobs.clients_by_zlevel[new_turf.z].len if(new_level_clients) - set_ai_status(AI_STATUS_ON) + set_ai_status(AI_STATUS_IDLE) else set_ai_status(AI_STATUS_OFF) @@ -307,7 +311,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/set_ai_status(new_ai_status) if(ai_status == new_ai_status) return FALSE //no change - + //remove old status, if we've got one if(ai_status) SSai_controllers.ai_controllers_by_status[ai_status] -= src @@ -319,6 +323,9 @@ multiple modular subtrees with behaviors if(AI_STATUS_OFF) STOP_PROCESSING(SSai_behaviors, src) CancelActions() + if(AI_STATUS_IDLE) + STOP_PROCESSING(SSai_behaviors, src) + CancelActions() /datum/ai_controller/proc/PauseAi(time) paused_until = world.time + time @@ -378,7 +385,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/on_sentience_lost() SIGNAL_HANDLER UnregisterSignal(pawn, COMSIG_MOB_LOGOUT) - set_ai_status(AI_STATUS_ON) //Can't do anything while player is connected + set_ai_status(AI_STATUS_IDLE) //Can't do anything while player is connected RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) // Turn the controller off if the pawn has been qdeleted diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index bfbf2d84d73..5b8666413e3 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -514,7 +514,7 @@ owner.grant_language(/datum/language/monkey, UNDERSTOOD_LANGUAGE, TRAUMA_TRAIT) owner.ai_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, prob(75)) if(owner.ai_controller.ai_status == AI_STATUS_OFF) - owner.ai_controller.set_ai_status(AI_STATUS_ON) + owner.ai_controller.set_ai_status(AI_STATUS_IDLE) owner.log_message("became controlled by monkey instincts ([owner.ai_controller.blackboard[BB_MONKEY_AGGRESSIVE] ? "aggressive" : "docile"])", LOG_ATTACK, color = "orange") to_chat(owner, span_warning("You feel the urge to act on your primal instincts...")) // extend original timer if we roll the effect while it's already ongoing diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index 706a8b58ba0..36600f244e7 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -27,6 +27,7 @@ var/current_pathing_attempts = 0 ///if we cant reach it after this many attempts, add it to our ignore list var/max_pathing_attempts = 25 + can_idle = FALSE // we want these to be running always /datum/ai_controller/basic_controller/bot/TryPossessPawn(atom/new_pawn) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index cf79eb06aa6..50416693061 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_planning_subtree/mine_walls/mook, /datum/ai_planning_subtree/wander_away_from_village, ) + can_idle = FALSE // these guys are intended to operate even if nobody's around ///check for faction if not a ash walker, otherwise just attack /datum/targeting_strategy/basic/mook/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 17d625cb591..a80d6847a8a 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -173,7 +173,6 @@ /mob/living/basic/living_limb_flesh/proc/wake_up(atom/limb) visible_message(span_warning("[src] begins flailing around!")) Shake(6, 6, 0.5 SECONDS) - ai_controller.set_ai_status(AI_STATUS_ON) + ai_controller.set_ai_status(AI_STATUS_IDLE) forceMove(limb.drop_location()) qdel(limb) - diff --git a/code/modules/unit_tests/mouse_bite_cable.dm b/code/modules/unit_tests/mouse_bite_cable.dm index c2277fe4fd7..df77976ce47 100644 --- a/code/modules/unit_tests/mouse_bite_cable.dm +++ b/code/modules/unit_tests/mouse_bite_cable.dm @@ -21,6 +21,7 @@ var/fake_dt = SSai_controllers.wait * 0.1 // Set AI - AIs by default are off in z-levels with no client, we have to force it on. biter.ai_controller.set_ai_status(AI_STATUS_ON) + biter.ai_controller.can_idle = FALSE // Select behavior - this will queue finding the cable biter.ai_controller.SelectBehaviors(fake_dt) // Process behavior - this will execute the "locate the cable" behavior From 6013863da9040fb36fba3749ec85dd2b1dbcd3d2 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:39:29 +0200 Subject: [PATCH 11/60] Automatic changelog for PR #27296 [ci skip] --- html/changelogs/AutoChangeLog-pr-27296.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27296.yml diff --git a/html/changelogs/AutoChangeLog-pr-27296.yml b/html/changelogs/AutoChangeLog-pr-27296.yml new file mode 100644 index 00000000000..18b01e75911 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27296.yml @@ -0,0 +1,6 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion." + - bugfix: "AI controllers with no clients around for 14 tiles will move into idle mode and stop planning or acting." + - bugfix: "AI controllers will now record how much time was spent on planning or un-idling AI controllers." \ No newline at end of file From 08d9f59838f330dc03d7ce4fc02906ac32ced1dd Mon Sep 17 00:00:00 2001 From: Waterpig <49160555+Majkl-J@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:05:23 +0200 Subject: [PATCH 12/60] [NO GBP] Slime AI fixes + prerequisites (newest mirror: makes slimes not idle) (#27470) * Reworks targeting behavior to fall back onto proximity monitors. Refactors ai cooldowns a bit (#82640) ## About The Pull Request Nother bit ripped out of #79498 [Implements a get_cooldown() proc to get around dumb manual overrides and empower me to optimize the findtarget logic](https://github.com/tgstation/tgstation/commit/7047d294dd2675b7e38db2424d6d79c52f21783a) [Adds modify_cooldown, uses it to optimize find_potential_targets further](https://github.com/tgstation/tgstation/commit/4ebc8cedcefaa57a1c3d1afbbb485baa6fae0a4f) No sense running the behavior if we're just waiting on its output, so let's run it once a minute just in case, then push an update instantly if we find something [Optimizes connect_range and promxity_monitors](https://github.com/tgstation/tgstation/commit/bcf7d7c5b371e46c02aa9039d4ccd4715b999400) We know what turfs exist before and after a move We can use this information to prevent trying to update turfs we don't care about. This is important because post these changes mobs with fields will be moving a lot more, so it's gotta be cheap [Implements a special kind of field to handle ai targeting](https://github.com/tgstation/tgstation/commit/80b63b3445778eb2c75fc2f8f61aca07ed482b1f) If we run targeting and don't like, find anything, we should setup a field that listens for things coming near us and then handle those things as we find them. This incurs a slight startup cost but saves so much time on the churn of constant costs Note: We should also work to figure out a way to avoid waking ais if none is near them/they aren't doing anything interesting We don't need to do that immediately this acts as somewhat of a stopgap (and would be good regardless) but it is worth keeping in mind) ## IMPORTANT I am unsure whether this is worth it anymore since #82539 was merged. As I say it was done as a stopgap because ais didn't know how to idle. If not I'll rip er out and we'll keep the other refactoring/optimizations. ## Why It's Good For The Game Cleaner basic ai code, maybe? faster basic ai code, for sure faster proximity monitors (significantly) * ai controllers use cell trackers to know when to idle (#82691) ## About The Pull Request this makes ai controllers use cell trackers and signals to determine when to idle ## Why It's Good For The Game might be better than looping over all clients for every controller ## Changelog :cl: code: The way mobs idle has been refactored, please report any issues with non-reactive mobs /:cl: * makes slimes not idle (#82742) ## About The Pull Request slimes should still be able to do their everyday routine without needing to be watched over ## Why It's Good For The Game makes xenobiologist's lives easier ## Changelog :cl: qol: slimes will stay active without needing any one to watch over /:cl: --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> --- code/__DEFINES/ai/ai.dm | 2 +- code/__DEFINES/ai/ai_blackboard.dm | 5 + .../dcs/signals/signals_ai_controller.dm | 4 + code/controllers/subsystem/ai_controllers.dm | 14 +-- code/datums/ai/_ai_behavior.dm | 8 +- code/datums/ai/_ai_controller.dm | 69 ++++++++++- .../basic_ai_behaviors/stop_and_stare.dm | 5 +- .../basic_ai_behaviors/targeting.dm | 94 ++++++++++++++- .../basic_ai_behaviors/ventcrawling.dm | 4 +- code/datums/ai/dog/dog_behaviors.dm | 2 +- code/datums/components/connect_range.dm | 31 +++-- code/datums/elements/hostile_machine.dm | 4 + code/datums/proximity_monitor/field.dm | 92 +++++++++----- .../fields/ai_target_tracking.dm | 113 ++++++++++++++++++ .../proximity_monitor/fields/gravity.dm | 10 +- .../fields/projectile_dampener.dm | 11 +- .../proximity_monitor/fields/timestop.dm | 4 +- .../proximity_monitor/proximity_monitor.dm | 9 +- .../objects/effects/poster_motivational.dm | 2 +- .../traitor/components/demoraliser.dm | 2 +- .../mob/living/basic/slime/ai/controller.dm | 1 + .../transport/elevator/elev_music_zone.dm | 4 +- tgstation.dme | 1 + 23 files changed, 404 insertions(+), 87 deletions(-) create mode 100644 code/datums/proximity_monitor/fields/ai_target_tracking.dm diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index d4281a551f8..24272a08d71 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -17,7 +17,7 @@ #define AI_BOT_PATH_LENGTH 150 // How far should we, by default, be looking for interesting things to de-idle? -#define AI_DEFAULT_INTERESTING_DIST 14 +#define AI_DEFAULT_INTERESTING_DIST 10 ///Cooldown on planning if planning failed last time diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index df9b8be1075..0047c9c63a4 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -144,3 +144,8 @@ ///Text we display when we befriend someone #define BB_FRIENDLY_MESSAGE "friendly_message" + +// Keys used by one and only one behavior +// Used to hold state without making bigass lists +/// For /datum/ai_behavior/find_potential_targets, what if any field are we using currently +#define BB_FIND_TARGETS_FIELD(type) "bb_find_targets_field_[type]" diff --git a/code/__DEFINES/dcs/signals/signals_ai_controller.dm b/code/__DEFINES/dcs/signals/signals_ai_controller.dm index fa442c3d186..a405ad65e87 100644 --- a/code/__DEFINES/dcs/signals/signals_ai_controller.dm +++ b/code/__DEFINES/dcs/signals/signals_ai_controller.dm @@ -1,3 +1,7 @@ ///sent from ai controllers when they possess a pawn: (datum/ai_controller/source_controller) #define COMSIG_AI_CONTROLLER_POSSESSED_PAWN "ai_controller_possessed_pawn" +///sent from ai controllers when they pick behaviors: (list/datum/ai_behavior/old_behaviors, list/datum/ai_behavior/new_behaviors) +#define COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS "ai_controller_picked_behaviors" +///sent from ai controllers when a behavior is inserted into the queue: (list/new_arguments) +#define AI_CONTROLLER_BEHAVIOR_QUEUED(type) "ai_controller_behavior_queued_[type]" diff --git a/code/controllers/subsystem/ai_controllers.dm b/code/controllers/subsystem/ai_controllers.dm index e215f4a4ef7..db794fa6747 100644 --- a/code/controllers/subsystem/ai_controllers.dm +++ b/code/controllers/subsystem/ai_controllers.dm @@ -35,11 +35,6 @@ SUBSYSTEM_DEF(ai_controllers) /datum/controller/subsystem/ai_controllers/fire(resumed) var/timer = TICK_USAGE_REAL - for(var/datum/ai_controller/ai_controller as anything in ai_controllers_by_status[AI_STATUS_IDLE]) - for(var/client/client_found in GLOB.clients) - if(get_dist(get_turf(client_found.mob), get_turf(ai_controller.pawn)) <= ai_controller.interesting_dist) - ai_controller.set_ai_status(AI_STATUS_ON) - break cost_idle = MC_AVERAGE(cost_idle, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) timer = TICK_USAGE_REAL @@ -52,14 +47,7 @@ SUBSYSTEM_DEF(ai_controllers) ai_controller.SelectBehaviors(wait * 0.1) if(!LAZYLEN(ai_controller.current_behaviors)) //Still no plan COOLDOWN_START(ai_controller, failed_planning_cooldown, AI_FAILED_PLANNING_COOLDOWN) - if(ai_controller.can_idle) - var/found_interesting = FALSE - for(var/client/client_found in GLOB.clients) - if(get_dist(get_turf(client_found.mob), get_turf(ai_controller.pawn)) <= ai_controller.interesting_dist) - found_interesting = TRUE - break - if(!found_interesting) - ai_controller.set_ai_status(AI_STATUS_IDLE) + cost_on = MC_AVERAGE(cost_on, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) ///Creates all instances of ai_subtrees and assigns them to the ai_subtrees list. diff --git a/code/datums/ai/_ai_behavior.dm b/code/datums/ai/_ai_behavior.dm index 98ab8f2fc7e..233b57b1577 100644 --- a/code/datums/ai/_ai_behavior.dm +++ b/code/datums/ai/_ai_behavior.dm @@ -5,8 +5,14 @@ ///Flags for extra behavior var/behavior_flags = NONE ///Cooldown between actions performances, defaults to the value of CLICK_CD_MELEE because that seemed like a nice standard for the speed of AI behavior + ///Do not read directly or mutate, instead use get_cooldown() var/action_cooldown = CLICK_CD_MELEE +/// Returns the delay to use for this behavior in the moment +/// Override to return a conditional delay +/datum/ai_behavior/proc/get_cooldown(datum/ai_controller/cooldown_for) + return action_cooldown + /// Called by the ai controller when first being added. Additional arguments depend on the behavior type. /// Return FALSE to cancel /datum/ai_behavior/proc/setup(datum/ai_controller/controller, ...) @@ -14,7 +20,7 @@ ///Called by the AI controller when this action is performed /datum/ai_behavior/proc/perform(seconds_per_tick, datum/ai_controller/controller, ...) - controller.behavior_cooldowns[src] = world.time + action_cooldown + controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) return ///Called when the action is finished. This needs the same args as perform besides the default ones diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 69d00702202..806009398ee 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -46,6 +46,8 @@ multiple modular subtrees with behaviors ///The idle behavior this AI performs when it has no actions. var/datum/idle_behavior/idle_behavior = null + ///our current cell grid + var/datum/cell_tracker/our_cells // Movement related things here ///Reference to the movement datum we use. Is a type on initialize but becomes a ref afterwards. @@ -73,6 +75,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/Destroy(force) UnpossessPawn(FALSE) + our_cells = null set_movement_target(type, null) if(ai_movement.moving_controllers[src]) ai_movement.stop_moving_towards(src) @@ -131,6 +134,61 @@ multiple modular subtrees with behaviors RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) RegisterSignal(pawn, COMSIG_QDELETING, PROC_REF(on_pawn_qdeleted)) + our_cells = new(interesting_dist, interesting_dist, 1) + set_new_cells() + + RegisterSignal(pawn, COMSIG_MOVABLE_MOVED, PROC_REF(update_grid)) + +/datum/ai_controller/proc/update_grid(datum/source, datum/spatial_grid_cell/new_cell) + SIGNAL_HANDLER + + set_new_cells() + +/datum/ai_controller/proc/set_new_cells() + if(isnull(our_cells)) + return + + var/turf/our_turf = get_turf(pawn) + + if(isnull(our_turf)) + return + + var/list/cell_collections = our_cells.recalculate_cells(our_turf) + + for(var/datum/old_grid as anything in cell_collections[2]) + UnregisterSignal(old_grid, list(SPATIAL_GRID_CELL_ENTERED(SPATIAL_GRID_CONTENTS_TYPE_CLIENTS), SPATIAL_GRID_CELL_EXITED(SPATIAL_GRID_CONTENTS_TYPE_CLIENTS))) + + for(var/datum/spatial_grid_cell/new_grid as anything in cell_collections[1]) + RegisterSignal(new_grid, SPATIAL_GRID_CELL_ENTERED(SPATIAL_GRID_CONTENTS_TYPE_CLIENTS), PROC_REF(on_client_enter)) + RegisterSignal(new_grid, SPATIAL_GRID_CELL_EXITED(SPATIAL_GRID_CONTENTS_TYPE_CLIENTS), PROC_REF(on_client_exit)) + + recalculate_idle() + +/datum/ai_controller/proc/should_idle() + if(!can_idle || isnull(our_cells)) + return FALSE + for(var/datum/spatial_grid_cell/grid as anything in our_cells.member_cells) + if(length(grid.client_contents)) + return FALSE + return TRUE + +/datum/ai_controller/proc/recalculate_idle() + if(ai_status == AI_STATUS_OFF) + return + if(should_idle()) + set_ai_status(AI_STATUS_IDLE) + +/datum/ai_controller/proc/on_client_enter(datum/source, atom/target) + SIGNAL_HANDLER + + if(ai_status == AI_STATUS_IDLE) + set_ai_status(AI_STATUS_ON) + +/datum/ai_controller/proc/on_client_exit(datum/source, datum/exited) + SIGNAL_HANDLER + + recalculate_idle() + /// Sets the AI on or off based on current conditions, call to reset after you've manually disabled it somewhere /datum/ai_controller/proc/reset_ai_status() set_ai_status(get_expected_ai_status()) @@ -141,6 +199,7 @@ multiple modular subtrees with behaviors * Returns AI_STATUS_ON otherwise. */ /datum/ai_controller/proc/get_expected_ai_status() + if (!ismob(pawn)) return AI_STATUS_ON @@ -160,6 +219,8 @@ multiple modular subtrees with behaviors #endif if(!length(SSmobs.clients_by_zlevel[pawn_turf.z])) return AI_STATUS_OFF + if(should_idle()) + return AI_STATUS_IDLE return AI_STATUS_ON /datum/ai_controller/proc/get_current_turf() @@ -214,7 +275,6 @@ multiple modular subtrees with behaviors return FALSE return TRUE - ///Runs any actions that are currently running /datum/ai_controller/process(seconds_per_tick) @@ -242,7 +302,7 @@ multiple modular subtrees with behaviors // Convert the current behaviour action cooldown to realtime seconds from deciseconds.current_behavior // Then pick the max of this and the seconds_per_tick passed to ai_controller.process() // Action cooldowns cannot happen faster than seconds_per_tick, so seconds_per_tick should be the value used in this scenario. - var/action_seconds_per_tick = max(current_behavior.action_cooldown * 0.1, seconds_per_tick) + var/action_seconds_per_tick = max(current_behavior.get_cooldown(src) * 0.1, seconds_per_tick) if(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT) //Might need to move closer if(!current_movement_target) @@ -298,6 +358,7 @@ multiple modular subtrees with behaviors if(subtree.SelectBehaviors(src, seconds_per_tick) == SUBTREE_RETURN_FINISH_PLANNING) break + SEND_SIGNAL(src, COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS, current_behaviors, planned_behaviors) for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) if(LAZYACCESS(planned_behaviors, current_behavior)) continue @@ -330,6 +391,9 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/PauseAi(time) paused_until = world.time + time +/datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown) + behavior_cooldowns[behavior.type] = new_cooldown + ///Call this to add a behavior to the stack. /datum/ai_controller/proc/queue_behavior(behavior_type, ...) var/datum/ai_behavior/behavior = GET_AI_BEHAVIOR(behavior_type) @@ -351,6 +415,7 @@ multiple modular subtrees with behaviors behavior_args[behavior_type] = arguments else behavior_args -= behavior_type + SEND_SIGNAL(src, AI_CONTROLLER_BEHAVIOR_QUEUED(behavior_type), arguments) /datum/ai_controller/proc/ProcessBehavior(seconds_per_tick, datum/ai_behavior/behavior) var/list/arguments = list(seconds_per_tick, src) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm index cc02528262d..df066ac0418 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm @@ -7,9 +7,10 @@ var/atom/movable/target = controller.blackboard[target_key] return ismovable(target) && isturf(target.loc) && ismob(controller.pawn) +/datum/ai_behavior/stop_and_stare/get_cooldown(datum/ai_controller/cooldown_for) + return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN] + /datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - // i don't really like doing this but we wanna make sure that the cooldown is pertinent to what we need for this specific controller before we invoke parent - action_cooldown = controller.blackboard[BB_STATIONARY_COOLDOWN] . = ..() var/atom/movable/target = controller.blackboard[target_key] if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 8ba9624c21e..b54bfe82f90 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -1,5 +1,9 @@ /// List of objects that AIs will treat as targets GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) +/// Static typecache list of things we are interested in +/// Consider this a union of the for loop and the hearers call from below +/// Must be kept up to date with the contents of hostile_machines +GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/porta_turret, /obj/vehicle/sealed/mecha))) /datum/ai_behavior/find_potential_targets action_cooldown = 2 SECONDS @@ -8,8 +12,12 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) /// Blackboard key for aggro range, uses vision range if not specified var/aggro_range_key = BB_AGGRO_RANGE +/datum/ai_behavior/find_potential_targets/get_cooldown(datum/ai_controller/cooldown_for) + if(cooldown_for.blackboard[BB_FIND_TARGETS_FIELD(type)]) + return 60 SECONDS + return ..() + /datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) - . = ..() var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) @@ -25,6 +33,10 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) controller.clear_blackboard_key(target_key) + // If we're using a field rn, just don't do anything yeah? + if(controller.blackboard[BB_FIND_TARGETS_FIELD(type)]) + return + var/list/potential_targets = hearers(aggro_range, get_turf(controller.pawn)) - living_mob //Remove self, so we don't suicide for (var/atom/hostile_machine as anything in GLOB.hostile_machines) @@ -32,6 +44,7 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) potential_targets += hostile_machine if(!potential_targets.len) + failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) finish_action(controller, succeeded = FALSE) return @@ -43,6 +56,7 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) continue if(!filtered_targets.len) + failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) finish_action(controller, succeeded = FALSE) return @@ -56,10 +70,86 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) finish_action(controller, succeeded = TRUE) -/datum/ai_behavior/find_potential_targets/finish_action(datum/ai_controller/controller, succeeded, ...) +/datum/ai_behavior/find_potential_targets/proc/failed_to_find_anyone(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + var/aggro_range = controller.blackboard[aggro_range_key] || vision_range + // takes the larger between our range() input and our implicit hearers() input (world.view) + aggro_range = max(aggro_range, ROUND_UP(max(getviewsize(world.view)) / 2)) + // Alright, here's the interesting bit + // We're gonna use this max range to hook into a proximity field so we can just await someone interesting to come along + // Rather then trying to check every few seconds + var/datum/proximity_monitor/advanced/ai_target_tracking/detection_field = new( + controller.pawn, + aggro_range, + TRUE, + src, + controller, + target_key, + targeting_strategy_key, + hiding_location_key, + ) + // We're gonna store this field in our blackboard, so we can clear it away if we end up finishing successsfully + controller.set_blackboard_key(BB_FIND_TARGETS_FIELD(type), detection_field) + +/datum/ai_behavior/find_potential_targets/proc/new_turf_found(turf/found, datum/ai_controller/controller, datum/targeting_strategy/strategy) + var/valid_found = FALSE + var/mob/pawn = controller.pawn + for(var/maybe_target as anything in found) + if(maybe_target == pawn) + continue + if(!is_type_in_typecache(maybe_target, GLOB.target_interested_atoms)) + continue + if(!strategy.can_attack(pawn, maybe_target)) + continue + valid_found = TRUE + break + if(!valid_found) + return + // If we found any one thing we "could" attack, then run the full search again so we can select from the best possible canidate + var/datum/proximity_monitor/field = controller.blackboard[BB_FIND_TARGETS_FIELD(type)] + qdel(field) // autoclears so it's fine + // Fire instantly, you should find something I hope + controller.modify_cooldown(src, world.time) + +/datum/ai_behavior/find_potential_targets/proc/atom_allowed(atom/movable/checking, datum/targeting_strategy/strategy, mob/pawn) + if(checking == pawn) + return FALSE + if(!ismob(checking) && !is_type_in_typecache(checking, GLOB.target_interested_atoms)) + return FALSE + if(!strategy.can_attack(pawn, checking)) + return FALSE + return TRUE + +/datum/ai_behavior/find_potential_targets/proc/new_atoms_found(list/atom/movable/found, datum/ai_controller/controller, target_key, datum/targeting_strategy/strategy, hiding_location_key) + var/mob/pawn = controller.pawn + var/list/accepted_targets = list() + for(var/maybe_target as anything in found) + if(maybe_target == pawn) + continue + // Need to better handle viewers here + if(!ismob(maybe_target) && !is_type_in_typecache(maybe_target, GLOB.target_interested_atoms)) + continue + if(!strategy.can_attack(pawn, maybe_target)) + continue + accepted_targets += maybe_target + + // Alright, we found something acceptable, let's use it yeah? + var/atom/target = pick_final_target(controller, accepted_targets) + controller.set_blackboard_key(target_key, target) + + var/atom/potential_hiding_location = strategy.find_hidden_mobs(pawn, target) + + if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. + controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + + finish_action(controller, succeeded = TRUE) + +/datum/ai_behavior/find_potential_targets/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() if (succeeded) + var/datum/proximity_monitor/field = controller.blackboard[BB_FIND_TARGETS_FIELD(type)] + qdel(field) // autoclears so it's fine controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target + controller.modify_cooldown(controller, get_cooldown(controller)) /// Returns the desired final target from the filtered list of targets /datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm index e162cc61299..889b474ad03 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm @@ -8,8 +8,10 @@ /datum/ai_behavior/crawl_through_vents action_cooldown = 10 SECONDS +/datum/ai_behavior/crawl_through_vents/get_cooldown(datum/ai_controller/cooldown_for) + return cooldown_for.blackboard[BB_VENTCRAWL_COOLDOWN] || initial(action_cooldown) + /datum/ai_behavior/crawl_through_vents/setup(datum/ai_controller/controller, target_key) - action_cooldown = controller.blackboard[BB_VENTCRAWL_COOLDOWN] || initial(action_cooldown) . = ..() var/obj/machinery/atmospherics/components/unary/vent_pump/target = controller.blackboard[target_key] || controller.blackboard[BB_ENTRY_VENT_TARGET] return istype(target) && isliving(controller.pawn) // only mobs can vent crawl in the current framework diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index c7723eab1a1..eed116330fb 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -8,7 +8,7 @@ required_distance = 3 /datum/ai_behavior/basic_melee_attack/dog/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) - controller.behavior_cooldowns[src] = world.time + action_cooldown + controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) var/mob/living/living_pawn = controller.pawn if(!(isturf(living_pawn.loc) || HAS_TRAIT(living_pawn, TRAIT_AI_BAGATTACK))) // Void puppies can attack from inside bags finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) diff --git a/code/datums/components/connect_range.dm b/code/datums/components/connect_range.dm index 95cb560c868..d3407f46714 100644 --- a/code/datums/components/connect_range.dm +++ b/code/datums/components/connect_range.dm @@ -8,6 +8,8 @@ /// An assoc list of signal -> procpath to register to the loc this object is on. var/list/connections + /// The turfs currently connected to this component + var/list/turfs = list() /** * The atom the component is tracking. The component will delete itself if the tracked is deleted. * Signals will also be updated whenever it moves (if it's a movable). @@ -41,7 +43,7 @@ if(src.range == range && src.works_in_containers == works_in_containers) return //Unregister the signals with the old settings. - unregister_signals(isturf(tracked) ? tracked : tracked.loc) + unregister_signals(isturf(tracked) ? tracked : tracked.loc, turfs) src.range = range src.works_in_containers = works_in_containers //Re-register the signals with the new settings. @@ -49,7 +51,7 @@ /datum/component/connect_range/proc/set_tracked(atom/new_tracked) if(tracked) //Unregister the signals from the old tracked and its surroundings - unregister_signals(isturf(tracked) ? tracked : tracked.loc) + unregister_signals(isturf(tracked) ? tracked : tracked.loc, turfs) UnregisterSignal(tracked, list( COMSIG_MOVABLE_MOVED, COMSIG_QDELETING, @@ -66,28 +68,34 @@ SIGNAL_HANDLER qdel(src) -/datum/component/connect_range/proc/update_signals(atom/target, atom/old_loc, forced = FALSE) +/datum/component/connect_range/proc/update_signals(atom/target, atom/old_loc) var/turf/current_turf = get_turf(target) - var/on_same_turf = current_turf == get_turf(old_loc) //Only register/unregister turf signals if it's moved to a new turf. - unregister_signals(old_loc, on_same_turf) - if(isnull(current_turf)) + unregister_signals(old_loc, turfs) + turfs = list() return if(ismovable(target.loc)) if(!works_in_containers) + unregister_signals(old_loc, turfs) + turfs = list() return //Keep track of possible movement of all movables the target is in. for(var/atom/movable/container as anything in get_nested_locs(target)) RegisterSignal(container, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - if(on_same_turf && !forced) + //Only register/unregister turf signals if it's moved to a new turf. + if(current_turf == get_turf(old_loc)) + unregister_signals(old_loc, null) return - for(var/turf/target_turf in RANGE_TURFS(range, current_turf)) + var/list/old_turfs = turfs + turfs = RANGE_TURFS(range, current_turf) + unregister_signals(old_loc, old_turfs - turfs) + for(var/turf/target_turf as anything in turfs - old_turfs) for(var/signal in connections) parent.RegisterSignal(target_turf, signal, connections[signal]) -/datum/component/connect_range/proc/unregister_signals(atom/location, on_same_turf = FALSE) +/datum/component/connect_range/proc/unregister_signals(atom/location, list/remove_from) //The location is null or is a container and the component shouldn't have register signals on it if(isnull(location) || (!works_in_containers && !isturf(location))) return @@ -96,10 +104,9 @@ for(var/atom/movable/target as anything in (get_nested_locs(location) + location)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) - if(on_same_turf) + if(!length(remove_from)) return - var/turf/previous_turf = get_turf(location) - for(var/turf/target_turf in RANGE_TURFS(range, previous_turf)) + for(var/turf/target_turf as anything in remove_from) parent.UnregisterSignal(target_turf, connections) /datum/component/connect_range/proc/on_moved(atom/movable/movable, atom/old_loc) diff --git a/code/datums/elements/hostile_machine.dm b/code/datums/elements/hostile_machine.dm index 0a5f19287bb..cb846d830e8 100644 --- a/code/datums/elements/hostile_machine.dm +++ b/code/datums/elements/hostile_machine.dm @@ -8,6 +8,10 @@ if (!isatom(target)) return ELEMENT_INCOMPATIBLE +#ifdef UNIT_TESTS + if(!GLOB.target_interested_atoms[target.type]) + stack_trace("Tried to make a hostile machine without updating ai targeting to include it, they must be synced") +#endif GLOB.hostile_machines += target /datum/element/hostile_machine/Detach(datum/source) diff --git a/code/datums/proximity_monitor/field.dm b/code/datums/proximity_monitor/field.dm index 12c033cc426..67bbef948ef 100644 --- a/code/datums/proximity_monitor/field.dm +++ b/code/datums/proximity_monitor/field.dm @@ -27,35 +27,59 @@ /datum/proximity_monitor/advanced/proc/cleanup_field() for(var/turf/turf as anything in edge_turfs) cleanup_edge_turf(turf) + edge_turfs = list() for(var/turf/turf as anything in field_turfs) cleanup_field_turf(turf) + field_turfs = list() //Call every time the field moves (done automatically if you use update_center) or a setup specification is changed. -/datum/proximity_monitor/advanced/proc/recalculate_field() +/datum/proximity_monitor/advanced/proc/recalculate_field(full_recalc = FALSE) var/list/new_turfs = update_new_turfs() - var/list/new_field_turfs = new_turfs[FIELD_TURFS_KEY] - var/list/new_edge_turfs = new_turfs[EDGE_TURFS_KEY] + var/list/old_field_turfs = field_turfs + var/list/old_edge_turfs = edge_turfs + field_turfs = new_turfs[FIELD_TURFS_KEY] + edge_turfs = new_turfs[EDGE_TURFS_KEY] + if(!full_recalc) + field_turfs = list() + edge_turfs = list() - for(var/turf/old_turf as anything in field_turfs) - if(!(old_turf in new_field_turfs)) - cleanup_field_turf(old_turf) - for(var/turf/old_turf as anything in edge_turfs) + for(var/turf/old_turf as anything in old_field_turfs - field_turfs) + if(QDELETED(src)) + return + cleanup_field_turf(old_turf) + for(var/turf/old_turf as anything in old_edge_turfs - edge_turfs) + if(QDELETED(src)) + return cleanup_edge_turf(old_turf) - for(var/turf/new_turf as anything in new_field_turfs) - field_turfs |= new_turf + if(full_recalc) + old_field_turfs = list() + old_edge_turfs = list() + field_turfs = new_turfs[FIELD_TURFS_KEY] + edge_turfs = new_turfs[EDGE_TURFS_KEY] + + for(var/turf/new_turf as anything in field_turfs - old_field_turfs) + if(QDELETED(src)) + return + field_turfs += new_turf setup_field_turf(new_turf) - for(var/turf/new_turf as anything in new_edge_turfs) - edge_turfs |= new_turf + for(var/turf/new_turf as anything in edge_turfs - old_edge_turfs) + if(QDELETED(src)) + return + edge_turfs += new_turf setup_edge_turf(new_turf) -/datum/proximity_monitor/advanced/on_entered(turf/source, atom/movable/entered) +/datum/proximity_monitor/advanced/on_initialized(turf/location, atom/created, init_flags) + . = ..() + on_entered(location, created, null) + +/datum/proximity_monitor/advanced/on_entered(turf/source, atom/movable/entered, turf/old_loc) . = ..() if(get_dist(source, host) == current_range) - field_edge_crossed(entered, source) + field_edge_crossed(entered, old_loc, source) else - field_turf_crossed(entered, source) + field_turf_crossed(entered, old_loc, source) /datum/proximity_monitor/advanced/on_moved(atom/movable/movable, atom/old_loc) . = ..() @@ -68,21 +92,22 @@ if(isturf(old_loc)) cleanup_field() return - recalculate_field() + recalculate_field(full_recalc = FALSE) /datum/proximity_monitor/advanced/on_uncrossed(turf/source, atom/movable/gone, direction) if(get_dist(source, host) == current_range) - field_edge_uncrossed(gone, source) + field_edge_uncrossed(gone, source, get_turf(gone)) else - field_turf_uncrossed(gone, source) + field_turf_uncrossed(gone, source, get_turf(gone)) /// Called when a turf in the field of the monitor is linked /datum/proximity_monitor/advanced/proc/setup_field_turf(turf/target) return /// Called when a turf in the field of the monitor is unlinked +/// Do NOT call this manually, requires management of the field_turfs list /datum/proximity_monitor/advanced/proc/cleanup_field_turf(turf/target) - field_turfs -= target + return /// Called when a turf in the edge of the monitor is linked /datum/proximity_monitor/advanced/proc/setup_edge_turf(turf/target) @@ -90,21 +115,22 @@ setup_field_turf(target) /// Called when a turf in the edge of the monitor is unlinked +/// Do NOT call this manually, requires management of the edge_turfs list /datum/proximity_monitor/advanced/proc/cleanup_edge_turf(turf/target) if(edge_is_a_field) // If the edge is considered a field, clean it up like one cleanup_field_turf(target) - edge_turfs -= target /datum/proximity_monitor/advanced/proc/update_new_turfs() - . = list(FIELD_TURFS_KEY = list(), EDGE_TURFS_KEY = list()) if(ignore_if_not_on_turf && !isturf(host.loc)) - return + return list(FIELD_TURFS_KEY = list(), EDGE_TURFS_KEY = list()) + var/list/local_field_turfs = list() + var/list/local_edge_turfs = list() var/turf/center = get_turf(host) - for(var/turf/target in RANGE_TURFS(current_range, center)) - if(get_dist(center, target) == current_range) - .[EDGE_TURFS_KEY] += target - else - .[FIELD_TURFS_KEY] += target + if(current_range > 0) + local_field_turfs += RANGE_TURFS(current_range - 1, center) + if(current_range > 1) + local_edge_turfs = local_field_turfs - RANGE_TURFS(current_range, center) + return list(FIELD_TURFS_KEY = local_field_turfs, EDGE_TURFS_KEY = local_edge_turfs) //Gets edge direction/corner, only works with square radius/WDH fields! /datum/proximity_monitor/advanced/proc/get_edgeturf_direction(turf/T, turf/center_override = null) @@ -124,19 +150,19 @@ if(T.y == (checking_from.y + current_range)) return NORTH -/datum/proximity_monitor/advanced/proc/field_turf_crossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/proc/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) return -/datum/proximity_monitor/advanced/proc/field_turf_uncrossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/proc/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) return -/datum/proximity_monitor/advanced/proc/field_edge_crossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/proc/field_edge_crossed(atom/movable/movable, turf/old_location, turf/new_location) if(edge_is_a_field) // If the edge is considered a field, pass crossed to that - field_turf_crossed(movable, location) + field_turf_crossed(movable, old_location, new_location) -/datum/proximity_monitor/advanced/proc/field_edge_uncrossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/proc/field_edge_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) if(edge_is_a_field) // If the edge is considered a field, pass uncrossed to that - field_turf_uncrossed(movable, location) + field_turf_uncrossed(movable, old_location, new_location) //DEBUG FIELD ITEM /obj/item/multitool/field_debug @@ -153,7 +179,7 @@ current = new(src, 5, FALSE) current.set_fieldturf_color = "#aaffff" current.set_edgeturf_color = "#ffaaff" - current.recalculate_field() + current.recalculate_field(full_recalc = TRUE) /obj/item/multitool/field_debug/attack_self(mob/user) operating = !operating diff --git a/code/datums/proximity_monitor/fields/ai_target_tracking.dm b/code/datums/proximity_monitor/fields/ai_target_tracking.dm new file mode 100644 index 00000000000..46cde22aaff --- /dev/null +++ b/code/datums/proximity_monitor/fields/ai_target_tracking.dm @@ -0,0 +1,113 @@ +// Proximity monitor that checks to see if anything interesting enters our bounds +/datum/proximity_monitor/advanced/ai_target_tracking + edge_is_a_field = TRUE + /// The ai behavior who owns us + var/datum/ai_behavior/find_potential_targets/owning_behavior + /// The ai controller we're using + var/datum/ai_controller/controller + /// The target key we're trying to fill + var/target_key + /// The targeting strategy KEY we're using + var/targeting_strategy_key + /// The hiding location key we're using + var/hiding_location_key + + /// The targeting strategy we're using + var/datum/targeting_strategy/filter + /// If we've built our field yet + /// Prevents wasted work on the first build (since the behavior did it) + var/first_build = TRUE + +// Initially, run the check manually +// If that fails, set up a field and have it manage the behavior fully +/datum/proximity_monitor/advanced/ai_target_tracking/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, datum/ai_behavior/find_potential_targets/owning_behavior, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + src.owning_behavior = owning_behavior + src.controller = controller + src.target_key = target_key + src.targeting_strategy_key = targeting_strategy_key + src.hiding_location_key = hiding_location_key + src.filter = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + RegisterSignal(controller, COMSIG_QDELETING, PROC_REF(controller_deleted)) + RegisterSignal(controller, COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS, PROC_REF(controller_think)) + RegisterSignal(controller, COMSIG_AI_CONTROLLER_POSSESSED_PAWN, PROC_REF(pawn_changed)) + RegisterSignal(controller, AI_CONTROLLER_BEHAVIOR_QUEUED(owning_behavior.type), PROC_REF(behavior_requeued)) + RegisterSignal(controller, COMSIG_AI_BLACKBOARD_KEY_SET(targeting_strategy_key), PROC_REF(targeting_datum_changed)) + RegisterSignal(controller, COMSIG_AI_BLACKBOARD_KEY_CLEARED(targeting_strategy_key), PROC_REF(targeting_datum_cleared)) + recalculate_field(full_recalc = TRUE) + +/datum/proximity_monitor/advanced/ai_target_tracking/Destroy() + . = ..() + if(!QDELETED(controller) && owning_behavior) + controller.modify_cooldown(owning_behavior, owning_behavior.get_cooldown(controller)) + owning_behavior = null + controller = null + target_key = null + targeting_strategy_key = null + hiding_location_key = null + filter = null + +/datum/proximity_monitor/advanced/ai_target_tracking/recalculate_field(full_recalc = FALSE) + . = ..() + first_build = FALSE + +/datum/proximity_monitor/advanced/ai_target_tracking/setup_field_turf(turf/target) + . = ..() + if(first_build) + return + owning_behavior.new_turf_found(target, controller, filter) + +/datum/proximity_monitor/advanced/ai_target_tracking/field_turf_crossed(atom/movable/movable, turf/location, turf/old_location) + . = ..() + + if(!owning_behavior.atom_allowed(movable, filter, controller.pawn)) + return + + owning_behavior.new_atoms_found(list(movable), controller, target_key, filter, hiding_location_key) + +/// React to controller planning +/datum/proximity_monitor/advanced/ai_target_tracking/proc/controller_deleted(datum/source) + SIGNAL_HANDLER + qdel(src) + +/// React to the pawn goin byebye +/datum/proximity_monitor/advanced/ai_target_tracking/proc/pawn_changed(datum/source) + SIGNAL_HANDLER + qdel(src) + +/// React to controller planning +/datum/proximity_monitor/advanced/ai_target_tracking/proc/controller_think(datum/ai_controller/source, list/datum/ai_behavior/old_behaviors, list/datum/ai_behavior/new_behaviors) + SIGNAL_HANDLER + // If our parent was forgotten, nuke ourselves + if(!new_behaviors[owning_behavior]) + qdel(src) + +/datum/proximity_monitor/advanced/ai_target_tracking/proc/behavior_requeued(datum/source, list/new_arguments) + SIGNAL_HANDLER + check_new_args(arglist(new_arguments)) + +/// Ensure our args and locals are up to date +/datum/proximity_monitor/advanced/ai_target_tracking/proc/check_new_args(target_key, targeting_strategy_key, hiding_location_key) + var/update_filter = FALSE + if(src.target_key != target_key) + src.target_key = target_key + if(src.targeting_strategy_key != targeting_strategy_key) + src.targeting_strategy_key = targeting_strategy_key + update_filter = TRUE + if(src.hiding_location_key != hiding_location_key) + src.hiding_location_key = hiding_location_key + if(update_filter) + targeting_datum_changed(null) + +/datum/proximity_monitor/advanced/ai_target_tracking/proc/targeting_datum_changed(datum/source) + SIGNAL_HANDLER + filter = controller.blackboard[targeting_strategy_key] + // Filter changed, need to do a full reparse + // Fucking 9 * 9 out here I stg + for(var/turf/in_field as anything in field_turfs + edge_turfs) + owning_behavior.new_turf_found(in_field, controller, filter) + +/datum/proximity_monitor/advanced/ai_target_tracking/proc/targeting_datum_cleared(datum/source) + SIGNAL_HANDLER + // Go fuckin home bros + qdel(src) diff --git a/code/datums/proximity_monitor/fields/gravity.dm b/code/datums/proximity_monitor/fields/gravity.dm index e2604267657..b7e22840041 100644 --- a/code/datums/proximity_monitor/fields/gravity.dm +++ b/code/datums/proximity_monitor/fields/gravity.dm @@ -7,7 +7,7 @@ /datum/proximity_monitor/advanced/gravity/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, gravity) . = ..() gravity_value = gravity - recalculate_field() + recalculate_field(full_recalc = TRUE) /datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/target) . = ..() @@ -42,15 +42,15 @@ for(var/mob/living/guy in target) warn_mob(guy, target) -/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_crossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_crossed(atom/movable/movable, turf/old_location, turf/new_location) . = ..() if(isliving(movable)) - warn_mob(movable, location) + warn_mob(movable, new_location) -/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_uncrossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) . = ..() if(isliving(movable)) - warn_mob(movable, location) + warn_mob(movable, old_location) /datum/proximity_monitor/advanced/gravity/warns_on_entrance/proc/warn_mob(mob/living/to_warn, turf/location) var/mob_ref_key = REF(to_warn) diff --git a/code/datums/proximity_monitor/fields/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener.dm index 705ac6bface..3e696e5fb13 100644 --- a/code/datums/proximity_monitor/fields/projectile_dampener.dm +++ b/code/datums/proximity_monitor/fields/projectile_dampener.dm @@ -19,7 +19,7 @@ /datum/proximity_monitor/advanced/projectile_dampener/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, atom/projector) ..() RegisterSignal(projector, COMSIG_QDELETING, PROC_REF(on_projector_del)) - recalculate_field() + recalculate_field(full_recalc = TRUE) START_PROCESSING(SSfastprocess, src) /datum/proximity_monitor/advanced/projectile_dampener/Destroy() @@ -48,7 +48,7 @@ LAZYSET(edgeturf_effects, target, effect) /datum/proximity_monitor/advanced/projectile_dampener/on_z_change(datum/source) - recalculate_field() + recalculate_field(full_recalc = TRUE) /datum/proximity_monitor/advanced/projectile_dampener/cleanup_edge_turf(turf/target) . = ..() @@ -90,16 +90,15 @@ /datum/proximity_monitor/advanced/projectile_dampener/proc/on_projector_del(datum/source) SIGNAL_HANDLER - qdel(src) -/datum/proximity_monitor/advanced/projectile_dampener/field_edge_uncrossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/projectile_dampener/field_edge_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) if(isprojectile(movable) && get_dist(movable, host) > current_range) if(movable in tracked) release_projectile(movable) -/datum/proximity_monitor/advanced/projectile_dampener/field_edge_crossed(atom/movable/movable, turf/location) - if(isprojectile(movable) && !(movable in tracked)) +/datum/proximity_monitor/advanced/projectile_dampener/field_edge_crossed(atom/movable/movable, turf/location, turf/old_location) + if(isprojectile(movable)) capture_projectile(movable) /datum/proximity_monitor/advanced/projectile_dampener/peaceborg/process(seconds_per_tick) diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index c48759c1deb..a3e22483c7a 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -82,7 +82,7 @@ src.immune = immune src.antimagic_flags = antimagic_flags src.channelled = channelled - recalculate_field() + recalculate_field(full_recalc = TRUE) START_PROCESSING(SSfastprocess, src) /datum/proximity_monitor/advanced/timestop/Destroy() @@ -93,7 +93,7 @@ STOP_PROCESSING(SSfastprocess, src) return ..() -/datum/proximity_monitor/advanced/timestop/field_turf_crossed(atom/movable/movable, turf/location) +/datum/proximity_monitor/advanced/timestop/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) freeze_atom(movable) /datum/proximity_monitor/advanced/timestop/proc/freeze_atom(atom/movable/A) diff --git a/code/datums/proximity_monitor/proximity_monitor.dm b/code/datums/proximity_monitor/proximity_monitor.dm index fc28212202d..ec77ce2145a 100644 --- a/code/datums/proximity_monitor/proximity_monitor.dm +++ b/code/datums/proximity_monitor/proximity_monitor.dm @@ -11,7 +11,7 @@ var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), COMSIG_ATOM_EXITED = PROC_REF(on_uncrossed), - COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_entered), + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_initialized), ) /datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) @@ -78,7 +78,12 @@ SIGNAL_HANDLER return //Used by the advanced subtype for effect fields. -/datum/proximity_monitor/proc/on_entered(atom/source, atom/movable/arrived) +/datum/proximity_monitor/proc/on_entered(atom/source, atom/movable/arrived, turf/old_loc) SIGNAL_HANDLER if(source != host) hasprox_receiver?.HasProximity(arrived) + +/datum/proximity_monitor/proc/on_initialized(turf/location, atom/created, init_flags) + SIGNAL_HANDLER + if(location != host) + hasprox_receiver?.HasProximity(created) diff --git a/code/game/objects/effects/poster_motivational.dm b/code/game/objects/effects/poster_motivational.dm index 12c22a30fbf..bc20c551193 100644 --- a/code/game/objects/effects/poster_motivational.dm +++ b/code/game/objects/effects/poster_motivational.dm @@ -79,7 +79,7 @@ src.department = department RegisterSignal(host, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/proximity_monitor/advanced/quirk_posters/field_turf_crossed(atom/movable/crossed, turf/location) +/datum/proximity_monitor/advanced/quirk_posters/field_turf_crossed(atom/movable/crossed, turf/old_location, turf/new_location) if (!isliving(crossed) || !can_see(crossed, host, current_range)) return on_seen(crossed) diff --git a/code/modules/antagonists/traitor/components/demoraliser.dm b/code/modules/antagonists/traitor/components/demoraliser.dm index 47cdae620f4..ee44527728c 100644 --- a/code/modules/antagonists/traitor/components/demoraliser.dm +++ b/code/modules/antagonists/traitor/components/demoraliser.dm @@ -13,7 +13,7 @@ src.moods = moods RegisterSignal(host, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/proximity_monitor/advanced/demoraliser/field_turf_crossed(atom/movable/crossed, turf/location) +/datum/proximity_monitor/advanced/demoraliser/field_turf_crossed(atom/movable/crossed, turf/old_location, turf/new_location) if (!isliving(crossed)) return if (!can_see(crossed, host, current_range)) diff --git a/code/modules/mob/living/basic/slime/ai/controller.dm b/code/modules/mob/living/basic/slime/ai/controller.dm index 9ecf66ad744..41466b29734 100644 --- a/code/modules/mob/living/basic/slime/ai/controller.dm +++ b/code/modules/mob/living/basic/slime/ai/controller.dm @@ -19,6 +19,7 @@ /datum/ai_planning_subtree/basic_melee_attack_subtree/slime, /datum/ai_planning_subtree/random_speech/slime, ) + can_idle = FALSE /datum/ai_controller/basic_controller/slime/CancelActions() ..() diff --git a/code/modules/transport/elevator/elev_music_zone.dm b/code/modules/transport/elevator/elev_music_zone.dm index 1f09a00a68b..045407fe781 100644 --- a/code/modules/transport/elevator/elev_music_zone.dm +++ b/code/modules/transport/elevator/elev_music_zone.dm @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(elevator_music) QDEL_LIST_ASSOC_VAL(tracked_mobs) return ..() -/datum/proximity_monitor/advanced/elevator_music_area/field_turf_crossed(mob/entered, turf/location) +/datum/proximity_monitor/advanced/elevator_music_area/field_turf_crossed(mob/entered, turf/old_location, turf/new_location) if (!istype(entered) || !entered.mind) return @@ -80,7 +80,7 @@ GLOBAL_LIST_EMPTY(elevator_music) tracked_mobs[entered] = null // Still add it to the list so we don't keep making this check RegisterSignal(entered, COMSIG_QDELETING, PROC_REF(mob_destroyed)) -/datum/proximity_monitor/advanced/elevator_music_area/field_turf_uncrossed(mob/exited, turf/location) +/datum/proximity_monitor/advanced/elevator_music_area/field_turf_uncrossed(mob/exited, turf/old_location, turf/new_location) if (!(exited in tracked_mobs)) return if (exited.z == host.z && get_dist(exited, host) <= current_range) diff --git a/tgstation.dme b/tgstation.dme index dde267fadf8..7fc5bf254bd 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1736,6 +1736,7 @@ #include "code\datums\mutations\webbing.dm" #include "code\datums\proximity_monitor\field.dm" #include "code\datums\proximity_monitor\proximity_monitor.dm" +#include "code\datums\proximity_monitor\fields\ai_target_tracking.dm" #include "code\datums\proximity_monitor\fields\gravity.dm" #include "code\datums\proximity_monitor\fields\projectile_dampener.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" From c39728350538ee63f6ceeb95941f90fa10c2f4ca Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:05:48 +0200 Subject: [PATCH 13/60] Automatic changelog for PR #27470 [ci skip] --- html/changelogs/AutoChangeLog-pr-27470.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27470.yml diff --git a/html/changelogs/AutoChangeLog-pr-27470.yml b/html/changelogs/AutoChangeLog-pr-27470.yml new file mode 100644 index 00000000000..29fc0191a4f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27470.yml @@ -0,0 +1,5 @@ +author: "Majkl-J" +delete-after: True +changes: + - qol: "slimes will stay active without needing any one to watch over" + - code_imp: "The way mobs idle has been refactored, please report any issues with non-reactive mobs" \ No newline at end of file From 4802d30857d5face6ddafda6856de87bb77146f1 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:43:47 +0200 Subject: [PATCH 14/60] [MIRROR] Fix: Makes the rebar crossbow's bowstring loosen after firing (#27467) * Fix: Makes the rebar crossbow's bowstring loosen after firing (#82830) ## About The Pull Request As it stands, after the rebar crossbow fires, it must be used inhand twice, once to loosen the bowstring, and a second time with a do_after to pull it back. Not only does this make no sense as the bowstring is what launches the projectile, but I actually had no idea it was even happening, until I got it pointed out on discord. ## Why It's Good For The Game The main reason is that the crossbow shooting a rod without moving the bowstring just looks weird, but also given the first inhand use doesn't have a delay, it also doesn't really serve any purpose. ## Changelog :cl: fix: The rebar crossbows now properly loosen their bowstring upon firing. /:cl: * Fix: Makes the rebar crossbow's bowstring loosen after firing --------- Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com> --- code/modules/projectiles/guns/ballistic/rifle.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 966dd2caf32..ac988c2541b 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -219,6 +219,10 @@ bolt_locked = FALSE update_appearance() +/obj/item/gun/ballistic/rifle/rebarxbow/shoot_live_shot(mob/living/user) + ..() + rack() + /obj/item/gun/ballistic/rifle/rebarxbow/can_shoot() if (bolt_locked) return FALSE From 9eadc4411c97f204ec9223d9356622ab711724e8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:44:10 +0200 Subject: [PATCH 15/60] Automatic changelog for PR #27467 [ci skip] --- html/changelogs/AutoChangeLog-pr-27467.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27467.yml diff --git a/html/changelogs/AutoChangeLog-pr-27467.yml b/html/changelogs/AutoChangeLog-pr-27467.yml new file mode 100644 index 00000000000..51086863a31 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27467.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "The rebar crossbows now properly loosen their bowstring upon firing." \ No newline at end of file From ed7474654cf4423da1b282a3648318aa6c9bcb3c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:45:06 +0200 Subject: [PATCH 16/60] [MIRROR] Adds an achievement for pushing a boulder up a hill (#27443) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adds an achievement for pushing a boulder up a hill (#82813) ## About The Pull Request Credit to Melbert for this idea. Adds a new achievement awarded for carrying a boulder from Lavaland to the Centcom Rescue Wing (via the Escape Shuttle). If the boulder ever leaves your hands you will not gain the achievement. If the boulder is not outside on Lavaland when you pick it up you will not gain the achievement. If you arrive at the Rescue Ship (via pod) you will not gain the achievement. If you drop the boulder If the shuttle is hijacked and you do not arrive at Centcom you will not gain the achievement (perhaps try hitting the hijacker with the boulder you are not allowed to drop?). If you arrive at Centcom via the Escape Shuttle but fail to exit the shuttle holding the boulder (for instance, because a max cap bomb is detonated next to you one second after the shuttle arrives) you will not gain the achievement. As the achievement is rewarded after the round-end report is generated, you also will not be represented on the round-end report. This is a personal struggle. Also carrying a boulder slows you down. Dragging it already did, so I'm not sure why carrying one did not. It feels like an oversight, and just makes sense. People rarely have any particular need to manually carry them anywhere so this should be fine, right? 🙂 ## Why It's Good For The Game Making players do pointless and weird bullshit is the reason to have an achievement system. It's a social experiment. I think that it is funny. ## Changelog :cl: Jacquerel and Melbert add: A new achievement for moving a boulder from one place to another, at great effort. balance: Hauling a boulder around makes you move slower, as it does when dragging it. /:cl: * Adds an achievement for pushing a boulder up a hill --------- Co-authored-by: Jacquerel --- code/__DEFINES/achievements.dm | 1 + code/datums/achievements/misc_achievements.dm | 5 ++ code/datums/components/sisyphus_awarder.dm | 49 ++++++++++++++++++ .../mining/boulder_processing/boulder.dm | 4 +- icons/ui_icons/achievements/achievements.dmi | Bin 250162 -> 254225 bytes tgstation.dme | 1 + 6 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 code/datums/components/sisyphus_awarder.dm diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 60b9ed03948..e46fef9123e 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -55,6 +55,7 @@ #define MEDAL_GODS_WRATH "God's Wrath" #define MEDAL_EARTHQUAKE_VICTIM "Earthquake Victim" #define MEDAL_DEBT_EXTINGUISHED "Debt Extinguished" +#define MEDAL_SISYPHUS "Sisyphus" #define MEDAL_ARCHMAGE "Archmage" #define MEDAL_THEORETICAL_LIMITS "All Within Theoretical Limits" diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index e92fc3bc56b..1d7b9da3a01 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -227,3 +227,8 @@ database_id = MEDAL_DEBT_EXTINGUISHED icon_state = "outdebted" +/datum/award/achievement/misc/sisyphus + name = "Ordeal of Sisyphus" + desc = "Successfully carry a boulder from Lavaland all the way to Centcom, without ever dropping it. We must imagine you're happy to unlock this." + database_id = MEDAL_SISYPHUS + icon_state = "sisyphus" diff --git a/code/datums/components/sisyphus_awarder.dm b/code/datums/components/sisyphus_awarder.dm new file mode 100644 index 00000000000..36fc344c746 --- /dev/null +++ b/code/datums/components/sisyphus_awarder.dm @@ -0,0 +1,49 @@ +/** + * This component awards the sisyphus achievement if you cart a boulder from lavaland to centcom + * It's not really reusable but its a component just to encapsulate and destroy the behaviour neatly + */ +/datum/component/sisyphus_awarder + /// What poor sap is hauling this rock? + var/mob/living/sisyphus + +/datum/component/sisyphus_awarder/Initialize() + if (!istype(parent, /obj/item/boulder)) + return COMPONENT_INCOMPATIBLE + +/datum/component/sisyphus_awarder/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_POST_EQUIPPED, PROC_REF(on_picked_up)) + +/datum/component/sisyphus_awarder/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_POST_EQUIPPED, COMSIG_MOVABLE_MOVED)) + if (!isnull(sisyphus)) + UnregisterSignal(sisyphus, list(COMSIG_ENTER_AREA, COMSIG_QDELETING)) + sisyphus = null + +/// Called when we're picked up, check if we're in the right place to start our epic journey +/datum/component/sisyphus_awarder/proc/on_picked_up(atom/source, mob/living/the_taker) + SIGNAL_HANDLER + if (!istype(get_area(the_taker), /area/lavaland)) + qdel(src) + return + UnregisterSignal(parent, COMSIG_ITEM_POST_EQUIPPED) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_dropped)) + RegisterSignal(the_taker, COMSIG_ENTER_AREA, PROC_REF(on_bearer_changed_area)) + RegisterSignal(the_taker, COMSIG_QDELETING, PROC_REF(on_dropped)) + sisyphus = the_taker + +/// If you ever drop this shit you fail the challenge +/datum/component/sisyphus_awarder/proc/on_dropped() + SIGNAL_HANDLER + qdel(src) // Your quest ends here + +/// If we changed area see if we arrived +/datum/component/sisyphus_awarder/proc/on_bearer_changed_area(mob/living/chosen_one, area/entered_area) + SIGNAL_HANDLER + var/atom/atom_parent = parent + if (atom_parent.loc != chosen_one) + qdel(src) // Hey! How did you do that? + return + if (entered_area.type != /area/centcom/central_command_areas/evacuation) + return // Don't istype because taking pods doesn't count + chosen_one.client?.give_award(/datum/award/achievement/misc/sisyphus, chosen_one) + qdel(src) diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm index 84916f7ec7b..342afe8abe5 100644 --- a/code/modules/mining/boulder_processing/boulder.dm +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -8,9 +8,10 @@ desc = "This rocks." icon_state = "ore" icon = 'icons/obj/ore.dmi' - item_flags = NO_MAT_REDEMPTION + item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND throw_range = 2 throw_speed = 0.5 + slowdown = 1.5 drag_slowdown = 1.5 // It's still a big rock. ///When a refinery machine is working on this boulder, we'll set this. Re reset when the process is finished, but the boulder may still be refined/operated on further. @@ -26,6 +27,7 @@ . = ..() register_context() AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_unwielded = 0, force_wielded = 5) //Heavy as all hell, it's a boulder, dude. + AddComponent(/datum/component/sisyphus_awarder) /obj/item/boulder/Destroy(force) SSore_generation.available_boulders -= src diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index ff62bd7e374efdc62c1b961ad5a6aa6a0ea48db2..143d0dc0a03aeb619e22f36bc22ad8933913bc0c 100644 GIT binary patch delta 40202 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 delta 36107 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 a#S?<$=kVU*_x;yJfadIgu&3K$ Date: Thu, 25 Apr 2024 17:45:29 +0200 Subject: [PATCH 17/60] Automatic changelog for PR #27443 [ci skip] --- html/changelogs/AutoChangeLog-pr-27443.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27443.yml diff --git a/html/changelogs/AutoChangeLog-pr-27443.yml b/html/changelogs/AutoChangeLog-pr-27443.yml new file mode 100644 index 00000000000..40e254abde1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27443.yml @@ -0,0 +1,5 @@ +author: "Jacquerel and Melbert" +delete-after: True +changes: + - rscadd: "A new achievement for moving a boulder from one place to another, at great effort." + - balance: "Hauling a boulder around makes you move slower, as it does when dragging it." \ No newline at end of file From eb92fee54251c320f36d6f2226f75e25746cd2af Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:58:52 +0200 Subject: [PATCH 18/60] [MIRROR] Fix playing card memory (#27448) * Fix playing card memory (#82834) ## About The Pull Request `/datum/memory/playing_cards` accepts a list of other players, which it uses to format into an english list. But where it is applied, it takes a list of players, formats it into an english list, and passes it in. Oops. Also fixed some verbage for how the memories look in-story-form. ## Changelog :cl: Melbert fix: Playing Cards memory now reads better /:cl: * Fix playing card memory --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/datums/memory/general_memories.dm | 4 ++-- code/modules/cards/deck/deck.dm | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/datums/memory/general_memories.dm b/code/datums/memory/general_memories.dm index c71014b63b4..b8c44c6fca8 100644 --- a/code/datums/memory/general_memories.dm +++ b/code/datums/memory/general_memories.dm @@ -643,7 +643,7 @@ /datum/memory/playing_cards/get_starts() return list( - "[formatted_players_list] are waiting for [protagonist_name] to start the [game]", + "[formatted_players_list] waiting for [protagonist_name] to start the [game]", "The [game] has been setup by [deuteragonist_name]", "[deuteragonist_name] starts shuffling the deck for the [game]", ) @@ -668,7 +668,7 @@ /datum/memory/playing_card_pickup/get_starts() return list( - "[protagonist_name] tosses the [antagonist_name] at [deuteragonist_name] spilling cards all over the floor", + "[protagonist_name] tossing the [antagonist_name] at [deuteragonist_name] spilling cards all over the floor", "A [antagonist_name] thrown by [protagonist_name] splatters across [deuteragonist_name] face", ) diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 6a199bec4d7..47f45eeb5ab 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -116,15 +116,17 @@ if(length(card_players) >= 2) // need at least 2 people to play a cardgame, duh! for(var/mob/living/carbon/player in card_players) - var/other_players = english_list(card_players - player) + var/other_players = card_players - player var/obj/item/toy/held_card_item = card_players[player] player.add_mood_event("playing_cards", /datum/mood_event/playing_cards) - player.add_mob_memory(/datum/memory/playing_cards, \ + player.add_mob_memory( \ + /datum/memory/playing_cards, \ deuteragonist = dealer, \ game = cardgame_desc, \ protagonist_held_card = held_card_item, \ - other_players = other_players) + other_players = other_players, \ + ) /obj/item/toy/cards/deck/attack_hand(mob/living/user, list/modifiers, flip_card = FALSE) if(!ishuman(user) || !user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) From 6c89c35a69d3159cb0b140dbc290948b91570731 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:59:14 +0200 Subject: [PATCH 19/60] Automatic changelog for PR #27448 [ci skip] --- html/changelogs/AutoChangeLog-pr-27448.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27448.yml diff --git a/html/changelogs/AutoChangeLog-pr-27448.yml b/html/changelogs/AutoChangeLog-pr-27448.yml new file mode 100644 index 00000000000..830d4101527 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27448.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - bugfix: "Playing Cards memory now reads better" \ No newline at end of file From a6035832845529648bc1a5225d53ff2316652f42 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 22:45:15 +0200 Subject: [PATCH 20/60] [MIRROR] Removes the stun from longfall modules activating. (#27452) * Removes the stun from longfall modules activating. (#82824) ## About The Pull Request What it says on the tin. When you fall with the longfall module active, you do not get stunned. If you fall from more than one z-level, however, you will be staggered from the fall, with a length based on the number of levels fallen. ## Why It's Good For The Game I noticed that while using these as a felinid that I actually was stunned utilizing them. dropping the equipment I was carrying and being rooted in place for a bit. And I thought to myself 'wait, hang on, by taking this thing out, out I'm actually WAY better off than if I kept them in, what gives?' They just got powercreeped, unfortunately. Freerunner and being a catgirl is stronger than this very niche module, because they're equipment independent and also not a hard stun (I know faceplanting with freerunner is still a bit of a stun, but you can still move and potentially avoid losing equipment by falling while prone). And maybe it functions a lot stronger in situations where those two traits just don't apply (or apply in a very negative fashion in the case of felinids), I don't see why they shouldn't be superior to those traits. You have to have a modsuit, and you need to be on a map that makes use of multi-z. And additionally be in gravity. Typically, I would think equipment benefits should be stronger than innate/roundstart features. Most of the time, it is easier and more beneficial to be in constant flight while using a modsuit than to prepare for longfalling. So let's just make it better overall. I don't know how many people would even use it, but I know I will and I love tossing myself into the void below. ## Changelog :cl: balance: Longfall modules no logner stun you when they activate. balance: Falling from a height greater than one z-level while using the longfall module will still stagger you. /:cl: * Removes the stun from longfall modules activating. --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> --- code/modules/mod/modules/modules_general.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index f80fd952cef..2aec3e361c4 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -506,9 +506,16 @@ if(!drain_power(use_energy_cost * levels)) return NONE new /obj/effect/temp_visual/mook_dust(fell_on) - mod.wearer.Stun(levels * 1 SECONDS) + + /// Boolean that tracks whether we fell more than one z-level. If TRUE, we stagger our wearer. + var/extreme_fall = FALSE + + if(levels >= 2) + extreme_fall = TRUE + mod.wearer.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * levels, 10 SECONDS) + mod.wearer.visible_message( - span_notice("[mod.wearer] lands on [fell_on] safely."), + span_notice("[mod.wearer] lands on [fell_on] safely[extreme_fall ? ", but barely manages to stay on [p_their()] feet." : ", and quite stylishly on [p_their()] feet" ]."), span_notice("[src] protects you from the damage!"), ) return ZIMPACT_CANCEL_DAMAGE|ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN From 04639ca4d783be642f50a69f7077ada78c133075 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 22:45:37 +0200 Subject: [PATCH 21/60] Automatic changelog for PR #27452 [ci skip] --- html/changelogs/AutoChangeLog-pr-27452.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27452.yml diff --git a/html/changelogs/AutoChangeLog-pr-27452.yml b/html/changelogs/AutoChangeLog-pr-27452.yml new file mode 100644 index 00000000000..3d4583acf35 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27452.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - balance: "Longfall modules no logner stun you when they activate." + - balance: "Falling from a height greater than one z-level while using the longfall module will still stagger you." \ No newline at end of file From 702bdc6a549205262789b3953700fa6a2798b90a Mon Sep 17 00:00:00 2001 From: Waterpig <49160555+Majkl-J@users.noreply.github.com> Date: Thu, 25 Apr 2024 22:55:46 +0200 Subject: [PATCH 22/60] [POWER FIX #1] Medicell power fixes, MCR power fixes + MCR define fixes (#27471) * MCR and Medicell * Extra define work * I know this could've been another PR but dear lord * there --- .../modules/cellguns/code/mediguns.dm | 12 ++--- .../microfusion/code/_microfusion_defines.dm | 38 -------------- .../microfusion/code/microfusion_cell.dm | 50 ++++++++++++++++--- .../code/microfusion_energy_master.dm | 2 +- .../modules/microfusion/code/phase_emitter.dm | 20 ++++++++ .../modules/microfusion/code/projectiles.dm | 2 +- .../modules/new_cells/code/power_cell.dm | 4 +- 7 files changed, 73 insertions(+), 55 deletions(-) diff --git a/modular_skyrat/modules/cellguns/code/mediguns.dm b/modular_skyrat/modules/cellguns/code/mediguns.dm index 3a79fce401b..deb6e02b0c4 100644 --- a/modular_skyrat/modules/cellguns/code/mediguns.dm +++ b/modular_skyrat/modules/cellguns/code/mediguns.dm @@ -49,18 +49,18 @@ // Medigun power cells /obj/item/stock_parts/cell/medigun // This is the cell that mediguns from cargo will come with name = "basic medigun cell" - maxcharge = 1200 - chargerate = 40 + maxcharge = STANDARD_CELL_CHARGE + chargerate = STANDARD_CELL_CHARGE * 0.03 /obj/item/stock_parts/cell/medigun/upgraded name = "upgraded medigun cell" - maxcharge = 1500 - chargerate = 80 + maxcharge = STANDARD_CELL_CHARGE * 1.4 + chargerate = STANDARD_CELL_CHARGE * 0.06 /obj/item/stock_parts/cell/medigun/experimental // This cell type is meant to be used in self charging mediguns like CMO and ERT one. name = "experiemental medigun cell" - maxcharge = 1800 - chargerate = 100 + maxcharge = STANDARD_CELL_CHARGE * 2 + chargerate = STANDARD_CELL_CHARGE * 0.1 // End of power cells // Upgrade Kit diff --git a/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm b/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm index b44acde2567..d130ad30829 100644 --- a/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm +++ b/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm @@ -1,41 +1,8 @@ -/// The amount of cell charge drained during a drain failure. -#define MICROFUSION_CELL_DRAIN_FAILURE 500 -/// The heavy EMP range for when a cell suffers an EMP failure. -#define MICROFUSION_CELL_EMP_HEAVY_FAILURE 2 -/// The light EMP range for when a cell suffers an EMP failure. -#define MICROFUSION_CELL_EMP_LIGHT_FAILURE 4 -/// The radiation range for when a cell suffers a radiation failure. -#define MICROFUSION_CELL_RADIATION_RANGE_FAILURE 1 - -/// The lower most time for a microfusion cell meltdown. -#define MICROFUSION_CELL_FAILURE_LOWER (10 SECONDS) -/// The upper most time for a microfusion cell meltdown. -#define MICROFUSION_CELL_FAILURE_UPPER (15 SECONDS) - -/// A charge drain failure. -#define MICROFUSION_CELL_FAILURE_TYPE_CHARGE_DRAIN 1 -/// A small explosion failure. -#define MICROFUSION_CELL_FAILURE_TYPE_EXPLOSION 2 -/// EMP failure. -#define MICROFUSION_CELL_FAILURE_TYPE_EMP 3 -/// Radiation failure. -#define MICROFUSION_CELL_FAILURE_TYPE_RADIATION 4 - /// Returned when the phase emtiter process is successful. #define SHOT_SUCCESS "success" /// Returned when a gun is fired but there is no phase emitter. #define SHOT_FAILURE_NO_EMITTER "no phase emitter!" -/// The error message returned when the phase emitter is processed but damaged. -#define PHASE_FAILURE_DAMAGED "PHASE EMITTER: Emitter damaged!" -/// The error message returned when the phase emitter has reached it's htermal throttle. -#define PHASE_FAILURE_THROTTLE "PHASE EMITTER: Thermal throttle active!" - -/// The heat dissipation bonus of an emitter being in space! -#define PHASE_HEAT_DISSIPATION_BONUS_SPACE 30 -/// The heat dissipation bonus of an emitter being in air! -#define PHASE_HEAT_DISSIPATION_BONUS_AIR 10 - // Slot defines for the gun. /// The gun barrel slot. #define GUN_SLOT_BARREL "barrel" @@ -47,8 +14,3 @@ #define GUN_SLOT_UNIQUE "unique" /// Camo slot. Because why would you put four overlapping camos on your gun? #define GUN_SLOT_CAMO "camo" - -/// Max name size for changing names -#define GUN_MAX_NAME_CHARS 20 -/// Min name size for changing names -#define GUN_MIN_NAME_CHARS 3 diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm index 09d403e3fa5..62a9e78bbb3 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm @@ -6,6 +6,29 @@ Microfusion cells are small battery units that house controlled nuclear fusion w Essentially, power cells that malfunction if not used in an MCR, and should only be able to charge inside of one */ +/// The amount of cell charge drained during a drain failure. +#define MICROFUSION_CELL_DRAIN_FAILURE 500 +/// The heavy EMP range for when a cell suffers an EMP failure. +#define MICROFUSION_CELL_EMP_HEAVY_FAILURE 2 +/// The light EMP range for when a cell suffers an EMP failure. +#define MICROFUSION_CELL_EMP_LIGHT_FAILURE 4 +/// The radiation range for when a cell suffers a radiation failure. +#define MICROFUSION_CELL_RADIATION_RANGE_FAILURE 1 + +/// The lower most time for a microfusion cell meltdown. +#define MICROFUSION_CELL_FAILURE_LOWER (10 SECONDS) +/// The upper most time for a microfusion cell meltdown. +#define MICROFUSION_CELL_FAILURE_UPPER (15 SECONDS) + +/// A charge drain failure. +#define MICROFUSION_CELL_FAILURE_TYPE_CHARGE_DRAIN 1 +/// A small explosion failure. +#define MICROFUSION_CELL_FAILURE_TYPE_EXPLOSION 2 +/// EMP failure. +#define MICROFUSION_CELL_FAILURE_TYPE_EMP 3 +/// Radiation failure. +#define MICROFUSION_CELL_FAILURE_TYPE_RADIATION 4 + /obj/item/stock_parts/cell/microfusion //Just a standard cell. name = "microfusion cell" desc = "A standard-issue microfusion cell, produced by Micron Control Systems. For safety reasons, they cannot be charged unless they are inside of a compatible Micron Control Systems firearm." @@ -13,7 +36,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only charging_icon = "mf_in" //This is stored in cell.dmi in the aesthetics module icon_state = "microfusion" w_class = WEIGHT_CLASS_NORMAL - maxcharge = 1200 //12 shots + maxcharge = STANDARD_CELL_CHARGE chargerate = 0 //MF cells should be unable to recharge if they are not currently inside of an MCR microfusion_readout = TRUE empty = TRUE //MF cells should start empty @@ -153,7 +176,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only update_appearance() /obj/item/stock_parts/cell/microfusion/proc/inserted_into_weapon() - chargerate = 300 + chargerate = STANDARD_CELL_CHARGE * 0.2 /obj/item/stock_parts/cell/microfusion/proc/cell_removal_discharge() chargerate = 0 @@ -176,7 +199,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only name = "makeshift microfusion cell" desc = "An... Apparatus, comprised of an everyday aluminum can with several civilian-grade batteries tightly packed together and plugged in. This vaguely resembles a microfusion cell, if you tilt your head to a precise fifty degree angle. While the effects on enemy combatants may be dubious, it will certainly do incredible damage to the gun's warranty. What the hell were you thinking when you came up with this?" icon_state = "microfusion_makeshift" - maxcharge = 600 + maxcharge = STANDARD_CELL_CHARGE * 0.5 max_attachments = 0 /obj/item/stock_parts/cell/microfusion/makeshift/use(amount, force = FALSE) @@ -188,26 +211,39 @@ Essentially, power cells that malfunction if not used in an MCR, and should only name = "enhanced microfusion cell" desc = "A second generation microfusion cell, weighing about the same as the standard-issue cell and having the same space for attachments; however, it has a higher capacity." icon_state = "microfusion_enhanced" - maxcharge = 1500 + maxcharge = STANDARD_CELL_CHARGE * 1.4 /obj/item/stock_parts/cell/microfusion/advanced name = "advanced microfusion cell" desc = "A third generation microfusion cell, boasting a much higher shot count. Additionally, these come with support for up to three modifications to the cell itself." icon_state = "microfusion_advanced" - maxcharge = 1700 + maxcharge = STANDARD_CELL_CHARGE * 1.5 max_attachments = 3 /obj/item/stock_parts/cell/microfusion/bluespace name = "bluespace microfusion cell" desc = "A fourth generation microfusion cell, employing bluespace technology to store power in a medium that's bigger on the inside. This has capacity for four modifications to the cell." icon_state = "microfusion_bluespace" - maxcharge = 2000 + maxcharge = STANDARD_CELL_CHARGE * 1.6 max_attachments = 4 /obj/item/stock_parts/cell/microfusion/nanocarbon name = "nanocarbon fusion cell" desc = "This cell combines both top-of-the-line nanotech and advanced microfusion power to brute force the most common issue of Nanotrasen Asset Protection operatives, ammunition, through sheer volume. Intended for use with Nanotrasen-brand capacitor arrays only. Warranty void if dropped in toilet." icon_state = "microfusion_nanocarbon" - maxcharge = 30000 + maxcharge = STANDARD_CELL_CHARGE * 60 // Wanted to put 69 here to fit with the 420 but eh this werks too max_attachments = 420 + +#undef MICROFUSION_CELL_DRAIN_FAILURE +#undef MICROFUSION_CELL_EMP_HEAVY_FAILURE +#undef MICROFUSION_CELL_EMP_LIGHT_FAILURE +#undef MICROFUSION_CELL_RADIATION_RANGE_FAILURE + +#undef MICROFUSION_CELL_FAILURE_LOWER +#undef MICROFUSION_CELL_FAILURE_UPPER + +#undef MICROFUSION_CELL_FAILURE_TYPE_CHARGE_DRAIN +#undef MICROFUSION_CELL_FAILURE_TYPE_EXPLOSION +#undef MICROFUSION_CELL_FAILURE_TYPE_EMP +#undef MICROFUSION_CELL_FAILURE_TYPE_RADIATION diff --git a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm index e242cebbc1c..dfa8c97adea 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm @@ -91,7 +91,7 @@ else cell = new(src) cell.parent_gun = src - cell.chargerate = 300 + cell.chargerate = STANDARD_CELL_CHARGE * 0.2 if(!dead_cell) cell.give(cell.maxcharge) if(phase_emitter_type) diff --git a/modular_skyrat/modules/microfusion/code/phase_emitter.dm b/modular_skyrat/modules/microfusion/code/phase_emitter.dm index f213ff4896f..eade9e3407b 100644 --- a/modular_skyrat/modules/microfusion/code/phase_emitter.dm +++ b/modular_skyrat/modules/microfusion/code/phase_emitter.dm @@ -2,6 +2,16 @@ * PHASE EMITTERS */ +/// The error message returned when the phase emitter is processed but damaged. +#define PHASE_FAILURE_DAMAGED "PHASE EMITTER: Emitter damaged!" +/// The error message returned when the phase emitter has reached it's htermal throttle. +#define PHASE_FAILURE_THROTTLE "PHASE EMITTER: Thermal throttle active!" + +/// The heat dissipation bonus of an emitter being in space! +#define PHASE_HEAT_DISSIPATION_BONUS_SPACE 30 +/// The heat dissipation bonus of an emitter being in air! +#define PHASE_HEAT_DISSIPATION_BONUS_AIR 10 + /* * Basically the heart of the gun, can be upgraded. */ @@ -212,3 +222,13 @@ cooling_system_rate = 60 integrity = 500 color = "#6966ff" + + +#undef PHASE_FAILURE_DAMAGED +#undef PHASE_FAILURE_THROTTLE + +#undef PHASE_HEAT_DISSIPATION_BONUS_SPACE +#undef PHASE_HEAT_DISSIPATION_BONUS_AIR + +#undef SHOT_SUCCESS +#undef SHOT_FAILURE_NO_EMITTER diff --git a/modular_skyrat/modules/microfusion/code/projectiles.dm b/modular_skyrat/modules/microfusion/code/projectiles.dm index 53f19941f8d..03849b456a2 100644 --- a/modular_skyrat/modules/microfusion/code/projectiles.dm +++ b/modular_skyrat/modules/microfusion/code/projectiles.dm @@ -5,7 +5,7 @@ /obj/item/ammo_casing/energy/laser/microfusion name = "microfusion energy lens" projectile_type = /obj/projectile/beam/laser/microfusion - e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell. + e_cost = LASER_SHOTS(12, STANDARD_CELL_CHARGE) select_name = "laser" fire_sound = 'modular_skyrat/modules/microfusion/sound/laser_1.ogg' fire_sound_volume = 100 diff --git a/modular_skyrat/modules/new_cells/code/power_cell.dm b/modular_skyrat/modules/new_cells/code/power_cell.dm index d9769c479c1..c5751f7b665 100644 --- a/modular_skyrat/modules/new_cells/code/power_cell.dm +++ b/modular_skyrat/modules/new_cells/code/power_cell.dm @@ -38,10 +38,10 @@ desc = "A special cell that will recharge itself over time." icon = 'modular_skyrat/modules/new_cells/icons/power.dmi' icon_state = "chargecell" - maxcharge = 2500 + maxcharge = STANDARD_CELL_CHARGE * 2.5 charge_light_type = "old" /// how much is recharged every process - var/recharge_amount = 200 + var/recharge_amount = STANDARD_CELL_CHARGE * 0.2 /obj/item/stock_parts/cell/self_charge/Initialize(mapload, override_maxcharge) . = ..() From 4a7000c433245622b65bbcc3b685d18970f35ec3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:06:21 +0200 Subject: [PATCH 23/60] Automatic changelog for PR #27471 [ci skip] --- html/changelogs/AutoChangeLog-pr-27471.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27471.yml diff --git a/html/changelogs/AutoChangeLog-pr-27471.yml b/html/changelogs/AutoChangeLog-pr-27471.yml new file mode 100644 index 00000000000..34fd03bf394 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27471.yml @@ -0,0 +1,6 @@ +author: "Majkl-J" +delete-after: True +changes: + - bugfix: "Medicells now correctly use power" + - bugfix: "MCRs now correctly use power" + - bugfix: "Infinite powercells now have infinite power that's useful and not 2500 Joules" \ No newline at end of file From 8f2f418c7b00bf8556155a48f02762d505e24f5a Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 26 Apr 2024 01:22:02 +0200 Subject: [PATCH 24/60] [MIRROR] Fixes plasma flower modsuit cores having an extremely small amount of power (#27468) * Fixes plasma flower modsuit cores having an extremely small amount of power (#82842) ## About The Pull Request The var was still using the old values. ## Why It's Good For The Game 15 kj instantly depletes your power supply upon taking a step. Oof. ## Changelog :cl: fix: The plasma flower modsuit core now actually contains a reasonable quantity of power. /:cl: * Fixes plasma flower modsuit cores having an extremely small amount of power --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> --- code/modules/mod/mod_core.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 0d71db68aac..e62be77fe55 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -382,8 +382,8 @@ light_power = 1.5 // Slightly better than the normal plasma core. // Not super sure if this should just be the same, but will see. - maxcharge = 15000 - charge = 15000 + maxcharge = 15 * STANDARD_CELL_CHARGE + charge = 15 * STANDARD_CELL_CHARGE /// The mob to be spawned by the core var/mob/living/spawned_mob_type = /mob/living/basic/butterfly/lavaland/temporary /// Max number of mobs it can spawn From 7aa6664021025c971ef2772a4baf49bc8eb75e21 Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Fri, 26 Apr 2024 04:52:24 +0530 Subject: [PATCH 25/60] Mirror (#27453) * Fix Conflicts * Change COGBAR_ANIMATION_TIME to seconds and not deciseconds (#82530) Most people should not be using this define * New Battle Arcade (#81810) Remakes Battle Arcade from just about the ground up, with exceptions taken for emagged stuff since I didn't really want to touch its behavior. The Battle Arcade now has stages that players can go through, unlocking a stage by beating 2 enemies and the boss of the previous one, but this must all be done in a row. You can choose to take a break between each battle and there's a good chance you'll sleep just fine but there's also a chance it can go wrong either through an ambush or robbery. The Inn lets you restore everything for 15 gold and you can buy a sword and armor, each level you unlock is a new sword and armor pair you can buy that's better than the last, it's 30 gold each but scales up as you progress through levels. They are really worth getting so it's best to try to not lose your money early in. The battle system is nearly the same as how it was before but I removed the poor combo system that plagued the old arcade as one big knowledge lock, now it's more just turn based. The game is built on permadeath so dying means you restart from the beginning, but if you are going to lose you can try to escape instead which costs you half of your gold. Getting to higher levels increases the difficulty of enemies but also increases the gaming exp rewards which could make this a better way to get exp if you can get good at it. Gaming EXP is used to increase chances of counterattacking but doesn't give any extra health to the player. I also removed the exploit of being able to screwdriver arcade cabinets because people would do that if they thought they were on the verge of losing to bypass the effects of loss. I instead replaced it with a new interaction that the Curator's display case key can be used to reset arcade cabinets (there's several keys on the chain so it made sense to me), which I added solely because I thought Curators would be the type of person to have run an actual arcade. This is some gameplay https://github.com/tgstation/tgstation/assets/53777086/499083f5-75cc-43b5-b457-017a012beede As a misc sidenote, I also split up the arcade file just like how Orion Trail was before, just for neat code organization. The Inn keeper is straight up just a photo of my localhost dude, he's not a player reference or anything it's not my actual character. I also have no idea how well balanced this is cause I suck at it lol. Battle Arcade is one of 3 last machines in my hackmd here to turn into TGUI https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view I've always thought the current version of battle arcade is quite lame and lacks any progression, like Orion Trail I thought that since I was moving this to TGUI, it would also be a perfect opportunity to revamp it and try to improve on where it failed before, especially since the alternative (NTOS Arcade) is also lame as hell and is even lamer than HTML battle arcade (spam mana, then spam health, then just spam attack, rinse and repeat). This will hopefully be more entertaining and give players sense that they are getting through a series of tasks rather than doing one same one again and again. :cl: JohnFulpWillard, Zeek the Rat add: Battle Arcade has been completely overhauled in a new progression system, this time using TGUI. add: The Curator's keys can now reset arcade cabinets. balance: You now need to be literate to play arcade games, except for Mediborg's Amputation Adventure. fix: You can no longer screwdriver emagged arcade consoles. Accept your fate. fix: Silicons can no longer play Mediborg's Amputation Adventure. /:cl: --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Change setting item weight class to a setter to patch some weight class related shenanigans (#82494) ## About The Pull Request Fixes #81052 Fixes #58008 Setting weight class of items is now done via `update_weight_class`. I updated as many occurrences of manually setting `w_class` as I could find but I may have missed some. Let me know if you know of any I missed. This is done to allow datums to react to an item having its weight class changed. Humans and atom storage are two such datums which now react to having an item in its contents change weight class, to allow it to expel items that grow to a weight class beyond what is normally allowed. ## Changelog :cl: Melbert fix: You can't fit items which are normally too large for a storage by fitting it in the storage when it is small, then growing it to a larger size. /:cl: * Material datum color update, plus touching up some material items (knight armor, tiles) (#82500) ## About The Pull Request Tries to bring the material datum colors in closer approximation to the stacks they're attached too. I literally used the colors on the stacks. some might need to be lighter or darker, but for the most part they'll look...closer to their actual material hues. ![material datum stuff 2](https://github.com/tgstation/tgstation/assets/40847847/a3a5968f-cab3-43dd-8699-3dae879b21fb) I've also tweaked the sprites of both the tile object and the actual material tile turf to give it the right shading. ![image](https://github.com/tgstation/tgstation/assets/40847847/56489479-8774-492b-b8cc-aeabc6c0a67f) In addition to the tiles, I've also updated the knight armor and helmet to look closer to the much higher quality plate armor already in the game. ## Why It's Good For The Game It bothered me that the material datum coloring was inconsistent with the actual colors used for the material stacks. When they were updated, and even before they were updated, material datum stuff just never looked _right_. I wanted to change that so that it looks just right. I did not like the old material knight armor whatsoever. It was a dithered mess, and seemed to already use parts of the standard plate armor but with all the actual shading removed or replaced with the wrong colors. This fixes that so that the armor is actually readable for what it is. ## Changelog :cl: image: Updates the colors of various material datum to bring them closer in-line with their actual material stacks image: Improves the sprites for the material knight armor and helmet. /:cl: * LateInitialize is not allowed to call parent anymore (#82540) ## About The Pull Request I've seen a few cases in the past where LateInitialize is done cause of the init return value being set to do so for no real reason, I thought I should try to avoid that by ensuring LateInitialize isn't ever called without overriding. This fixes a ton of machine's LateInitialize not calling parent (mechpad, door buttons, message monitor, a lot of tram machines, abductor console, holodeck computer & disposal bin), avoiding having to set itself up to be connected to power. If they were intended to not connect to power, they should be using ``NO_POWER_USE`` instead. Also removes a ton of returns to LateInit when it's already getting it from parent regardless (many cases of that in machine code). ## Why It's Good For The Game I think this is better for coding standard reasons as well as just making sure we're not calling this proc on things that does absolutely nothing with them. A machine not using power can be seen evidently not using power with ``NO_POWER_USE``, not so much if it's LateInitialize not calling parent. ## Changelog :cl: fix: Mech pads, door buttons, message monitors, tram machines, abductor consoles & holodeck computers now use power. /:cl: * Fix table top deconstruction (#82508) ## About The Pull Request Edited: updated changelog, read comments for changes in implementation details So previously, tables would let you use a wrench to fully deconstruct them, or a screwdriver to take off only their top. This, however, broke in two different ways in #82280, when their deconstruction logic got changed. First off, deconstructed tables would only drop the materials for their top and not their frame. For this, the primary culprit seems to be on line 307: https://github.com/tgstation/tgstation/blob/c34d56a45b0461f5e0fad3cc75e81580c3357119/code/game/objects/structures/tables_racks.dm#L300-L307 Where `new framestack(target_turf, framestackamount)` accidentally got an extra indent, and ended up in the less common half of the if-else chain. Just moving this outside of the if-else chain again fixes it. Secondly, tables had their own special deconstruction logic, which got 'standardized'. Issue. This was special to accommodate for having two different deconstruction logics: full or top only. With `deconstruct(...)` no longer being overridable, I feel it's awkward to attempt to proxy that information to the new `atom_deconstruct(...)` So we introduce a new method, `deconstruct_top`, for the screwdriver to use, which handles deconstructing only the top. ```dm /obj/structure/table/proc/deconstruct_top() var/obj/table_frame = new frame(loc) if(obj_flags & NO_DECONSTRUCTION) table_frame.obj_flags |= NO_DECONSTRUCTION else // Mimic deconstruction logic, only drop our materials without NO_DECONSTRUCTION var/turf/target_turf = get_turf(src) drop_top_mats(target_turf) qdel(src) ``` Mimicking the `NO_DECONSTRUCTION` logic of normal deconstruction, and copying over the flag onto its frames if need be. This fixes screwdriver deconstruction. ## Why It's Good For The Game Fixes #82503. We can now deconstruct the table top separately again, AND get the right materials back too. ## Changelog :cl: 00-Steven, SyncIt21 fix: Wrench table deconstruction gives the right materials again. fix: Screwdriver table deconstruction only deconstructs the top again. /:cl: * [NO GBP] Reagent grinders display reagents on examination (#82535) ## About The Pull Request - Fixes #82531 Somehow omitted this during the general maintenance thing ## Changelog :cl: fix: Reagent grinders display reagents of its beaker on examination /:cl: * Monkeys now use height offset (and monkey tail works) (#81598) This PR adds the ability for monkeys to wear any jumpsuit in the game, and adds support for them to wear things like coats, gloves, and shoes (though this cannot be obtained in-game and is solely achieved through admins, which I also improved a bit upon by adding a defined bitfield for no equip flags). This reverts a lot of changes from https://github.com/tgstation/tgstation/pull/73325 - We no longer check height from limbs and such to bring sprites down, instead monkeys now work more similarly to humans, so the entire PR was made irrelevant, and I didn't really want to leave around dead code for the sake of having a human with longer legs. I've now also added support for Dwarfism, which makes monkeys look even smaller. Very minor change but at least now the mutation doesn't feel like it does literally nothing to monkeys (since they can already walk over tables). Here's a few examples of how it can appear in game (purely for demonstration, as it is currently intentionally made impossible to obtain in-game, though if someone wants to change that post-this PR now that support is added, feel free): Tails have been broken for a while now, the only reason you see them in-game is because they are baked into the monkey sprites. This fixes that, which means humans can now get monkey tails implanted into them (hell yeah) and monkeys can have their tails removed (also hell yeah) * Gets [weird] with (spies) by adding protect and deuteragonist-flavored objectives. (#82447) ## About The Pull Request What are their goals? Why are they doing this? gets weird with Spy objectives - namely by adding a lot more ways spies might be asked to affect various targets around the station. the first of these is by several flavors of Protecting targets (these do NOT print a success at roundend in keeping with Spy design:) - Protect (get a humanoid target off alive) - Protect Nonhuman (get an entity off alive) - Jailbreak (make sure a humanoid target escapes free) - Detain (make sure a humanoid target gets taken out arrested) the second of this is by a new escape condition: - Exile (get off-station or off the Z-level by the end of the shift - sometimes it's not just pods, you need to fuck off to space to win.) the third is through a massive increase in the number of possible: - objective templates - departments to target (Command + Service added) - specific locations to target - general classes of objects to target (medicines, floor tiles, critical infrastructure, etc.) - efforts to target (such as meals, mechs, public supplies) - ways to leave (you can be asked to abscond from the scene of your crimes?) ## Why It's Good For The Game More goofy and weird prompts to do more interesting things with Spies. One thing I think we're sorely missing in our lineup is antagonists that can act a bit more as deuteragonists - very possibly helping the crew under certain conditions and frustrating the Hell out of them in others. Since there's no way to check their objectives, and they get their gear/progression through stealing shit, they're still very much an antagonist and exist under the suspicion of doing bad... but, just going by their objectives, introducing more varied (and in some cases even benign) goals for them creates suggestions pointing to a lot more varied and interesting stories if people choose to run with it. * Adds anosmia quirk (#82206) ## About The Pull Request Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss of the ability to detect one or more smells. I tried to find all smells action and (most likely) update all of them, unfortunately I can't change descriptions for this quirk. ## Why It's Good For The Game Some characters will be able to not feel smells That affect: * Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them * Bakery and cooking * Changeling ability to feel other changelings by smell * Some unimportant spans * Explosions Part I - Directional Explosions (#82429) ## About The Pull Request Adds the ability for explosions to be directional. This is achieved by adding an angle check to `prepare_explosion_turfs()` to drop any turfs outside the cone of the explosion. If the arc covers a full 360 degrees, as is the default, it will accept all the turfs without performing the angle check. Uses this functionality to rework both rocket launcher backblast and X4 explosions. Rocket launcher backblast has been changed from a shotgun of indendiary bullets to a directional explosion of similar length. X4 now uses a directional explosion to "ensure user safety". Apparently the old method of moving the explosion one tile away didn't even work, as it blew up `target` before trying to check its density for the directional behaviour. https://youtu.be/Mzdt7d7Le2Y ## Why It's Good For The Game Directional explosions - Useful functionality for a range of potential use cases, which can be implemented with minimal extra processing cost (Worst case scenario being very large directional explosions) Backblast - Looks way cooler than a bunch of projectiles, and should be significantly more functional in high-lag situations where projectile code tends to get fucky X4 - More predictable for players wanting to use it as a breaching charge, you can actually stand near the charge and not have to worry about being hoist upon your own petard. ## Changelog :cl: add: Added support for directional explosions. add: Rocket launcher backblast is now 271% more explosive, check your six for friendlies! add: X4 charges now explode in a cone away from the user when placed on a sufficiently solid object. fix: X4 charges will now behave correctly when placed on dense atoms (note: don't try to read a variable from an atom you just blew up) /:cl: * Add balloon alerts to plunging (#82559) ## About The Pull Request Makes all plunging actions (pretty much anything using `plunger_act`) have a visible balloon alert. ## Why It's Good For The Game Makes sense that others would easily notice you plunging the shit out of something. Also, more people might finally learn that you can plunge the vent clogs instead of welding them. ## Changelog :cl: qol: Added balloon alerts whenever you start plunging something (i.e ) /:cl: * Fixes spurious runtime on Icemoon caused by turf calling unimplemented LateInitialize() (#82572) ## About The Pull Request As of https://github.com/tgstation/tgstation/pull/82540 this runtime was happening, ![image](https://github.com/tgstation/tgstation/assets/13398309/4d838fda-c157-4e33-ae64-77eafca1806f) `/turf/open/openspace/icemoon/` can be changed to `/turf/open/misc/asteroid/snow/icemoon/do_not_chasm` before `Initialize()` returns, which resulted in it `INITIALIZE_HINT_LATELOAD` getting returned on a turf that does not have an implementation of that proc. This should fix that. ## Why It's Good For The Game Fixes CI error * Blueprints tgui (#82565) Blueprints now use a TGUI panel instead of the old HTML one. Also did general code improvement and maintaining to blueprints in general and also destroyed the ``areaeditor`` level, repathing it to just 'blueprints'. Also adds a sound when you look at structural data cause why not Video demonstration: https://github.com/tgstation/tgstation/assets/53777086/861773fd-3d57-472d-bc94-d67b0d4f1dbd The 4 blueprint types: ![image](https://github.com/tgstation/tgstation/assets/53777086/bfd68eb5-c430-4608-a3f7-d6ac86727882) Another HTML menu dead underground. This is more responsive and doesn't require constant updating to see which area you're in, feels less OOC (instead of saying "the blueprints say", just say it, you ARE the blueprints). Like, come on ![image](https://github.com/tgstation/tgstation/assets/53777086/fcf1b8b6-37c3-4c94-969f-3b121c983dc0) Look at all this wasted space ![image](https://github.com/tgstation/tgstation/assets/53777086/1d3e61cd-bc56-4280-a3bb-0c66604e75b3) :cl: refactor: Blueprints now use TGUI. qol: Blueprints can now be used while lying down. /:cl: * General maintenance for chem master (#82002) **1. Qol** - Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions - Analyzing reagents is now a client side feature & not a back end mode, meaning one person can see details of a reagent while the other can print stuff and do other operations so it's a non blocking operation. This also means 2 players can see information of 2 different reagents in their own screens, With that the overlay for analysis mode has been removed - You cannot do any tool acts on machines while printing. Balloon alerts will be displayed warning you of that. - The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. It can be enabled/disabled via a CheckBox **2. Code Improvements** - Removed defines like `TARGET_BEAKER` , `TARGET_BEAKER` etc. ther functionality is implemented as params in the `transfer_reagent()` proc directly - Removed all variables relating to analyzing reagents like `reagent_analysis_mode`, `has_container_suggestion` etc. all memory savings - `printable_containers` now stores static values that can be shared across many chem masters - Updates only overlays and not the whole icon during operations for efficiency **3. Fixes** - You can hit the chem master with the screwdriver, wrench, crowbar & beaker when in combat mode - You cannot insert hologram items into the chem master - Deconstructing a condiment master will give you the circuit board already pre-programmed with that option selected so you don't need to use a screwdriver to re program it - `printing_amount` is now the maximum number of containers that can be printed at a time. Presently this number with upgraded parts would print out empty containers especially for patches. This is because `volume_per_item` does not take into consideration this var. Also this var would not give control to the player on exactly how many containers to print as whatever amount the player entered would be multiplied with this value producing a lot of waste & worse empty containers. Now this var determines exactly how many containers you can print and is imposed on the client side UI as well **4. Refactors (UI performance)** - Beaker data is compressed into a single entity & sent to the UI. This is set to null if no beaker is loaded thus saving data sent - Reuses Beaker props from chem synthesizer to reduce code - reagent REF replaced with direct type converted to text and later converted with `text2path()` cause its much faster :cl: qol: Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions qol: Analyzing reagents no longer blocks other players from doing other operations. Multiple players can analyze different reagents on the same machine qol: You cannot do any tool acts on the machine while printing to prevent any side effects. qol: The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. The feature can be enabled/disabled via a check box code: removed defines for reagent transfer, vars for reagent analyzis to save memory. Autodoc for other vars & procs fix: You can hit the chem master with tools like screwdriver, crowbar, wrench & beaker in combat mode fix: You cannot insert hologram items into the chem master fix: Deconstructing a condiment master will give you the circuit board already pre-programmed with that option fix: You now print the exact amount of containers requested even with upgraded parts without creating empty containers. Max printable containers is 13 with tier 4 parts able to print 50 containers. refactor: Optimized client side UI code & chem master as a whole. /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Wraps `lowertext()` to ensure proper stringification. (#82442) Fixes #82440 This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not lost on me) to wrap around all calls of `lowertext()` and ensure that whatever we input into that proc will be stringified using the `"[]"` (or `tostring()` for the nerds) operator. very simple. I also added a linter to enforce this (and prevent all forms of regression) because I think that machines should do the menial work and we shouldn't expect maintainers to remember this, let me know if you disagree. if there is a time when it should be opted out for some reason, the linter does respect it if you wrap your input with the `UNLINT()` function. * Clowns can now make balloon... toys. And also mallets and hats. (#82288) Clowns will now start with a box of 24 random long balloons and a skillchip in their noggin allowing them to create balloon animals by combining two of them of different colour together. Owners of the skillchip also gain access to crafting recepies of balloon mallets, vests, helmets and tophats, all created from long balloons. A crate of long balloons, with a box of balloons inside, can be bought at cargo, in case the clown runs out. I might edit this once I wake up, its 3 in the morning right now. Oh also, resprited how balloons look in inventory. ![image](https://github.com/tgstation/tgstation/assets/122572637/2d7ce955-c787-48a5-bfda-4613d2eed837) Balloon animals funny. Silly features are my favourite kind of features, and this one's open-ended too. Someone on the coder chat recommended someone would do it that one time, here it goes. :cl: add: Added long balloon box to the clown's starting inventory, and a skill-chip of long lost honk-motherian knowledge to their brain. add: Added long balloons. Consequently, added balloon animals to make from such balloons. Also, balloon top hat, vest, helmet, and a mallet. Don't ask about the mallet. add: A long balloons box harvested fresh from the farms on the clown planet will be able to be shipped in a crate to the cargo department near you! add: As per requests; water balloons can now be printed at service lathe, and entertainment modsuit can now blow long balloons! image: Balloons will now have an unique sprite when in the inventory, compared when to on the ground. /:cl: --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: san7890 Co-authored-by: Jacquerel * Quick spellcheck 'steall' (#82560) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82447 quick followup to this, caught it while glancing through the code. * Fix * merge conflicts * Revert "Monkeys now use height offset (and monkey tail works) (#81598)" This reverts commit 5cfdc5972d16c6b509220e8874a927696249d36a. * fix * Fixed lateinitialize * This should cut it * Oh right * There? * Damn, here? * There * [NO GBP] Fixes spurious runtime caused by icemoon (again) (#82582) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82572 I tried to fix this but there was an unaccounted race condition which just caused a separate runtime... ![firefox_GxGibAO281](https://github.com/tgstation/tgstation/assets/13398309/f251aecc-ef17-4bae-a741-5aade40de423) Since the type is being changed mid-execution `replacement_turf` will become out of scope. My bad--this should fix it now for good. --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Higgin Co-authored-by: NeonNik2245 <106491639+NeonNik2245@users.noreply.github.com> Co-authored-by: Thunder12345 Co-authored-by: Lucy Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: san7890 Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com> Co-authored-by: Jacquerel Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> --- .../RandomRuins/AnywhereRuins/golem_ship.dmm | 2 +- .../SpaceRuins/skyrat/port_tarkon.dmm | 4 +- code/__DEFINES/_flags.dm | 2 +- code/__DEFINES/arcades.dm | 15 + code/__DEFINES/area_editor.dm | 5 - .../signals/signals_atom/signals_atom_main.dm | 7 +- code/__DEFINES/dcs/signals/signals_object.dm | 5 + code/__DEFINES/explosions.dm | 6 + code/__DEFINES/inventory.dm | 3 + code/__DEFINES/text.dm | 4 + code/__DEFINES/traits/declarations.dm | 3 + code/__HELPERS/areas.dm | 48 ++ code/__HELPERS/atmospherics.dm | 4 +- code/__HELPERS/chat_filter.dm | 2 +- code/__HELPERS/hearted.dm | 2 +- code/__HELPERS/icons.dm | 2 +- code/__HELPERS/names.dm | 14 +- code/__HELPERS/reagents.dm | 4 +- code/__HELPERS/sanitize_values.dm | 2 +- code/__HELPERS/text.dm | 4 +- code/__HELPERS/turfs.dm | 17 + code/__HELPERS/type2type.dm | 2 +- code/_globalvars/arcade.dm | 73 ++ code/_globalvars/traits/_traits.dm | 2 + code/_globalvars/traits/admin_tooling.dm | 1 + .../controllers/configuration/config_entry.dm | 8 +- .../configuration/configuration.dm | 14 +- .../configuration/entries/resources.dm | 2 +- code/controllers/subsystem/explosions.dm | 73 +- code/controllers/subsystem/ticker.dm | 8 +- code/controllers/subsystem/title.dm | 2 +- code/datums/brain_damage/hypnosis.dm | 2 +- code/datums/brain_damage/mild.dm | 2 +- code/datums/cogbar.dm | 2 +- code/datums/components/bakeable.dm | 17 +- .../components/crafting/melee_weapon.dm | 15 + code/datums/components/crafting/tailoring.dm | 39 + code/datums/components/cult_ritual_item.dm | 6 +- .../components/customizable_reagent_holder.dm | 2 +- code/datums/components/deadchat_control.dm | 4 +- code/datums/components/food/edible.dm | 2 +- .../components/material/material_container.dm | 2 +- code/datums/components/surgery_initiator.dm | 2 +- code/datums/components/transforming.dm | 4 +- code/datums/components/uplink.dm | 8 +- code/datums/diseases/advance/symptoms/fire.dm | 5 +- code/datums/elements/backblast.dm | 79 +- code/datums/elements/decals/blood.dm | 7 +- code/datums/greyscale/json_reader.dm | 2 +- code/datums/materials/basemats.dm | 78 +- code/datums/memory/_memory.dm | 2 +- .../mood_events/generic_negative_events.dm | 5 + code/datums/mutations/olfaction.dm | 4 + code/datums/quirks/negative_quirks/anosmia.dm | 9 + .../datums/quirks/negative_quirks/insanity.dm | 4 +- code/datums/station_traits/negative_traits.dm | 2 +- .../status_effects/debuffs/speech_debuffs.dm | 2 +- code/datums/storage/storage.dm | 14 +- code/datums/storage/subtypes/fish_case.dm | 18 +- code/datums/voice_of_god_command.dm | 4 +- code/datums/wires/_wires.dm | 2 +- code/datums/wounds/bones.dm | 2 +- code/datums/wounds/pierce.dm | 2 +- code/game/atom/atom_color.dm | 8 +- code/game/atom/atom_examine.dm | 17 +- .../game/atom/atoms_initializing_EXPENSIVE.dm | 2 + code/game/gamemodes/objective.dm | 12 +- code/game/gamemodes/objective_items.dm | 8 +- code/game/machinery/_machinery.dm | 24 +- code/game/machinery/barsigns.dm | 5 +- code/game/machinery/camera/camera.dm | 2 +- .../machinery/camera/camera_construction.dm | 2 +- code/game/machinery/camera/presets.dm | 4 +- code/game/machinery/civilian_bounties.dm | 2 +- .../game/machinery/computer/arcade/_arcade.dm | 104 +++ .../machinery/computer/arcade/amputation.dm | 47 ++ code/game/machinery/computer/arcade/arcade.dm | 701 ----------------- code/game/machinery/computer/arcade/battle.dm | 555 +++++++++++++ .../machinery/computer/arcade/battle_gear.dm | 113 +++ code/game/machinery/computer/arcade/orion.dm | 97 +-- code/game/machinery/computer/camera.dm | 2 +- .../machinery/computer/camera_advanced.dm | 2 +- code/game/machinery/computer/dna_console.dm | 2 +- code/game/machinery/computer/mechlaunchpad.dm | 3 +- .../machinery/computer/operating_computer.dm | 2 +- .../dna_infuser/organ_sets/rat_organs.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/firedoor.dm | 2 +- .../embedded_controller/access_controller.dm | 3 +- .../embedded_controller/airlock_controller.dm | 2 +- code/game/machinery/incident_display.dm | 2 +- code/game/machinery/medipen_refiller.dm | 4 +- .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/machinery/recycler.dm | 2 +- .../machinery/telecomms/computers/message.dm | 8 +- .../machinery/telecomms/telecomunications.dm | 5 +- code/game/objects/effects/landmarks.dm | 2 - code/game/objects/items.dm | 23 +- code/game/objects/items/blueprints.dm | 409 +++++----- code/game/objects/items/crayons.dm | 2 +- .../items/devices/radio/encryptionkey.dm | 2 +- .../objects/items/devices/radio/headset.dm | 4 +- .../items/devices/scanners/gas_analyzer.dm | 4 +- code/game/objects/items/dualsaber.dm | 4 +- .../items/granters/magic/_spell_granter.dm | 2 +- code/game/objects/items/grenades/plastic.dm | 16 +- code/game/objects/items/mail.dm | 2 +- code/game/objects/items/puzzle_pieces.dm | 2 +- code/game/objects/items/stacks/stack.dm | 6 +- code/game/objects/items/stacks/wrap.dm | 2 +- .../items/storage/boxes/service_boxes.dm | 16 + code/game/objects/items/tanks/tanks.dm | 4 +- code/game/objects/items/tools/spess_knife.dm | 4 +- code/game/objects/items/toys.dm | 174 ++++- code/game/objects/items/weaponry.dm | 42 + code/game/objects/structures/bonfire.dm | 1 - .../objects/structures/broken_flooring.dm | 1 - .../structures/crates_lockers/closets.dm | 1 - .../crates_lockers/closets/bodybag.dm | 2 +- .../closets/secure/engineering.dm | 2 +- .../structures/crates_lockers/crates.dm | 28 +- code/game/objects/structures/displaycase.dm | 4 +- code/game/objects/structures/morgue.dm | 2 - .../structures/plaques/static_plaques.dm | 3 +- code/game/objects/structures/tables_racks.dm | 7 +- code/game/objects/structures/window.dm | 2 +- code/game/turfs/open/floor/glass.dm | 1 - code/game/turfs/open/openspace.dm | 5 +- code/game/turfs/open/space/space.dm | 1 - code/modules/admin/greyscale_modify_menu.dm | 4 +- code/modules/admin/sql_ban_system.dm | 2 +- code/modules/admin/sql_message_system.dm | 14 - code/modules/admin/verbs/SDQL2/SDQL_2.dm | 2 +- .../admin/verbs/SDQL2/SDQL_2_parser.dm | 4 +- .../admin/verbs/SDQL2/SDQL_2_wrappers.dm | 4 +- code/modules/admin/verbs/admingame.dm | 2 +- code/modules/admin/verbs/adminhelp.dm | 4 +- code/modules/admin/verbs/adminpm.dm | 2 +- .../admin/verbs/player_ticket_history.dm | 2 +- code/modules/admin/verbs/server.dm | 24 +- .../antagonists/abductor/machinery/console.dm | 7 +- .../changeling/powers/pheromone_receptors.dm | 3 + .../antagonists/disease/disease_datum.dm | 2 +- .../heretic/items/forbidden_book.dm | 4 +- code/modules/antagonists/malf_ai/malf_ai.dm | 2 +- .../pirate/pirate_shuttle_equipment.dm | 2 +- code/modules/antagonists/spy/spy.dm | 30 +- .../antagonists/traitor/datum_traitor.dm | 2 +- .../traitor/objectives/sabotage_machinery.dm | 2 +- code/modules/art/paintings.dm | 4 +- code/modules/asset_cache/assets/arcade.dm | 2 + .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../machinery/bluespace_vendor.dm | 2 +- .../atmospherics/machinery/components/tank.dm | 2 +- code/modules/awaymissions/zlevel.dm | 4 +- code/modules/bitrunning/objects/byteforge.dm | 2 +- code/modules/bitrunning/objects/netpod.dm | 7 +- .../bitrunning/objects/quantum_console.dm | 5 +- code/modules/bitrunning/server/_parent.dm | 7 +- code/modules/capture_the_flag/ctf_game.dm | 1 - .../medieval_sim/medisim_game.dm | 3 +- code/modules/cargo/bounties/assistant.dm | 2 +- code/modules/cargo/packs/costumes_toys.dm | 12 + code/modules/client/client_procs.dm | 2 +- code/modules/client/preferences/glasses.dm | 2 +- .../client/preferences/middleware/antags.dm | 2 +- code/modules/clothing/gloves/_gloves.dm | 2 + code/modules/clothing/head/helmet.dm | 25 +- code/modules/clothing/head/tophat.dm | 9 + code/modules/clothing/outfits/ert.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 2 + code/modules/clothing/suits/armor.dm | 46 +- code/modules/detectivework/evidence.dm | 6 +- code/modules/emoji/emoji_parse.dm | 6 +- code/modules/events/vent_clog.dm | 4 +- code/modules/experisci/destructive_scanner.dm | 6 +- code/modules/experisci/handheld_scanner.dm | 1 - code/modules/explorer_drone/scanner_array.dm | 6 +- code/modules/fishing/aquarium/aquarium.dm | 4 +- code/modules/fishing/fish/_fish.dm | 10 +- .../food_and_drinks/machinery/deep_fryer.dm | 6 +- .../modules/food_and_drinks/machinery/oven.dm | 6 +- code/modules/food_and_drinks/plate.dm | 8 +- code/modules/hallucination/fake_message.dm | 2 +- .../modules/hallucination/inhand_fake_item.dm | 2 +- code/modules/holodeck/computer.dm | 7 +- code/modules/hydroponics/seeds.dm | 4 +- code/modules/instruments/songs/play_legacy.dm | 2 +- .../instruments/songs/play_synthesized.dm | 2 +- .../jobs/job_types/chaplain/chaplain.dm | 2 +- code/modules/jobs/job_types/clown.dm | 2 + code/modules/jobs/jobs.dm | 2 +- code/modules/language/language.dm | 2 +- .../skill_learning/job_skillchips/clown.dm | 10 + .../mapfluff/ruins/objects_and_mobs/museum.dm | 1 - code/modules/mapping/mail_sorting_helpers.dm | 4 - code/modules/mapping/mapping_helpers.dm | 22 +- .../boulder_processing/_boulder_processing.dm | 2 +- code/modules/mining/boulder_processing/brm.dm | 2 +- .../modules/mining/equipment/explorer_gear.dm | 3 +- .../mining/equipment/marker_beacons.dm | 4 +- code/modules/mining/equipment/mining_tools.dm | 6 +- .../modules/mining/lavaland/megafauna_loot.dm | 5 +- .../modules/mob/dead/observer/observer_say.dm | 2 +- code/modules/mob/emote.dm | 2 +- .../mob/living/basic/bots/medbot/medbot.dm | 1 - .../mob/living/basic/trooper/syndicate.dm | 7 + .../mob/living/carbon/human/_species.dm | 2 +- .../mob/living/carbon/human/examine.dm | 2 +- .../mob/living/carbon/human/init_signals.dm | 18 + code/modules/mob/living/carbon/life.dm | 14 +- code/modules/mob/living/emote.dm | 6 +- code/modules/mob/living/inhand_holder.dm | 2 +- .../mob/living/silicon/ai/_preferences.dm | 2 +- code/modules/mob/living/silicon/ai/ai_say.dm | 4 +- .../mob/living/silicon/robot/robot_model.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_say.dm | 8 +- code/modules/mod/mod_theme.dm | 1 + code/modules/mod/mod_types.dm | 1 + code/modules/mod/modules/modules_antag.dm | 4 +- code/modules/mod/modules/modules_service.dm | 25 + .../computers/item/laptop.dm | 4 +- .../computers/machinery/console_presets.dm | 6 +- .../file_system/programs/atmosscan.dm | 2 +- .../file_system/programs/secureye.dm | 2 +- code/modules/paperwork/photocopier.dm | 2 +- code/modules/photography/camera/camera.dm | 2 +- .../plumbing/plumbers/_plumb_machinery.dm | 4 +- code/modules/plumbing/plumbers/iv_drip.dm | 4 +- code/modules/power/lighting/light.dm | 3 +- code/modules/power/power.dm | 4 +- code/modules/power/singularity/singularity.dm | 13 + code/modules/power/terminal.dm | 4 +- code/modules/power/turbine/turbine.dm | 2 +- .../modules/power/turbine/turbine_computer.dm | 6 +- code/modules/projectiles/guns/ballistic.dm | 6 +- .../chemistry/machinery/chem_master.dm | 730 ++++++++++-------- .../chemistry/machinery/reagentgrinder.dm | 7 +- .../reagents/drinks/alcohol_reagents.dm | 2 +- .../chemistry/reagents/food_reagents.dm | 23 +- .../chemistry/reagents/other_reagents.dm | 8 +- .../chemistry/recipes/slime_extracts.dm | 2 +- .../reagents/reagent_containers/cups/_cup.dm | 2 +- .../reagent_containers/cups/glassbottle.dm | 3 +- code/modules/recycling/conveyor.dm | 44 +- code/modules/recycling/disposal/bin.dm | 4 +- code/modules/recycling/disposal/holder.dm | 2 +- code/modules/research/designs/misc_designs.dm | 11 + code/modules/research/rdconsole.dm | 2 +- code/modules/research/rdmachines.dm | 2 +- code/modules/research/server_control.dm | 2 +- .../research/xenobiology/xenobio_camera.dm | 2 +- .../research/xenobiology/xenobiology.dm | 14 - code/modules/surgery/bodyparts/_bodyparts.dm | 8 +- .../surgery/organs/internal/eyes/_eyes.dm | 2 +- .../surgery/organs/internal/lungs/_lungs.dm | 20 +- .../surgery/organs/internal/tongue/_tongue.dm | 2 +- code/modules/tooltip/tooltip.dm | 2 +- .../transport/elevator/elev_indicator.dm | 6 +- code/modules/transport/elevator/elev_panel.dm | 8 +- .../modules/transport/tram/tram_controller.dm | 3 +- code/modules/transport/tram/tram_controls.dm | 2 +- code/modules/transport/tram/tram_displays.dm | 3 +- code/modules/transport/tram/tram_doors.dm | 2 +- code/modules/transport/tram/tram_machinery.dm | 3 +- code/modules/transport/tram/tram_power.dm | 6 +- code/modules/transport/tram/tram_signals.dm | 6 +- .../modules/transport/tram/tram_structures.dm | 1 - code/modules/transport/transport_module.dm | 1 - code/modules/unit_tests/_unit_tests.dm | 1 + ...humanoids__datum_species_human_tallboy.png | Bin 457 -> 473 bytes code/modules/unit_tests/storage.dm | 22 + .../modules/vehicles/mecha/mech_fabricator.dm | 2 +- .../components/action/equpiment_action.dm | 2 +- .../wiremod/components/string/textcase.dm | 2 +- code/modules/wiremod/core/component.dm | 2 +- .../modules/wiremod/core/component_printer.dm | 2 +- code/modules/wiremod/shell/module.dm | 2 +- icons/hud/radial.dmi | Bin 33364 -> 33604 bytes icons/mob/clothing/head/hats.dmi | Bin 15466 -> 16609 bytes icons/mob/clothing/head/helmet.dmi | Bin 38349 -> 43611 bytes icons/mob/clothing/suits/armor.dmi | Bin 95948 -> 101933 bytes icons/mob/inhands/clothing/hats_lefthand.dmi | Bin 23456 -> 23412 bytes icons/mob/inhands/clothing/hats_righthand.dmi | Bin 23365 -> 23924 bytes icons/mob/inhands/clothing/suits_lefthand.dmi | Bin 46960 -> 48157 bytes .../mob/inhands/clothing/suits_righthand.dmi | Bin 47677 -> 48819 bytes icons/mob/inhands/items/balloons_lefthand.dmi | Bin 3103 -> 6608 bytes .../mob/inhands/items/balloons_righthand.dmi | Bin 3211 -> 6727 bytes .../mob/inhands/weapons/hammers_lefthand.dmi | Bin 5995 -> 6255 bytes .../mob/inhands/weapons/hammers_righthand.dmi | Bin 5914 -> 6162 bytes icons/obj/clothing/head/hats.dmi | Bin 12153 -> 6173 bytes icons/obj/clothing/head/helmet.dmi | Bin 19135 -> 20861 bytes icons/obj/clothing/suits/armor.dmi | Bin 32312 -> 34336 bytes icons/obj/machines/computer.dmi | Bin 137136 -> 137285 bytes icons/obj/medical/chemical.dmi | Bin 71028 -> 70968 bytes icons/obj/storage/box.dmi | Bin 13056 -> 13169 bytes icons/obj/tiles.dmi | Bin 33456 -> 33359 bytes icons/obj/toys/balloons.dmi | Bin 1523 -> 14124 bytes icons/obj/toys/toy.dmi | Bin 51848 -> 51346 bytes icons/obj/weapons/hammer.dmi | Bin 9995 -> 12264 bytes icons/turf/composite.dmi | Bin 3168 -> 3333 bytes icons/turf/floors.dmi | Bin 366328 -> 372760 bytes icons/ui_icons/arcade/fireplace.png | Bin 0 -> 600 bytes icons/ui_icons/arcade/shopkeeper.png | Bin 0 -> 1229 bytes .../advanced_shuttles/code/shuttles.dm | 1 - .../lightswitch/code/lightswitch.dm | 2 +- .../status_display/code/status_display.dm | 4 +- .../modules/aesthetics/storage/storage.dmi | Bin 11537 -> 11607 bytes .../modules/cryosleep/code/cryopod.dm | 3 +- .../mob/living/carbon/human/species.dm | 4 +- .../delam_emergency_stop/code/scram.dm | 4 +- .../modules/tarkon/code/misc-fluff/fluff.dm | 2 +- .../modules/time_clock/code/console_tgui.dm | 2 +- .../modules/turretid/code/turret_id_system.dm | 2 +- sound/attributions.txt | 3 + sound/items/paper_flip.ogg | Bin 0 -> 15804 bytes strings/antagonist_flavor/spy_objective.json | 131 +++- strings/arcade.json | 118 --- tgstation.dme | 10 +- .../packages/tgui/interfaces/BattleArcade.tsx | 243 ++++++ tgui/packages/tgui/interfaces/Blueprints.tsx | 186 +++++ tgui/packages/tgui/interfaces/ChemMaster.tsx | 317 ++++---- .../tgui/interfaces/common/BeakerDisplay.tsx | 2 +- .../Scripts/74147_tech_disk_repath.txt | 2 +- .../Scripts/82565_blueprints_repath.txt | 1 + tools/ci/check_grep.sh | 10 + 327 files changed, 3579 insertions(+), 2237 deletions(-) create mode 100644 code/__DEFINES/arcades.dm delete mode 100644 code/__DEFINES/area_editor.dm create mode 100644 code/_globalvars/arcade.dm create mode 100644 code/datums/quirks/negative_quirks/anosmia.dm create mode 100644 code/game/machinery/computer/arcade/_arcade.dm create mode 100644 code/game/machinery/computer/arcade/amputation.dm delete mode 100644 code/game/machinery/computer/arcade/arcade.dm create mode 100644 code/game/machinery/computer/arcade/battle.dm create mode 100644 code/game/machinery/computer/arcade/battle_gear.dm create mode 100644 code/modules/library/skill_learning/job_skillchips/clown.dm create mode 100644 code/modules/unit_tests/storage.dm create mode 100644 icons/ui_icons/arcade/fireplace.png create mode 100644 icons/ui_icons/arcade/shopkeeper.png create mode 100644 sound/items/paper_flip.ogg create mode 100644 tgui/packages/tgui/interfaces/BattleArcade.tsx create mode 100644 tgui/packages/tgui/interfaces/Blueprints.tsx create mode 100644 tools/UpdatePaths/Scripts/82565_blueprints_repath.txt diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index 61311b3f036..cddd5a08206 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -337,7 +337,7 @@ /area/ruin/powered/golem_ship) "un" = ( /obj/structure/table/wood, -/obj/item/areaeditor/blueprints/golem{ +/obj/item/blueprints/golem{ pixel_y = 3; pixel_x = -2 }, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm index af475c05f23..5373695f714 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon.dmm @@ -5070,7 +5070,7 @@ /area/ruin/space/has_grav/port_tarkon/mining) "Jg" = ( /obj/structure/safe/floor, -/obj/item/areaeditor/blueprints/tarkon, +/obj/item/blueprints/tarkon, /obj/item/circuitboard/machine/bluespace_miner, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/power1) @@ -7313,7 +7313,7 @@ /obj/effect/turf_decal/tile/purple/half{ dir = 1 }, -/obj/item/areaeditor/blueprints/slime, +/obj/item/blueprints/slime, /obj/item/slime_extract/grey, /obj/item/slime_extract/grey, /obj/item/slime_extract/grey, diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 8597092fbf6..5969f81bccb 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define UNIQUE_AREA (1<<8) /// If people are allowed to suicide in it. Mostly for OOC stuff like minigames #define BLOCK_SUICIDE (1<<9) -/// Can the Xenobio management console transverse this area by default? +/// If set, this area will be innately traversable by Xenobiology camera consoles. #define XENOBIOLOGY_COMPATIBLE (1<<10) /// If Abductors are unable to teleport in with their observation console #define ABDUCTOR_PROOF (1<<11) diff --git a/code/__DEFINES/arcades.dm b/code/__DEFINES/arcades.dm new file mode 100644 index 00000000000..fac3e8091d3 --- /dev/null +++ b/code/__DEFINES/arcades.dm @@ -0,0 +1,15 @@ +///Goes in the Weapon slot. +#define WEAPON_SLOT "Weapon" +///Goes in the Armor slot. +#define ARMOR_SLOT "Armor" + +//Worlds found in Battle Arcade +#define BATTLE_WORLD_ONE "The Plains" +#define BATTLE_WORLD_TWO "The Forest" +#define BATTLE_WORLD_THREE "The Mountains" +#define BATTLE_WORLD_FOUR "The Desert" +#define BATTLE_WORLD_FIVE "The Swamp" +#define BATTLE_WORLD_SIX "The Ocean" +#define BATTLE_WORLD_SEVEN "The Sky" +#define BATTLE_WORLD_EIGHT "The Moon" +#define BATTLE_WORLD_NINE "The Void" diff --git a/code/__DEFINES/area_editor.dm b/code/__DEFINES/area_editor.dm deleted file mode 100644 index f0ef57c7e52..00000000000 --- a/code/__DEFINES/area_editor.dm +++ /dev/null @@ -1,5 +0,0 @@ -// Used to edit areas. -#define AREA_ERRNONE 0 -#define AREA_STATION 1 -#define AREA_SPACE 2 -#define AREA_SPECIAL 3 diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 24524395f35..f4dcd496641 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -12,10 +12,9 @@ ///from base of atom/get_examine_name(): (/mob, list/overrides) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //Positions for overrides list - #define EXAMINE_POSITION_ARTICLE (1<<0) - #define EXAMINE_POSITION_BEFORE (1<<1) - //End positions - #define COMPONENT_EXNAME_CHANGED (1<<0) + #define EXAMINE_POSITION_ARTICLE 1 + #define EXAMINE_POSITION_BEFORE 2 + #define EXAMINE_POSITION_NAME 3 ///from base of atom/examine(): (/mob, list/examine_text, can_see_inside) #define COMSIG_ATOM_REAGENT_EXAMINE "atom_reagent_examine" /// Stop the generic reagent examine text diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 01145cd32ea..d926cc6d5df 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -529,3 +529,8 @@ /// from /datum/component/dart_insert/on_reskin() #define COMSIG_DART_INSERT_PARENT_RESKINNED "dart_insert_parent_reskinned" + +/// Sent from /obj/item/update_weight_class(). (old_w_class, new_w_class) +#define COMSIG_ITEM_WEIGHT_CLASS_CHANGED "item_weight_class_changed" +/// Sent from /obj/item/update_weight_class(), to it's loc. (obj/item/changed_item, old_w_class, new_w_class) +#define COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED "atom_contents_weight_class_changed" diff --git a/code/__DEFINES/explosions.dm b/code/__DEFINES/explosions.dm index a1645b659d1..dd9a74bbae3 100644 --- a/code/__DEFINES/explosions.dm +++ b/code/__DEFINES/explosions.dm @@ -52,6 +52,12 @@ #define EXARG_KEY_SILENT STRINGIFY(silent) /// Whether or not the explosion should produce smoke if it is large enough to warrant it. #define EXARG_KEY_SMOKE STRINGIFY(smoke) +/// Whether or not to leave the epicenter turf unaffected +#define EXARG_KEY_PROTECT_EPICENTER STRINGIFY(protect_epicenter) +/// For directional explosions, the angle the explosion is pointing at. +#define EXARG_KEY_EXPLOSION_DIRECTION STRINGIFY(explosion_direction) +/// For directional explosions, the angle covered by the explosion, centred on EXPLOSION_DIRECTION. +#define EXARG_KEY_EXPLOSION_ARC STRINGIFY(explosion_arc) // Explodable component deletion values /// Makes the explodable component queue to reset its exploding status when it detonates. diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index efcc3a4fbd8..6f1c9512b39 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -14,6 +14,9 @@ /// Essentially means it cannot be picked up or placed in an inventory, (e.g. mech parts, safe) #define WEIGHT_CLASS_GIGANTIC 6 +/// Weight class that can fit in pockets +#define POCKET_WEIGHT_CLASS WEIGHT_CLASS_SMALL + //Inventory depth: limits how many nested storage items you can access directly. //1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc #define INVENTORY_DEPTH 3 diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 5dac5df883d..7761587170e 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -64,6 +64,10 @@ */ #define PREVENT_CHARACTER_TRIM_LOSS(integer) (integer + 1) +/// BYOND's string procs don't support being used on datum references (as in it doesn't look for a name for stringification) +/// We just use this macro to ensure that we will only pass strings to this BYOND-level function without developers needing to really worry about it. +#define LOWER_TEXT(thing) lowertext(UNLINT("[thing]")) + /// Folder directory for strings #define STRING_DIRECTORY "strings" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 054816f3d0f..f5ad67a8c94 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -587,6 +587,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BRAINWASHING "brainwashing" /// Allows chef's to chefs kiss their food, to make them with love #define TRAIT_CHEF_KISS "chefs_kiss" +/// Allows clowns to bend balloons into animals +#define TRAIT_BALLOON_SUTRA "balloon_sutra" ///Movement type traits for movables. See elements/movetype_handler.dm #define TRAIT_MOVE_GROUND "move_ground" @@ -733,6 +735,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" +#define TRAIT_ANOSMIA "anosmia" #define TRAIT_HEAVY_DRINKER "heavy_drinker" #define TRAIT_AGEUSIA "ageusia" #define TRAIT_HEAVY_SLEEPER "heavy_sleeper" diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 8df182c90d0..dc2f66c2ed0 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -293,3 +293,51 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(list( mobs_in_area += mob break return mobs_in_area + +/** + * rename_area + * Renames an area to the given new name, updating all machines' names and firedoors + * to properly ensure alarms and machines are named correctly at all times. + * Args: + * - area_to_rename: The area that's being renamed. + * - new_name: The name we're changing said area to. + */ +/proc/rename_area(area/area_to_rename, new_name) + var/prevname = "[area_to_rename.name]" + set_area_machinery_title(area_to_rename, new_name, prevname) + area_to_rename.name = new_name + require_area_resort() //area renamed so resort the names + + if(LAZYLEN(area_to_rename.firedoors)) + for(var/obj/machinery/door/firedoor/area_firedoors as anything in area_to_rename.firedoors) + area_firedoors.CalculateAffectingAreas() + area_to_rename.update_areasize() + return TRUE + +/** + * Renames all machines in a defined area from the old title to the new title. + * Used when renaming an area to ensure that all machiens are labeled the new area's machine. + * Args: + * - area_renaming: The area being renamed, which we'll check turfs from to rename machines in. + * - title: The new name of the area that we're swapping into. + * - oldtitle: The old name of the area that we're replacing text from. + */ +/proc/set_area_machinery_title(area/area_renaming, title, oldtitle) + if(!oldtitle) // or replacetext goes to infinite loop + return + + //stuff tied to the area to rename + var/static/list/to_rename = typecacheof(list( + /obj/machinery/airalarm, + /obj/machinery/atmospherics/components/unary/vent_scrubber, + /obj/machinery/atmospherics/components/unary/vent_pump, + /obj/machinery/door, + /obj/machinery/firealarm, + /obj/machinery/light_switch, + /obj/machinery/power/apc, + /obj/machinery/camera, + )) + for(var/list/zlevel_turfs as anything in area_renaming.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machine as anything in typecache_filter_list(area_turf.contents, to_rename)) + machine.name = replacetext(machine.name, oldtitle, title) diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm index 3ac3bfaed56..2a59cf60b40 100644 --- a/code/__HELPERS/atmospherics.dm +++ b/code/__HELPERS/atmospherics.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(gas_handbook) factor_info["factor_name"] = factor factor_info["factor_type"] = "misc" if(factor == "Temperature" || factor == "Pressure") - factor_info["tooltip"] = "Reaction is influenced by the [lowertext(factor)] of the place where the reaction is occuring." + factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring." else if(factor == "Energy") factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors." else if(factor == "Radiation") @@ -138,7 +138,7 @@ GLOBAL_LIST_EMPTY(gas_handbook) factor_info["factor_name"] = factor factor_info["factor_type"] = "misc" if(factor == "Temperature" || factor == "Pressure") - factor_info["tooltip"] = "Reaction is influenced by the [lowertext(factor)] of the place where the reaction is occuring." + factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring." else if(factor == "Energy") factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors." else if(factor == "Radiation") diff --git a/code/__HELPERS/chat_filter.dm b/code/__HELPERS/chat_filter.dm index 34d811bf85b..22fe36a2136 100644 --- a/code/__HELPERS/chat_filter.dm +++ b/code/__HELPERS/chat_filter.dm @@ -1,6 +1,6 @@ // [2] is the group index of the blocked term when it is not using word bounds. // This is sanity checked by unit tests. -#define GET_MATCHED_GROUP(regex) (lowertext(regex.group[2] || regex.match)) +#define GET_MATCHED_GROUP(regex) (LOWER_TEXT(regex.group[2] || regex.match)) /// Given a text, will return what word is on the IC filter, with the reason. /// Returns null if the message is OK. diff --git a/code/__HELPERS/hearted.dm b/code/__HELPERS/hearted.dm index 1eafef56a4f..adae298516e 100644 --- a/code/__HELPERS/hearted.dm +++ b/code/__HELPERS/hearted.dm @@ -54,7 +54,7 @@ if(!heart_nominee) return - heart_nominee = lowertext(heart_nominee) + heart_nominee = LOWER_TEXT(heart_nominee) var/list/name_checks = get_mob_by_name(heart_nominee) if(!name_checks || name_checks.len == 0) query_heart(attempt + 1) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 6ab82d1584c..fd11d8f0651 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -679,7 +679,7 @@ world if(uppercase == 1) letter = uppertext(letter) else if(uppercase == -1) - letter = lowertext(letter) + letter = LOWER_TEXT(letter) var/image/text_image = new(loc = A) text_image.maptext = MAPTEXT("[letter]") diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 33bb0348df5..12c34d3a705 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -215,22 +215,22 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) if(2) switch(rand(1,3))//Food, drinks, or places. Only selectable once. if(1) - . += lowertext(pick(drinks)) + . += LOWER_TEXT(pick(drinks)) if(2) - . += lowertext(pick(foods)) + . += LOWER_TEXT(pick(foods)) if(3) - . += lowertext(pick(locations)) + . += LOWER_TEXT(pick(locations)) safety -= 2 if(3) switch(rand(1,4))//Abstract nouns, objects, adjectives, threats. Can be selected more than once. if(1) - . += lowertext(pick(nouns)) + . += LOWER_TEXT(pick(nouns)) if(2) - . += lowertext(pick(objects)) + . += LOWER_TEXT(pick(objects)) if(3) - . += lowertext(pick(adjectives)) + . += LOWER_TEXT(pick(adjectives)) if(4) - . += lowertext(pick(threats)) + . += LOWER_TEXT(pick(threats)) if(!return_list) if(words == 1) . += "." diff --git a/code/__HELPERS/reagents.dm b/code/__HELPERS/reagents.dm index d557db3173a..012a1fd5cc0 100644 --- a/code/__HELPERS/reagents.dm +++ b/code/__HELPERS/reagents.dm @@ -155,7 +155,7 @@ ///Returns a list of chemical_reaction datums that have the input STRING as a product /proc/get_reagent_type_from_product_string(string) - var/input_reagent = replacetext(lowertext(string), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name + var/input_reagent = replacetext(LOWER_TEXT(string), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name if (isnull(input_reagent)) return @@ -194,7 +194,7 @@ /proc/get_chem_id(chem_name) for(var/X in GLOB.chemical_reagents_list) var/datum/reagent/R = GLOB.chemical_reagents_list[X] - if(ckey(chem_name) == ckey(lowertext(R.name))) + if(ckey(chem_name) == ckey(LOWER_TEXT(R.name))) return X ///Takes a type in and returns a list of associated recipes diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 002ac24c732..e57cf1b5098 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -78,7 +78,7 @@ if(97 to 102) //letters a to f . += char if(65 to 70) //letters A to F - char = lowertext(char) + char = LOWER_TEXT(char) . += char else break diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index e2fb0203a3e..4acfc1d6508 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -785,7 +785,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) return string var/base = next_backslash == 1 ? "" : copytext(string, 1, next_backslash) - var/macro = lowertext(copytext(string, next_backslash + length(string[next_backslash]), next_space)) + var/macro = LOWER_TEXT(copytext(string, next_backslash + length(string[next_backslash]), next_space)) var/rest = next_backslash > leng ? "" : copytext(string, next_space + length(string[next_space])) //See https://secure.byond.com/docs/ref/info.html#/DM/text/macros @@ -1082,7 +1082,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) var/text_length = length(text) //remove caps since words will be shuffled - text = lowertext(text) + text = LOWER_TEXT(text) //remove punctuation for same reasons as above var/punctuation = "" var/punctuation_hit_list = list("!","?",".","-") diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 32a570ae8fc..c44845a5854 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -413,3 +413,20 @@ Turf and target are separate in case you want to teleport some distance from a t if(locate(type_to_find) in location) return TRUE return FALSE + +/** + * get_blueprint_data + * Gets a list of turfs around a central turf and gets the blueprint data in a list + * Args: + * - central_turf: The center turf we're getting data from. + * - viewsize: The viewsize we're getting the turfs around central_turf of. + */ +/proc/get_blueprint_data(turf/central_turf, viewsize) + var/list/blueprint_data_returned = list() + var/list/dimensions = getviewsize(viewsize) + var/horizontal_radius = dimensions[1] / 2 + var/vertical_radius = dimensions[2] / 2 + for(var/turf/nearby_turf as anything in RECT_TURFS(horizontal_radius, vertical_radius, central_turf)) + if(nearby_turf.blueprint_data) + blueprint_data_returned += nearby_turf.blueprint_data + return blueprint_data_returned diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 7e97724b562..7cdecfe41ed 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -389,7 +389,7 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, if(/turf) return "turf" else //regex everything else (works for /proc too) - return lowertext(replacetext("[the_type]", "[type2parent(the_type)]/", "")) + return LOWER_TEXT(replacetext("[the_type]", "[type2parent(the_type)]/", "")) /// Return html to load a url. /// for use inside of browse() calls to html assets that might be loaded on a cdn. diff --git a/code/_globalvars/arcade.dm b/code/_globalvars/arcade.dm new file mode 100644 index 00000000000..4143ce5fa76 --- /dev/null +++ b/code/_globalvars/arcade.dm @@ -0,0 +1,73 @@ +///List of all things that can be dispensed by an arcade cabinet and the weight of them being picked. +GLOBAL_LIST_INIT(arcade_prize_pool, list( + /obj/item/storage/box/snappops = 2, + /obj/item/toy/talking/ai = 2, + /obj/item/toy/talking/codex_gigas = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/toy/sword = 2, + /obj/item/toy/gun = 2, + /obj/item/gun/ballistic/shotgun/toy/crossbow = 2, + /obj/item/storage/box/fakesyndiesuit = 2, + /obj/item/storage/crayons = 2, + /obj/item/toy/spinningtoy = 2, + /obj/item/toy/spinningtoy/dark_matter = 1, + /obj/item/toy/balloon/arrest = 2, + /obj/item/toy/mecha/ripley = 1, + /obj/item/toy/mecha/ripleymkii = 1, + /obj/item/toy/mecha/hauler = 1, + /obj/item/toy/mecha/clarke = 1, + /obj/item/toy/mecha/odysseus = 1, + /obj/item/toy/mecha/gygax = 1, + /obj/item/toy/mecha/durand = 1, + /obj/item/toy/mecha/savannahivanov = 1, + /obj/item/toy/mecha/phazon = 1, + /obj/item/toy/mecha/honk = 1, + /obj/item/toy/mecha/darkgygax = 1, + /obj/item/toy/mecha/mauler = 1, + /obj/item/toy/mecha/darkhonk = 1, + /obj/item/toy/mecha/deathripley = 1, + /obj/item/toy/mecha/reticence = 1, + /obj/item/toy/mecha/marauder = 1, + /obj/item/toy/mecha/seraph = 1, + /obj/item/toy/mecha/firefighter = 1, + /obj/item/toy/cards/deck = 2, + /obj/item/toy/nuke = 2, + /obj/item/toy/minimeteor = 2, + /obj/item/toy/redbutton = 2, + /obj/item/toy/talking/owl = 2, + /obj/item/toy/talking/griffin = 2, + /obj/item/coin/antagtoken = 2, + /obj/item/stack/tile/fakepit/loaded = 2, + /obj/item/stack/tile/eighties/loaded = 2, + /obj/item/toy/toy_xeno = 2, + /obj/item/storage/box/actionfigure = 1, + /obj/item/restraints/handcuffs/fake = 2, + /obj/item/grenade/chem_grenade/glitter/pink = 1, + /obj/item/grenade/chem_grenade/glitter/blue = 1, + /obj/item/grenade/chem_grenade/glitter/white = 1, + /obj/item/toy/eightball = 2, + /obj/item/toy/windup_toolbox = 2, + /obj/item/toy/clockwork_watch = 2, + /obj/item/toy/toy_dagger = 2, + /obj/item/extendohand/acme = 1, + /obj/item/hot_potato/harmless/toy = 1, + /obj/item/card/emagfake = 1, + /obj/item/clothing/shoes/wheelys = 2, + /obj/item/clothing/shoes/kindle_kicks = 2, + /obj/item/toy/plush/goatplushie = 2, + /obj/item/toy/plush/moth = 2, + /obj/item/toy/plush/pkplush = 2, + /obj/item/toy/plush/rouny = 2, + /obj/item/toy/plush/abductor = 2, + /obj/item/toy/plush/abductor/agent = 2, + /obj/item/toy/plush/shark = 2, + /obj/item/storage/belt/military/snack/full = 2, + /obj/item/toy/brokenradio = 2, + /obj/item/toy/braintoy = 2, + /obj/item/toy/eldritch_book = 2, + /obj/item/storage/box/heretic_box = 1, + /obj/item/toy/foamfinger = 2, + /obj/item/clothing/glasses/trickblindfold = 2, + /obj/item/clothing/mask/party_horn = 2, + /obj/item/storage/box/party_poppers = 2, +)) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 98f4beabe67..83e199cb908 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -127,6 +127,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, "TRAIT_ANALGESIA" = TRAIT_ANALGESIA, "TRAIT_ANGELIC" = TRAIT_ANGELIC, + "TRAIT_ANOSMIA" = TRAIT_ANOSMIA, "TRAIT_ANTENNAE" = TRAIT_ANTENNAE, "TRAIT_ANTICONVULSANT" = TRAIT_ANTICONVULSANT, "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, @@ -135,6 +136,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BADDNA" = TRAIT_BADDNA, "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_BALD" = TRAIT_BALD, + "TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index d30917b197e..d4c203342e4 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -29,6 +29,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_AGENDER" = TRAIT_AGENDER, "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, + "TRAIT_ANOSMIA" = TRAIT_ANOSMIA, "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, "TRAIT_ANXIOUS" = TRAIT_ANXIOUS, "TRAIT_BADDNA" = TRAIT_BADDNA, diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index fb1cf4bf5a6..7f28c361267 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -25,7 +25,7 @@ /datum/config_entry/New() if(type == abstract_type) CRASH("Abstract config entry [type] instatiated!") - name = lowertext(type2top(type)) + name = LOWER_TEXT(type2top(type)) default_protection = protection set_default() @@ -100,7 +100,7 @@ return FALSE config_entry_value = auto_trim ? trim(str_val) : str_val if(lowercase) - config_entry_value = lowertext(config_entry_value) + config_entry_value = LOWER_TEXT(config_entry_value) return TRUE /datum/config_entry/number @@ -148,7 +148,7 @@ return FALSE str_val = trim(str_val) if (str_val != "") - config_entry_value += lowercase ? lowertext(str_val) : str_val + config_entry_value += lowercase ? LOWER_TEXT(str_val) : str_val return TRUE /datum/config_entry/number_list @@ -246,7 +246,7 @@ config_key = jointext(config_entry_words, splitter) if(lowercase_key) - config_key = lowertext(config_key) + config_key = LOWER_TEXT(config_key) is_ambiguous = (length(config_entry_words) > 2) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 10c6cc4284f..2e5dfb468bd 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -170,7 +170,7 @@ if(IsAdminAdvancedProcCall()) return - var/filename_to_test = world.system_type == MS_WINDOWS ? lowertext(filename) : filename + var/filename_to_test = world.system_type == MS_WINDOWS ? LOWER_TEXT(filename) : filename if(filename_to_test in stack) log_config_error("Warning: Config recursion detected ([english_list(stack)]), breaking!") return @@ -197,10 +197,10 @@ var/value = null if(pos) - entry = lowertext(copytext(L, 1, pos)) + entry = LOWER_TEXT(copytext(L, 1, pos)) value = copytext(L, pos + length(L[pos])) else - entry = lowertext(L) + entry = LOWER_TEXT(L) if(!entry) continue @@ -215,7 +215,7 @@ // Reset directive, used for setting a config value back to defaults. Useful for string list config types if (entry == "$reset") - var/datum/config_entry/resetee = _entries[lowertext(value)] + var/datum/config_entry/resetee = _entries[LOWER_TEXT(value)] if (!value || !resetee) log_config_error("Warning: invalid $reset directive: [value]") continue @@ -366,10 +366,10 @@ Example config: var/data = null if(pos) - command = lowertext(copytext(t, 1, pos)) + command = LOWER_TEXT(copytext(t, 1, pos)) data = copytext(t, pos + length(t[pos])) else - command = lowertext(t) + command = LOWER_TEXT(t) if(!command) continue @@ -473,7 +473,7 @@ Example config: var/list/formatted_banned_words = list() for (var/banned_word in banned_words) - formatted_banned_words[lowertext(banned_word)] = banned_words[banned_word] + formatted_banned_words[LOWER_TEXT(banned_word)] = banned_words[banned_word] return formatted_banned_words /datum/controller/configuration/proc/compile_filter_regex(list/banned_words) diff --git a/code/controllers/configuration/entries/resources.dm b/code/controllers/configuration/entries/resources.dm index c839ccc078d..1fb8a6237d4 100644 --- a/code/controllers/configuration/entries/resources.dm +++ b/code/controllers/configuration/entries/resources.dm @@ -6,7 +6,7 @@ /datum/config_entry/string/asset_transport /datum/config_entry/string/asset_transport/ValidateAndSet(str_val) - return (lowertext(str_val) in list("simple", "webroot")) && ..(lowertext(str_val)) + return (LOWER_TEXT(str_val) in list("simple", "webroot")) && ..(LOWER_TEXT(str_val)) /datum/config_entry/string/asset_cdn_webroot protection = CONFIG_ENTRY_LOCKED diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 7bf5ace5d20..31de67361bf 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -205,9 +205,12 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec * - flame_range: The range at which the explosion should produce hotspots. * - silent: Whether to generate/execute sound effects. * - smoke: Whether to generate a smoke cloud provided the explosion is powerful enough to warrant it. + * - protect_epicenter: Whether to leave the epicenter turf unaffected by the explosion * - explosion_cause: [Optional] The atom that caused the explosion, when different to the origin. Used for logging. + * - explosion_direction: The angle in which the explosion is pointed (for directional explosions.) + * - explosion_arc: The angle of the arc covered by a directional explosion (if 360 the explosion is non-directional.) */ -/proc/explosion(atom/origin, devastation_range = 0, heavy_impact_range = 0, light_impact_range = 0, flame_range = null, flash_range = null, adminlog = TRUE, ignorecap = FALSE, silent = FALSE, smoke = FALSE, atom/explosion_cause = null) +/proc/explosion(atom/origin, devastation_range = 0, heavy_impact_range = 0, light_impact_range = 0, flame_range = null, flash_range = null, adminlog = TRUE, ignorecap = FALSE, silent = FALSE, smoke = FALSE, protect_epicenter = FALSE, atom/explosion_cause = null, explosion_direction = 0, explosion_arc = 360) . = SSexplosions.explode(arglist(args)) @@ -225,9 +228,12 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec * - flame_range: The range at which the explosion should produce hotspots. * - silent: Whether to generate/execute sound effects. * - smoke: Whether to generate a smoke cloud provided the explosion is powerful enough to warrant it. + * - protect_epicenter: Whether to leave the epicenter turf unaffected by the explosion * - explosion_cause: [Optional] The atom that caused the explosion, when different to the origin. Used for logging. + * - explosion_direction: The angle in which the explosion is pointed (for directional explosions.) + * - explosion_arc: The angle of the arc covered by a directional explosion (if 360 the explosion is non-directional.) */ -/datum/controller/subsystem/explosions/proc/explode(atom/origin, devastation_range = 0, heavy_impact_range = 0, light_impact_range = 0, flame_range = null, flash_range = null, adminlog = TRUE, ignorecap = FALSE, silent = FALSE, smoke = FALSE, atom/explosion_cause = null) +/datum/controller/subsystem/explosions/proc/explode(atom/origin, devastation_range = 0, heavy_impact_range = 0, light_impact_range = 0, flame_range = null, flash_range = null, adminlog = TRUE, ignorecap = FALSE, silent = FALSE, smoke = FALSE, protect_epicenter = FALSE, atom/explosion_cause = null, explosion_direction = 0, explosion_arc = 360) var/list/arguments = list( EXARG_KEY_ORIGIN = origin, EXARG_KEY_DEV_RANGE = devastation_range, @@ -239,7 +245,10 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec EXARG_KEY_IGNORE_CAP = ignorecap, EXARG_KEY_SILENT = silent, EXARG_KEY_SMOKE = smoke, + EXARG_KEY_PROTECT_EPICENTER = protect_epicenter, EXARG_KEY_EXPLOSION_CAUSE = explosion_cause ? explosion_cause : origin, + EXARG_KEY_EXPLOSION_DIRECTION = explosion_direction, + EXARG_KEY_EXPLOSION_ARC = explosion_arc, ) var/atom/location = isturf(origin) ? origin : origin.loc if(SEND_SIGNAL(origin, COMSIG_ATOM_EXPLODE, arguments) & COMSIG_CANCEL_EXPLOSION) @@ -267,7 +276,7 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec /** * Handles the effects of an explosion originating from a given point. * - * Primarily handles popagating the balstwave of the explosion to the relevant turfs. + * Primarily handles popagating the blastwave of the explosion to the relevant turfs. * Also handles the fireball from the explosion. * Also handles the smoke cloud from the explosion. * Also handles sfx and screenshake. @@ -283,9 +292,12 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec * - flame_range: The range at which the explosion should produce hotspots. * - silent: Whether to generate/execute sound effects. * - smoke: Whether to generate a smoke cloud provided the explosion is powerful enough to warrant it. - * - explosion_cause: The atom that caused the explosion. Used for logging. + * - protect_epicenter: Whether to leave the epicenter turf unaffected by the explosion + * - explosion_cause: [Optional] The atom that caused the explosion, when different to the origin. Used for logging. + * - explosion_direction: The angle in which the explosion is pointed (for directional explosions.) + * - explosion_arc: The angle of the arc covered by a directional explosion (if 360 the explosion is non-directional.) */ -/datum/controller/subsystem/explosions/proc/propagate_blastwave(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flame_range, flash_range, adminlog, ignorecap, silent, smoke, atom/explosion_cause) +/datum/controller/subsystem/explosions/proc/propagate_blastwave(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flame_range, flash_range, adminlog, ignorecap, silent, smoke, protect_epicenter, atom/explosion_cause, explosion_direction, explosion_arc) epicenter = get_turf(epicenter) if(!epicenter) return @@ -384,7 +396,7 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec for(var/mob/living/L in viewers(flash_range, epicenter)) L.flash_act() - var/list/affected_turfs = prepare_explosion_turfs(max_range, epicenter) + var/list/affected_turfs = prepare_explosion_turfs(max_range, epicenter, protect_epicenter, explosion_direction, explosion_arc) var/reactionary = CONFIG_GET(flag/reactionary_explosions) // this list is setup in the form position -> block for that position @@ -412,7 +424,6 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec block += our_block cached_exp_block[explode] = our_block + explode.explosive_resistance - var/severity = EXPLODE_NONE if(dist + (block * EXPLOSION_BLOCK_DEV) < devastation_range) severity = EXPLODE_DEVASTATE @@ -582,10 +593,12 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec /// Returns in a unique order, spiraling outwards /// This is done to ensure our progressive cache of blast resistance is always valid /// This is quite fast -/proc/prepare_explosion_turfs(range, turf/epicenter) +/proc/prepare_explosion_turfs(range, turf/epicenter, protect_epicenter, explosion_direction, explosion_arc) var/list/outlist = list() - // Add in the center - outlist += epicenter + var/list/candidates = list() + // Add in the center if it's not protected + if(!protect_epicenter) + outlist += epicenter var/our_x = epicenter.x var/our_y = epicenter.y @@ -593,6 +606,31 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec var/max_x = world.maxx var/max_y = world.maxy + + // Work out the angles to explode between + var/first_angle_limit = WRAP(explosion_direction - explosion_arc * 0.5, 0, 360) + var/second_angle_limit = WRAP(explosion_direction + explosion_arc * 0.5, 0, 360) + + // Get everything in the right order + var/lower_angle_limit + var/upper_angle_limit + var/do_directional + var/reverse_angle + + // Work out which case we're in + if(first_angle_limit == second_angle_limit) // CASE A: FULL CIRCLE + do_directional = FALSE + else if(first_angle_limit < second_angle_limit) // CASE B: When the arc does not cross 0 degrees + lower_angle_limit = first_angle_limit + upper_angle_limit = second_angle_limit + do_directional = TRUE + reverse_angle = FALSE + else if (first_angle_limit > second_angle_limit) // CASE C: When the arc crosses 0 degrees + lower_angle_limit = second_angle_limit + upper_angle_limit = first_angle_limit + do_directional = TRUE + reverse_angle = TRUE + for(var/i in 1 to range) var/lowest_x = our_x - i var/lowest_y = our_y - i @@ -600,25 +638,32 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec var/highest_y = our_y + i // top left to one before top right if(highest_y <= max_y) - outlist += block( + candidates += block( locate(max(lowest_x, 1), highest_y, our_z), locate(min(highest_x - 1, max_x), highest_y, our_z)) // top right to one before bottom right if(highest_x <= max_x) - outlist += block( + candidates += block( locate(highest_x, min(highest_y, max_y), our_z), locate(highest_x, max(lowest_y + 1, 1), our_z)) // bottom right to one before bottom left if(lowest_y >= 1) - outlist += block( + candidates += block( locate(min(highest_x, max_x), lowest_y, our_z), locate(max(lowest_x + 1, 1), lowest_y, our_z)) // bottom left to one before top left if(lowest_x >= 1) - outlist += block( + candidates += block( locate(lowest_x, max(lowest_y, 1), our_z), locate(lowest_x, min(highest_y - 1, max_y), our_z)) + if(!do_directional) + outlist += candidates + else + for(var/turf/candidate as anything in candidates) + var/angle = get_angle(epicenter, candidate) + if(ISINRANGE(angle, lower_angle_limit, upper_angle_limit) ^ reverse_angle) + outlist += candidate return outlist /datum/controller/subsystem/explosions/fire(resumed = 0) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a3a03f8c244..6cb3c15ad68 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -92,7 +92,7 @@ SUBSYSTEM_DEF(ticker) var/use_rare_music = prob(1) for(var/S in provisional_title_music) - var/lower = lowertext(S) + var/lower = LOWER_TEXT(S) var/list/L = splittext(lower,"+") switch(L.len) if(3) //rare+MAP+sound.ogg or MAP+rare.sound.ogg -- Rare Map-specific sounds @@ -116,7 +116,7 @@ SUBSYSTEM_DEF(ticker) for(var/S in music) var/list/L = splittext(S,".") if(L.len >= 2) - var/ext = lowertext(L[L.len]) //pick the real extension, no 'honk.ogg.exe' nonsense here + var/ext = LOWER_TEXT(L[L.len]) //pick the real extension, no 'honk.ogg.exe' nonsense here if(byond_sound_formats[ext]) continue music -= S @@ -296,8 +296,8 @@ SUBSYSTEM_DEF(ticker) log_world("Game start took [(world.timeofday - init_start)/10]s") INVOKE_ASYNC(SSdbcore, TYPE_PROC_REF(/datum/controller/subsystem/dbcore,SetRoundStart)) - to_chat(world, span_notice("Welcome to [station_name()], enjoy your stay!")) - alert_sound_to_playing(sound(SSstation.announcer.get_rand_welcome_sound())) //SKYRAT EDIT CHANGE + to_chat(world, span_notice(span_bold("Welcome to [station_name()], enjoy your stay!"))) + SEND_SOUND(world, sound(SSstation.announcer.get_rand_welcome_sound())) current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 1fb7944191d..afddd1d01de 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(title) for(var/S in provisional_title_screens) var/list/L = splittext(S,"+") - if((L.len == 1 && (L[1] != "exclude" && L[1] != "blank.png")) || (L.len > 1 && ((use_rare_screens && lowertext(L[1]) == "rare") || (lowertext(L[1]) == lowertext(SSmapping.config.map_name))))) + if((L.len == 1 && (L[1] != "exclude" && L[1] != "blank.png")) || (L.len > 1 && ((use_rare_screens && LOWER_TEXT(L[1]) == "rare") || (LOWER_TEXT(L[1]) == LOWER_TEXT(SSmapping.config.map_name))))) title_screens += S if(length(title_screens)) diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm index dbaa571cacd..5630073c955 100644 --- a/code/datums/brain_damage/hypnosis.dm +++ b/code/datums/brain_damage/hypnosis.dm @@ -61,7 +61,7 @@ ..() if(SPT_PROB(1, seconds_per_tick)) if(prob(50)) - to_chat(owner, span_hypnophrase("...[lowertext(hypnotic_phrase)]...")) + to_chat(owner, span_hypnophrase("...[LOWER_TEXT(hypnotic_phrase)]...")) else owner.cause_hallucination( \ /datum/hallucination/chat, \ diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 21ecf1b520b..1d121d0db8a 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -212,7 +212,7 @@ word = copytext(word, 1, suffix_foundon) word = html_decode(word) - if(lowertext(word) in common_words) + if(LOWER_TEXT(word) in common_words) new_message += word + suffix else if(prob(30) && message_split.len > 2) diff --git a/code/datums/cogbar.dm b/code/datums/cogbar.dm index c52092e5bd1..0b5ead1e51e 100644 --- a/code/datums/cogbar.dm +++ b/code/datums/cogbar.dm @@ -1,4 +1,4 @@ -#define COGBAR_ANIMATION_TIME 5 DECISECONDS +#define COGBAR_ANIMATION_TIME (0.5 SECONDS) /** * ### Cogbar diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index a745be2b1a5..afc71936f1b 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -90,11 +90,24 @@ baked_result.pixel_y = original_object.pixel_y used_tray.AddToPlate(baked_result) + var/list/asomnia_hadders = list() + for(var/mob/smeller in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, used_oven)) + if(HAS_TRAIT(smeller, TRAIT_ANOSMIA)) + asomnia_hadders += smeller + if(positive_result) - used_oven.visible_message(span_notice("You smell something great coming from [used_oven]."), blind_message = span_notice("You smell something great...")) + used_oven.visible_message( + span_notice("You smell something great coming from [used_oven]."), + blind_message = span_notice("You smell something great..."), + ignored_mobs = asomnia_hadders, + ) BLACKBOX_LOG_FOOD_MADE(baked_result.type) else - used_oven.visible_message(span_warning("You smell a burnt smell coming from [used_oven]."), blind_message = span_warning("You smell a burnt smell...")) + used_oven.visible_message( + span_warning("You smell a burnt smell coming from [used_oven]."), + blind_message = span_warning("You smell a burnt smell..."), + ignored_mobs = asomnia_hadders, + ) SEND_SIGNAL(parent, COMSIG_ITEM_BAKED, baked_result) qdel(parent) diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 23873a5d7af..869d223a758 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -44,6 +44,21 @@ time = 4 SECONDS category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/balloon_mallet + name = "Balloon Mallet" + result = /obj/item/balloon_mallet + reqs = list( + /obj/item/toy/balloon/long = 18, + ) + time = 10 SECONDS + category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/balloon_mallet/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + /datum/crafting_recipe/tailwhip name = "Liz O' Nine Tails" result = /obj/item/melee/chainofcommand/tailwhip diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 14a7ebfc21b..3476016ead3 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -442,3 +442,42 @@ /obj/item/clothing/suit/armor/vest = 1, ) category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_helmet + result = /obj/item/clothing/head/helmet/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_helmet/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_tophat + result = /obj/item/clothing/head/hats/tophat/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_tophat/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_vest + result = /obj/item/clothing/suit/armor/balloon_vest + reqs = list( + /obj/item/toy/balloon/long = 18, + ) + time = 8 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_vest/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index 74bac463e32..7d9710977ce 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -221,7 +221,7 @@ cultist.log_message("erased a [rune.cultist_name] rune with [parent].", LOG_GAME) message_admins("[ADMIN_LOOKUPFLW(cultist)] erased a [rune.cultist_name] rune with [parent].") - to_chat(cultist, span_notice("You carefully erase the [lowertext(rune.cultist_name)] rune.")) + to_chat(cultist, span_notice("You carefully erase the [LOWER_TEXT(rune.cultist_name)] rune.")) qdel(rune) /* @@ -338,8 +338,8 @@ var/obj/effect/rune/made_rune = new rune_to_scribe(our_turf, chosen_keyword) made_rune.add_mob_blood(cultist) - to_chat(cultist, span_cult("The [lowertext(made_rune.cultist_name)] rune [made_rune.cultist_desc]")) - cultist.log_message("scribed \a [lowertext(made_rune.cultist_name)] rune using [parent] ([parent.type])", LOG_GAME) + to_chat(cultist, span_cult("The [LOWER_TEXT(made_rune.cultist_name)] rune [made_rune.cultist_desc]")) + cultist.log_message("scribed \a [LOWER_TEXT(made_rune.cultist_name)] rune using [parent] ([parent.type])", LOG_GAME) SSblackbox.record_feedback("tally", "cult_runes_scribed", 1, made_rune.cultist_name) return TRUE diff --git a/code/datums/components/customizable_reagent_holder.dm b/code/datums/components/customizable_reagent_holder.dm index bd88508bec0..fd1b8a2ac64 100644 --- a/code/datums/components/customizable_reagent_holder.dm +++ b/code/datums/components/customizable_reagent_holder.dm @@ -206,7 +206,7 @@ if(isitem(atom_parent)) var/obj/item/item_parent = atom_parent if(ingredient.w_class > item_parent.w_class) - item_parent.w_class = ingredient.w_class + item_parent.update_weight_class(ingredient.w_class) atom_parent.name = "[custom_adjective()] [custom_type()] [initial(atom_parent.name)]" SEND_SIGNAL(atom_parent, COMSIG_ATOM_CUSTOMIZED, ingredient) SEND_SIGNAL(ingredient, COMSIG_ITEM_USED_AS_INGREDIENT, atom_parent) diff --git a/code/datums/components/deadchat_control.dm b/code/datums/components/deadchat_control.dm index 7517f35ff29..210ef26a052 100644 --- a/code/datums/components/deadchat_control.dm +++ b/code/datums/components/deadchat_control.dm @@ -61,7 +61,7 @@ /datum/component/deadchat_control/proc/deadchat_react(mob/source, message) SIGNAL_HANDLER - message = lowertext(message) + message = LOWER_TEXT(message) if(!inputs[message]) return @@ -162,7 +162,7 @@ */ /datum/component/deadchat_control/proc/waive_automute(mob/speaker, client/client, message, mute_type) SIGNAL_HANDLER - if(mute_type == MUTE_DEADCHAT && inputs[lowertext(message)]) + if(mute_type == MUTE_DEADCHAT && inputs[LOWER_TEXT(message)]) return WAIVE_AUTOMUTE_CHECK return NONE diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index ded8b8c4161..a0b20858927 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -215,7 +215,7 @@ Behavior that's still missing from this component that original food items had t if(foodtypes) var/list/types = bitfield_to_list(foodtypes, FOOD_FLAGS) - examine_list += span_notice("It is [lowertext(english_list(types))].") + examine_list += span_notice("It is [LOWER_TEXT(english_list(types))].") var/quality = get_perceived_food_quality(user) if(quality > 0) diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index 69f67d46df3..a17e642e039 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -102,7 +102,7 @@ var/datum/material/M = I var/amt = materials[I] / SHEET_MATERIAL_AMOUNT if(amt) - examine_texts += span_notice("It has [amt] sheets of [lowertext(M.name)] stored.") + examine_texts += span_notice("It has [amt] sheets of [LOWER_TEXT(M.name)] stored.") /datum/component/material_container/vv_edit_var(var_name, var_value) var/old_flags = mat_container_flags diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index cd2fcc2cff9..24bde4b4672 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -334,7 +334,7 @@ var/datum/surgery/procedure = new surgery.type(target, selected_zone, affecting_limb) ADD_TRAIT(target, TRAIT_ALLOWED_HONORBOUND_ATTACK, type) - target.balloon_alert(user, "starting \"[lowertext(procedure.name)]\"") + target.balloon_alert(user, "starting \"[LOWER_TEXT(procedure.name)]\"") user.visible_message( span_notice("[user] drapes [parent] over [target]'s [parse_zone(selected_zone)] to prepare for surgery."), diff --git a/code/datums/components/transforming.dm b/code/datums/components/transforming.dm index e51c784657b..5276f45dc0a 100644 --- a/code/datums/components/transforming.dm +++ b/code/datums/components/transforming.dm @@ -212,7 +212,7 @@ source.attack_verb_simple = attack_verb_simple_on source.hitsound = hitsound_on - source.w_class = w_class_on + source.update_weight_class(w_class_on) source.icon_state = "[source.icon_state]_on" if(inhand_icon_change && source.inhand_icon_state) source.inhand_icon_state = "[source.inhand_icon_state]_on" @@ -241,7 +241,7 @@ source.attack_verb_simple = attack_verb_simple_off source.hitsound = initial(source.hitsound) - source.w_class = initial(source.w_class) + source.update_weight_class(initial(source.w_class)) source.icon_state = initial(source.icon_state) source.inhand_icon_state = initial(source.inhand_icon_state) if(ismob(source.loc)) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index 5007d8caeb9..163de4867d5 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -378,8 +378,8 @@ /datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text) SIGNAL_HANDLER - if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code))) - if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code))) + if(trim(LOWER_TEXT(new_ring_text)) != trim(LOWER_TEXT(unlock_code))) + if(trim(LOWER_TEXT(new_ring_text)) == trim(LOWER_TEXT(failsafe_code))) failsafe(user) return COMPONENT_STOP_RINGTONE_CHANGE return @@ -415,8 +415,8 @@ if(channel != RADIO_CHANNEL_UPLINK) return - if(!findtext(lowertext(message), lowertext(unlock_code))) - if(failsafe_code && findtext(lowertext(message), lowertext(failsafe_code))) + if(!findtext(LOWER_TEXT(message), LOWER_TEXT(unlock_code))) + if(failsafe_code && findtext(LOWER_TEXT(message), LOWER_TEXT(failsafe_code))) failsafe(user) // no point returning cannot radio, youre probably ded return locked = FALSE diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index f428abdb016..0708841fca0 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -71,7 +71,10 @@ if(prob(33.33)) living_mob.show_message(span_hear("You hear a crackling noise."), type = MSG_AUDIBLE) else - to_chat(living_mob, span_warning("[pick("You feel hot.", "You smell smoke.")]")) + if(HAS_TRAIT(living_mob, TRAIT_ANOSMIA)) //Anosmia quirk holder can't smell anything. + to_chat(living_mob, span_warning("You feel hot.")) + else + to_chat(living_mob, span_warning("[pick("You feel hot.", "You smell smoke.")]")) /* Alkali perspiration diff --git a/code/datums/elements/backblast.dm b/code/datums/elements/backblast.dm index 169f961b3d3..8952afbfeaa 100644 --- a/code/datums/elements/backblast.dm +++ b/code/datums/elements/backblast.dm @@ -1,74 +1,43 @@ /** - * When attached to a gun and the gun is successfully fired, this element creates a "backblast" of fire and pain, like you'd find in a rocket launcher or recoilless rifle + * When attached to a gun and the gun is successfully fired, this element creates a "backblast", like you'd find in a rocket launcher or recoilless rifle * - * The backblast is simulated by a number of fire plumes, or invisible incendiary rounds that will torch anything they come across for a short distance, as well as knocking - * back nearby items. + * The backblast is simulated by a directional explosion 180 degrees from the direction of the fired projectile. */ /datum/element/backblast element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 - /// How many "pellets" of backblast we're shooting backwards, spread between the angle defined in angle_spread - var/plumes - /// Assuming we don't just have 1 plume, this is the total angle we'll cover with the plumes, split down the middle directly behind the angle we fired at - var/angle_spread - /// How far each plume of fire will fly, assuming it doesn't hit a mob - var/range + /// Devasatation range of the explosion + var/dev_range + /// HGeavy damage range of the explosion + var/heavy_range + /// Light damage range of the explosion + var/light_range + /// Flame range of the explosion + var/flame_range + /// What angle do we want the backblast to cover + var/blast_angle -/datum/element/backblast/Attach(datum/target, plumes = 4, angle_spread = 48, range = 6) +/datum/element/backblast/Attach(datum/target, dev_range = 0, heavy_range = 0, light_range = 6, flame_range = 6, blast_angle = 60) . = ..() - if(!isgun(target) || plumes < 1 || angle_spread < 1 || range < 1) + if(!isgun(target) || dev_range < 0 || heavy_range < 0 || light_range < 0 || flame_range < 0 || blast_angle < 1) return ELEMENT_INCOMPATIBLE - src.plumes = plumes - src.angle_spread = angle_spread - src.range = range + src.dev_range = dev_range + src.heavy_range = heavy_range + src.light_range = light_range + src.flame_range = flame_range + src.blast_angle = blast_angle - if(plumes == 1) - RegisterSignal(target, COMSIG_GUN_FIRED, PROC_REF(gun_fired_simple)) - else - RegisterSignal(target, COMSIG_GUN_FIRED, PROC_REF(gun_fired)) + RegisterSignal(target, COMSIG_GUN_FIRED, PROC_REF(pew)) /datum/element/backblast/Detach(datum/source) if(source) UnregisterSignal(source, COMSIG_GUN_FIRED) return ..() -/// For firing multiple plumes behind us, we evenly spread out our projectiles based on the [angle_spread][/datum/element/backblast/var/angle_spread] and [number of plumes][/datum/element/backblast/var/plumes] -/datum/element/backblast/proc/gun_fired(obj/item/gun/weapon, mob/living/user, atom/target, params, zone_override) - SIGNAL_HANDLER - - if(!weapon.chambered || HAS_TRAIT(user, TRAIT_PACIFISM)) - return - - var/backwards_angle = get_angle(target, user) - var/starting_angle = SIMPLIFY_DEGREES(backwards_angle-(angle_spread * 0.5)) - var/iter_offset = angle_spread / plumes // how much we increment the angle for each plume - - for(var/i in 1 to plumes) - var/this_angle = SIMPLIFY_DEGREES(starting_angle + ((i - 1) * iter_offset)) - var/turf/target_turf = get_turf_in_angle(this_angle, get_turf(user), 10) - INVOKE_ASYNC(src, PROC_REF(pew), target_turf, weapon, user) - -/// If we're only firing one plume directly behind us, we don't need to bother with the loop or angles or anything -/datum/element/backblast/proc/gun_fired_simple(obj/item/gun/weapon, mob/living/user, atom/target, params, zone_override) - SIGNAL_HANDLER - - if(!weapon.chambered || HAS_TRAIT(user, TRAIT_PACIFISM)) - return - - var/backwards_angle = get_angle(target, user) - var/turf/target_turf = get_turf_in_angle(backwards_angle, get_turf(user), 10) - INVOKE_ASYNC(src, PROC_REF(pew), target_turf, weapon, user) - /// For firing an actual backblast pellet -/datum/element/backblast/proc/pew(turf/target_turf, obj/item/gun/weapon, mob/living/user) - //Shooting Code: - var/obj/projectile/bullet/incendiary/fire/backblast/P = new (get_turf(user)) - P.original = target_turf - P.range = range - P.fired_from = weapon - P.firer = user // don't hit ourself that would be really annoying - P.impacted = list(user = TRUE) // don't hit the target we hit already with the flak - P.preparePixelProjectile(target_turf, weapon) - P.fire() +/datum/element/backblast/proc/pew(obj/item/gun/weapon, mob/living/user, atom/target) + var/turf/origin = get_turf(weapon) + var/backblast_angle = get_angle(target, origin) + explosion(weapon, devastation_range = dev_range, heavy_impact_range = heavy_range, light_impact_range = light_range, flame_range = flame_range, adminlog = FALSE, protect_epicenter = TRUE, explosion_direction = backblast_angle, explosion_arc = blast_angle) diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm index 7984939cddc..857b9e2b678 100644 --- a/code/datums/elements/decals/blood.dm +++ b/code/datums/elements/decals/blood.dm @@ -33,10 +33,7 @@ pic = blood_splatter return TRUE -/datum/element/decal/blood/proc/get_examine_name(datum/source, mob/user, list/override) +/datum/element/decal/blood/proc/get_examine_name(atom/source, mob/user, list/override) SIGNAL_HANDLER - var/atom/A = source - override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a" - override[EXAMINE_POSITION_BEFORE] = " blood-stained " - return COMPONENT_EXNAME_CHANGED + override[EXAMINE_POSITION_BEFORE] = "blood-stained" diff --git a/code/datums/greyscale/json_reader.dm b/code/datums/greyscale/json_reader.dm index ffe143c28fc..38286631fed 100644 --- a/code/datums/greyscale/json_reader.dm +++ b/code/datums/greyscale/json_reader.dm @@ -63,7 +63,7 @@ ) /datum/json_reader/blend_mode/ReadJson(value) - var/new_value = blend_modes[lowertext(value)] + var/new_value = blend_modes[LOWER_TEXT(value)] if(isnull(new_value)) CRASH("Blend mode expected but got '[value]'") return new_value diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index f6e64d57e71..45d72573978 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -2,8 +2,8 @@ /datum/material/iron name = "iron" desc = "Common iron ore often found in sedimentary and igneous layers of the crust." - color = "#878687" - greyscale_colors = "#878687" + color = "#B6BEC2" + greyscale_colors = "#B6BEC2" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/iron ore_type = /obj/item/stack/ore/iron @@ -22,8 +22,8 @@ /datum/material/glass name = "glass" desc = "Glass forged by melting sand." - color = "#88cdf1" - greyscale_colors = "#88cdf196" + color = "#6292AF" + greyscale_colors = "#6292AF" alpha = 150 categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) integrity_modifier = 0.1 @@ -39,6 +39,7 @@ armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, ENERGY = 1, BIO = 0.2, FIRE = 1, ACID = 0.2) mineral_rarity = MATERIAL_RARITY_COMMON points_per_unit = 1 / SHEET_MATERIAL_AMOUNT + texture_layer_icon_state = "shine" /datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch @@ -63,8 +64,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/silver name = "silver" desc = "Silver" - color = list(255/255, 284/255, 302/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#e3f1f8" + color = "#B5BCBB" + greyscale_colors = "#B5BCBB" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/silver ore_type = /obj/item/stack/ore/silver @@ -74,6 +75,7 @@ Unless you know what you're doing, only use the first three numbers. They're in beauty_modifier = 0.075 mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 16 / SHEET_MATERIAL_AMOUNT + texture_layer_icon_state = "shine" /datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5) @@ -83,8 +85,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/gold name = "gold" desc = "Gold" - color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium - greyscale_colors = "#dbdd4c" + color = "#E6BB45" + greyscale_colors = "#E6BB45" strength_modifier = 1.2 categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/gold @@ -96,6 +98,7 @@ Unless you know what you're doing, only use the first three numbers. They're in armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 0.7, ACID = 1.1) mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 18 / SHEET_MATERIAL_AMOUNT + texture_layer_icon_state = "shine" /datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5) @@ -105,8 +108,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/diamond name = "diamond" desc = "Highly pressurized carbon" - color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#71c8f784" + color = "#C9D8F2" + greyscale_colors = "#C9D8F2" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/diamond ore_type = /obj/item/stack/ore/diamond @@ -128,8 +131,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/uranium name = "uranium" desc = "Uranium" - color = rgb(48, 237, 26) - greyscale_colors = rgb(48, 237, 26) + color = "#2C992C" + greyscale_colors = "#2C992C" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/uranium ore_type = /obj/item/stack/ore/uranium @@ -168,8 +171,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/plasma name = "plasma" desc = "Isn't plasma a state of matter? Oh whatever." - color = list(298/255, 46/255, 352/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#c162ec" + color = "#BA3692" + greyscale_colors = "#BA3692" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/plasma ore_type = /obj/item/stack/ore/plasma @@ -200,8 +203,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/bluespace name = "bluespace crystal" desc = "Crystals with bluespace properties" - color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#4e7dffC8" + color = "#2E50B7" + greyscale_colors = "#2E50B7" alpha = 200 starlight_color = COLOR_BLUE categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) @@ -213,6 +216,7 @@ Unless you know what you're doing, only use the first three numbers. They're in points_per_unit = 50 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC + texture_layer_icon_state = "shine" /datum/material/bluespace/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.reagents.add_reagent(/datum/reagent/bluespace, rand(5, 8)) @@ -223,8 +227,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/bananium name = "bananium" desc = "Material with hilarious properties" - color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow - greyscale_colors = "#ffff00" + color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow //It's literally perfect I can't change it + greyscale_colors = "#FFF269" categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/bananium ore_type = /obj/item/stack/ore/bananium @@ -253,8 +257,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/titanium name = "titanium" desc = "Titanium" - color = "#b3c0c7" - greyscale_colors = "#b3c0c7" + color = "#EFEFEF" + greyscale_colors = "#EFEFEF" strength_modifier = 1.3 categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/titanium @@ -265,6 +269,7 @@ Unless you know what you're doing, only use the first three numbers. They're in beauty_modifier = 0.05 armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 0.7, ACID = 1) mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS + texture_layer_icon_state = "shine" /datum/material/titanium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) @@ -273,8 +278,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/runite name = "runite" desc = "Runite" - color = "#3F9995" - greyscale_colors = "#3F9995" + color = "#526F77" + greyscale_colors = "#526F77" strength_modifier = 1.3 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/runite @@ -292,8 +297,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/plastic name = "plastic" desc = "Plastic" - color = "#caccd9" - greyscale_colors = "#caccd9" + color = "#BFB9AC" + greyscale_colors = "#BFB9AC" strength_modifier = 0.85 sheet_type = /obj/item/stack/sheet/plastic ore_type = /obj/item/stack/ore/slag //No plastic or coal ore, so we use slag. @@ -321,8 +326,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/wood name = "wood" desc = "Flexible, durable, but flamable. Hard to come across in space." - color = "#bb8e53" - greyscale_colors = "#bb8e53" + color = "#855932" + greyscale_colors = "#855932" strength_modifier = 0.5 sheet_type = /obj/item/stack/sheet/mineral/wood categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) @@ -354,8 +359,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/adamantine name = "adamantine" desc = "A powerful material made out of magic, I mean science!" - color = "#6d7e8e" - greyscale_colors = "#6d7e8e" + color = "#2B7A74" + greyscale_colors = "#2B7A74" strength_modifier = 1.5 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/adamantine @@ -426,11 +431,12 @@ Unless you know what you're doing, only use the first three numbers. They're in source_item?.reagents?.add_reagent(/datum/reagent/toxin/plasma, source_item.reagents.total_volume*(3/5)) return TRUE +// It's basically adamantine, but it isn't! /datum/material/metalhydrogen name = "Metal Hydrogen" desc = "Solid metallic hydrogen. Some say it should be impossible" - color = "#f2d5d7" - greyscale_colors = "#f2d5d796" + color = "#62708A" + greyscale_colors = "#62708A" alpha = 150 starlight_color = COLOR_MODERATE_BLUE categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) @@ -468,8 +474,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/sandstone name = "sandstone" desc = "Bialtaakid 'ant taerif ma hdha." - color = "#B77D31" - greyscale_colors = "#B77D31" + color = "#ECD5A8" + greyscale_colors = "#ECD5A8" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/sandstone value_per_unit = 5 / SHEET_MATERIAL_AMOUNT @@ -498,8 +504,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/runedmetal name = "runed metal" desc = "Mir'ntrath barhah Nar'sie." - color = "#3C3434" - greyscale_colors = "#3C3434" + color = "#504742" + greyscale_colors = "#504742" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT @@ -515,8 +521,8 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/bronze name = "bronze" desc = "Clock Cult? Never heard of it." - color = "#92661A" - greyscale_colors = "#92661A" + color = "#876223" + greyscale_colors = "#876223" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/bronze value_per_unit = 50 / SHEET_MATERIAL_AMOUNT diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index 0656d32006a..08a694616a3 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -392,7 +392,7 @@ if(istype(character, /datum/mind)) var/datum/mind/character_mind = character - return "\the [lowertext(initial(character_mind.assigned_role.title))]" + return "\the [LOWER_TEXT(initial(character_mind.assigned_role.title))]" // Generic result - mobs get "the guy", objs / turfs get "a thing" return ismob(character) ? "\the [character]" : "\a [character]" diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 0cfb48f7a98..0e54c21e702 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -474,6 +474,11 @@ mood_change = -6 timeout = 5 MINUTES +/datum/mood_event/mallet_humiliation + description = "Getting hit by such a stupid weapon feels rather humiliating..." + mood_change = -3 + timeout = 10 SECONDS + ///Wizard cheesy grand finale - what everyone but the wizard gets /datum/mood_event/madness_despair description = "UNWORTHY, UNWORTHY, UNWORTHY!!!" diff --git a/code/datums/mutations/olfaction.dm b/code/datums/mutations/olfaction.dm index e014806233a..305f6d16e83 100644 --- a/code/datums/mutations/olfaction.dm +++ b/code/datums/mutations/olfaction.dm @@ -40,6 +40,10 @@ to_chat(owner, span_warning("You have no nose!")) return FALSE + if(HAS_TRAIT(living_cast_on, TRAIT_ANOSMIA)) //Anosmia quirk holders can't smell anything + to_chat(owner, span_warning("You can't smell!")) + return FALSE + return TRUE /datum/action/cooldown/spell/olfaction/cast(mob/living/cast_on) diff --git a/code/datums/quirks/negative_quirks/anosmia.dm b/code/datums/quirks/negative_quirks/anosmia.dm new file mode 100644 index 00000000000..bbbf599aeaa --- /dev/null +++ b/code/datums/quirks/negative_quirks/anosmia.dm @@ -0,0 +1,9 @@ +/datum/quirk/item_quirk/anosmia + name = "Anosmia" + desc = "For some reason, you can't smell anything." + icon = FA_ICON_HEAD_SIDE_COUGH_SLASH + value = -2 + mob_trait = TRAIT_ANOSMIA + gain_text = span_notice("You find yourself unable to smell anything!") + lose_text = span_danger("Suddenly, you can smell again!") + medical_record_text = "Patient has lost their sensation of smell." diff --git a/code/datums/quirks/negative_quirks/insanity.dm b/code/datums/quirks/negative_quirks/insanity.dm index 56b56a53812..40e70f07b18 100644 --- a/code/datums/quirks/negative_quirks/insanity.dm +++ b/code/datums/quirks/negative_quirks/insanity.dm @@ -25,7 +25,7 @@ added_trauma.resilience = TRAUMA_RESILIENCE_ABSOLUTE added_trauma.name = name added_trauma.desc = medical_record_text - added_trauma.scan_desc = lowertext(name) + added_trauma.scan_desc = LOWER_TEXT(name) added_trauma.gain_text = null added_trauma.lose_text = null @@ -33,7 +33,7 @@ added_trama_ref = WEAKREF(added_trauma) /datum/quirk/insanity/post_add() - var/rds_policy = get_policy("[type]") || "Please note that your [lowertext(name)] does NOT give you any additional right to attack people or cause chaos." + var/rds_policy = get_policy("[type]") || "Please note that your [LOWER_TEXT(name)] does NOT give you any additional right to attack people or cause chaos." // I don't /think/ we'll need this, but for newbies who think "roleplay as insane" = "license to kill", it's probably a good thing to have. to_chat(quirk_holder, span_big(span_info(rds_policy))) diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index 610b79a40f1..2414681091a 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -149,7 +149,7 @@ /datum/station_trait/overflow_job_bureaucracy/proc/set_overflow_job_override(datum/source) SIGNAL_HANDLER var/datum/job/picked_job = pick(SSjob.get_valid_overflow_jobs()) - chosen_job_name = lowertext(picked_job.title) // like Chief Engineers vs like chief engineers + chosen_job_name = LOWER_TEXT(picked_job.title) // like Chief Engineers vs like chief engineers SSjob.set_overflow_role(picked_job.type) /datum/station_trait/slow_shuttle diff --git a/code/datums/status_effects/debuffs/speech_debuffs.dm b/code/datums/status_effects/debuffs/speech_debuffs.dm index 07bcd3c2543..4963a660b22 100644 --- a/code/datums/status_effects/debuffs/speech_debuffs.dm +++ b/code/datums/status_effects/debuffs/speech_debuffs.dm @@ -187,7 +187,7 @@ /datum/status_effect/speech/slurring/apply_speech(original_char) var/modified_char = original_char - var/lower_char = lowertext(modified_char) + var/lower_char = LOWER_TEXT(modified_char) if(prob(common_prob) && (lower_char in common_replacements)) var/to_replace = common_replacements[lower_char] if(islist(to_replace)) diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 42fad48509d..87398f52555 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -207,6 +207,7 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(handle_extra_examination)) RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_deconstruct)) RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) + RegisterSignal(parent, COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED, PROC_REF(contents_changed_w_class)) /** * Sets where items are physically being stored in the case it shouldn't be on the parent. @@ -401,7 +402,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/datum/storage/bigger_fish = parent.loc.atom_storage if(bigger_fish && bigger_fish.max_specific_storage < max_specific_storage) if(messages && user) - user.balloon_alert(user, "[lowertext(parent.loc.name)] is in the way!") + user.balloon_alert(user, "[LOWER_TEXT(parent.loc.name)] is in the way!") return FALSE if(isitem(parent)) @@ -1092,3 +1093,14 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/matrix/old_matrix = parent.transform animate(parent, time = 1.5, loop = 0, transform = parent.transform.Scale(1.07, 0.9)) animate(time = 2, transform = old_matrix) + +/// Signal proc for [COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED] to drop items out of our storage if they're suddenly too heavy. +/datum/storage/proc/contents_changed_w_class(datum/source, obj/item/changed, old_w_class, new_w_class) + SIGNAL_HANDLER + + if(new_w_class <= max_specific_storage && new_w_class + get_total_weight() <= max_total_storage) + return + if(!attempt_remove(changed, parent.drop_location())) + return + + changed.visible_message(span_warning("[changed] falls out of [parent]!"), vision_distance = COMBAT_MESSAGE_RANGE) diff --git a/code/datums/storage/subtypes/fish_case.dm b/code/datums/storage/subtypes/fish_case.dm index dbbb15f47eb..82733d37ad9 100644 --- a/code/datums/storage/subtypes/fish_case.dm +++ b/code/datums/storage/subtypes/fish_case.dm @@ -24,25 +24,11 @@ var/obj/item/item_parent = parent if(arrived.w_class <= item_parent.w_class) return - item_parent.w_class = arrived.w_class - // Since we're changing weight class we need to check if our storage's loc's storage can still hold us - // in the future we need a generic solution to this to solve a bunch of other exploits - var/datum/storage/loc_storage = item_parent.loc.atom_storage - if(!isnull(loc_storage) && !loc_storage.can_insert(item_parent)) - item_parent.forceMove(item_parent.loc.drop_location()) - item_parent.visible_message(span_warning("[item_parent] spills out of [item_parent.loc] as it expands to hold [arrived]!"), vision_distance = 1) - return - - if(isliving(item_parent.loc)) - var/mob/living/living_loc = item_parent.loc - if((living_loc.get_slot_by_item(item_parent) & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && item_parent.w_class > WEIGHT_CLASS_SMALL) - item_parent.forceMove(living_loc.drop_location()) - to_chat(living_loc, span_warning("[item_parent] drops out of your pockets as it expands to hold [arrived]!")) - return + item_parent.update_weight_class(arrived.w_class) /datum/storage/fish_case/handle_exit(datum/source, obj/item/gone) . = ..() if(!isitem(parent) || !istype(gone)) return var/obj/item/item_parent = parent - item_parent.w_class = initial(item_parent.w_class) + item_parent.update_weight_class(initial(item_parent.w_class)) diff --git a/code/datums/voice_of_god_command.dm b/code/datums/voice_of_god_command.dm index 052af9d060b..21d4f460617 100644 --- a/code/datums/voice_of_god_command.dm +++ b/code/datums/voice_of_god_command.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(voice_of_god_commands, init_voice_of_god_commands()) if(!user.say(message, spans = span_list, sanitize = FALSE, ignore_spam = ignore_spam, forced = forced)) return - message = lowertext(message) + message = LOWER_TEXT(message) var/list/mob/living/listeners = list() //used to check if the speaker specified a name or a job to focus on @@ -299,7 +299,7 @@ GLOBAL_LIST_INIT(voice_of_god_commands, init_voice_of_god_commands()) for(var/mob/living/target as anything in listeners) var/to_say = user.name // 0.1% chance to be a smartass - if(findtext(lowertext(message), smartass_regex) && prob(0.1)) + if(findtext(LOWER_TEXT(message), smartass_regex) && prob(0.1)) to_say = "My name" addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, say), to_say), 0.5 SECONDS * iteration) iteration++ diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index 99438be18cc..cb7c3972993 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -258,7 +258,7 @@ return TRUE // Station blueprints do that too, but only if the wires are not randomized. - if(user.is_holding_item_of_type(/obj/item/areaeditor/blueprints) && !randomize) + if(user.is_holding_item_of_type(/obj/item/blueprints) && !randomize) return TRUE return FALSE diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 00ac17b3b1f..9c3343b73ec 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -237,7 +237,7 @@ return FALSE if(user.grab_state == GRAB_PASSIVE) - to_chat(user, span_warning("You must have [victim] in an aggressive grab to manipulate [victim.p_their()] [lowertext(name)]!")) + to_chat(user, span_warning("You must have [victim] in an aggressive grab to manipulate [victim.p_their()] [LOWER_TEXT(name)]!")) return TRUE if(user.grab_state >= GRAB_AGGRESSIVE) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 7304d21365c..ecefc56817c 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -73,7 +73,7 @@ if(victim.bodytemperature < (BODYTEMP_NORMAL - 10)) adjust_blood_flow(-0.1 * seconds_per_tick) if(SPT_PROB(2.5, seconds_per_tick)) - to_chat(victim, span_notice("You feel the [lowertext(name)] in your [limb.plaintext_zone] firming up from the cold!")) + to_chat(victim, span_notice("You feel the [LOWER_TEXT(name)] in your [limb.plaintext_zone] firming up from the cold!")) if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS)) adjust_blood_flow(0.25 * seconds_per_tick) // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first diff --git a/code/game/atom/atom_color.dm b/code/game/atom/atom_color.dm index e5b52460aa0..2508e86f44d 100644 --- a/code/game/atom/atom_color.dm +++ b/code/game/atom/atom_color.dm @@ -42,15 +42,15 @@ * Can optionally be supplied with a range of priorities, IE only checking "washable" or above */ /atom/proc/is_atom_colour(looking_for_color, min_priority_index = 1, max_priority_index = COLOUR_PRIORITY_AMOUNT) - // make sure uppertext hex strings don't mess with lowertext hex strings - looking_for_color = lowertext(looking_for_color) + // make sure uppertext hex strings don't mess with LOWER_TEXT hex strings + looking_for_color = LOWER_TEXT(looking_for_color) if(!LAZYLEN(atom_colours)) // no atom colors list has been set up, just check the color var - return lowertext(color) == looking_for_color + return LOWER_TEXT(color) == looking_for_color for(var/i in min_priority_index to max_priority_index) - if(lowertext(atom_colours[i]) == looking_for_color) + if(LOWER_TEXT(atom_colours[i]) == looking_for_color) return TRUE return FALSE diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 131aa6c8e9c..8df52eb9cb0 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -83,13 +83,16 @@ * [COMSIG_ATOM_GET_EXAMINE_NAME] signal */ /atom/proc/get_examine_name(mob/user) - . = "\a [src]" - var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") - if(article) - . = "[article] [src]" - override[EXAMINE_POSITION_ARTICLE] = article - if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) - . = override.Join("") + var/list/override = list(article, null, "[name]") + SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) + + if(!isnull(override[EXAMINE_POSITION_ARTICLE])) + override -= null // IF there is no "before", don't try to join it + return jointext(override, " ") + if(!isnull(override[EXAMINE_POSITION_BEFORE])) + override -= null // There is no article, don't try to join it + return "\a [jointext(override, " ")]" + return "\a [src]" ///Generate the full examine string of this atom (including icon for goonchat) /atom/proc/get_examine_string(mob/user, thats = FALSE) diff --git a/code/game/atom/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm index ea8bf9b125d..f76f00670d2 100644 --- a/code/game/atom/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -161,3 +161,5 @@ */ /atom/proc/LateInitialize() set waitfor = FALSE + SHOULD_CALL_PARENT(FALSE) + stack_trace("[src] ([type]) called LateInitialize but has nothing on it!") diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index d81f9306af4..a67e48f041c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -6,6 +6,8 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION var/datum/team/team //An alternative to 'owner': a team. Use this when writing new code. var/name = "generic objective" //Name for admin prompts var/explanation_text = "Nothing" //What that person is supposed to do. + ///if this objective doesn't print failure or success in the roundend report + var/no_failure = FALSE ///name used in printing this objective (Objective #1) var/objective_name = "Objective" var/team_explanation_text //For when there are multiple owners. @@ -99,6 +101,8 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /// Provides a string describing what a good job you did or did not do /datum/objective/proc/get_roundend_success_suffix() + if(no_failure) + return "" // Just print the objective with no success/fail evaluation, as it has no mechanical backing return check_completion() ? span_greentext("Success!") : span_redtext("Fail.") /datum/objective/proc/is_unique_objective(possible_target, dupe_search_range) @@ -356,6 +360,8 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/objective/protect/check_completion() var/obj/item/organ/internal/brain/brain_target + if(isnull(target)) + return FALSE if(human_check) brain_target = target.current?.get_organ_slot(ORGAN_SLOT_BRAIN) //Protect will always suceed when someone suicides @@ -405,7 +411,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION /datum/objective/jailbreak/detain/update_explanation_text() ..() if(target?.current) - explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] is delivered to nanotrasen alive and in custody." + explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] is delivered to Nanotrasen alive and in custody." else explanation_text = "Free objective." @@ -992,15 +998,13 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/custom name = "custom" admin_grantable = TRUE + no_failure = TRUE /datum/objective/custom/admin_edit(mob/admin) var/expl = stripped_input(admin, "Custom objective:", "Objective", explanation_text) if(expl) explanation_text = expl -/datum/objective/custom/get_roundend_success_suffix() - return "" // Just print the objective with no success/fail evaluation, as it has no mechanical backing - //Ideally this would be all of them but laziness and unusual subtypes /proc/generate_admin_objective_list() GLOB.admin_objective_list = list() diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 64b3e4420cb..c88fa7f11b1 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -529,7 +529,7 @@ /datum/objective_item/steal/blueprints name = "the station blueprints" - targetitem = /obj/item/areaeditor/blueprints + targetitem = /obj/item/blueprints excludefromjob = list(JOB_CHIEF_ENGINEER) item_owner = list(JOB_CHIEF_ENGINEER) altitems = list(/obj/item/photo) @@ -537,11 +537,11 @@ difficulty = 3 steal_hint = "The blueprints of the station, found in the Chief Engineer's locker, or on their person. A picture may suffice." -/obj/item/areaeditor/blueprints/add_stealing_item_objective() - return add_item_to_steal(src, /obj/item/areaeditor/blueprints) +/obj/item/blueprints/add_stealing_item_objective() + return add_item_to_steal(src, /obj/item/blueprints) /datum/objective_item/steal/blueprints/check_special_completion(obj/item/I) - if(istype(I, /obj/item/areaeditor/blueprints)) + if(istype(I, /obj/item/blueprints)) return TRUE if(istype(I, /obj/item/photo)) var/obj/item/photo/P = I diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index d9ceac4f7f2..8fc5dcce870 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -184,12 +184,8 @@ return INITIALIZE_HINT_LATELOAD /obj/machinery/LateInitialize() - . = ..() - power_change() - if(use_power == NO_POWER_USE) - return - update_current_power_usage() - setup_area_power_relationship() + SHOULD_NOT_OVERRIDE(TRUE) + post_machine_initialize() /obj/machinery/Destroy(force) SSmachines.unregister_machine(src) @@ -200,6 +196,20 @@ return ..() +/** + * Called in LateInitialize meant to be the machine replacement to it + * This sets up power for the machine and requires parent be called, + * ensuring power works on all machines unless exempted with NO_POWER_USE. + * This is the proc to override if you want to do anything in LateInitialize. + */ +/obj/machinery/proc/post_machine_initialize() + SHOULD_CALL_PARENT(TRUE) + power_change() + if(use_power == NO_POWER_USE) + return + update_current_power_usage() + setup_area_power_relationship() + /** * proc to call when the machine starts to require power after a duration of not requiring power * sets up power related connections to its area if it exists and becomes area sensitive @@ -663,7 +673,7 @@ update_last_used(user) . = ..() -/obj/machinery/ui_act(action, list/params) +/obj/machinery/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) add_fingerprint(usr) update_last_used(usr) if(HAS_AI_ACCESS(usr) && !GLOB.cameranet.checkTurfVis(get_turf(src))) //We check if they're an AI specifically here, so borgs can still access off-camera stuff. diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index 006620ec5f4..e59de18ffcb 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -36,8 +36,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) if(!istype(sign)) return + var/area/bar_area = get_area(src) if(change_area_name && sign.rename_area) - rename_area(src, sign.name) + rename_area(bar_area, sign.name) chosen_sign = sign update_appearance() @@ -152,7 +153,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/attackby(obj/item/attacking_item, mob/user) - if(istype(attacking_item, /obj/item/areaeditor/blueprints) && !change_area_name) + if(istype(attacking_item, /obj/item/blueprints) && !change_area_name) if(!panel_open) balloon_alert(user, "open the panel first!") return TRUE diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index ed896cc7576..b096633a9c1 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -110,7 +110,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) for(var/network_name in network) network -= network_name - network += lowertext(network_name) + network += LOWER_TEXT(network_name) GLOB.cameranet.cameras += src diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm index 48bf4ccabaa..15f22d02cbe 100644 --- a/code/game/machinery/camera/camera_construction.dm +++ b/code/game/machinery/camera/camera_construction.dm @@ -39,7 +39,7 @@ return ITEM_INTERACT_BLOCKING for(var/i in tempnetwork) tempnetwork -= i - tempnetwork += lowertext(i) + tempnetwork += LOWER_TEXT(i) camera_construction_state = CAMERA_STATE_FINISHED toggle_cam(user, displaymessage = FALSE) network = tempnetwork diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index bb9ef7d3fc5..2cd0506cbfd 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -66,7 +66,7 @@ /** * Autonaming camera - * Automatically names itself after the area it's in during LateInitialize, + * Automatically names itself after the area it's in during post_machine_initialize, * good for mappers who don't want to manually name them all. */ /obj/machinery/camera/autoname @@ -76,7 +76,7 @@ ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/camera/autoname/LateInitialize() +/obj/machinery/camera/autoname/post_machine_initialize() . = ..() var/static/list/autonames_in_areas = list() var/area/camera_area = get_area(src) diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index 2d284b17b67..d2a584a1675 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -60,7 +60,7 @@ pad_ref = WEAKREF(I.buffer) return TRUE -/obj/machinery/computer/piratepad_control/civilian/LateInitialize() +/obj/machinery/computer/piratepad_control/civilian/post_machine_initialize() . = ..() if(cargo_hold_id) for(var/obj/machinery/piratepad/civilian/C as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/piratepad/civilian)) diff --git a/code/game/machinery/computer/arcade/_arcade.dm b/code/game/machinery/computer/arcade/_arcade.dm new file mode 100644 index 00000000000..1bfd43cdb69 --- /dev/null +++ b/code/game/machinery/computer/arcade/_arcade.dm @@ -0,0 +1,104 @@ +/obj/machinery/computer/arcade + name = "\proper the arcade cabinet which shouldn't exist" + desc = "This arcade cabinet has no games installed, and in fact, should not exist. \ + Report the location of this machine to your local diety." + icon_state = "arcade" + icon_keyboard = null + icon_screen = "invaders" + light_color = LIGHT_COLOR_GREEN + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY + + ///If set, will dispense these as prizes instead of the default GLOB.arcade_prize_pool + ///Like prize pool, it must be a list of the prize and the weight of being selected. + var/list/prize_override + +/obj/machinery/computer/arcade/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + + if(istype(tool, /obj/item/stack/arcadeticket)) + var/obj/item/stack/arcadeticket/tickets = tool + if(!tickets.use(2)) + balloon_alert(user, "need 2 tickets!") + return ITEM_INTERACT_BLOCKING + + prizevend(user) + balloon_alert(user, "prize claimed") + return ITEM_INTERACT_SUCCESS + + if(istype(tool, /obj/item/key/displaycase) || istype(tool, /obj/item/access_key)) + var/static/list/radial_menu_options + if(!radial_menu_options) + radial_menu_options = list( + "Reset Cabinet" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_reset"), + "Cancel" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_close"), + ) + var/radial_reset_menu = show_radial_menu(user, src, radial_menu_options, require_near = TRUE) + if(radial_reset_menu != "Reset Cabinet") + return ITEM_INTERACT_BLOCKING + playsound(loc, 'sound/items/rattling_keys.ogg', 25, TRUE) + if(!do_after(user, 10 SECONDS, src)) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "cabinet reset") + reset_cabinet(user) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/computer/arcade/screwdriver_act(mob/living/user, obj/item/I) + //you can't stop playing when you start. + if(obj_flags & EMAGGED) + return ITEM_INTERACT_BLOCKING + return ..() + +///Performs a factory reset of the cabinet and wipes all its stats. +/obj/machinery/computer/arcade/proc/reset_cabinet(mob/living/user) + SHOULD_CALL_PARENT(TRUE) + obj_flags &= ~EMAGGED + SStgui.update_uis(src) + +/obj/machinery/computer/arcade/emp_act(severity) + . = ..() + if((machine_stat & (NOPOWER|BROKEN)) || (. & EMP_PROTECT_SELF)) + return + + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(var/i = num_of_prizes; i > 0; i--) + if(prize_override) + empprize = pick_weight(prize_override) + else + empprize = pick_weight(GLOB.arcade_prize_pool) + new empprize(loc) + explosion(src, devastation_range = -1, light_impact_range = 1 + num_of_prizes, flame_range = 1 + num_of_prizes) + +///Dispenses the proper prizes and gives them a positive mood event. If valid, has a small chance to give a pulse rifle. +/obj/machinery/computer/arcade/proc/prizevend(mob/living/user, prizes = 1) + SEND_SIGNAL(src, COMSIG_ARCADE_PRIZEVEND, user, prizes) + if(user.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && HAS_TRAIT(user, TRAIT_GAMERGOD)) + visible_message("[user] inputs an intense cheat code!",\ + span_notice("You hear a flurry of buttons being pressed.")) + say("CODE ACTIVATED: EXTRA PRIZES.") + prizes *= 2 + for(var/i in 1 to prizes) + user.add_mood_event("arcade", /datum/mood_event/arcade) + if(prob(0.0001)) //1 in a million + new /obj/item/gun/energy/pulse/prize(src) + visible_message(span_notice("[src] dispenses.. woah, a gun! Way past cool."), span_notice("You hear a chime and a shot.")) + user.client.give_award(/datum/award/achievement/misc/pulse, user) + continue + + var/prizeselect + if(prize_override) + prizeselect = pick_weight(prize_override) + else + prizeselect = pick_weight(GLOB.arcade_prize_pool) + var/atom/movable/the_prize = new prizeselect(get_turf(src)) + playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) + visible_message(span_notice("[src] dispenses [the_prize]!"), span_notice("You hear a chime and a clunk.")) + + diff --git a/code/game/machinery/computer/arcade/amputation.dm b/code/game/machinery/computer/arcade/amputation.dm new file mode 100644 index 00000000000..84a02af387a --- /dev/null +++ b/code/game/machinery/computer/arcade/amputation.dm @@ -0,0 +1,47 @@ +/obj/machinery/computer/arcade/amputation + name = "Mediborg's Amputation Adventure" + desc = "A picture of a blood-soaked medical cyborg flashes on the screen. \ + The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a coward!\"" + icon_state = "arcade" + circuit = /obj/item/circuitboard/computer/arcade/amputation + interaction_flags_machine = NONE //borgs can't play, but the illiterate can. + +/obj/machinery/computer/arcade/amputation/attack_tk(mob/user) + return //that's a pretty damn big guillotine + +/obj/machinery/computer/arcade/amputation/attack_hand(mob/user, list/modifiers) + . = ..() + if(!iscarbon(user)) + return + to_chat(user, span_warning("You move your hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it...")) + user.played_game() + var/obj/item/bodypart/chopchop = user.get_active_hand() + if(do_after(user, 5 SECONDS, target = src, extra_checks = CALLBACK(src, PROC_REF(do_they_still_have_that_hand), user, chopchop))) + playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) + to_chat(user, span_userdanger("The guillotine drops on your arm, and the machine sucks it in!")) + chopchop.dismember() + qdel(chopchop) + user.mind?.adjust_experience(/datum/skill/gaming, 100) + user.won_game() + playsound(src, 'sound/arcade/win.ogg', 50, TRUE) + new /obj/item/stack/arcadeticket((get_turf(src)), rand(6,10)) + to_chat(user, span_notice("[src] dispenses a handful of tickets!")) + return + if(!do_they_still_have_that_hand(user, chopchop)) + to_chat(user, span_warning("The guillotine drops, but your hand seems to be gone already!")) + playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) + else + to_chat(user, span_notice("You (wisely) decide against putting your hand in the machine.")) + user.lost_game() + +///Makes sure the user still has their starting hand, preventing the user from pulling the arm out and still getting prizes. +/obj/machinery/computer/arcade/amputation/proc/do_they_still_have_that_hand(mob/user, obj/item/bodypart/chopchop) + if(QDELETED(chopchop) || chopchop.owner != user) + return FALSE + return TRUE + +///Dispenses wrapped gifts instead of arcade prizes, also known as the ancap christmas tree +/obj/machinery/computer/arcade/amputation/festive + name = "Mediborg's Festive Amputation Adventure" + desc = "A picture of a blood-soaked medical cyborg wearing a Santa hat flashes on the screen. The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a coward!\"" + prize_override = list(/obj/item/gift/anything = 1) diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm deleted file mode 100644 index 91a10673dd6..00000000000 --- a/code/game/machinery/computer/arcade/arcade.dm +++ /dev/null @@ -1,701 +0,0 @@ -GLOBAL_LIST_INIT(arcade_prize_pool, list( - /obj/item/storage/box/snappops = 2, - /obj/item/toy/talking/ai = 2, - /obj/item/toy/talking/codex_gigas = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, - /obj/item/gun/ballistic/shotgun/toy/crossbow = 2, - /obj/item/storage/box/fakesyndiesuit = 2, - /obj/item/storage/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/spinningtoy/dark_matter = 1, - /obj/item/toy/balloon/arrest = 2, - /obj/item/toy/mecha/ripley = 1, - /obj/item/toy/mecha/ripleymkii = 1, - /obj/item/toy/mecha/hauler = 1, - /obj/item/toy/mecha/clarke = 1, - /obj/item/toy/mecha/odysseus = 1, - /obj/item/toy/mecha/gygax = 1, - /obj/item/toy/mecha/durand = 1, - /obj/item/toy/mecha/savannahivanov = 1, - /obj/item/toy/mecha/phazon = 1, - /obj/item/toy/mecha/honk = 1, - /obj/item/toy/mecha/darkgygax = 1, - /obj/item/toy/mecha/mauler = 1, - /obj/item/toy/mecha/darkhonk = 1, - /obj/item/toy/mecha/deathripley = 1, - /obj/item/toy/mecha/reticence = 1, - /obj/item/toy/mecha/marauder = 1, - /obj/item/toy/mecha/seraph = 1, - /obj/item/toy/mecha/firefighter = 1, - /obj/item/toy/cards/deck = 2, - /obj/item/toy/nuke = 2, - /obj/item/toy/minimeteor = 2, - /obj/item/toy/redbutton = 2, - /obj/item/toy/talking/owl = 2, - /obj/item/toy/talking/griffin = 2, - /obj/item/coin/antagtoken = 2, - /obj/item/stack/tile/fakepit/loaded = 2, - /obj/item/stack/tile/eighties/loaded = 2, - /obj/item/toy/toy_xeno = 2, - /obj/item/storage/box/actionfigure = 1, - /obj/item/restraints/handcuffs/fake = 2, - /obj/item/grenade/chem_grenade/glitter/pink = 1, - /obj/item/grenade/chem_grenade/glitter/blue = 1, - /obj/item/grenade/chem_grenade/glitter/white = 1, - /obj/item/toy/eightball = 2, - /obj/item/toy/windup_toolbox = 2, - /obj/item/toy/clockwork_watch = 2, - /obj/item/toy/toy_dagger = 2, - /obj/item/extendohand/acme = 1, - /obj/item/hot_potato/harmless/toy = 1, - /obj/item/card/emagfake = 1, - /obj/item/clothing/shoes/wheelys = 2, - /obj/item/clothing/shoes/kindle_kicks = 2, - /obj/item/toy/plush/goatplushie = 2, - /obj/item/toy/plush/moth = 2, - /obj/item/toy/plush/pkplush = 2, - /obj/item/toy/plush/rouny = 2, - /obj/item/toy/plush/abductor = 2, - /obj/item/toy/plush/abductor/agent = 2, - /obj/item/toy/plush/shark = 2, - /obj/item/storage/belt/military/snack/full = 2, - /obj/item/toy/brokenradio = 2, - /obj/item/toy/braintoy = 2, - /obj/item/toy/eldritch_book = 2, - /obj/item/storage/box/heretic_box = 1, - /obj/item/toy/foamfinger = 2, - /obj/item/clothing/glasses/trickblindfold = 2, - /obj/item/clothing/mask/party_horn = 2, - /obj/item/storage/box/party_poppers = 2)) - -/obj/machinery/computer/arcade - name = "\proper the arcade cabinet which shouldn't exist" - desc = "This arcade cabinet has no games installed, and in fact, should not exist. \ - Report the location of this machine to your local diety." - icon_state = "arcade" - icon_keyboard = null - icon_screen = "invaders" - light_color = LIGHT_COLOR_GREEN - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON - var/list/prize_override - -/obj/machinery/computer/arcade/proc/Reset() - return - -/obj/machinery/computer/arcade/Initialize(mapload) - . = ..() - - Reset() - -/obj/machinery/computer/arcade/proc/prizevend(mob/living/user, prizes = 1) - SEND_SIGNAL(src, COMSIG_ARCADE_PRIZEVEND, user, prizes) - if(user.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && HAS_TRAIT(user, TRAIT_GAMERGOD)) - visible_message("[user] inputs an intense cheat code!",\ - span_notice("You hear a flurry of buttons being pressed.")) - say("CODE ACTIVATED: EXTRA PRIZES.") - prizes *= 2 - for(var/i in 1 to prizes) - user.add_mood_event("arcade", /datum/mood_event/arcade) - if(prob(0.0001)) //1 in a million - new /obj/item/gun/energy/pulse/prize(src) - visible_message(span_notice("[src] dispenses.. woah, a gun! Way past cool."), span_notice("You hear a chime and a shot.")) - user.client.give_award(/datum/award/achievement/misc/pulse, user) - return - - var/prizeselect - if(prize_override) - prizeselect = pick_weight(prize_override) - else - prizeselect = pick_weight(GLOB.arcade_prize_pool) - var/atom/movable/the_prize = new prizeselect(get_turf(src)) - playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) - visible_message(span_notice("[src] dispenses [the_prize]!"), span_notice("You hear a chime and a clunk.")) - -/obj/machinery/computer/arcade/emp_act(severity) - . = ..() - var/override = FALSE - if(prize_override) - override = TRUE - - if(machine_stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_SELF) - return - - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if(1) - num_of_prizes = rand(1,4) - if(2) - num_of_prizes = rand(0,2) - for(var/i = num_of_prizes; i > 0; i--) - if(override) - empprize = pick_weight(prize_override) - else - empprize = pick_weight(GLOB.arcade_prize_pool) - new empprize(loc) - explosion(src, devastation_range = -1, light_impact_range = 1+num_of_prizes, flame_range = 1+num_of_prizes) - -/obj/machinery/computer/arcade/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . - if(!istype(tool, /obj/item/stack/arcadeticket)) - return . - - var/obj/item/stack/arcadeticket/tickets = tool - if(!tickets.use(2)) - balloon_alert(user, "need 2 tickets!") - return ITEM_INTERACT_BLOCKING - - prizevend(user) - balloon_alert(user, "prize claimed") - return ITEM_INTERACT_SUCCESS - -// ** BATTLE ** // -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "Does not support Pinball." - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/battle - - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE // we don't need to be literate to play video games fam - - var/enemy_name = "Space Villain" - ///Enemy health/attack points - var/enemy_hp = 100 - var/enemy_mp = 40 - ///Temporary message, for attack messages, etc - var/temp = "

    Winners don't use space drugs

    " - ///the list of passive skill the enemy currently has. the actual passives are added in the enemy_setup() proc - var/list/enemy_passive - ///if all the enemy's weakpoints have been triggered becomes TRUE - var/finishing_move = FALSE - ///linked to passives, when it's equal or above the max_passive finishing move will become TRUE - var/pissed_off = 0 - ///the number of passives the enemy will start with - var/max_passive = 3 - ///weapon wielded by the enemy, the shotgun doesn't count. - var/chosen_weapon - - ///Player health - var/player_hp = 85 - ///player magic points - var/player_mp = 20 - ///used to remember the last three move of the player before this turn. - var/list/last_three_move - ///if the enemy or player died. restart the game when TRUE - var/gameover = FALSE - ///the player cannot make any move while this is set to TRUE. should only TRUE during enemy turns. - var/blocked = FALSE - ///used to clear the enemy_action proc timer when the game is restarted - var/timer_id - ///weapon used by the enemy, pure fluff.for certain actions - var/list/weapons - ///unique to the emag mode, acts as a time limit where the player dies when it reaches 0. - var/bomb_cooldown = 19 - - -///creates the enemy base stats for a new round along with the enemy passives -/obj/machinery/computer/arcade/battle/proc/enemy_setup(player_skill) - player_hp = 85 - player_mp = 20 - enemy_hp = 100 - enemy_mp = 40 - gameover = FALSE - blocked = FALSE - finishing_move = FALSE - pissed_off = 0 - last_three_move = null - - enemy_passive = list("short_temper" = TRUE, "poisonous" = TRUE, "smart" = TRUE, "shotgun" = TRUE, "magical" = TRUE, "chonker" = TRUE) - for(var/i = LAZYLEN(enemy_passive); i > max_passive; i--) //we'll remove passives from the list until we have the number of passive we want - var/picked_passive = pick(enemy_passive) - LAZYREMOVE(enemy_passive, picked_passive) - - if(LAZYACCESS(enemy_passive, "chonker")) - enemy_hp += 20 - - if(LAZYACCESS(enemy_passive, "shotgun")) - chosen_weapon = "shotgun" - else if(weapons) - chosen_weapon = pick(weapons) - else - chosen_weapon = "null gun" //if the weapons list is somehow empty, shouldn't happen but runtimes are sneaky bastards. - - if(player_skill) - player_hp += player_skill * 2 - - -/obj/machinery/computer/arcade/battle/Reset() - max_passive = 3 - var/name_action - var/name_part1 - var/name_part2 - - if(check_holidays(HALLOWEEN)) - name_action = pick_list(ARCADE_FILE, "rpg_action_halloween") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_halloween") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_halloween") - weapons = strings(ARCADE_FILE, "rpg_weapon_halloween") - else if(check_holidays(CHRISTMAS)) - name_action = pick_list(ARCADE_FILE, "rpg_action_xmas") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_xmas") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_xmas") - weapons = strings(ARCADE_FILE, "rpg_weapon_xmas") - else if(check_holidays(VALENTINES)) - name_action = pick_list(ARCADE_FILE, "rpg_action_valentines") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_valentines") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_valentines") - weapons = strings(ARCADE_FILE, "rpg_weapon_valentines") - else - name_action = pick_list(ARCADE_FILE, "rpg_action") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy") - weapons = strings(ARCADE_FILE, "rpg_weapon") - - enemy_name = ("The " + name_part1 + " " + name_part2) - name = (name_action + " " + enemy_name) - - enemy_setup(0) //in the case it's reset we assume the player skill is 0 because the VOID isn't a gamer - - -/obj/machinery/computer/arcade/battle/ui_interact(mob/user) - . = ..() - screen_setup(user) - - -///sets up the main screen for the user -/obj/machinery/computer/arcade/battle/proc/screen_setup(mob/user) - var/dat = "Close" - dat += "

    [enemy_name]

    " - - dat += "[temp]" - dat += "
    Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
    " - - if (gameover) - dat += "
    New Game" - else - dat += "
    Light attack" - dat += "
    Defend" - dat += "
    Counter attack" - dat += "
    Power attack" - - dat += "
    " - if(user.client) //mainly here to avoid a runtime when the player gets gibbed when losing the emag mode. - var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") - popup.set_content(dat) - popup.open() - - -/obj/machinery/computer/arcade/battle/Topic(href, href_list) - if(..()) - return - var/gamerSkill = 0 - if(usr?.mind) - gamerSkill = usr.mind.get_skill_level(/datum/skill/gaming) - - usr.played_game() - - if (!blocked && !gameover) - var/attackamt = rand(5,7) + rand(0, gamerSkill) - - if(finishing_move) //time to bonk that fucker,cuban pete will sometime survive a finishing move. - attackamt *= 100 - - //light attack suck absolute ass but it doesn't cost any MP so it's pretty good to finish an enemy off - if (href_list["attack"]) - temp = "

    you do quick jab for [attackamt] of damage!

    " - enemy_hp -= attackamt - arcade_action(usr,"attack",attackamt) - - //defend lets you gain back MP and take less damage from non magical attack. - else if(href_list["defend"]) - temp = "

    you take a defensive stance and gain back 10 mp!

    " - player_mp += 10 - arcade_action(usr,"defend",attackamt) - playsound(src, 'sound/arcade/mana.ogg', 50, TRUE, extrarange = -3) - - //mainly used to counter short temper and their absurd damage, will deal twice the damage the player took of a non magical attack. - else if(href_list["counter_attack"] && player_mp >= 10) - temp = "

    you prepare yourself to counter the next attack!

    " - player_mp -= 10 - arcade_action(usr,"counter_attack",attackamt) - playsound(src, 'sound/arcade/mana.ogg', 50, TRUE, extrarange = -3) - - else if(href_list["counter_attack"] && player_mp < 10) - temp = "

    you don't have the mp necessary to counter attack and defend yourself instead

    " - player_mp += 10 - arcade_action(usr,"defend",attackamt) - playsound(src, 'sound/arcade/mana.ogg', 50, TRUE, extrarange = -3) - - //power attack deals twice the amount of damage but is really expensive MP wise, mainly used with combos to get weakpoints. - else if (href_list["power_attack"] && player_mp >= 20) - temp = "

    You attack [enemy_name] with all your might for [attackamt * 2] damage!

    " - enemy_hp -= attackamt * 2 - player_mp -= 20 - arcade_action(usr,"power_attack",attackamt) - - else if(href_list["power_attack"] && player_mp < 20) - temp = "

    You don't have the mp necessary for a power attack and settle for a light attack!

    " - enemy_hp -= attackamt - arcade_action(usr,"attack",attackamt) - - if (href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - else if (href_list["newgame"]) //Reset everything - temp = "

    New Round

    " - - if(obj_flags & EMAGGED) - Reset() - obj_flags &= ~EMAGGED - - enemy_setup(gamerSkill) - screen_setup(usr) - - - add_fingerprint(usr) - return - - -///happens after a player action and before the enemy turn. the enemy turn will be cancelled if there's a gameover. -/obj/machinery/computer/arcade/battle/proc/arcade_action(mob/user,player_stance,attackamt) - screen_setup(user) - blocked = TRUE - if(player_stance == "attack" || player_stance == "power_attack") - if(attackamt > 40) - playsound(src, 'sound/arcade/boom.ogg', 50, TRUE, extrarange = -3) - else - playsound(src, 'sound/arcade/hit.ogg', 50, TRUE, extrarange = -3) - - timer_id = addtimer(CALLBACK(src, PROC_REF(enemy_action),player_stance,user),1 SECONDS,TIMER_STOPPABLE) - gameover_check(user) - - -///the enemy turn, the enemy's action entirely depend on their current passive and a teensy tiny bit of randomness -/obj/machinery/computer/arcade/battle/proc/enemy_action(player_stance,mob/user) - var/list/list_temp = list() - - switch(LAZYLEN(last_three_move)) //we keep the last three action of the player in a list here - if(0 to 2) - LAZYADD(last_three_move, player_stance) - if(3) - for(var/i in 1 to 2) - last_three_move[i] = last_three_move[i + 1] - last_three_move[3] = player_stance - - if(4 to INFINITY) - last_three_move = null //this shouldn't even happen but we empty the list if it somehow goes above 3 - - var/enemy_stance - var/attack_amount = rand(8,10) //making the attack amount not vary too much so that it's easier to see if the enemy has a shotgun - - if(player_stance == "defend") - attack_amount -= 5 - - //if emagged, cuban pete will set up a bomb acting up as a timer. when it reaches 0 the player fucking dies - if(obj_flags & EMAGGED) - switch(bomb_cooldown--) - if(18) - list_temp += "

    [enemy_name] takes two valve tank and links them together, what's he planning?

    " - if(15) - list_temp += "

    [enemy_name] adds a remote control to the tan- ho god is that a bomb?

    " - if(12) - list_temp += "

    [enemy_name] throws the bomb next to you, you'r too scared to pick it up.

    " - if(6) - list_temp += "

    [enemy_name]'s hand brushes the remote linked to the bomb, your heart skipped a beat.

    " - if(2) - list_temp += "

    [enemy_name] is going to press the button! It's now or never!

    " - if(0) - player_hp -= attack_amount * 1000 //hey it's a maxcap we might as well go all in - - //yeah I used the shotgun as a passive, you know why? because the shotgun gives +5 attack which is pretty good - if(LAZYACCESS(enemy_passive, "shotgun")) - if(weakpoint_check("shotgun","defend","defend","power_attack")) - list_temp += "

    You manage to disarm [enemy_name] with a surprise power attack and shoot him with his shotgun until it runs out of ammo!

    " - enemy_hp -= 10 - chosen_weapon = "empty shotgun" - else - attack_amount += 5 - - //heccing chonker passive, only gives more HP at the start of a new game but has one of the hardest weakpoint to trigger. - if(LAZYACCESS(enemy_passive, "chonker")) - if(weakpoint_check("chonker","power_attack","power_attack","power_attack")) - list_temp += "

    After a lot of power attacks you manage to tip over [enemy_name] as they fall over their enormous weight

    " - enemy_hp -= 30 - - //smart passive trait, mainly works in tandem with other traits, makes the enemy unable to be counter_attacked - if(LAZYACCESS(enemy_passive, "smart")) - if(weakpoint_check("smart","defend","defend","attack")) - list_temp += "

    [enemy_name] is confused by your illogical strategy!

    " - attack_amount -= 5 - - else if(attack_amount >= player_hp) - player_hp -= attack_amount - list_temp += "

    [enemy_name] figures out you are really close to death and finishes you off with their [chosen_weapon]!

    " - enemy_stance = "attack" - - else if(player_stance == "counter_attack") - list_temp += "

    [enemy_name] is not taking your bait.

    " - if(LAZYACCESS(enemy_passive, "short_temper")) - list_temp += "However controlling their hatred of you still takes a toll on their mental and physical health!" - enemy_hp -= 5 - enemy_mp -= 5 - enemy_stance = "defensive" - - //short temper passive trait, gets easily baited into being counter attacked but will bypass your counter when low on HP - if(LAZYACCESS(enemy_passive, "short_temper")) - if(weakpoint_check("short_temper","counter_attack","counter_attack","counter_attack")) - list_temp += "

    [enemy_name] is getting frustrated at all your counter attacks and throws a tantrum!

    " - enemy_hp -= attack_amount - - else if(player_stance == "counter_attack") - if(!(LAZYACCESS(enemy_passive, "smart")) && enemy_hp > 30) - list_temp += "

    [enemy_name] took the bait and allowed you to counter attack for [attack_amount * 2] damage!

    " - player_hp -= attack_amount - enemy_hp -= attack_amount * 2 - enemy_stance = "attack" - - else if(enemy_hp <= 30) //will break through the counter when low enough on HP even when smart. - list_temp += "

    [enemy_name] is getting tired of your tricks and breaks through your counter with their [chosen_weapon]!

    " - player_hp -= attack_amount - enemy_stance = "attack" - - else if(!enemy_stance) - var/added_temp - - if(rand()) - added_temp = "you for [attack_amount + 5] damage!" - player_hp -= attack_amount + 5 - enemy_stance = "attack" - else - added_temp = "the wall, breaking their skull in the process and losing [attack_amount] hp!" //[enemy_name] you have a literal dent in your skull - enemy_hp -= attack_amount - enemy_stance = "attack" - - list_temp += "

    [enemy_name] grits their teeth and charge right into [added_temp]

    " - - //in the case none of the previous passive triggered, Mainly here to set an enemy stance for passives that needs it like the magical passive. - if(!enemy_stance) - enemy_stance = pick("attack","defensive") - if(enemy_stance == "attack") - player_hp -= attack_amount - list_temp += "

    [enemy_name] attacks you for [attack_amount] points of damage with their [chosen_weapon]

    " - if(player_stance == "counter_attack") - enemy_hp -= attack_amount * 2 - list_temp += "

    You counter [enemy_name]'s attack and deal [attack_amount * 2] points of damage!

    " - - if(enemy_stance == "defensive" && enemy_mp < 15) - list_temp += "

    [enemy_name] take some time to get some mp back!

    " - enemy_mp += attack_amount - - else if (enemy_stance == "defensive" && enemy_mp >= 15 && !(LAZYACCESS(enemy_passive, "magical"))) - list_temp += "

    [enemy_name] quickly heal themselves for 5 hp!

    " - enemy_mp -= 15 - enemy_hp += 5 - - //magical passive trait, recharges MP nearly every turn it's not blasting you with magic. - if(LAZYACCESS(enemy_passive, "magical")) - if(player_mp >= 50) - list_temp += "

    the huge amount of magical energy you have acumulated throws [enemy_name] off balance!

    " - enemy_mp = 0 - LAZYREMOVE(enemy_passive, "magical") - pissed_off++ - - else if(LAZYACCESS(enemy_passive, "smart") && player_stance == "counter_attack" && enemy_mp >= 20) - list_temp += "

    [enemy_name] blasts you with magic from afar for 10 points of damage before you can counter!

    " - player_hp -= 10 - enemy_mp -= 20 - - else if(enemy_hp >= 20 && enemy_mp >= 40 && enemy_stance == "defensive") - list_temp += "

    [enemy_name] Blasts you with magic from afar!

    " - enemy_mp -= 40 - player_hp -= 30 - enemy_stance = "attack" - - else if(enemy_hp < 20 && enemy_mp >= 20 && enemy_stance == "defensive") //it's a pretty expensive spell so they can't spam it that much - list_temp += "

    [enemy_name] heal themselves with magic and gain back 20 hp!

    " - enemy_hp += 20 - enemy_mp -= 30 - else - list_temp += "

    [enemy_name]'s magical nature lets them get some mp back!

    " - enemy_mp += attack_amount - - //poisonous passive trait, while it's less damage added than the shotgun it acts up even when the enemy doesn't attack at all. - if(LAZYACCESS(enemy_passive, "poisonous")) - if(weakpoint_check("poisonous","attack","attack","attack")) - list_temp += "

    your flurry of attack throws back the poisonnous gas at [enemy_name] and makes them choke on it!

    " - enemy_hp -= 5 - else - list_temp += "

    the stinky breath of [enemy_name] hurts you for 3 hp!

    " - player_hp -= 3 - - //if all passive's weakpoint have been triggered, set finishing_move to TRUE - if(pissed_off >= max_passive && !finishing_move) - list_temp += "

    You have weakened [enemy_name] enough for them to show their weak point, you will do 10 times as much damage with your next attack!

    " - finishing_move = TRUE - - playsound(src, 'sound/arcade/heal.ogg', 50, TRUE, extrarange = -3) - - temp = list_temp.Join() - gameover_check(user) - screen_setup(user) - blocked = FALSE - - -/obj/machinery/computer/arcade/battle/proc/gameover_check(mob/user) - var/xp_gained = 0 - if(enemy_hp <= 0) - if(!gameover) - if(timer_id) - deltimer(timer_id) - timer_id = null - if(player_hp <= 0) - player_hp = 1 //let's just pretend the enemy didn't kill you so not both the player and enemy look dead. - gameover = TRUE - blocked = FALSE - temp = "

    [enemy_name] has fallen! Rejoice!

    " - playsound(loc, 'sound/arcade/win.ogg', 50, TRUE) - - if(obj_flags & EMAGGED) - new /obj/effect/spawner/newbomb/plasma(loc, /obj/item/assembly/timer) - new /obj/item/clothing/head/collectable/petehat(loc) - message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") - usr.log_message("outbombed Cuban Pete and has been awarded a bomb.", LOG_GAME) - Reset() - obj_flags &= ~EMAGGED - xp_gained += 100 - else - new /obj/item/stack/arcadeticket((get_turf(src)), 2) - to_chat(user, span_notice("[src] dispenses 2 tickets!")) - xp_gained += 50 - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) - user.won_game() - - else if(player_hp <= 0) - if(timer_id) - deltimer(timer_id) - timer_id = null - gameover = TRUE - temp = "

    You have been crushed! GAME OVER

    " - playsound(loc, 'sound/arcade/lose.ogg', 50, TRUE) - xp_gained += 10//pity points - if(obj_flags & EMAGGED) - var/mob/living/living_user = user - if (istype(living_user)) - living_user.investigate_log("has been gibbed by an emagged Orion Trail game.", INVESTIGATE_DEATHS) - living_user.gib(DROP_ALL_REMAINS) - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) - user.lost_game() - - if(gameover) - user?.mind?.adjust_experience(/datum/skill/gaming, xp_gained+1)//always gain at least 1 point of XP - - -///used to check if the last three move of the player are the one we want in the right order and if the passive's weakpoint has been triggered yet -/obj/machinery/computer/arcade/battle/proc/weakpoint_check(passive,first_move,second_move,third_move) - if(LAZYLEN(last_three_move) < 3) - return FALSE - - if(last_three_move[1] == first_move && last_three_move[2] == second_move && last_three_move[3] == third_move && LAZYACCESS(enemy_passive, passive)) - LAZYREMOVE(enemy_passive, passive) - pissed_off++ - return TRUE - else - return FALSE - - -/obj/machinery/computer/arcade/battle/Destroy() - enemy_passive = null - weapons = null - last_three_move = null - return ..() //well boys we did it, lists are no more - -/obj/machinery/computer/arcade/battle/examine_more(mob/user) - . = ..() - . += span_notice("You notice some writing scribbled on the side of [src]...") - . += "\t[span_info("smart -> defend, defend, light attack")]" - . += "\t[span_info("shotgun -> defend, defend, power attack")]" - . += "\t[span_info("short temper -> counter, counter, counter")]" - . += "\t[span_info("poisonous -> light attack, light attack, light attack")]" - . += "\t[span_info("chonker -> power attack, power attack, power attack")]" - . += "\t[span_info("magical -> defend until outmagiced")]" - return . - -/obj/machinery/computer/arcade/battle/emag_act(mob/user, obj/item/card/emag/emag_card) - if(obj_flags & EMAGGED) - return FALSE - - balloon_alert(user, "hard mode enabled") - to_chat(user, span_warning("A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!")) - temp = "

    If you die in the game, you die for real!

    " - max_passive = 6 - bomb_cooldown = 18 - var/gamerSkill = 0 - if(user?.mind) - gamerSkill = user.mind.get_skill_level(/datum/skill/gaming) - enemy_setup(gamerSkill) - enemy_hp += 100 //extra HP just to make cuban pete even more bullshit - player_hp += 30 //the player will also get a few extra HP in order to have a fucking chance - - screen_setup(user) - gameover = FALSE - - obj_flags |= EMAGGED - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - updateUsrDialog() - return TRUE - -// ** AMPUTATION ** // - -/obj/machinery/computer/arcade/amputation - name = "Mediborg's Amputation Adventure" - desc = "A picture of a blood-soaked medical cyborg flashes on the screen. The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a coward!\"" - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/amputation - -/obj/machinery/computer/arcade/amputation/attack_tk(mob/user) - return //that's a pretty damn big guillotine - -/obj/machinery/computer/arcade/amputation/attack_hand(mob/user, list/modifiers) - . = ..() - if(!iscarbon(user)) - return - to_chat(user, span_warning("You move your hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it...")) - user.played_game() - var/obj/item/bodypart/chopchop = user.get_active_hand() - if(do_after(user, 5 SECONDS, target = src, extra_checks = CALLBACK(src, PROC_REF(do_they_still_have_that_hand), user, chopchop))) - playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) - to_chat(user, span_userdanger("The guillotine drops on your arm, and the machine sucks it in!")) - chopchop.dismember() - qdel(chopchop) - user.mind?.adjust_experience(/datum/skill/gaming, 100) - user.won_game() - playsound(src, 'sound/arcade/win.ogg', 50, TRUE) - new /obj/item/stack/arcadeticket((get_turf(src)), rand(6,10)) - to_chat(user, span_notice("[src] dispenses a handful of tickets!")) - return - else if(!do_they_still_have_that_hand(user, chopchop)) - to_chat(user, span_warning("The guillotine drops, but your hand seems to be gone already!")) - playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) - else - to_chat(user, span_notice("You (wisely) decide against putting your hand in the machine.")) - user.lost_game() - -///Makes sure the user still has their starting hand. -/obj/machinery/computer/arcade/amputation/proc/do_they_still_have_that_hand(mob/user, obj/item/bodypart/chopchop) - if(QDELETED(chopchop) || chopchop.owner != user) //No pulling your arm out of the machine! - return FALSE - return TRUE - - -/obj/machinery/computer/arcade/amputation/festive //dispenses wrapped gifts instead of arcade prizes, also known as the ancap christmas tree - name = "Mediborg's Festive Amputation Adventure" - desc = "A picture of a blood-soaked medical cyborg wearing a Santa hat flashes on the screen. The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a coward!\"" - prize_override = list(/obj/item/gift/anything = 1) diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm new file mode 100644 index 00000000000..5586f3f8b22 --- /dev/null +++ b/code/game/machinery/computer/arcade/battle.dm @@ -0,0 +1,555 @@ +///How many enemies needs to be defeated until the 'Boss' of the stage appears. +#define WORLD_ENEMY_BOSS 2 +///The default amount of EXP you gain from killing an enemy, modifiers stacked on top of this. +#define DEFAULT_EXP_GAIN 50 +///The default cost to purchase an item. Sleeping at the Inn is half of this. +#define DEFAULT_ITEM_PRICE 30 + +///The max HP the player can have at any time. +#define PLAYER_MAX_HP 100 +///The max MP the player can have at any time. +#define PLAYER_MAX_MP 50 +///The default cost of a spell, in MP. Defending will instead restore this amount. +#define SPELL_MP_COST 10 + +///The player is currently in the Shop. +#define UI_PANEL_SHOP "Shop" +///The player is currently in the World Map. +#define UI_PANEL_WORLD_MAP "World Map" +///The player is currently in Batle. +#define UI_PANEL_BATTLE "Battle" +///The player is currently between battles. +#define UI_PANEL_BETWEEN_FIGHTS "Between Battle" +///The player is currently Game Overed. +#define UI_PANEL_GAMEOVER "Game Over" + +///The player is set to counterattack the enemy's next move. +#define BATTLE_ATTACK_FLAG_COUNTERATTACK (1<<0) +///The player is set to defend against the enemy's next move. +#define BATTLE_ATTACK_FLAG_DEFEND (1<<1) + +///The player is trying to Attack the Enemy. +#define BATTLE_ARCADE_PLAYER_ATTACK "Attack" +///The player is trying to Attack the Enemy with an MP boost. +#define BATTLE_ARCADE_PLAYER_HEAVY_ATTACK "Heavy Attack" +///The player is setting themselves to counterattack a potential incoming Enemy attack. +#define BATTLE_ARCADE_PLAYER_COUNTERATTACK "Counterattack" +///The player is defending against the Enemy and restoring MP. +#define BATTLE_ARCADE_PLAYER_DEFEND "Defend" + +/obj/machinery/computer/arcade/battle + name = "battle arcade" + desc = "Explore vast worlds and conquer." + icon_state = "arcade" + icon_screen = "fighters" + circuit = /obj/item/circuitboard/computer/arcade/battle + + ///List of all battle arcade gear that is available in the shop in game. + var/static/list/battle_arcade_gear_list + ///List of all worlds in the game. + var/static/list/all_worlds = list( + BATTLE_WORLD_ONE = 1, + BATTLE_WORLD_TWO = 1.25, + BATTLE_WORLD_THREE = 1.5, + BATTLE_WORLD_FOUR = 1.75, + BATTLE_WORLD_FIVE = 2, + BATTLE_WORLD_SIX = 2.25, + BATTLE_WORLD_SEVEN = 2.5, + BATTLE_WORLD_EIGHT = 2.75, + BATTLE_WORLD_NINE = 3, + ) + var/static/list/all_attack_types = list( + BATTLE_ARCADE_PLAYER_ATTACK = "Attack the enemy in a default attack at no MP cost.", + BATTLE_ARCADE_PLAYER_HEAVY_ATTACK = "Attack the enemy with the power of Magic, costing MP for additional damage.", + BATTLE_ARCADE_PLAYER_COUNTERATTACK = "Use magic to prepare a counterattack of your enemy, allowing you to deal extra damage if you succeed.", + BATTLE_ARCADE_PLAYER_DEFEND = "Defend from the next incoming attack, lowing the amount of damage you take while restoring some HP and MP.", + ) + ///The world we're currently in. + var/player_current_world = BATTLE_WORLD_ONE + ///The latest world the player has unlocked, granting access to all worlds below this. + var/latest_unlocked_world = BATTLE_WORLD_ONE + ///How many enemies we've defeated in a row, used to tell when we need to spawn the boss in. + var/enemies_defeated + ///The current panel the player is viewieng in the UI. + var/ui_panel = UI_PANEL_WORLD_MAP + + /** PLAYER INFORMATION */ + + ///Boolean on whether it's the player's time to do their turn. + var/player_turn = TRUE + ///How much money the player has, used in the Inn. Starts with the default price for a single item. + var/player_gold = DEFAULT_ITEM_PRICE + ///The current amount of HP the player has. + var/player_current_hp = PLAYER_MAX_HP + ///The current amount of MP the player has. + var/player_current_mp = PLAYER_MAX_MP + ///Assoc list of gear the player has equipped. + var/list/datum/battle_arcade_gear/equipped_gear = list( + WEAPON_SLOT = null, + ARMOR_SLOT = null, + ) + + /** CURRENT ENEMY INFORMATION */ + + ///A feedback message displayed in the UI during combat sequences. + var/feedback_message + ///Determines which boss image to use on the UI. + var/enemy_icon_id = 1 + ///The enemy's name + var/enemy_name + ///How much HP the current enemy has. + var/enemy_max_hp + ///How much HP the current enemy has. + var/enemy_hp + ///How much MP the current enemy has. + var/enemy_mp + ///How much gold the enemy will drop, randomized on new opponent. + var/enemy_gold_reward + ///unique to the emag mode, acts as a time limit where the player dies when it reaches 0. + var/bomb_cooldown = 19 + +/obj/machinery/computer/arcade/battle/Initialize(mapload, obj/item/circuitboard/C) + . = ..() + if(isnull(battle_arcade_gear_list)) + var/list/all_gear = list() + for(var/datum/battle_arcade_gear/template as anything in subtypesof(/datum/battle_arcade_gear)) + all_gear[template::name] = new template + battle_arcade_gear_list = all_gear + +/obj/machinery/computer/arcade/battle/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + obj_flags |= EMAGGED + balloon_alert(user, "hard mode enabled") + to_chat(user, span_warning("A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!")) + setup_new_opponent() + feedback_message = "If you die in the game, you die for real!" + SStgui.update_uis(src) + return TRUE + +/obj/machinery/computer/arcade/battle/reset_cabinet(mob/living/user) + enemy_name = null + player_turn = initial(player_turn) + feedback_message = initial(feedback_message) + player_current_world = initial(player_current_world) + latest_unlocked_world = initial(latest_unlocked_world) + enemies_defeated = initial(enemies_defeated) + player_gold = initial(player_gold) + player_current_hp = initial(player_current_hp) + player_current_mp = initial(player_current_mp) + ui_panel = initial(ui_panel) + bomb_cooldown = initial(bomb_cooldown) + equipped_gear = list(WEAPON_SLOT = null, ARMOR_SLOT = null) + return ..() + +///Sets up a new opponent depending on what stage they are at. +/obj/machinery/computer/arcade/battle/proc/setup_new_opponent(enemy_gets_first_move = FALSE) + var/name_adjective + var/new_name + + if(check_holidays(HALLOWEEN)) + name_adjective = pick_list(ARCADE_FILE, "rpg_adjective_halloween") + new_name = pick_list(ARCADE_FILE, "rpg_enemy_halloween") + else if(check_holidays(CHRISTMAS)) + name_adjective = pick_list(ARCADE_FILE, "rpg_adjective_xmas") + new_name = pick_list(ARCADE_FILE, "rpg_enemy_xmas") + else if(check_holidays(VALENTINES)) + name_adjective = pick_list(ARCADE_FILE, "rpg_adjective_valentines") + new_name = pick_list(ARCADE_FILE, "rpg_enemy_valentines") + else + name_adjective = pick_list(ARCADE_FILE, "rpg_adjective") + new_name = pick_list(ARCADE_FILE, "rpg_enemy") + + enemy_hp = round(rand(90, 125) * all_worlds[player_current_world], 1) + enemy_mp = round(rand(20, 30) * all_worlds[player_current_world], 1) + enemy_gold_reward = rand((DEFAULT_ITEM_PRICE / 2), DEFAULT_ITEM_PRICE) + + // there's only one boss in each stage (except the last) + if((player_current_world == latest_unlocked_world) && enemies_defeated == WORLD_ENEMY_BOSS) + enemy_mp *= 1.25 + enemy_hp *= 1.25 + enemy_gold_reward *= 1.5 + name_adjective = "Big Boss" + + enemy_icon_id = rand(1,6) + enemy_name = "The [name_adjective] [new_name]" + feedback_message = "New game started against [enemy_name]" + + if(obj_flags & EMAGGED) + enemy_name = "Cuban Pete" + enemy_hp += 100 //extra HP just to make cuban pete even more bullshit + + //set max HP to reference later + enemy_max_hp = enemy_hp + //set the player to fight now. + ui_panel = UI_PANEL_BATTLE + + if(enemy_gets_first_move) + perform_enemy_turn() + +/** + * on_battle_win + * + * Called when the player wins a level, this handles giving EXP, loot, tickets, etc. + * It also handles clearing the enemy out for the next one, and unlocking new worlds. + * We stop at BATTLE_WORLD_NINE because it is the last stage, and has infinite bosses. + */ +/obj/machinery/computer/arcade/battle/proc/on_battle_win(mob/user) + enemy_name = null + feedback_message = null + player_turn = TRUE + if(player_current_world == latest_unlocked_world) + if(enemies_defeated == WORLD_ENEMY_BOSS) + enemies_defeated = 0 + //the last stage doesn't have a next one to move onto. + if(latest_unlocked_world != BATTLE_WORLD_NINE) + var/current_world = all_worlds.Find(latest_unlocked_world) + latest_unlocked_world = all_worlds[current_world + 1] + ui_panel = UI_PANEL_WORLD_MAP + say("New world unlocked, [latest_unlocked_world]!") + enemies_defeated++ + if(obj_flags & EMAGGED) + obj_flags &= ~EMAGGED + bomb_cooldown = initial(bomb_cooldown) + new /obj/effect/spawner/newbomb/plasma(loc, /obj/item/assembly/timer) + new /obj/item/clothing/head/collectable/petehat(loc) + message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") + usr.log_message("outbombed Cuban Pete and has been awarded a bomb.", LOG_GAME) + else + to_chat(user, span_notice("[src] dispenses 2 tickets!")) + new /obj/item/stack/arcadeticket((get_turf(src)), 2) + player_gold += enemy_gold_reward + if(user) + var/exp_gained = DEFAULT_EXP_GAIN * all_worlds[player_current_world] + user.mind?.adjust_experience(/datum/skill/gaming, exp_gained) + user.won_game() + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) + playsound(loc, 'sound/arcade/win.ogg', 40) + if(ui_panel != UI_PANEL_WORLD_MAP) //we havent been booted to world map, we're still going. + ui_panel = UI_PANEL_BETWEEN_FIGHTS + +///Called when a mob loses at the battle arcade. +/obj/machinery/computer/arcade/battle/proc/lose_game(mob/user) + if(obj_flags & EMAGGED) + var/mob/living/living_user = user + if(istype(living_user)) + living_user.investigate_log("has been gibbed by an emagged Orion Trail game.", INVESTIGATE_DEATHS) + living_user.gib(DROP_ALL_REMAINS) + user.lost_game() + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) + SStgui.update_uis(src) + +///Called when the enemy attacks you. +/obj/machinery/computer/arcade/battle/proc/user_take_damage(mob/user, base_damage_taken) + var/datum/battle_arcade_gear/armor = equipped_gear[ARMOR_SLOT] + var/damage_taken = (base_damage_taken * all_worlds[player_current_world]) / (!isnull(armor) ? armor.bonus_modifier : 1) + player_current_hp -= round(max(0, damage_taken), 1) + if(player_current_hp <= 0) + ui_panel = UI_PANEL_GAMEOVER + feedback_message = "GAME OVER." + say("You have been crushed! GAME OVER.") + playsound(loc, 'sound/arcade/lose.ogg', 40, TRUE) + lose_game(user) + else + feedback_message = "User took [damage_taken] damage!" + playsound(loc, 'sound/arcade/hit.ogg', 40, TRUE, extrarange = -3) + SStgui.update_uis(src) + +///Called when you attack the enemy. +/obj/machinery/computer/arcade/battle/proc/process_player_attack(mob/user, attack_type) + var/damage_dealt + switch(attack_type) + if(BATTLE_ARCADE_PLAYER_ATTACK) + var/datum/battle_arcade_gear/weapon = equipped_gear[WEAPON_SLOT] + damage_dealt = (rand(5, 15) * (!isnull(weapon) ? weapon.bonus_modifier : 1)) + if(BATTLE_ARCADE_PLAYER_HEAVY_ATTACK) + var/datum/battle_arcade_gear/weapon = equipped_gear[WEAPON_SLOT] + damage_dealt = (rand(15, 25) * (!isnull(weapon) ? weapon.bonus_modifier : 1)) + if(BATTLE_ARCADE_PLAYER_COUNTERATTACK) + feedback_message = "User prepares to counterattack!" + process_enemy_turn(user, defending_flags = BATTLE_ATTACK_FLAG_COUNTERATTACK) + playsound(loc, 'sound/arcade/mana.ogg', 40, TRUE, extrarange = -3) + if(BATTLE_ARCADE_PLAYER_DEFEND) + feedback_message = "User pulls up their shield!" + process_enemy_turn(user, defending_flags = BATTLE_ATTACK_FLAG_DEFEND) + playsound(loc, 'sound/arcade/mana.ogg', 40, TRUE, extrarange = -3) + + if(!damage_dealt) + return + enemy_hp -= round(max(0, damage_dealt), 1) + feedback_message = "[enemy_name] took [damage_dealt] damage!" + playsound(loc, 'sound/arcade/hit.ogg', 40, TRUE, extrarange = -3) + process_enemy_turn(user) + +///Called when you successfully counterattack the enemy. +/obj/machinery/computer/arcade/battle/proc/successful_counterattack() + var/datum/battle_arcade_gear/weapon = equipped_gear[WEAPON_SLOT] + var/damage_dealt = (rand(20, 30) * (!isnull(weapon) ? weapon.bonus_modifier : 1)) + enemy_hp -= round(max(0, damage_dealt), 1) + feedback_message = "User counterattacked for [damage_dealt] damage!" + playsound(loc, 'sound/arcade/boom.ogg', 40, TRUE, extrarange = -3) + SStgui.update_uis(src) + +///Handles the delay between the user's and enemy's turns to process what's going on. +/obj/machinery/computer/arcade/battle/proc/process_enemy_turn(mob/user, defending_flags = NONE) + if(enemy_hp <= 0) + return on_battle_win(user) + //if emagged, cuban pete will set up a bomb acting up as a timer. when it reaches 0 the player fucking dies + + if(obj_flags & EMAGGED) + bomb_cooldown-- + switch(bomb_cooldown) + if(18) + feedback_message = "[enemy_name] takes two valve tank and links them together, what's he planning?" + if(15) + feedback_message = "[enemy_name] adds a remote control to the tan- ho god is that a bomb?" + if(12) + feedback_message = "[enemy_name] throws the bomb next to you, you'r too scared to pick it up." + if(6) + feedback_message = "[enemy_name]'s hand brushes the remote linked to the bomb, your heart skipped a beat." + if(2) + feedback_message = "[enemy_name] is going to press the button! It's now or never!" + if(0) + player_current_hp = 0 //instant death + addtimer(CALLBACK(src, PROC_REF(perform_enemy_turn), user, defending_flags), 1 SECONDS) + +/** + * perform_enemy_turn + * + * Actually performs the enemy's turn. + * We first roll to see if the enemy should use magic. As their HP goes lower, the chances of self healing goes higher, but + * if they lack the MP, then it's rolling to steal MP from the player. + * After, we will roll to see if the player counterattacks the enemy (if set), otherwise we will attack normally. + */ +/obj/machinery/computer/arcade/battle/proc/perform_enemy_turn(mob/user, defending_flags = NONE) + player_turn = TRUE + var/chance_to_magic = round(max((-(enemy_hp - enemy_max_hp) / 2), 75), 1) + if((enemy_hp != enemy_max_hp) && prob(chance_to_magic)) + if(enemy_mp >= 10) + var/healed_amount = rand(10, 20) + enemy_hp = round(min(enemy_max_hp, enemy_hp + healed_amount), 1) + enemy_mp -= round(max(0, 10), 1) + feedback_message = "[enemy_name] healed for [healed_amount] health points!" + playsound(loc, 'sound/arcade/heal.ogg', 40, TRUE, extrarange = -3) + SStgui.update_uis(src) + return + if(player_current_mp >= 5) //minimum to steal + var/healed_amount = rand(5, 10) + player_current_mp -= round(max(0, healed_amount), 1) + enemy_mp += healed_amount + feedback_message = "[enemy_name] stole [healed_amount] MP from you!" + playsound(loc, 'sound/arcade/steal.ogg', 40, TRUE) + SStgui.update_uis(src) + return + //we couldn't heal ourselves or steal MP, we'll just attack instead. + var/skill_level = user?.mind?.get_skill_level(/datum/skill/gaming) || 1 + var/chance_at_counterattack = 40 + (skill_level * 5) //at level 1 this is 45, at legendary this is 75 + var/damage_dealt = (defending_flags & BATTLE_ATTACK_FLAG_DEFEND) ? rand(5, 10) : rand(15, 20) + if((defending_flags & BATTLE_ATTACK_FLAG_COUNTERATTACK) && prob(chance_at_counterattack)) + return successful_counterattack() + return user_take_damage(user, damage_dealt) + +/obj/machinery/computer/arcade/battle/ui_data(mob/user) + var/list/data = ..() + + data["feedback_message"] = feedback_message + data["shop_items"] = list() + for(var/gear_name in battle_arcade_gear_list) + var/datum/battle_arcade_gear/gear = battle_arcade_gear_list[gear_name] + if(latest_unlocked_world != gear.world_available) + continue + data["shop_items"] += list(gear_name) + data["ui_panel"] = ui_panel + data["player_current_world"] = player_current_world + data["unlocked_world_modifier"] = all_worlds[latest_unlocked_world] + data["latest_unlocked_world_position"] = all_worlds.Find(latest_unlocked_world) + data["player_gold"] = player_gold + data["player_current_hp"] = player_current_hp + data["player_current_mp"] = player_current_mp + data["enemy_icon_id"] = "boss[enemy_icon_id].gif" + data["enemy_name"] = enemy_name + data["enemy_max_hp"] = enemy_max_hp + data["enemy_hp"] = enemy_hp + data["enemy_mp"] = enemy_mp + + data["equipped_gear"] = list() + for(var/gear_slot as anything in equipped_gear) + var/datum/battle_arcade_gear/user_gear = equipped_gear[gear_slot] + if(!istype(user_gear)) + continue + data["equipped_gear"] += list(list( + "name" = user_gear.name, + "slot" = gear_slot, + )) + + return data + +/obj/machinery/computer/arcade/battle/ui_static_data(mob/user) + var/list/data = ..() + + data["all_worlds"] = list() + for(var/individual_world in all_worlds) + UNTYPED_LIST_ADD(data["all_worlds"], individual_world) + data["attack_types"] = list() + for(var/individual_attack_type in all_attack_types) + UNTYPED_LIST_ADD(data["attack_types"], list("name" = individual_attack_type, "tooltip" = all_attack_types[individual_attack_type])) + data["cost_of_items"] = DEFAULT_ITEM_PRICE + data["max_hp"] = PLAYER_MAX_HP + data["max_mp"] = PLAYER_MAX_MP + + return data + +/obj/machinery/computer/arcade/battle/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/arcade), + ) + +/obj/machinery/computer/arcade/battle/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "BattleArcade", "Battle Arcade") + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/computer/arcade/battle/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/mob/living/gamer = ui.user + if(!istype(gamer)) + return + + switch(ui_panel) + if(UI_PANEL_GAMEOVER) + switch(action) + if("restart") + reset_cabinet() + return TRUE + if(UI_PANEL_SHOP) + switch(action) + if("sleep") + if(player_gold < DEFAULT_ITEM_PRICE / 2) + say("You don't have enough gold to rest!") + return TRUE + player_gold -= DEFAULT_ITEM_PRICE / 2 + playsound(loc, 'sound/mecha/skyfall_power_up.ogg', 40) + player_current_hp = PLAYER_MAX_HP + player_current_mp = PLAYER_MAX_MP + return TRUE + if("buy_item") + var/datum/battle_arcade_gear/gear = battle_arcade_gear_list[params["purchasing_item"]] + if(latest_unlocked_world != gear.world_available || equipped_gear[gear.slot] == gear) + say("That item is not in stock.") + return TRUE + if(player_gold < (DEFAULT_ITEM_PRICE * all_worlds[latest_unlocked_world])) + say("You don't have enough gold to buy that!") + return TRUE + player_gold -= DEFAULT_ITEM_PRICE * all_worlds[latest_unlocked_world] + equipped_gear[gear.slot] = gear + return TRUE + if("leave") + ui_panel = UI_PANEL_WORLD_MAP + return TRUE + if(UI_PANEL_WORLD_MAP) + switch(action) + if("start_fight") + var/world_travelling = all_worlds.Find(params["selected_arena"]) + var/max_unlocked_worlds = all_worlds.Find(latest_unlocked_world) + if(world_travelling > max_unlocked_worlds) + say("That world is not unlocked yet!") + return TRUE + player_current_world = all_worlds[world_travelling] + setup_new_opponent() + return TRUE + if("enter_inn") + ui_panel = UI_PANEL_SHOP + return TRUE + if(UI_PANEL_BETWEEN_FIGHTS) + switch(action) + if("continue_without_rest") + setup_new_opponent() + return TRUE + if("continue_with_rest") + if(prob(60)) + playsound(loc, 'sound/mecha/skyfall_power_up.ogg', 40) + player_current_hp = PLAYER_MAX_HP + player_current_mp = PLAYER_MAX_MP + else + playsound(loc, 'sound/machines/defib_zap.ogg', 40) + if(prob(40)) + //You got robbed, and now have to go to your next fight. + player_gold /= 2 + else + //You got ambushed, the enemy gets the first hit. + setup_new_opponent(enemy_gets_first_move = TRUE) + return TRUE + setup_new_opponent() + return TRUE + if("abandon_quest") + if(player_current_world == latest_unlocked_world) + enemies_defeated = 0 + ui_panel = UI_PANEL_WORLD_MAP + return TRUE + if(UI_PANEL_BATTLE) + if(!player_turn) + return TRUE + player_turn = FALSE + switch(action) + if(BATTLE_ARCADE_PLAYER_ATTACK) + process_player_attack(gamer, BATTLE_ARCADE_PLAYER_ATTACK) + return TRUE + if(BATTLE_ARCADE_PLAYER_HEAVY_ATTACK) + if(player_current_mp < SPELL_MP_COST) + say("You don't have enough MP to counterattack!") + player_turn = TRUE + return TRUE + player_current_mp -= SPELL_MP_COST + process_player_attack(gamer, BATTLE_ARCADE_PLAYER_HEAVY_ATTACK) + return TRUE + if(BATTLE_ARCADE_PLAYER_COUNTERATTACK) + if(player_current_mp < SPELL_MP_COST) + say("You don't have enough MP to counterattack!") + player_turn = TRUE + return TRUE + player_current_mp -= SPELL_MP_COST + process_player_attack(gamer, BATTLE_ARCADE_PLAYER_COUNTERATTACK) + return TRUE + if(BATTLE_ARCADE_PLAYER_DEFEND) + player_current_hp = round(min(player_current_hp + (SPELL_MP_COST / 2), PLAYER_MAX_HP), 1) + player_current_mp = round(min(player_current_mp + SPELL_MP_COST, PLAYER_MAX_MP), 1) + process_player_attack(gamer, BATTLE_ARCADE_PLAYER_DEFEND) + return TRUE + if("flee") + //you can't outrun the cuban pete + if(obj_flags & EMAGGED) + lose_game(gamer) + return + player_turn = TRUE + ui_panel = UI_PANEL_WORLD_MAP + player_gold /= 2 + return TRUE + //they pressed something but it wasn't in the menu, we'll be nice and give them back their turn anyway. + player_turn = TRUE + +#undef WORLD_ENEMY_BOSS +#undef DEFAULT_EXP_GAIN +#undef DEFAULT_ITEM_PRICE + +#undef PLAYER_MAX_HP +#undef PLAYER_MAX_MP +#undef SPELL_MP_COST + +#undef UI_PANEL_SHOP +#undef UI_PANEL_WORLD_MAP +#undef UI_PANEL_BATTLE +#undef UI_PANEL_BETWEEN_FIGHTS +#undef UI_PANEL_GAMEOVER + +#undef BATTLE_ATTACK_FLAG_COUNTERATTACK +#undef BATTLE_ATTACK_FLAG_DEFEND + +#undef BATTLE_ARCADE_PLAYER_ATTACK +#undef BATTLE_ARCADE_PLAYER_HEAVY_ATTACK +#undef BATTLE_ARCADE_PLAYER_COUNTERATTACK +#undef BATTLE_ARCADE_PLAYER_DEFEND diff --git a/code/game/machinery/computer/arcade/battle_gear.dm b/code/game/machinery/computer/arcade/battle_gear.dm new file mode 100644 index 00000000000..7a91df0e058 --- /dev/null +++ b/code/game/machinery/computer/arcade/battle_gear.dm @@ -0,0 +1,113 @@ +/datum/battle_arcade_gear + ///The name of the gear, used in shops. + var/name = "Gear" + ///The slot this gear fits into + var/slot = WEAPON_SLOT + ///The world the player has to be at in order to buy this item. + var/world_available + ///The stat given by the gear + var/bonus_modifier + +/datum/battle_arcade_gear/tier_1 + world_available = BATTLE_WORLD_ONE + +/datum/battle_arcade_gear/tier_1/weapon + name = "Sword" + slot = WEAPON_SLOT + bonus_modifier = 1.5 + +/datum/battle_arcade_gear/tier_1/armor + name = "Leather Armor" + slot = ARMOR_SLOT + bonus_modifier = 1.5 + +/datum/battle_arcade_gear/tier_2 + world_available = BATTLE_WORLD_TWO + +/datum/battle_arcade_gear/tier_2/weapon + name = "Axe" + slot = WEAPON_SLOT + bonus_modifier = 1.75 + +/datum/battle_arcade_gear/tier_2/armor + name = "Chainmail" + slot = ARMOR_SLOT + bonus_modifier = 1.75 + +/datum/battle_arcade_gear/tier_3 + world_available = BATTLE_WORLD_THREE + +/datum/battle_arcade_gear/tier_3/weapon + name = "Mace" + slot = WEAPON_SLOT + bonus_modifier = 2 + +/datum/battle_arcade_gear/tier_3/armor + name = "Plate Armor" + slot = ARMOR_SLOT + bonus_modifier = 2 + +/datum/battle_arcade_gear/tier_4 + world_available = BATTLE_WORLD_FOUR + +/datum/battle_arcade_gear/tier_4/weapon + name = "Greatsword" + slot = WEAPON_SLOT + bonus_modifier = 2.5 + +/datum/battle_arcade_gear/tier_4/armor + name = "Full Plate Armor" + slot = ARMOR_SLOT + bonus_modifier = 2.5 + +/datum/battle_arcade_gear/tier_5 + world_available = BATTLE_WORLD_FIVE + +/datum/battle_arcade_gear/tier_5/weapon + name = "Halberd" + slot = WEAPON_SLOT + bonus_modifier = 3 + +/datum/battle_arcade_gear/tier_5/armor + name = "Dragon Scale Armor" + slot = ARMOR_SLOT + bonus_modifier = 3 + +/datum/battle_arcade_gear/tier_6 + world_available = BATTLE_WORLD_SIX + +/datum/battle_arcade_gear/tier_6/weapon + name = "Warhammer" + slot = WEAPON_SLOT + bonus_modifier = 3.5 + +/datum/battle_arcade_gear/tier_6/armor + name = "Adamantine Armor" + slot = ARMOR_SLOT + bonus_modifier = 3.5 + +/datum/battle_arcade_gear/tier_7 + world_available = BATTLE_WORLD_SEVEN + +/datum/battle_arcade_gear/tier_7/weapon + name = "Excalibur" + slot = WEAPON_SLOT + bonus_modifier = 4 + +/datum/battle_arcade_gear/tier_7/armor + name = "Celestial Armor" + slot = ARMOR_SLOT + bonus_modifier = 4 + +/datum/battle_arcade_gear/tier_8 + world_available = BATTLE_WORLD_EIGHT + +/datum/battle_arcade_gear/tier_8/weapon + name = "Mjolnir" + slot = WEAPON_SLOT + bonus_modifier = 5 + +/datum/battle_arcade_gear/tier_8/armor + name = "Ethereal Armor" + slot = ARMOR_SLOT + bonus_modifier = 5 diff --git a/code/game/machinery/computer/arcade/orion.dm b/code/game/machinery/computer/arcade/orion.dm index 945cbb5593a..85bebddd25c 100644 --- a/code/game/machinery/computer/arcade/orion.dm +++ b/code/game/machinery/computer/arcade/orion.dm @@ -1,23 +1,13 @@ -// *** THE ORION TRAIL ** // - #define ORION_TRAIL_WINTURN 9 -//defines in machines.dm - -///assoc list, [datum singleton] = weight -GLOBAL_LIST_INIT(orion_events, generate_orion_events()) - -/proc/generate_orion_events() - . = list() - for(var/path in subtypesof(/datum/orion_event)) - var/datum/orion_event/new_event = new path(src) - .[new_event] = new_event.weight - /obj/machinery/computer/arcade/orion_trail name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" icon_state = "arcade" circuit = /obj/item/circuitboard/computer/arcade/orion_trail + + ///List of all orion events, created on Initialize. + var/static/list/orion_events var/busy = FALSE //prevent clickspam that allowed people to ~speedrun~ the game. var/engine = 0 var/hull = 0 @@ -44,12 +34,18 @@ GLOBAL_LIST_INIT(orion_events, generate_orion_events()) /obj/machinery/computer/arcade/orion_trail/Initialize(mapload) . = ..() + if(isnull(orion_events)) + var/list/events = list() + for(var/path in subtypesof(/datum/orion_event)) + var/datum/orion_event/new_event = new path(src) + events[new_event] = new_event.weight + orion_events = events radio = new /obj/item/radio(src) radio.set_listening(FALSE) setup_events() /obj/machinery/computer/arcade/orion_trail/proc/setup_events() - events = GLOB.orion_events + events = orion_events.Copy() /obj/machinery/computer/arcade/orion_trail/Destroy() QDEL_NULL(radio) @@ -81,7 +77,7 @@ GLOBAL_LIST_INIT(orion_events, generate_orion_events()) settlers = list("Kirk","Worf","Gene") /obj/machinery/computer/arcade/orion_trail/kobayashi/setup_events() - events = GLOB.orion_events.Copy() + events = orion_events.Copy() for(var/datum/orion_event/event as anything in events) if(!(event.type in event_whitelist)) events.Remove(event) @@ -196,8 +192,6 @@ GLOBAL_LIST_INIT(orion_events, generate_orion_events()) . = TRUE - - var/gamer_skill_level = 0 var/gamer_skill = 0 var/gamer_skill_rands = 0 @@ -316,7 +310,6 @@ GLOBAL_LIST_INIT(orion_events, generate_orion_events()) if(food > ORION_TRADE_RATE) fuel += ORION_TRADE_RATE food -= ORION_TRADE_RATE - add_fingerprint(gamer) /** * pickweights a new event, sets event var as it. it then preps the event if it needs it @@ -502,62 +495,56 @@ GLOBAL_LIST_INIT(orion_events, generate_orion_events()) obj_flags |= EMAGGED return TRUE -/mob/living/basic/trooper/syndicate/ranged/smg/orion - name = "spaceport security" - desc = "Premier corporate security forces for all spaceports found along the Orion Trail." - faction = list(FACTION_ORION) - loot = list() - +///A minibomb achieved from winning at emagged Orion. /obj/item/orion_ship name = "model settler ship" desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." icon = 'icons/obj/toys/toy.dmi' icon_state = "ship" w_class = WEIGHT_CLASS_SMALL - var/active = 0 //if the ship is on + ///Boolean on whether the ship is active, setting itself off for destruction. + var/active = 0 /obj/item/orion_ship/examine(mob/user) . = ..() if(!(in_range(user, src))) return - if(!active) - . += span_notice("There's a little switch on the bottom. It's flipped down.") - else + if(active) . += span_notice("There's a little switch on the bottom. It's flipped up.") + return + . += span_notice("There's a little switch on the bottom. It's flipped down.") -/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse +/obj/item/orion_ship/attack_self(mob/user) if(active) return log_bomber(usr, "primed an explosive", src, "for detonation") - to_chat(user, span_warning("You flip the switch on the underside of [src].")) - active = 1 - visible_message(span_notice("[src] softly beeps and whirs to life!")) - playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, TRUE) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(2 SECONDS) - visible_message(span_warning("[src] begins to vibrate...")) - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(3 SECONDS) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, TRUE) - sleep(0.36 SECONDS) - visible_message(span_userdanger("[src] explodes!")) - explosion(src, devastation_range = 2, heavy_impact_range = 4, light_impact_range = 8, flame_range = 16) - qdel(src) + active = TRUE + addtimer(CALLBACK(src, PROC_REF(commit_explosion)), 1 SECONDS) -/obj/singularity/orion - move_self = FALSE +///After some dialogue (which doubles as the timer until explosion), causes a minibomb-level explosion. +/obj/item/orion_ship/proc/commit_explosion(dialogue_level = 0) + var/time_for_next_level + switch(dialogue_level) + if(0) + say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") + time_for_next_level = 2 SECONDS + if(1) + say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") + time_for_next_level = 3 SECONDS + if(2) + say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") + playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, TRUE) + time_for_next_level = 0.36 SECONDS + if(3 to INFINITY) + visible_message(span_userdanger("[src] explodes!")) + explosion(src, devastation_range = 2, heavy_impact_range = 4, light_impact_range = 8, flame_range = 16) + qdel(src) + return -/obj/singularity/orion/Initialize(mapload) - . = ..() - - var/datum/component/singularity/singularity = singularity_component.resolve() - singularity?.grav_pull = 1 - -/obj/singularity/orion/process(seconds_per_tick) - if(SPT_PROB(0.5, seconds_per_tick)) - mezzer() + if(time_for_next_level) + dialogue_level++ + addtimer(CALLBACK(src, PROC_REF(commit_explosion), dialogue_level), time_for_next_level) #undef ORION_TRAIL_WINTURN diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index b244cba4aa6..5b27bfabf70 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -30,7 +30,7 @@ // Convert networks to lowercase for(var/i in network) network -= i - network += lowertext(i) + network += LOWER_TEXT(i) // Initialize map objects cam_screen = new cam_screen.generate_view(map_name) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index a271517b0c4..488331c41b8 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -30,7 +30,7 @@ . = ..() for(var/i in networks) networks -= i - networks += lowertext(i) + networks += LOWER_TEXT(i) if(lock_override) if(lock_override & CAMERA_LOCK_STATION) z_lock |= SSmapping.levels_by_trait(ZTRAIT_STATION) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index f9e06ab58b3..ca3329298cb 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -235,7 +235,7 @@ // Set the default tgui state set_default_state() -/obj/machinery/computer/scan_consolenew/LateInitialize() +/obj/machinery/computer/scan_consolenew/post_machine_initialize() . = ..() // Link machine with research techweb. Used for discovering and accessing // already discovered mutations diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 106f87f1788..7b80b6e95c8 100644 --- a/code/game/machinery/computer/mechlaunchpad.dm +++ b/code/game/machinery/computer/mechlaunchpad.dm @@ -34,7 +34,8 @@ SIGNAL_HANDLER connected_mechpad = null -/obj/machinery/computer/mechpad/LateInitialize() +/obj/machinery/computer/mechpad/post_machine_initialize() + . = ..() for(var/obj/machinery/mechpad/pad as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/mechpad)) if(pad == connected_mechpad) continue diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index bb809af0eea..d0ea49df27b 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -20,7 +20,7 @@ find_table() return INITIALIZE_HINT_LATELOAD -/obj/machinery/computer/operating/LateInitialize() +/obj/machinery/computer/operating/post_machine_initialize() . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb) CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, src) diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm index f6e1e92c2a5..f19f3d725c7 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -103,7 +103,7 @@ /obj/item/organ/internal/tongue/rat/modify_speech(datum/source, list/speech_args) . = ..() - var/message = lowertext(speech_args[SPEECH_MESSAGE]) + var/message = LOWER_TEXT(speech_args[SPEECH_MESSAGE]) if(message == "hi" || message == "hi.") speech_args[SPEECH_MESSAGE] = "Cheesed to meet you!" if(message == "hi?") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 917255e50b4..6a7a2d8929a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -2169,7 +2169,7 @@ return ..() -/obj/machinery/door/airlock/external/LateInitialize() +/obj/machinery/door/airlock/external/post_machine_initialize() . = ..() if(space_dir) unres_sides |= space_dir diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index f395a58bab8..cc084bea23c 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -91,7 +91,7 @@ RegisterSignal(src, COMSIG_MACHINERY_POWER_LOST, PROC_REF(on_power_loss)) return INITIALIZE_HINT_LATELOAD -/obj/machinery/door/firedoor/LateInitialize() +/obj/machinery/door/firedoor/post_machine_initialize() . = ..() RegisterSignal(src, COMSIG_MERGER_ADDING, PROC_REF(merger_adding)) RegisterSignal(src, COMSIG_MERGER_REMOVING, PROC_REF(merger_removing)) diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 70da443872d..dc3b917705f 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -16,7 +16,8 @@ ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/door_buttons/LateInitialize() +/obj/machinery/door_buttons/post_machine_initialize() + . = ..() find_objects_by_tag() /obj/machinery/door_buttons/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index e16e9f61c24..359ab48945b 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -34,7 +34,7 @@ var/processing = FALSE -/obj/machinery/airlock_controller/LateInitialize() +/obj/machinery/airlock_controller/post_machine_initialize() . = ..() var/obj/machinery/door/interior_door = GLOB.objects_by_id_tag[interior_door_tag] diff --git a/code/game/machinery/incident_display.dm b/code/game/machinery/incident_display.dm index fcdfecf6a31..b8452675c71 100644 --- a/code/game/machinery/incident_display.dm +++ b/code/game/machinery/incident_display.dm @@ -80,7 +80,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/incident_display/LateInitialize() +/obj/machinery/incident_display/post_machine_initialize() . = ..() GLOB.map_delamination_counters += src update_delam_count(SSpersistence.rounds_since_engine_exploded, SSpersistence.delam_highscore) diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm index b2068194e4b..57c3fa2f8d4 100644 --- a/code/game/machinery/medipen_refiller.dm +++ b/code/game/machinery/medipen_refiller.dm @@ -91,9 +91,9 @@ return ..() /obj/machinery/medipen_refiller/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, span_notice("You start furiously plunging [name].")) + user.balloon_alert_to_viewers("furiously plunging...", "plunging medipen refiller...") if(do_after(user, 3 SECONDS, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) reagents.clear_reagents() diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index d4cf080da69..06b1b977847 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -1066,7 +1066,7 @@ DEFINE_BITFIELD(turret_flags, list( shoot_cyborgs = !shoot_cyborgs if (user) var/status = shoot_cyborgs ? "Shooting Borgs" : "Not Shooting Borgs" - balloon_alert(user, lowertext(status)) + balloon_alert(user, LOWER_TEXT(status)) add_hiddenprint(user) log_combat(user, src, "[status]") updateTurrets() diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 405a38e4167..9cbf787d58d 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -35,7 +35,7 @@ . = ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/recycler/LateInitialize() +/obj/machinery/recycler/post_machine_initialize() . = ..() update_appearance(UPDATE_ICON) req_one_access = SSid_access.get_region_access_list(list(REGION_ALL_STATION, REGION_CENTCOM)) diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index ab2a3f8cefc..1998654df00 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -74,7 +74,8 @@ GLOB.telecomms_list += src return INITIALIZE_HINT_LATELOAD -/obj/machinery/computer/message_monitor/LateInitialize() +/obj/machinery/computer/message_monitor/post_machine_initialize() + . = ..() //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. if(!linkedServer) for(var/obj/machinery/telecomms/message_server/message_server in GLOB.telecomms_list) @@ -280,12 +281,11 @@ name = "monitor decryption key" /obj/item/paper/monitorkey/Initialize(mapload, obj/machinery/telecomms/message_server/server) - ..() + . = ..() if (server) print(server) return INITIALIZE_HINT_NORMAL - else - return INITIALIZE_HINT_LATELOAD + return INITIALIZE_HINT_LATELOAD /** * Handles printing the monitor key for a given server onto this piece of paper. diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index b8d0414ad28..ee71ca0233d 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -105,9 +105,8 @@ GLOBAL_LIST_EMPTY(telecomms_list) if(mapload && autolinkers.len) return INITIALIZE_HINT_LATELOAD -/obj/machinery/telecomms/LateInitialize() - ..() - +/obj/machinery/telecomms/post_machine_initialize() + . = ..() for(var/obj/machinery/telecomms/telecomms_machine in GLOB.telecomms_list) if (long_range_link || IN_GIVEN_RANGE(src, telecomms_machine, 20)) add_automatic_link(telecomms_machine) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 0ac4188328f..f5daba8135c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -512,7 +512,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) return ..() /obj/effect/landmark/start/hangover/LateInitialize() - . = ..() if(HAS_TRAIT(SSstation, STATION_TRAIT_BIRTHDAY)) party_debris += new /obj/effect/decal/cleanable/confetti(get_turf(src)) //a birthday celebration can also be a hangover var/list/bonus_confetti = GLOB.alldirs @@ -593,7 +592,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) return INITIALIZE_HINT_LATELOAD /obj/effect/landmark/navigate_destination/LateInitialize() - . = ..() if(!location) var/obj/machinery/door/airlock/A = locate(/obj/machinery/door/airlock) in loc location = A ? format_text(A.name) : get_area_name(src, format_text = TRUE) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cbacde315e1..57600813df1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1072,7 +1072,7 @@ /obj/item/proc/apply_outline(outline_color = null) if(((get(src, /mob) != usr) && !loc?.atom_storage && !(item_flags & IN_STORAGE)) || QDELETED(src) || isobserver(usr)) //cancel if the item isn't in an inventory, is being deleted, or if the person hovering is a ghost (so that people spectating you don't randomly make your items glow) return FALSE - var/theme = lowertext(usr.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) + var/theme = LOWER_TEXT(usr.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) if(!outline_color) //if we weren't provided with a color, take the theme's color switch(theme) //yeah it kinda has to be this way if("midnight") @@ -1755,3 +1755,24 @@ /obj/item/animate_atom_living(mob/living/owner) new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner) + +/** + * Used to update the weight class of the item in a way that other atoms can react to the change. + * + * Arguments: + * * new_w_class - The new weight class of the item. + * + * Returns: + * * TRUE if weight class was successfully updated + * * FALSE otherwise + */ +/obj/item/proc/update_weight_class(new_w_class) + if(w_class == new_w_class) + return FALSE + + var/old_w_class = w_class + w_class = new_w_class + SEND_SIGNAL(src, COMSIG_ITEM_WEIGHT_CLASS_CHANGED, old_w_class, new_w_class) + if(!isnull(loc)) + SEND_SIGNAL(loc, COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED, src, old_w_class, new_w_class) + return TRUE diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 82fc3437f20..d11c6e21d69 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -1,254 +1,255 @@ -/obj/item/areaeditor - name = "area modification item" +///The area is a "Station" area, showing no special text. +#define AREA_STATION 1 +///The area is in outdoors (lavaland/icemoon/jungle/space), therefore unclaimed territories. +#define AREA_OUTDOORS 2 +///The area is special (shuttles/centcom), therefore can't be claimed. +#define AREA_SPECIAL 3 + +///The blueprints are currently reading the list of all wire datums. +#define LEGEND_VIEWING_LIST "watching_list" +///The blueprints are on the main page. +#define LEGEND_OFF "off" + +/** + * Blueprints + * Used to see the wires of machines on the station, the roundstart layout of pipes/cables/tubes, + * as well as allowing you to rename existing areas and create new ones. + * Used by the station, cyborgs, and golems. + */ +/obj/item/blueprints + name = "station blueprints" + desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." icon = 'icons/obj/scrolls.dmi' icon_state = "blueprints" inhand_icon_state = "blueprints" attack_verb_continuous = list("attacks", "baps", "hits") attack_verb_simple = list("attack", "bap", "hit") - var/fluffnotice = "Nobody's gonna read this stuff!" - var/in_use = FALSE - ///When using it to create a new area, this will be its type. - var/new_area_type = /area - -/obj/item/areaeditor/attack_self(mob/user) - add_fingerprint(user) - . = "[src] \ -

    [station_name()] [src.name]

    \ - [fluffnotice]
    " - switch(get_area_type()) - if(AREA_SPACE) - . += "

    According to the [src.name], you are now in an unclaimed territory.

    " - if(AREA_SPECIAL) - . += "

    This place is not noted on the [src.name].

    " - . += "

    Create or modify an existing area

    " - - -/obj/item/areaeditor/Topic(href, href_list) - if(..()) - return TRUE - if(!usr.can_perform_action(src) || usr != loc) - usr << browse(null, "window=blueprints") - return TRUE - if(href_list["create_area"]) - if(in_use) - return - var/area/A = get_area(usr) - if(A.area_flags & NOTELEPORT) - to_chat(usr, span_warning("You cannot edit restricted areas.")) - return - in_use = TRUE - create_area(usr, new_area_type) - in_use = FALSE - updateUsrDialog() - -//Station blueprints!!! -/obj/item/areaeditor/blueprints - name = "station blueprints" - desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." - icon = 'icons/obj/scrolls.dmi' - icon_state = "blueprints" - fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_ALLOW_USER_LOCATION | INTERACT_ATOM_IGNORE_MOBILITY + + ///A string of flavortext to be displayed at the top of the UI, related to the type of blueprints we are. + var/fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." + ///Boolean on whether the blueprints are currently being used, which prevents double-using them to rename/create areas. + var/in_use = FALSE + ///The type of area we'll create when we make a new area. This is a typepath. + var/area/new_area_type = /area + ///The legend type the blueprints are currently looking at, which is either modularly + ///set by wires datums, the main page, or an overview of them all. + var/legend_viewing = LEGEND_OFF + + ///List of images that we're showing to a client, used for showing blueprint data. var/list/image/showing = list() + ///The client that is being shown the list of 'showing' images of blueprint data. var/client/viewing - var/legend = FALSE //Viewing the wire legend - -/obj/item/areaeditor/blueprints/Destroy() +/obj/item/blueprints/Destroy() clear_viewer() return ..() - -/obj/item/areaeditor/blueprints/attack_self(mob/user) +/obj/item/blueprints/dropped(mob/user) . = ..() - if(!legend) - var/area/A = get_area(user) - if(get_area_type() == AREA_STATION) - . += "

    According to \the [src], you are now in \"[html_encode(A.name)]\".

    " - . += "

    Change area name

    " - . += "

    View wire colour legend

    " - if(!viewing) - . += "

    View structural data

    " - else - . += "

    Refresh structural data

    " - . += "

    Hide structural data

    " - else - if(legend == TRUE) - . += "<< Back" - . += view_wire_devices(user); - else - //legend is a wireset - . += "<< Back" - . += view_wire_set(user, legend) - var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) - popup.set_content(.) - popup.open() - onclose(user, "blueprints") + clear_viewer() + legend_viewing = LEGEND_OFF +/obj/item/blueprints/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Blueprints", name) + ui.open() -/obj/item/areaeditor/blueprints/Topic(href, href_list) - if(..()) +/obj/item/blueprints/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/blueprints/ui_data(mob/user) + var/list/data = list() + switch(get_area_type(user)) + if(AREA_OUTDOORS) + data["area_notice"] = "You are in unclaimed territory." + if(AREA_SPECIAL) + data["area_notice"] = "This area has no notes." + else + var/area/current_area = get_area(user) + data["area_notice"] = "You are now in \the [current_area.name]" + var/area/area_inside_of = get_area(user) + data["area_name"] = html_encode(area_inside_of.name) + data["legend"] = legend_viewing + data["viewing"] = !!viewing + data["wire_data"] = list() + if(legend_viewing != LEGEND_VIEWING_LIST && legend_viewing != LEGEND_OFF) + for(var/device in GLOB.wire_color_directory) + if("[device]" != legend_viewing) + continue + data["wires_name"] = GLOB.wire_name_directory[device] + for(var/individual_color in GLOB.wire_color_directory[device]) + var/wire_name = GLOB.wire_color_directory[device][individual_color] + if(findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds + continue + data["wire_data"] += list(list( + "color" = individual_color, + "message" = wire_name, + )) + return data + +/obj/item/blueprints/ui_static_data(mob/user) + var/list/data = list() + data["legend_viewing_list"] = LEGEND_VIEWING_LIST + data["legend_off"] = LEGEND_OFF + data["fluff_notice"] = fluffnotice + data["station_name"] = station_name() + data["wire_devices"] = list() + for(var/wireset in GLOB.wire_color_directory) + data["wire_devices"] += list(list( + "name" = GLOB.wire_name_directory[wireset], + "ref" = wireset, + )) + return data + +/obj/item/blueprints/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) return - if(href_list["edit_area"]) - if(get_area_type() != AREA_STATION) - return - if(in_use) - return - in_use = TRUE - edit_area() - in_use = FALSE - if(href_list["exit_legend"]) - legend = FALSE; - if(href_list["view_legend"]) - legend = TRUE; - if(href_list["view_wireset"]) - legend = href_list["view_wireset"]; - if(href_list["view_blueprints"]) - set_viewer(usr, span_notice("You flip the blueprints over to view the complex information diagram.")) - if(href_list["hide_blueprints"]) - clear_viewer(usr,span_notice("You flip the blueprints over to view the simple information diagram.")) - if(href_list["refresh"]) - clear_viewer(usr) - set_viewer(usr) - attack_self(usr) //this is not the proper way, but neither of the old update procs work! it's too ancient and I'm tired shush. + var/mob/user = ui.user + if(!user.can_perform_action(src, NEED_LITERACY|NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING)) + return TRUE -/obj/item/areaeditor/blueprints/proc/get_images(turf/central_turf, viewsize) - . = list() - var/list/dimensions = getviewsize(viewsize) - var/horizontal_radius = dimensions[1] / 2 - var/vertical_radius = dimensions[2] / 2 - for(var/turf/nearby_turf as anything in RECT_TURFS(horizontal_radius, vertical_radius, central_turf)) - if(nearby_turf.blueprint_data) - . += nearby_turf.blueprint_data - -/obj/item/areaeditor/blueprints/proc/set_viewer(mob/user, message = "") - if(user?.client) - if(viewing) + switch(action) + if("create_area") + if(in_use) + return + in_use = TRUE + create_area(user, new_area_type) + in_use = FALSE + if("edit_area") + if(get_area_type(user) != AREA_STATION) + return + if(in_use) + return + in_use = TRUE + edit_area(user) + in_use = FALSE + if("exit_legend") + legend_viewing = LEGEND_OFF + if("view_legend") + legend_viewing = LEGEND_VIEWING_LIST + if("view_wireset") + var/setting_wireset = params["view_wireset"] + for(var/device in GLOB.wire_color_directory) + if("[device]" == setting_wireset) //I know... don't change it... + legend_viewing = setting_wireset + return TRUE + if("view_blueprints") + playsound(src, 'sound/items/paper_flip.ogg', 40, TRUE) + user.balloon_alert_to_viewers("flips blueprints over") + set_viewer(user) + if("hide_blueprints") + playsound(src, 'sound/items/paper_flip.ogg', 40, TRUE) + user.balloon_alert_to_viewers("flips blueprints over") clear_viewer() - viewing = user.client - showing = get_images(get_turf(viewing.eye || user), viewing.view) - viewing.images |= showing - if(message) - to_chat(user, message) + if("refresh") + playsound(src, 'sound/items/paper_flip.ogg', 40, TRUE) + clear_viewer() + set_viewer(user) + return TRUE -/obj/item/areaeditor/blueprints/proc/clear_viewer(mob/user, message = "") +/** + * Sets the user's client as the person viewing blueprint data, and builds blueprint data + * around the user. + * Args: + * - user: The person who's client we're giving images to. + */ +/obj/item/blueprints/proc/set_viewer(mob/user) + if(!user || !user.client) + return + if(viewing) + clear_viewer() + viewing = user.client + showing = get_blueprint_data(get_turf(viewing.eye || user), viewing.view) + viewing.images |= showing + +/** + * Clears the client we're showig images to and deletes the images of blueprint data + * we made to show them. + */ +/obj/item/blueprints/proc/clear_viewer() if(viewing) viewing.images -= showing viewing = null showing.Cut() - if(message) - to_chat(user, message) -/obj/item/areaeditor/blueprints/dropped(mob/user) - ..() - clear_viewer() - legend = FALSE - - -/obj/item/areaeditor/proc/get_area_type(area/A) - if (!A) - A = get_area(usr) - if(A.outdoors) - return AREA_SPACE - var/list/SPECIALS = list( +/** + * Gets the area type the user is currently standing in. + * Returns: AREA_STATION, AREA_OUTDOORS, or AREA_SPECIAL + * Args: + * - user: The person we're getting the area of to check if it's a special area. + */ +/obj/item/blueprints/proc/get_area_type(mob/user) + var/area/area_checking = get_area(user) + if(area_checking.outdoors) + return AREA_OUTDOORS + var/static/list/special_areas = typecacheof(list( /area/shuttle, /area/centcom, /area/centcom/asteroid, /area/centcom/tdome, /area/centcom/wizard_station, /area/misc/hilbertshotel, - /area/misc/hilbertshotelstorage - ) - for (var/type in SPECIALS) - if ( istype(A,type) ) - return AREA_SPECIAL + /area/misc/hilbertshotelstorage, + )) + if(area_checking.type in special_areas) + return AREA_SPECIAL return AREA_STATION -/obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user) - var/message = "
    You examine the wire legend.
    " - for(var/wireset in GLOB.wire_color_directory) - message += "
    [GLOB.wire_name_directory[wireset]]" - message += "

    " - return message - -/obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset) - //for some reason you can't use wireset directly as a derefencer so this is the next best :/ - for(var/device in GLOB.wire_color_directory) - if("[device]" == wireset) //I know... don't change it... - var/message = "

    [GLOB.wire_name_directory[device]]:" - for(var/Col in GLOB.wire_color_directory[device]) - var/wire_name = GLOB.wire_color_directory[device][Col] - if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds - message += "

    [Col]: [wire_name]

    " - message += "

    " - return message - return "" - -/obj/item/areaeditor/proc/edit_area() - var/area/A = get_area(usr) - var/prevname = "[A.name]" - var/str = tgui_input_text(usr, "New area name", "Area Creation", max_length = MAX_NAME_LEN) - if(!str || !length(str) || str == prevname) //cancel - return - if(length(str) > 50) - to_chat(usr, span_warning("The given name is too long. The area's name is unchanged.")) +/** + * edit_area + * Takes input from the player and renames the area the blueprints are currently in. + */ +/obj/item/blueprints/proc/edit_area(mob/user) + var/area/area_editing = get_area(src) + var/prevname = "[area_editing.name]" + var/new_name = tgui_input_text(user, "New area name", "Area Creation", max_length = MAX_NAME_LEN) + if(isnull(new_name) || !length(new_name) || new_name == prevname) return - rename_area(A, str) - - to_chat(usr, span_notice("You rename the '[prevname]' to '[str]'.")) - usr.log_message("has renamed [prevname] to [str]", LOG_GAME) - A.update_areasize() - interact() + rename_area(area_editing, new_name) + user.balloon_alert(user, "area renamed to [new_name]") + user.log_message("has renamed [prevname] to [new_name]", LOG_GAME) return TRUE -//Blueprint Subtypes - -/obj/item/areaeditor/blueprints/cyborg +///Cyborg blueprints - The same as regular but with a different fluff text. +/obj/item/blueprints/cyborg name = "station schematics" desc = "A digital copy of the station blueprints stored in your memory." - icon = 'icons/obj/scrolls.dmi' - icon_state = "blueprints" fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station." -/obj/item/areaeditor/blueprints/golem +///Golem blueprints - Used to make golem areas that won't give the hazardous area debuffs. +/obj/item/blueprints/golem name = "land claim" desc = "Use it to build new structures in the wastes." fluffnotice = "In memory of the Liberator's brother, Delaminator, and his Scarlet Macaw-iathan, from which this artifact was stolen." new_area_type = /area/golem -/proc/rename_area(a, new_name) - var/area/A = get_area(a) - var/prevname = "[A.name]" - set_area_machinery_title(A, new_name, prevname) - A.name = new_name - require_area_resort() //area renamed so resort the names +///Slime blueprints - Makes areas colored and compatible with xenobiology camera consoles, one time use. +/obj/item/blueprints/slime + name = "cerulean prints" + desc = "A one use yet of blueprints made of jelly like organic material. Extends the reach of the management console." + fluffnotice = "Copyright by Science Inc. Renaming areas will allow for management consoles to traverse them." + color = "#2956B2" - if(A.firedoors) - for(var/D in A.firedoors) - var/obj/machinery/door/firedoor/FD = D - FD.CalculateAffectingAreas() - A.update_areasize() - return TRUE +/obj/item/blueprints/slime/edit_area(mob/user) + . = ..() + var/area/area = get_area(src) + for(var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + area_turf.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + area_turf.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) + area.area_flags |= XENOBIOLOGY_COMPATIBLE + qdel(src) +#undef LEGEND_VIEWING_LIST +#undef LEGEND_OFF -/proc/set_area_machinery_title(area/area, title, oldtitle) - if(!oldtitle) // or replacetext goes to infinite loop - return +#undef AREA_STATION +#undef AREA_OUTDOORS +#undef AREA_SPECIAL - //stuff tied to the area to rename - var/static/list/to_rename = typecacheof(list( - /obj/machinery/airalarm, - /obj/machinery/atmospherics/components/unary/vent_scrubber, - /obj/machinery/atmospherics/components/unary/vent_pump, - /obj/machinery/door, - /obj/machinery/firealarm, - /obj/machinery/light_switch, - /obj/machinery/power/apc, - )) - for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) - for (var/turf/area_turf as anything in zlevel_turfs) - for(var/obj/machine as anything in typecache_filter_list(area_turf.contents, to_rename)) - machine.name = replacetext(machine.name, oldtitle, title) - //TODO: much much more. Unnamed airlocks, cameras, etc. diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index c3eca2eb033..ae0dca8d195 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -418,7 +418,7 @@ /obj/item/toy/crayon/proc/crayon_text_strip(text) text = copytext(text, 1, MAX_MESSAGE_LEN) var/static/regex/crayon_regex = new /regex(@"[^\w!?,.=&%#+/\-]", "ig") - return lowertext(crayon_regex.Replace(text, "")) + return LOWER_TEXT(crayon_regex.Replace(text, "")) /// Attempts to color the target. Returns how many charges were used. /obj/item/toy/crayon/proc/use_on(atom/target, mob/user, params) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index b7a96d777ef..88c9251d5b2 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -21,7 +21,7 @@ if(LAZYLEN(channels) || translate_binary) var/list/examine_text_list = list() for(var/i in channels) - examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]" + examine_text_list += "[GLOB.channel_tokens[i]] - [LOWER_TEXT(i)]" if(translate_binary) examine_text_list += "[GLOB.channel_tokens[MODE_BINARY]] - [MODE_BINARY]" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index fff7b0a655a..6bda55c8032 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -60,9 +60,9 @@ GLOBAL_LIST_INIT(channel_tokens, list( if(length(channels)) for(var/i in 1 to length(channels)) if(i == 1) - avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" + avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [LOWER_TEXT(channels[i])]" else - avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" + avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [LOWER_TEXT(channels[i])]" . += span_notice("A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].") if(command) diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index 2b4d09fb308..fcc9257e4b5 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -159,7 +159,7 @@ var/list/airs = islist(mixture) ? mixture : list(mixture) var/list/new_gasmix_data = list() for(var/datum/gas_mixture/air as anything in airs) - var/mix_name = capitalize(lowertext(target.name)) + var/mix_name = capitalize(LOWER_TEXT(target.name)) if(airs.len != 1) //not a unary gas mixture mix_name += " - Node [airs.Find(air)]" new_gasmix_data += list(gas_mixture_parser(air, mix_name)) @@ -184,7 +184,7 @@ var/list/airs = islist(mixture) ? mixture : list(mixture) for(var/datum/gas_mixture/air as anything in airs) - var/mix_name = capitalize(lowertext(target.name)) + var/mix_name = capitalize(LOWER_TEXT(target.name)) if(airs.len > 1) //not a unary gas mixture var/mix_number = airs.Find(air) message += span_boldnotice("Node [mix_number]") diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index f52d9bc527e..55c94f11f25 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -61,7 +61,7 @@ if(user.dna.check_mutation(/datum/mutation/human/hulk)) to_chat(user, span_warning("You lack the grace to wield this!")) return COMPONENT_TWOHANDED_BLOCK_WIELD - w_class = w_class_on + update_weight_class(w_class_on) hitsound = 'sound/weapons/blade1.ogg' START_PROCESSING(SSobj, src) set_light_on(TRUE) @@ -69,7 +69,7 @@ /// Triggered on unwield of two handed item /// switch hitsounds /obj/item/dualsaber/proc/on_unwield(obj/item/source, mob/living/carbon/user) - w_class = initial(w_class) + update_weight_class(initial(w_class)) hitsound = SFX_SWING_HIT STOP_PROCESSING(SSobj, src) set_light_on(FALSE) diff --git a/code/game/objects/items/granters/magic/_spell_granter.dm b/code/game/objects/items/granters/magic/_spell_granter.dm index e1ca6352293..21a69248a14 100644 --- a/code/game/objects/items/granters/magic/_spell_granter.dm +++ b/code/game/objects/items/granters/magic/_spell_granter.dm @@ -91,4 +91,4 @@ spell_options -= spell granted_action = pick(spell_options) - action_name = lowertext(initial(granted_action.name)) + action_name = LOWER_TEXT(initial(granted_action.name)) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 8e8aeb2617f..c1cf8c1010d 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -12,11 +12,19 @@ display_timer = FALSE w_class = WEIGHT_CLASS_SMALL gender = PLURAL + /// What the charge is stuck to var/atom/target = null + /// C4 overlay to put on target var/mutable_appearance/plastic_overlay + /// Do we do a directional explosion when target is a a dense atom? var/directional = FALSE + /// When doing a directional explosion, what arc does the explosion cover + var/directional_arc = 120 + /// For directional charges, which cardinal direction is the charge facing? var/aim_dir = NORTH + /// List of explosion radii (DEV, HEAVY, LIGHT) var/boom_sizes = list(0, 0, 3) + /// Do we apply the full force of a heavy ex_act() to mob targets var/full_damage_on_mobs = FALSE /// Minimum timer for c4 charges var/minimum_timer = 10 @@ -68,18 +76,20 @@ . = ..() var/turf/location + var/target_density if(target) if(!QDELETED(target)) location = get_turf(target) + target_density = target.density // We're about to blow target up, so need to save this value for later target.cut_overlay(plastic_overlay, TRUE) if(!ismob(target) || full_damage_on_mobs) EX_ACT(target, EXPLODE_HEAVY, target) else location = get_turf(src) if(location) - if(directional && target?.density) - var/turf/turf = get_step(location, aim_dir) - explosion(get_step(turf, aim_dir), devastation_range = boom_sizes[1], heavy_impact_range = boom_sizes[2], light_impact_range = boom_sizes[3], explosion_cause = src) + if(directional && target_density) + var/angle = dir2angle(aim_dir) + explosion(location, devastation_range = boom_sizes[1], heavy_impact_range = boom_sizes[2], light_impact_range = boom_sizes[3], explosion_cause = src, explosion_direction = angle, explosion_arc = directional_arc) else explosion(location, devastation_range = boom_sizes[1], heavy_impact_range = boom_sizes[2], light_impact_range = boom_sizes[3], explosion_cause = src) qdel(src) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 3a86d267af2..71968171d3a 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -514,7 +514,7 @@ return FALSE if(loc != user) return FALSE - mail_type = lowertext(mail_type) + mail_type = LOWER_TEXT(mail_type) var/mail_armed = tgui_alert(user, "Arm it?", "Mail Counterfeiting", list("Yes", "No")) == "Yes" if(isnull(mail_armed)) diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 77b07488d6c..1fabf13d31a 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -323,7 +323,7 @@ SSqueuelinks.add_to_queue(src, id, late_initialize_pop ? 0 : queue_size) return late_initialize_pop ? INITIALIZE_HINT_LATELOAD : . -/obj/machinery/puzzle/LateInitialize() +/obj/machinery/puzzle/post_machine_initialize() . = ..() if(late_initialize_pop && id && SSqueuelinks.queues[id]) SSqueuelinks.pop_link(id) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7a025bc6bcc..18a95cd77d3 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -196,11 +196,11 @@ /obj/item/stack/proc/update_weight() if(amount <= (max_amount * (1/3))) - w_class = clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class) + update_weight_class(clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class)) else if (amount <= (max_amount * (2/3))) - w_class = clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class) + update_weight_class(clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class)) else - w_class = full_w_class + update_weight_class(full_w_class) /obj/item/stack/update_icon_state() if(novariants) diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 4a8a1c1871f..1354b57f16f 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -135,7 +135,7 @@ item.forceMove(parcel) var/size = round(item.w_class) parcel.name = "[weight_class_to_text(size)] parcel" - parcel.w_class = size + parcel.update_weight_class(size) size = min(size, 5) parcel.base_icon_state = "deliverypackage[size]" parcel.update_icon() diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 8dcc1f4f6b6..6dc790cc495 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -204,6 +204,22 @@ for(var/i in 1 to 5) new /obj/item/reagent_containers/spray/chemsprayer/party(src) +/obj/item/storage/box/balloons + name = "box of long balloons" + desc = "A completely randomized and wacky box of long balloons, harvested straight from balloon farms on the clown planet." + illustration = "balloon" + +/obj/item/storage/box/balloons/Initialize(mapload) + . = ..() + atom_storage.max_slots = 24 + atom_storage.set_holdable(list(/obj/item/toy/balloon/long)) + atom_storage.max_total_storage = 24 + atom_storage.allow_quick_gather = FALSE + +/obj/item/storage/box/balloons/PopulateContents() + for(var/i in 1 to 24) + new /obj/item/toy/balloon/long(src) + /obj/item/storage/box/stickers name = "box of stickers" desc = "A box full of random stickers. Do give to the clown." diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 8772e2f41c9..72c84c9ee99 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -460,7 +460,7 @@ tank_assembly = assembly //Tell the tank about its assembly part assembly.master = src //Tell the assembly about its new owner assembly.on_attach() - w_class = WEIGHT_CLASS_BULKY + update_weight_class(WEIGHT_CLASS_BULKY) balloon_alert(user, "bomb assembled") update_appearance(UPDATE_OVERLAYS) @@ -474,7 +474,7 @@ user.put_in_hands(tank_assembly) tank_assembly.master = null tank_assembly = null - w_class = initial(w_class) + update_weight_class(initial(w_class)) update_appearance(UPDATE_OVERLAYS) /// Ignites the contents of the tank. Called when receiving a signal if the tank is welded and has an igniter attached. diff --git a/code/game/objects/items/tools/spess_knife.dm b/code/game/objects/items/tools/spess_knife.dm index 0b0061de7a4..9fd5dbb0158 100644 --- a/code/game/objects/items/tools/spess_knife.dm +++ b/code/game/objects/items/tools/spess_knife.dm @@ -60,10 +60,10 @@ mistake_occured = TRUE if(isnull(tool_behaviour)) - w_class = WEIGHT_CLASS_TINY + update_weight_class(WEIGHT_CLASS_TINY) balloon_alert(user, "folded") else - w_class = WEIGHT_CLASS_SMALL + update_weight_class(WEIGHT_CLASS_SMALL) balloon_alert(user, mistake_occured ? "oops! [tool_behaviour] out" : "[tool_behaviour] out") update_tool_parameters() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 67192b829a7..8ac1ee98994 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -39,8 +39,8 @@ /obj/item/toy/waterballoon name = "water balloon" desc = "A translucent balloon. There's nothing in it." - icon = 'icons/obj/toys/toy.dmi' - icon_state = "waterballoon-e" + icon = 'icons/obj/toys/balloons.dmi' + icon_state = "balloon_red-e" inhand_icon_state = "balloon-empty" /obj/item/toy/waterballoon/Initialize(mapload) @@ -107,15 +107,15 @@ icon_state = "waterballoon" inhand_icon_state = "balloon" else - icon_state = "waterballoon-e" + icon_state = "balloon_red-e" inhand_icon_state = "balloon-empty" return ..() -#define BALLOON_COLORS list("red", "blue", "green", "yellow") +#define BALLOON_COLORS list("red", "blue", "green", "yellow", "orange", "purple") /obj/item/toy/balloon name = "balloon" - desc = "No birthday is complete without it." + desc = "No birthday is complete without it. Sealed with a mechanical bluespace wrap so it remains floating no matter what." icon = 'icons/obj/toys/balloons.dmi' icon_state = "balloon" inhand_icon_state = "balloon" @@ -127,6 +127,68 @@ throw_range = 7 force = 0 var/random_color = TRUE + /// the string of the dmi state the balloon has while on the floor. + var/world_state + /// the string of the dmi state the balloon has while in your inventory. + var/storage_state + /// the string describing the name of balloon's current colour. + var/current_color + +/obj/item/toy/balloon/long + name = "long balloon" + desc = "A perfect balloon to contort into goofy forms. Sealed with a mechanical bluespace wrap so it remains floating no matter what." + icon_state = "balloon_long" + inhand_icon_state = "balloon" + w_class = WEIGHT_CLASS_NORMAL + /// Combinations of balloon colours to make specific animals. + var/list/balloon_combos = list( + list("red", "blue") = /obj/item/toy/balloon_animal/guy, + list("red", "green") = /obj/item/toy/balloon_animal/nukie, + list("red", "yellow") = /obj/item/toy/balloon_animal/clown, + list("red", "orange") = /obj/item/toy/balloon_animal/cat, + list("red", "purple") = /obj/item/toy/balloon_animal/fly, + list("blue", "green") = /obj/item/toy/balloon_animal/podguy, + list("blue", "yellow") = /obj/item/toy/balloon_animal/ai, + list("blue", "orange") = /obj/item/toy/balloon_animal/dog, + list("blue", "purple") = /obj/item/toy/balloon_animal/xeno, + list("green", "yellow") = /obj/item/toy/balloon_animal/banana, + list("green", "orange") = /obj/item/toy/balloon_animal/lizard, + list("green", "purple") = /obj/item/toy/balloon_animal/slime, + list("yellow", "orange") = /obj/item/toy/balloon_animal/moth, + list("yellow", "purple") = /obj/item/toy/balloon_animal/ethereal, + list("orange", "purple") = /obj/item/toy/balloon_animal/plasmaman, + ) + +/obj/item/toy/balloon/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(isturf(loc)) + icon_state = "[world_state]" + else + icon_state = "[storage_state]" + update_appearance() + +/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, params) + if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return ..() + + var/obj/item/toy/balloon/long/hit_by = attacking_item + if(hit_by.current_color == current_color) + to_chat(user, span_warning("You must use balloons of different colours to do that!")) + return ..() + visible_message( + span_notice("[user.name] starts contorting up a balloon animal!"), + blind_message = span_hear("You hear balloons being contorted."), + vision_distance = 3, + ignored_mobs = user, + ) + for(var/list/pair_of_colors in balloon_combos) + if((hit_by.current_color == pair_of_colors[1] && current_color == pair_of_colors[2]) || (current_color == pair_of_colors[1] && hit_by.current_color == pair_of_colors[2])) + var/path_to_spawn = balloon_combos[pair_of_colors] + user.put_in_hands(new path_to_spawn) + break + qdel(hit_by) + qdel(src) + return TRUE /obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/ammo_casing/foam_dart) && ismonkey(user)) @@ -157,17 +219,27 @@ . = ..() if(random_color) var/chosen_balloon_color = pick(BALLOON_COLORS) + current_color = "[chosen_balloon_color]" name = "[chosen_balloon_color] [name]" icon_state = "[icon_state]_[chosen_balloon_color]" inhand_icon_state = icon_state + world_state = "[icon_state]" + storage_state = "[icon_state]_storage" /obj/item/toy/balloon/corgi name = "corgi balloon" - desc = "A balloon with a corgi face on it. For the all year good boys." + desc = "A balloon in the shape of a corgi's head. For the all year good boys." icon_state = "corgi" inhand_icon_state = "corgi" random_color = FALSE +/obj/item/toy/balloon/heart + name = "heart balloon" + desc = "A balloon in the shape of a heart. How lovely" + icon_state = "heart" + inhand_icon_state = "heart" + random_color = FALSE + /obj/item/toy/balloon/syndicate name = "syndicate balloon" desc = "There is a tag on the back that reads \"FUK NT!11!\"." @@ -200,6 +272,96 @@ #undef BALLOON_COLORS +/* +* Balloon animals +*/ + +/obj/item/toy/balloon_animal + name = "balloon animal" + desc = "You shouldn't have this." + icon = 'icons/obj/toys/balloons.dmi' + icon_state = "balloon_guy" + throwforce = 0 + throw_speed = 2 + throw_range = 5 + force = 0 + +/obj/item/toy/balloon_animal/guy + name = "balloon guy" + desc = "A balloon effigy of the everyday standard issue human guy. Wonder if he pays balloon taxes. He probably evades them." + icon_state = "balloon_guy" + +/obj/item/toy/balloon_animal/nukie + name = "balloon nukie" + desc = "A balloon effigy of syndicate's nuclear operative. Either made to appease them and pray for survival, or to poke fun at them." + icon_state = "balloon_nukie" + +/obj/item/toy/balloon_animal/clown + name = "balloon clown" + desc = "A balloon clown, smiling from ear to ear and beyond!" + icon_state = "balloon_clown" + +/obj/item/toy/balloon_animal/cat + name = "balloon cat" + desc = "Without the sharp claws, balloon cats are possibly cuter than their live counterparts, though not as relatable, warm and fuzzy." + icon_state = "balloon_cat" + +/obj/item/toy/balloon_animal/fly + name = "balloon fly" + desc = "A balloon effigy of a flyperson. Thankfully, it doesn't come with balloon vomit." + icon_state = "balloon_fly" + +/obj/item/toy/balloon_animal/podguy + name = "balloon podguy" + desc = "A balloon effigy of a podperson. Though, actual podpeople have heads and not stalks and leaves." + icon_state = "balloon_podguy" + +/obj/item/toy/balloon_animal/ai + name = "balloon ai core" + desc = "A somewhat unrealistic balloon effigy of the station's AI core. Actual AI propably wouldn't smile like this." + icon_state = "balloon_ai" + +/obj/item/toy/balloon_animal/dog + name = "balloon dog" + desc = "A balloon effigy of the best boy. It cannot truly compare, but it makes an effort." + icon_state = "balloon_dog" + +/obj/item/toy/balloon_animal/xeno + name = "balloon xeno" + desc = "A balloon effigy of a spooky xeno! Too squishy to scare anyone itself, though." + icon_state = "balloon_xeno" + +/obj/item/toy/balloon_animal/banana + name = "balloon banana" + desc = "A balloon banana. This one can't be slipped on. Good for psychological warfare, though." + icon_state = "balloon_banana" + +/obj/item/toy/balloon_animal/lizard + name = "balloon lizard" + desc = "A balloon effigy of a lizard. One of the first species to adapt to clown planet's culture. Perhaps because they are naturally laughable?" + icon_state = "balloon_lizard" + +/obj/item/toy/balloon_animal/slime + name = "balloon slime" + desc = "A balloon effigy of single specimen of the galaxy-wide slime scourge, of purple variety. Slimes tried to invade clown planet once. They got quickly washed out by water-spitting flowers, though." + icon_state = "balloon_slime" + +/obj/item/toy/balloon_animal/moth + name = "balloon moth" + desc = "A balloon effigy of a common member of moth flotillas. Very few of them ever decide to settle on the clown planet, but those who do have the best 'piece-of-cloth-dissapearing' acts." + icon_state = "balloon_moth" + +/obj/item/toy/balloon_animal/ethereal + name = "balloon ethereal" + desc = "A balloon effigy of an ethereal artisan. Clownery is one form of art, and as such, ethereals were both drawn to and readily accepted at clown planet. Don't mind the lighbulb head, it's art too." + icon_state = "balloon_ethereal" + +/obj/item/toy/balloon_animal/plasmaman + name = "balloon plasmaman" + desc = "A balloon effigy of a plasmaman. Among the rarest on the clown planet, only having appeared recently thanks to ready trade between clown planet and NT." + icon_state = "balloon_plasmaman" + + /* * Captain's Aid */ diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 1f2078f0037..2aa649844e5 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -40,6 +40,48 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(user.combat_mode) return ..(M, user) + +/obj/item/balloon_mallet + name = "balloon mallet" + desc = "It's a mallet, a weapon known for being heavy, but made from notoriously light balloons. Air inside removes any force from the swings. It'd be quite embarrassing to get hit by this." + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "balloon_mallet" + inhand_icon_state = "balloon_mallet" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + siemens_coefficient = 0 + force = 1 + throw_speed = 1 + throwforce = 1 + throw_range = 1 + w_class = WEIGHT_CLASS_HUGE + attack_verb_continuous = list("mallets", "smoother") + attack_verb_simple = list("mallet", "smoother") + max_integrity = 20 + armor_type = /datum/armor/item_banhammer + resistance_flags = FIRE_PROOF + +/obj/item/balloon_mallet/examine(mob/user) + . = ..() + if(HAS_TRAIT(user,TRAIT_BALLOON_SUTRA)) + . = "A sacred weapon of the higher castes from the clown planet, used to strike fear into the hearts of their foes. Wield it with care." + +/obj/item/balloon_mallet/attack(mob/living/target, mob/living/user) + playsound(loc, 'sound/creatures/clown/hehe.ogg', 20) + if (!isliving(target)) + return + switch(target.mob_mood.sanity) + if (SANITY_INSANE to SANITY_CRAZY) + force = 8 + if (SANITY_UNSTABLE to SANITY_DISTURBED) + force = 4 + target.add_mood_event("humiliated", /datum/mood_event/mallet_humiliation) + if (SANITY_NEUTRAL to SANITY_GREAT) + target.add_mood_event("humiliated", /datum/mood_event/mallet_humiliation) + + if(user.combat_mode) + return ..(target, user) + /obj/item/sord name = "\improper SORD" desc = "This thing is so unspeakably shitty you are having a hard time even holding it." diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index 02f611eb4e3..a26a2f92784 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -191,7 +191,6 @@ // Late init so that we can wait for air to exist in lazyloaded templates /obj/structure/bonfire/prelit/LateInitialize() - . = ..() start_burning() #undef BONFIRE_FIRE_STACK_STRENGTH diff --git a/code/game/objects/structures/broken_flooring.dm b/code/game/objects/structures/broken_flooring.dm index 3d1fa986505..9b2e4729080 100644 --- a/code/game/objects/structures/broken_flooring.dm +++ b/code/game/objects/structures/broken_flooring.dm @@ -16,7 +16,6 @@ return INITIALIZE_HINT_LATELOAD /obj/structure/broken_flooring/LateInitialize() - . = ..() var/turf/turf = get_turf(src) if(!isplatingturf(turf) && !always_floorplane) // Render as trash if not on plating plane = GAME_PLANE diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3eb29fc1526..4a201cba5b8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -163,7 +163,6 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) update_appearance() /obj/structure/closet/LateInitialize() - . = ..() if(!opened && is_maploaded) take_contents() diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index bfed8bea979..38482fcfd9b 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -171,7 +171,7 @@ if(A_is_item.w_class < max_weight_of_contents) continue max_weight_of_contents = A_is_item.w_class - folding_bodybag.w_class = max_weight_of_contents + folding_bodybag.update_weight_class(max_weight_of_contents) the_folder.put_in_hands(folding_bodybag) /// Environmental bags. They protect against bad weather. diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 679e31f9295..182c93b90df 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -27,7 +27,7 @@ . = ..() // Traitor steal objective - new /obj/item/areaeditor/blueprints(src) + new /obj/item/blueprints(src) new /obj/item/pipe_dispenser/bluespace(src) // SKYRAT EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src) /obj/structure/closet/secure_closet/engineering_electrical diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 0154015fb0d..394dc0c945e 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -46,20 +46,20 @@ var/static/list/crate_paint_jobs if(isnull(crate_paint_jobs)) crate_paint_jobs = list( - "Internals" = list("icon_state" = "o2crate"), - "Medical" = list("icon_state" = "medical"), - "Medical Plus" = list("icon_state" = "medicalcrate"), - "Radiation" = list("icon_state" = "radiation"), - "Hydrophonics" = list("icon_state" = "hydrocrate"), - "Science" = list("icon_state" = "scicrate"), - "Robotics" = list("icon_state" = "robo"), - "Solar" = list("icon_state" = "engi_e_crate"), - "Engineering" = list("icon_state" = "engi_crate"), - "Atmospherics" = list("icon_state" = "atmos"), - "Cargo" = list("icon_state" = "cargo"), - "Mining" = list("icon_state" = "mining"), - "Command" = list("icon_state" = "centcom") - ) + "Internals" = list("icon_state" = "o2crate"), + "Medical" = list("icon_state" = "medical"), + "Medical Plus" = list("icon_state" = "medicalcrate"), + "Radiation" = list("icon_state" = "radiation"), + "Hydrophonics" = list("icon_state" = "hydrocrate"), + "Science" = list("icon_state" = "scicrate"), + "Robotics" = list("icon_state" = "robo"), + "Solar" = list("icon_state" = "engi_e_crate"), + "Engineering" = list("icon_state" = "engi_crate"), + "Atmospherics" = list("icon_state" = "atmos"), + "Cargo" = list("icon_state" = "cargo"), + "Mining" = list("icon_state" = "mining"), + "Command" = list("icon_state" = "centcom"), + ) if(paint_jobs) paint_jobs = crate_paint_jobs diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index ae7cd5654ba..faebf85265c 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -451,8 +451,8 @@ ui.open() /obj/item/key/displaycase - name = "display case key" - desc = "The key to the curator's display cases." + name = "curator key" + desc = "The key to the curator's display cases and arcade cabinets." /obj/item/showpiece_dummy name = "holographic replica" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index feb5cdd2b31..a1deed332ab 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -190,13 +190,11 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /// Minimum temperature of the internal air mixture var/minimum_temperature = T0C - 60 - /obj/structure/bodycontainer/morgue/Initialize(mapload) ..() return INITIALIZE_HINT_LATELOAD /obj/structure/bodycontainer/morgue/LateInitialize() - . = ..() var/datum/gas_mixture/external_air = loc.return_air() if(external_air) internal_air = external_air.copy() diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 06538ea2ef1..642a7ac125e 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -35,8 +35,7 @@ . = ..() return INITIALIZE_HINT_LATELOAD -/obj/structure/plaque/static_plaque/tram/LateInitialize(mapload) - . = ..() +/obj/structure/plaque/static_plaque/tram/LateInitialize() link_tram() set_tram_serial() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 234abcbeb39..f1c4516316d 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -220,6 +220,7 @@ to_chat(user, span_notice("You start deconstructing [src]...")) if(tool.use_tool(src, user, 4 SECONDS, volume=50)) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + frame = null deconstruct(TRUE) return ITEM_INTERACT_SUCCESS @@ -304,7 +305,11 @@ else for(var/datum/material/mat in custom_materials) new mat.sheet_type(target_turf, FLOOR(custom_materials[mat] / SHEET_MATERIAL_AMOUNT, 1)) - new framestack(target_turf, framestackamount) + + if(frame) + new frame(target_turf) + else + new framestack(get_turf(src), framestackamount) /obj/structure/table/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_DECONSTRUCT) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 89d04f46976..a77f7a987f3 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -702,7 +702,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/reinforced/fulltile name = "full tile reinforced window" - desc = "A full tile reinforced window" + desc = "A full tile window that is reinforced with metal rods." icon = 'icons/obj/smooth_structures/reinforced_window.dmi' //ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE icon_state = "reinforced_window-0" base_icon_state = "reinforced_window" diff --git a/code/game/turfs/open/floor/glass.dm b/code/game/turfs/open/floor/glass.dm index b1579da55f0..cece195aaf8 100644 --- a/code/game/turfs/open/floor/glass.dm +++ b/code/game/turfs/open/floor/glass.dm @@ -33,7 +33,6 @@ return INITIALIZE_HINT_LATELOAD /turf/open/floor/glass/LateInitialize() - . = ..() AddElement(/datum/element/turf_z_transparency) setup_glow() diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 24345611576..2006a3e6829 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -32,7 +32,6 @@ return INITIALIZE_HINT_LATELOAD /turf/open/openspace/LateInitialize() - . = ..() AddElement(/datum/element/turf_z_transparency) /turf/open/openspace/ChangeTurf(path, list/new_baseturfs, flags) @@ -188,7 +187,9 @@ if(!T) return if(T.turf_flags & NO_RUINS && protect_ruin) - ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR) + var/turf/newturf = ChangeTurf(replacement_turf, null, CHANGETURF_IGNORE_AIR) + if(!isopenspaceturf(newturf)) // only openspace turfs should be returning INITIALIZE_HINT_LATELOAD + return INITIALIZE_HINT_NORMAL return if(!ismineralturf(T) || !drill_below) return diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index d404870e1c8..1bfe5c2e5e1 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -273,7 +273,6 @@ GLOBAL_LIST_EMPTY(starlight) return INITIALIZE_HINT_LATELOAD /turf/open/space/openspace/LateInitialize() - . = ..() AddElement(/datum/element/turf_z_transparency) /turf/open/space/openspace/Destroy() diff --git a/code/modules/admin/greyscale_modify_menu.dm b/code/modules/admin/greyscale_modify_menu.dm index fd2db6d1ed3..89ad2fc8dd2 100644 --- a/code/modules/admin/greyscale_modify_menu.dm +++ b/code/modules/admin/greyscale_modify_menu.dm @@ -154,13 +154,13 @@ if("recolor") var/index = text2num(params["color_index"]) - var/new_color = lowertext(params["new_color"]) + var/new_color = LOWER_TEXT(params["new_color"]) if(split_colors[index] != new_color && (findtext(new_color, GLOB.is_color) || (unlocked && findtext(new_color, GLOB.is_alpha_color)))) split_colors[index] = new_color queue_refresh() if("recolor_from_string") - var/full_color_string = lowertext(params["color_string"]) + var/full_color_string = LOWER_TEXT(params["color_string"]) if(full_color_string != split_colors.Join() && ReadColorsFromString(full_color_string)) queue_refresh() diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index e5b3756cfd4..6359c6a2df4 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -636,7 +636,7 @@ duration = text2num(duration) if (!(interval in list("SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "YEAR"))) interval = "MINUTE" - var/time_message = "[duration] [lowertext(interval)]" //no DisplayTimeText because our duration is of variable interval type + var/time_message = "[duration] [LOWER_TEXT(interval)]" //no DisplayTimeText because our duration is of variable interval type if(duration > 1) //pluralize the interval if necessary time_message += "s" var/is_server_ban = (roles_to_ban[1] == "Server") diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 88ab09de6d3..9dee7ef38ee 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -755,18 +755,4 @@ notesfile.cd = "/" notesfile.dir.Remove(ckey) -/*alternatively this proc can be run once to pass through every note and attempt to convert it before deleting the file, if done then AUTOCONVERT_NOTES should be turned off -this proc can take several minutes to execute fully if converting and cause DD to hang if converting a lot of notes; it's not advised to do so while a server is live -/proc/mass_convert_notes() - to_chat(world, "Beginning mass note conversion", confidential = TRUE) - var/savefile/notesfile = new(NOTESFILE) - if(!notesfile) - log_game("Error: Cannot access [NOTESFILE]") - return - notesfile.cd = "/" - for(var/ckey in notesfile.dir) - convert_notes_sql(ckey) - to_chat(world, "Deleting NOTESFILE", confidential = TRUE) - fdel(NOTESFILE) - to_chat(world, "Finished mass note conversion, remember to turn off AUTOCONVERT_NOTES", confidential = TRUE)*/ #undef NOTESFILE diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 47da593fc9e..36db4fa8bc4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -1022,7 +1022,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/sdql2_vv_all, new(null return null else if(expression [start] == "{" && long) - if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x") //3 == length("0x") + 1 + if(LOWER_TEXT(copytext(expression[start + 1], 1, 3)) != "0x") //3 == length("0x") + 1 to_chat(usr, span_danger("Invalid pointer syntax: [expression[start + 1]]"), confidential = TRUE) return null var/datum/located = locate("\[[expression[start + 1]]]") diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 58a18e1a936..eb262339841 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -109,7 +109,7 @@ return null /datum/sdql_parser/proc/tokenl(i) - return lowertext(token(i)) + return LOWER_TEXT(token(i)) /datum/sdql_parser/proc/query_options(i, list/node) var/list/options = list() @@ -624,7 +624,7 @@ node += "null" i++ - else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))//3 == length("0x") + 1 + else if(LOWER_TEXT(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))//3 == length("0x") + 1 node += hex2num(copytext(token(i), 3)) i++ diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 06c19ce5c91..bc74347475a 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -81,8 +81,8 @@ /proc/_log(X, Y) return log(X, Y) -/proc/_lowertext(T) - return lowertext(T) +/proc/_LOWER_TEXT(T) + return LOWER_TEXT(T) /proc/_matrix(a, b, c, d, e, f) return matrix(a, b, c, d, e, f) diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index 28082af0597..7764bb5594a 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -228,7 +228,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th if(record_found)//If they have a record we can determine a few things. new_character.real_name = record_found.name - new_character.gender = lowertext(record_found.gender) + new_character.gender = LOWER_TEXT(record_found.gender) new_character.age = record_found.age var/datum/dna/found_dna = record_found.locked_dna new_character.hardset_dna(found_dna.unique_identity, found_dna.mutation_index, null, record_found.name, record_found.blood_type, new record_found.species_type, found_dna.features) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index a72f6030b8d..589a393b0ea 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -1097,10 +1097,10 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) if(!M.mind) continue - for(var/string in splittext(lowertext(M.real_name), " ")) + for(var/string in splittext(LOWER_TEXT(M.real_name), " ")) if(!(string in ignored_words)) nameWords += string - for(var/string in splittext(lowertext(M.name), " ")) + for(var/string in splittext(LOWER_TEXT(M.name), " ")) if(!(string in ignored_words)) nameWords += string diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index ae1630243cd..23676cd8ea9 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -618,7 +618,7 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM // The ticket's id var/ticket_id = ticket?.id - var/compliant_msg = trim(lowertext(message)) + var/compliant_msg = trim(LOWER_TEXT(message)) var/tgs_tagged = "[sender](TGS/External)" var/list/splits = splittext(compliant_msg, " ") var/split_size = length(splits) diff --git a/code/modules/admin/verbs/player_ticket_history.dm b/code/modules/admin/verbs/player_ticket_history.dm index b7d8fd21d4c..829d4dfc2b5 100644 --- a/code/modules/admin/verbs/player_ticket_history.dm +++ b/code/modules/admin/verbs/player_ticket_history.dm @@ -29,7 +29,7 @@ ADMIN_VERB(player_ticket_history, R_ADMIN, "Player Ticket History", "Allows you var/list/user_selections = list() /datum/ticket_history_holder/proc/cache_history_for_ckey(ckey, entries = 5) - ckey = lowertext(ckey) + ckey = LOWER_TEXT(ckey) if(!isnum(entries) || entries <= 0) return diff --git a/code/modules/admin/verbs/server.dm b/code/modules/admin/verbs/server.dm index c284b8ef12d..71000fd310d 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -82,8 +82,8 @@ ADMIN_VERB(start_now, R_SERVER, "Start Now", "Start the round RIGHT NOW.", ADMIN if(SSticker.start_immediately) SSticker.start_immediately = FALSE - SSticker.SetTimeLeft(3 MINUTES) - to_chat(world, span_big(span_notice("The game will start in 3 minutes."))) + SSticker.SetTimeLeft(1800) + to_chat(world, span_infoplain(span_bold("The game will start in 180 seconds."))) SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) message_admins(span_adminnotice("[key_name_admin(user)] has cancelled immediate game start. Game will start in 3 minutes.")) log_admin("[key_name(user)] has cancelled immediate game start.") @@ -135,10 +135,10 @@ ADMIN_VERB(toggle_ai, R_SERVER, "Toggle AI", "Toggle the ability to choose AI jo var/alai = CONFIG_GET(flag/allow_ai) CONFIG_SET(flag/allow_ai, !alai) if (alai) - to_chat(world, "The AI job is no longer chooseable.", confidential = TRUE) + to_chat(world, span_bold("The AI job is no longer chooseable."), confidential = TRUE) else - to_chat(world, "The AI job is chooseable now.", confidential = TRUE) - log_admin("[key_name(user)] toggled AI allowed.") + to_chat(world, span_bold("The AI job is chooseable now."), confidential = TRUE) + log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! @@ -189,10 +189,10 @@ ADMIN_VERB(delay, R_SERVER, "Delay Pre-Game", "Delay the game start.", ADMIN_CAT SSticker.SetTimeLeft(newtime) SSticker.start_immediately = FALSE if(newtime < 0) - to_chat(world, "The game start has been delayed.", confidential = TRUE) - log_admin("[key_name(user)] delayed the round start.") + to_chat(world, span_infoplain(span_bold("The game start has been delayed.")), confidential = TRUE) + log_admin("[key_name(usr)] delayed the round start.") else - to_chat(world, "The game will start in [DisplayTimeText(newtime)].", confidential = TRUE) + to_chat(world, span_infoplain(span_bold("The game will start in [DisplayTimeText(newtime)].")), confidential = TRUE) SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) log_admin("[key_name(user)] set the pre-game delay to [DisplayTimeText(newtime)].") BLACKBOX_LOG_ADMIN_VERB("Delay Game Start") @@ -222,9 +222,9 @@ ADMIN_VERB(toggle_guests, R_SERVER, "Toggle Guests", "Toggle the ability for gue var/new_guest_ban = !CONFIG_GET(flag/guest_ban) CONFIG_SET(flag/guest_ban, new_guest_ban) if (new_guest_ban) - to_chat(world, "Guests may no longer enter the game.", confidential = TRUE) + to_chat(world, span_bold("Guests may no longer enter the game."), confidential = TRUE) else - to_chat(world, "Guests may now enter the game.", confidential = TRUE) - log_admin("[key_name(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") - message_admins(span_adminnotice("[key_name_admin(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) + to_chat(world, span_bold("Guests may now enter the game."), confidential = TRUE) + log_admin("[key_name(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") + message_admins(span_adminnotice("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index 5bd5ce8c2ec..ee729de7068 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -198,11 +198,8 @@ pad.teleport_target = location to_chat(user, span_notice("Location marked as test subject release point.")) -/obj/machinery/abductor/console/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/abductor/console/LateInitialize() +/obj/machinery/abductor/console/post_machine_initialize() + . = ..() if(!team_number) return diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 18fda4bf4ff..0e468159a3c 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -23,6 +23,9 @@ /datum/action/changeling/pheromone_receptors/sting_action(mob/living/carbon/user) ..() var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) + if(HAS_TRAIT(user, TRAIT_ANOSMIA)) //Anosmia quirk holders can't smell anything + to_chat(user, span_warning("We can't smell!")) + return if(!receptors_active) to_chat(user, span_warning("We search for the scent of any nearby changelings.")) changeling.chem_recharge_slowdown += 0.25 diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm index 9d5af7ab83e..17364feec55 100644 --- a/code/modules/antagonists/disease/disease_datum.dm +++ b/code/modules/antagonists/disease/disease_datum.dm @@ -54,7 +54,7 @@ result += objectives_text - var/special_role_text = lowertext(name) + var/special_role_text = LOWER_TEXT(name) if(win) result += span_greentext("The [special_role_text] was successful!") diff --git a/code/modules/antagonists/heretic/items/forbidden_book.dm b/code/modules/antagonists/heretic/items/forbidden_book.dm index ad6bc388800..06f091c77e7 100644 --- a/code/modules/antagonists/heretic/items/forbidden_book.dm +++ b/code/modules/antagonists/heretic/items/forbidden_book.dm @@ -39,11 +39,11 @@ if(book_open) close_animation() RemoveElement(/datum/element/heretic_focus) - w_class = WEIGHT_CLASS_SMALL + update_weight_class(WEIGHT_CLASS_SMALL) else open_animation() AddElement(/datum/element/heretic_focus) - w_class = WEIGHT_CLASS_NORMAL + update_weight_class(WEIGHT_CLASS_NORMAL) /obj/item/codex_cicatrix/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index dbaec3e3a20..095ccbc1b75 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -267,7 +267,7 @@ // SKYRAT EDIT REMOVAL START /* - var/special_role_text = lowertext(name) + var/special_role_text = LOWER_TEXT(name) if(malf_ai_won) result += span_greentext("The [special_role_text] was successful!") diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 2b323d51162..04ebab73cbd 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -232,7 +232,7 @@ pad_ref = WEAKREF(I.buffer) return TRUE -/obj/machinery/computer/piratepad_control/LateInitialize() +/obj/machinery/computer/piratepad_control/post_machine_initialize() . = ..() if(cargo_hold_id) for(var/obj/machinery/piratepad/P as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/piratepad)) diff --git a/code/modules/antagonists/spy/spy.dm b/code/modules/antagonists/spy/spy.dm index e0ea7e40754..89809958b29 100644 --- a/code/modules/antagonists/spy/spy.dm +++ b/code/modules/antagonists/spy/spy.dm @@ -130,7 +130,30 @@ your_mission.owner = owner your_mission.explanation_text = pick_list_replacements(SPY_OBJECTIVE_FILE, "objective_body") objectives += your_mission - + + if((length(objectives) < 3) && prob(25)) + switch(rand(1, 4)) + if(1) + var/datum/objective/protect/save_the_person = new() + save_the_person.owner = owner + save_the_person.no_failure = TRUE + objectives += save_the_person + if(2) + var/datum/objective/protect/nonhuman/save_the_entity = new() + save_the_entity.owner = owner + save_the_entity.no_failure = TRUE + objectives += save_the_entity + if(3) + var/datum/objective/jailbreak/save_the_jailbird = new() + save_the_jailbird.owner = owner + save_the_jailbird.no_failure = TRUE + objectives += save_the_jailbird + if(4) + var/datum/objective/jailbreak/detain/cage_the_jailbird = new() + cage_the_jailbird.owner = owner + cage_the_jailbird.no_failure = TRUE + objectives += cage_the_jailbird + if(prob(10)) var/datum/objective/martyr/leave_no_trace = new() leave_no_trace.owner = owner @@ -141,6 +164,11 @@ steal_the_shuttle.owner = owner objectives += steal_the_shuttle + else if(prob(10)) //10% chance on 87.3% chance + var/datum/objective/exile/hit_the_bricks = new() + hit_the_bricks.owner = owner + objectives += hit_the_bricks + else var/datum/objective/escape/gtfo = new() gtfo.owner = owner diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 88776b6819a..5ad5aeecf26 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -360,7 +360,7 @@ result += contractor_round_end() result += "
    The traitor had a total of [DISPLAY_PROGRESSION(uplink_handler.progression_points)] Reputation and [uplink_handler.telecrystals] Unused Telecrystals." - var/special_role_text = lowertext(name) + var/special_role_text = LOWER_TEXT(name) if(traitor_won) result += span_greentext("The [special_role_text] was successful!") diff --git a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm index 9723d2b653e..5a31c4c1739 100644 --- a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm +++ b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm @@ -49,7 +49,7 @@ GLOBAL_DATUM_INIT(objective_machine_handler, /datum/objective_target_machine_han for(var/obj/machinery/machine as anything in possible_machines) prepare_machine(machine) - replace_in_name("%JOB%", lowertext(chosen_job)) + replace_in_name("%JOB%", LOWER_TEXT(chosen_job)) replace_in_name("%MACHINE%", possible_machines[1].name) return TRUE diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index dd370f480f4..a4758eb9e11 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -350,7 +350,7 @@ var/result = rustg_dmi_create_png(png_filename, "[width]", "[height]", image_data) if(result) CRASH("Error generating painting png : [result]") - painting_metadata.md5 = md5(lowertext(image_data)) + painting_metadata.md5 = md5(LOWER_TEXT(image_data)) generated_icon = new(png_filename) icon_generated = TRUE update_appearance() @@ -663,7 +663,7 @@ stack_trace("Invalid persistence_id - [persistence_id]") return var/data = current_canvas.get_data_string() - var/md5 = md5(lowertext(data)) + var/md5 = md5(LOWER_TEXT(data)) var/list/current = SSpersistent_paintings.paintings[persistence_id] if(!current) current = list() diff --git a/code/modules/asset_cache/assets/arcade.dm b/code/modules/asset_cache/assets/arcade.dm index bcd23919f97..338b891190c 100644 --- a/code/modules/asset_cache/assets/arcade.dm +++ b/code/modules/asset_cache/assets/arcade.dm @@ -1,5 +1,7 @@ /datum/asset/simple/arcade assets = list( + "shopkeeper.png" = 'icons/ui_icons/arcade/shopkeeper.png', + "fireplace.png" = 'icons/ui_icons/arcade/fireplace.png', "boss1.gif" = 'icons/ui_icons/arcade/boss1.gif', "boss2.gif" = 'icons/ui_icons/arcade/boss2.gif', "boss3.gif" = 'icons/ui_icons/arcade/boss3.gif', diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index d42618e9ee9..d8d0ed3b47e 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -81,7 +81,7 @@ fire = 100 acid = 70 -/obj/machinery/atmospherics/LateInitialize() +/obj/machinery/atmospherics/post_machine_initialize() . = ..() update_name() diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm index 84753354018..91da04afaf2 100644 --- a/code/modules/atmospherics/machinery/bluespace_vendor.dm +++ b/code/modules/atmospherics/machinery/bluespace_vendor.dm @@ -71,7 +71,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30) AddComponent(/datum/component/payment, tank_cost, SSeconomy.get_dep_account(ACCOUNT_ENG), PAYMENT_ANGRY) find_and_hang_on_wall( FALSE) -/obj/machinery/bluespace_vendor/LateInitialize() +/obj/machinery/bluespace_vendor/post_machine_initialize() . = ..() if(!map_spawned) return diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 8df616c179c..a9fcaf93ec6 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -104,7 +104,7 @@ // We late initialize here so all stationary tanks have time to set up their // initial gas mixes and signal registrations. -/obj/machinery/atmospherics/components/tank/LateInitialize() +/obj/machinery/atmospherics/components/tank/post_machine_initialize() . = ..() GetMergeGroup(merger_id, merger_typecache) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index c4bb2d17610..0fdc5093511 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -62,10 +62,10 @@ GLOBAL_LIST_INIT(potentialConfigRandomZlevels, generate_map_list_from_directory( var/name = null if (pos) - name = lowertext(copytext(t, 1, pos)) + name = LOWER_TEXT(copytext(t, 1, pos)) else - name = lowertext(t) + name = LOWER_TEXT(t) if (!name) continue diff --git a/code/modules/bitrunning/objects/byteforge.dm b/code/modules/bitrunning/objects/byteforge.dm index f8212b7666b..b971cdae75d 100644 --- a/code/modules/bitrunning/objects/byteforge.dm +++ b/code/modules/bitrunning/objects/byteforge.dm @@ -14,7 +14,7 @@ return INITIALIZE_HINT_LATELOAD -/obj/machinery/byteforge/LateInitialize() +/obj/machinery/byteforge/post_machine_initialize() . = ..() setup_particles() diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm index 5c8e399292f..a1a681cab05 100644 --- a/code/modules/bitrunning/objects/netpod.dm +++ b/code/modules/bitrunning/objects/netpod.dm @@ -24,12 +24,7 @@ /// Static list of outfits to select from var/list/cached_outfits = list() -/obj/machinery/netpod/Initialize(mapload) - . = ..() - - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/netpod/LateInitialize() +/obj/machinery/netpod/post_machine_initialize() . = ..() disconnect_damage = BASE_DISCONNECT_DAMAGE diff --git a/code/modules/bitrunning/objects/quantum_console.dm b/code/modules/bitrunning/objects/quantum_console.dm index 9dc829c48cd..9a0f48ae80b 100644 --- a/code/modules/bitrunning/objects/quantum_console.dm +++ b/code/modules/bitrunning/objects/quantum_console.dm @@ -12,11 +12,8 @@ . = ..() desc = "Even in the distant year [CURRENT_STATION_YEAR], Nanostrasen is still using REST APIs. How grim." - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/quantum_console/LateInitialize() +/obj/machinery/computer/quantum_console/post_machine_initialize() . = ..() - find_server() /obj/machinery/computer/quantum_console/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index b9d8808607e..06b49d790a5 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -49,12 +49,7 @@ /// Cooldown between being able to toggle broadcasting COOLDOWN_DECLARE(broadcast_toggle_cd) -/obj/machinery/quantum_server/Initialize(mapload) - . = ..() - - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/quantum_server/LateInitialize() +/obj/machinery/quantum_server/post_machine_initialize() . = ..() radio = new(src) diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index e3b9fb37869..aac487a83d6 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -221,7 +221,6 @@ return INITIALIZE_HINT_LATELOAD /obj/item/ctf_flag/LateInitialize() - . = ..() ctf_game = GLOB.ctf_games[game_id] //Flags don't create ctf games by themselves since you can get ctf flags from christmas trees. /obj/item/ctf_flag/Destroy() diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm index 3546ce0881d..18e1cd13e7e 100644 --- a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm +++ b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm @@ -12,9 +12,8 @@ /obj/machinery/ctf/spawner/medisim/Initialize(mapload) . = ..() ctf_game.setup_rules(victory_rejoin_text = "Teams have been cleared. The next game is starting automatically. Rejoin a team if you wish!", auto_restart = TRUE) - return INITIALIZE_HINT_LATELOAD //Start CTF needs to run after both medisim spawners have initalized. -/obj/machinery/ctf/spawner/medisim/LateInitialize() +/obj/machinery/ctf/spawner/medisim/post_machine_initialize() . = ..() ctf_game.start_ctf() diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 7d345802eef..636b4f4791b 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -257,7 +257,7 @@ ..() fluid_type = pick(AQUARIUM_FLUID_FRESHWATER, AQUARIUM_FLUID_SALTWATER, AQUARIUM_FLUID_SULPHWATEVER) name = "[fluid_type] Fish" - description = "We need [lowertext(fluid_type)] fish to populate our aquariums with. Fishes that are dead or bought from cargo will only be paid half as much." + description = "We need [LOWER_TEXT(fluid_type)] fish to populate our aquariums with. Fishes that are dead or bought from cargo will only be paid half as much." /datum/bounty/item/assistant/fish/fluid/can_ship_fish(obj/item/fish/fishie) return compatible_fluid_type(fishie.required_fluid_type, fluid_type) diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index e23e6112a4b..de84a263597 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -268,3 +268,15 @@ crate_name = "corgi pinata kit" crate_type = /obj/structure/closet/crate/wooden discountable = SUPPLY_PACK_STD_DISCOUNTABLE + +/datum/supply_pack/costumes_toys/balloons + name = "Long Balloons Kit" + desc = "This crate contains a box of long balloons, plus a skillchip for non-clowns to join the fun! Extra layer of safety so clowns at CentCom won't get to them." + cost = CARGO_CRATE_VALUE * 4 + contains = list( + /obj/item/storage/box/balloons, + /obj/item/skillchip/job/clown, + ) + crate_name = "long balloons kit" + crate_type = /obj/structure/closet/crate/wooden + discountable = SUPPLY_PACK_STD_DISCOUNTABLE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index fec58398e03..4a81fa96ffa 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( //SKYRAT EDIT ADDITION END #ifndef TESTING - if (lowertext(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections + if (LOWER_TEXT(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections return #endif diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm index 03c975abce7..a08f15955ea 100644 --- a/code/modules/client/preferences/glasses.dm +++ b/code/modules/client/preferences/glasses.dm @@ -11,7 +11,7 @@ if (value == "Random") return icon('icons/effects/random_spawners.dmi', "questionmark") else - return icon('icons/obj/clothing/glasses.dmi', "glasses_[lowertext(value)]") + return icon('icons/obj/clothing/glasses.dmi', "glasses_[LOWER_TEXT(value)]") /datum/preference/choiced/glasses/is_accessible(datum/preferences/preferences) if (!..(preferences)) diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm index b3bc613d2ee..abd9495d09a 100644 --- a/code/modules/client/preferences/middleware/antags.dm +++ b/code/modules/client/preferences/middleware/antags.dm @@ -180,4 +180,4 @@ GLOBAL_LIST_INIT(non_ruleset_antagonists, list( /// Serializes an antag name to be used for preferences UI /proc/serialize_antag_name(antag_name) // These are sent through CSS, so they need to be safe to use as class names. - return lowertext(sanitize_css_class_name(antag_name)) + return LOWER_TEXT(sanitize_css_class_name(antag_name)) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 0c48cb102b2..5f63e0c3464 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -16,6 +16,8 @@ attack_verb_simple = list("challenge") strip_delay = 20 equip_delay_other = 40 + article = "a pair of" + // Path variable. If defined, will produced the type through interaction with wirecutters. var/cut_type = null /// Used for handling bloody gloves leaving behind bloodstains on objects. Will be decremented whenever a bloodstain is left behind, and be incremented when the gloves become bloody. diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 7741251f3f5..236d94c39fa 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -195,6 +195,21 @@ acid = 80 wound = 15 +/obj/item/clothing/head/helmet/balloon + name = "balloon helmet" + desc = "A helmet made out of balloons. Its likes saw great usage in the Great Clown - Mime War. Surprisingly resistant to fire. Mimes were doing unspeakable things." + icon_state = "helmet_balloon" + inhand_icon_state = "helmet_balloon" + armor_type = /datum/armor/balloon + flags_inv = HIDEHAIR|HIDEEARS|HIDESNOUT + resistance_flags = FIRE_PROOF + dog_fashion = null + +/datum/armor/balloon + melee = 10 + fire = 60 + acid = 50 + /obj/item/clothing/head/helmet/toggleable/justice name = "helmet of justice" desc = "WEEEEOOO. WEEEEEOOO. WEEEEOOOO." @@ -423,16 +438,6 @@ armor_type = /datum/armor/knight_greyscale material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix -/datum/armor/knight_greyscale - melee = 35 - bullet = 10 - laser = 10 - energy = 10 - bomb = 10 - bio = 10 - fire = 40 - acid = 40 - /obj/item/clothing/head/helmet/skull name = "skull helmet" desc = "An intimidating tribal helmet, it doesn't look very comfortable." diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm index 26087ab6232..2affc4c63da 100644 --- a/code/modules/clothing/head/tophat.dm +++ b/code/modules/clothing/head/tophat.dm @@ -36,4 +36,13 @@ var/mob/living/basic/rabbit/bunbun = new(get_turf(magician)) bunbun.mob_try_pickup(magician, instant=TRUE) +/obj/item/clothing/head/hats/tophat/balloon + name = "balloon top-hat" + desc = "It's an colourful looking top-hat to match yout colourful personality." + icon_state = "balloon_tophat" + inhand_icon_state = "balloon_that" + throwforce = 0 + resistance_flags = FIRE_PROOF + dog_fashion = null + #undef RABBIT_CD_TIME diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 6d9646b49ee..db20562039b 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -388,7 +388,7 @@ ) head = /obj/item/clothing/head/utility/hardhat/welding mask = /obj/item/clothing/mask/gas/atmos - l_hand = /obj/item/areaeditor/blueprints + l_hand = /obj/item/blueprints /datum/outfit/centcom/ert/clown/party name = "ERP Comedian" diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 4b0da7092c5..02db0145ae7 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -12,6 +12,8 @@ armor_type = /datum/armor/clothing_shoes slowdown = SHOES_SLOWDOWN strip_delay = 1 SECONDS + article = "a pair of" + var/offset = 0 var/equipped_before_drop = FALSE ///Whether these shoes have laces that can be tied/untied diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 02e6110b3ee..dcf6d502834 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -336,6 +336,40 @@ acid = 50 wound = 10 +/obj/item/clothing/suit/armor/balloon_vest + name = "balloon vest" + desc = "A vest made entirely from balloons, resistant to any evil forces a mime could throw at you, including electricity and fire. Just a strike with something sharp, though..." + icon_state = "balloon-vest" + inhand_icon_state = "balloon_armor" + blood_overlay_type = "armor" + armor_type = /datum/armor/balloon_vest + siemens_coefficient = 0 + strip_delay = 70 + equip_delay_other = 50 + +/datum/armor/balloon_vest + melee = 10 + laser = 10 + energy = 10 + fire = 60 + acid = 50 + +/obj/item/clothing/suit/armor/balloon_vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(isitem(hitby)) + var/obj/item/item_hit = hitby + if(item_hit.sharpness) + pop() + + if(istype(hitby, /obj/projectile/bullet)) + pop() + + return ..() + +/obj/item/clothing/suit/armor/balloon_vest/proc/pop() + playsound(src, 'sound/effects/cartoon_pop.ogg', 50, vary = TRUE) + qdel(src) + + /obj/item/clothing/suit/armor/bulletproof name = "bulletproof armor" desc = "A Type III heavy bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." @@ -531,6 +565,16 @@ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS//Can change color and add prefix armor_type = /datum/armor/knight_greyscale +/datum/armor/knight_greyscale + melee = 35 + bullet = 10 + laser = 10 + energy = 10 + bomb = 10 + bio = 10 + fire = 40 + acid = 40 + /obj/item/clothing/suit/armor/vest/durathread name = "durathread vest" desc = "A vest made of durathread with strips of leather acting as trauma plates." @@ -596,7 +640,7 @@ desc = "A superb armor made with the toughest and rarest materials available to man." icon_state = "h2armor" inhand_icon_state = null - material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS//Can change color and add prefix + material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix armor_type = /datum/armor/armor_elder_atmosian body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index e22235084f9..c10648e3315 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -22,7 +22,7 @@ /obj/item/evidencebag/Exited(atom/movable/gone, direction) . = ..() cut_overlays() - w_class = initial(w_class) + update_weight_class(initial(w_class)) icon_state = initial(icon_state) desc = initial(desc) @@ -78,7 +78,7 @@ desc = "An evidence bag containing [I]. [I.desc]" I.forceMove(src) - w_class = I.w_class + update_weight_class(I.w_class) return 1 /obj/item/evidencebag/attack_self(mob/user) @@ -88,7 +88,7 @@ span_hear("You hear someone rustle around in a plastic bag, and remove something.")) cut_overlays() //remove the overlays user.put_in_hands(I) - w_class = WEIGHT_CLASS_TINY + update_weight_class(WEIGHT_CLASS_TINY) icon_state = "evidenceobj" desc = "An empty evidence bag." diff --git a/code/modules/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 533628eedf4..fa9b9ea0d5e 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -16,7 +16,7 @@ pos = search search = findtext(text, ":", pos + length(text[pos])) if(search) - emoji = lowertext(copytext(text, pos + length(text[pos]), search)) + emoji = LOWER_TEXT(copytext(text, pos + length(text[pos]), search)) var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) var/tag = sheet.icon_tag("emoji-[emoji]") if(tag) @@ -46,9 +46,9 @@ pos = search search = findtext(text, ":", pos + length(text[pos])) if(search) - var/word = lowertext(copytext(text, pos + length(text[pos]), search)) + var/word = LOWER_TEXT(copytext(text, pos + length(text[pos]), search)) if(word in emojis) - final += lowertext(copytext(text, pos, search + length(text[search]))) + final += LOWER_TEXT(copytext(text, pos, search + length(text[search]))) pos = search + length(text[search]) continue break diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index c6f52ab50ca..fbd9b746d03 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -177,9 +177,9 @@ to_chat(user, span_notice("You cannot pump [vent] if it's welded shut!")) return - to_chat(user, span_notice("You begin pumping [vent] with your plunger.")) + user.balloon_alert_to_viewers("plunging vent...", "plunging clogged vent...") if(do_after(user, 6 SECONDS, target = vent)) - to_chat(user, span_notice("You finish pumping [vent].")) + user.balloon_alert_to_viewers("finished plunging") clear_signals() kill() diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm index 5740b715bd4..d5d87eb6311 100644 --- a/code/modules/experisci/destructive_scanner.dm +++ b/code/modules/experisci/destructive_scanner.dm @@ -12,12 +12,8 @@ layer = MOB_LAYER var/scanning = FALSE -/obj/machinery/destructive_scanner/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - // Late load to ensure the component initialization occurs after the machines are initialized -/obj/machinery/destructive_scanner/LateInitialize() +/obj/machinery/destructive_scanner/post_machine_initialize() . = ..() var/static/list/destructive_signals = list( diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm index 32309336e3c..390937e0dd4 100644 --- a/code/modules/experisci/handheld_scanner.dm +++ b/code/modules/experisci/handheld_scanner.dm @@ -18,7 +18,6 @@ // Late initialize to allow for the rnd servers to initialize first /obj/item/experi_scanner/LateInitialize() - . = ..() var/static/list/handheld_signals = list( COMSIG_ITEM_PRE_ATTACK = TYPE_PROC_REF(/datum/component/experiment_handler, try_run_handheld_experiment), COMSIG_ITEM_AFTERATTACK = TYPE_PROC_REF(/datum/component/experiment_handler, ignored_handheld_experiment_attempt), diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm index 05f1d9a8b8f..6317ee273be 100644 --- a/code/modules/explorer_drone/scanner_array.dm +++ b/code/modules/explorer_drone/scanner_array.dm @@ -181,11 +181,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions()) failed_popup = TRUE SStgui.update_uis(src) -/obj/machinery/computer/exoscanner_control/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/exoscanner_control/LateInitialize() +/obj/machinery/computer/exoscanner_control/post_machine_initialize() . = ..() AddComponent(/datum/component/experiment_handler, \ allowed_experiments = list(/datum/experiment/exploration_scan), \ diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index 48c7b8e24e9..fe281d7e511 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -179,9 +179,9 @@ /obj/structure/aquarium/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) if(!panel_open) return - to_chat(user, span_notice("You start plunging [name].")) + user.balloon_alert_to_viewers("plunging...") if(do_after(user, 3 SECONDS, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 90fb2afc796..00c52eb338a 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -204,20 +204,20 @@ size = new_size switch(size) if(0 to FISH_SIZE_TINY_MAX) - w_class = WEIGHT_CLASS_TINY + update_weight_class(WEIGHT_CLASS_TINY) inhand_icon_state = "fish_small" if(FISH_SIZE_TINY_MAX to FISH_SIZE_SMALL_MAX) inhand_icon_state = "fish_small" - w_class = WEIGHT_CLASS_SMALL + update_weight_class(WEIGHT_CLASS_SMALL) if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) inhand_icon_state = "fish_normal" - w_class = WEIGHT_CLASS_NORMAL + update_weight_class(WEIGHT_CLASS_NORMAL) if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) inhand_icon_state = "fish_bulky" - w_class = WEIGHT_CLASS_BULKY + update_weight_class(WEIGHT_CLASS_BULKY) if(FISH_SIZE_BULKY_MAX to INFINITY) inhand_icon_state = "fish_huge" - w_class = WEIGHT_CLASS_HUGE + update_weight_class(WEIGHT_CLASS_HUGE) if(fillet_type) var/init_fillets = initial(num_fillets) var/amount = max(round(init_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1) diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index 140fde7e960..68cfddcf5f1 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -147,7 +147,11 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( audible_message(span_notice("[src] dings!")) else if (cook_time >= DEEPFRYER_BURNTIME && !frying_burnt) frying_burnt = TRUE - visible_message(span_warning("[src] emits an acrid smell!")) + var/list/asomnia_hadders = list() + for(var/mob/smeller in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, src)) + if(HAS_TRAIT(smeller, TRAIT_ANOSMIA)) + asomnia_hadders += smeller + visible_message(span_warning("[src] emits an acrid smell!"), ignored_mobs = asomnia_hadders) use_energy(active_power_usage) diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 517e25c6dcb..8135dd8308f 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -90,7 +90,11 @@ baked_item.fire_act(1000) //Hot hot hot! if(SPT_PROB(10, seconds_per_tick)) - visible_message(span_danger("You smell a burnt smell coming from [src]!")) + var/list/asomnia_hadders = list() + for(var/mob/smeller in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, src)) + if(HAS_TRAIT(smeller, TRAIT_ANOSMIA)) + asomnia_hadders += smeller + visible_message(span_danger("You smell a burnt smell coming from [src]!"), ignored_mobs = asomnia_hadders) set_smoke_state(worst_cooked_food_state) update_appearance() use_energy(active_power_usage) diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 1df1d7c24bb..4ae6bf19e1d 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -70,7 +70,7 @@ update_appearance() // If the incoming item is the same weight class as the plate, bump us up a class if(item_to_plate.w_class == w_class) - w_class += 1 + update_weight_class(w_class + 1) ///This proc cleans up any signals on the item when it is removed from a plate, and ensures it has the correct state again. /obj/item/plate/proc/ItemRemovedFromPlate(obj/item/removed_item) @@ -85,12 +85,14 @@ removed_item.pixel_z = 0 // We need to ensure the weight class is accurate now that we've lost something // that may or may not have been of equal weight - w_class = initial(w_class) + var/new_w_class = initial(w_class) for(var/obj/item/on_board in src) if(on_board.w_class == w_class) - w_class += 1 + new_w_class += 1 break + update_weight_class(new_w_class) + ///This proc is called by signals that remove the food from the plate. /obj/item/plate/proc/ItemMoved(obj/item/moved_item, atom/OldLoc, Dir, Forced) SIGNAL_HANDLER diff --git a/code/modules/hallucination/fake_message.dm b/code/modules/hallucination/fake_message.dm index a1040496f5e..de5616d83c6 100644 --- a/code/modules/hallucination/fake_message.dm +++ b/code/modules/hallucination/fake_message.dm @@ -25,7 +25,7 @@ // in the future, this could / should be de-harcoded and // just draw from a pool uplink, theft, and antag item typepaths var/static/list/stash_item_paths = list( - /obj/item/areaeditor/blueprints, + /obj/item/blueprints, /obj/item/assembly/flash, /obj/item/card/id/advanced/gold/captains_spare, /obj/item/card/emag, diff --git a/code/modules/hallucination/inhand_fake_item.dm b/code/modules/hallucination/inhand_fake_item.dm index efea8b309e2..cb787d217e1 100644 --- a/code/modules/hallucination/inhand_fake_item.dm +++ b/code/modules/hallucination/inhand_fake_item.dm @@ -43,7 +43,7 @@ hallucinated_item.desc = initial(template_item_type.desc) hallucinated_item.icon = initial(template_item_type.icon) hallucinated_item.icon_state = initial(template_item_type.icon_state) - hallucinated_item.w_class = initial(template_item_type.w_class) // Not strictly necessary, but keen eyed people will notice + hallucinated_item.update_weight_class(initial(template_item_type.w_class)) // Not strictly necessary, but keen eyed people will notice return hallucinated_item diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 7b4b23a313b..db66578c5bd 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -84,11 +84,8 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf //creates the timer that determines if another program can be manually loaded COOLDOWN_DECLARE(holodeck_cooldown) -/obj/machinery/computer/holodeck/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/holodeck/LateInitialize()//from here linked is populated and the program list is generated. its also set to load the offline program +/obj/machinery/computer/holodeck/post_machine_initialize() //from here linked is populated and the program list is generated. its also set to load the offline program + . = ..() linked = GLOB.areas_by_type[mapped_start_area] if(!linked) log_mapping("[src] at [AREACOORD(src)] has no matching holodeck area.") diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index d079323e3a9..f46f4c3912a 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -234,7 +234,7 @@ else t_prod = new product(output_loc, new_seed = src) if(parent.myseed.plantname != initial(parent.myseed.plantname)) - t_prod.name = lowertext(parent.myseed.plantname) + t_prod.name = LOWER_TEXT(parent.myseed.plantname) if(productdesc) t_prod.desc = productdesc t_prod.seed.name = parent.myseed.name @@ -475,7 +475,7 @@ return if(!user.can_perform_action(src)) return - name = "[lowertext(newplantname)]" + name = "[LOWER_TEXT(newplantname)]" plantname = newplantname if("Seed Description") var/newdesc = tgui_input_text(user, "Write a new seed description", "Seed Description", desc, 180) diff --git a/code/modules/instruments/songs/play_legacy.dm b/code/modules/instruments/songs/play_legacy.dm index 7094de85a89..c49122d4641 100644 --- a/code/modules/instruments/songs/play_legacy.dm +++ b/code/modules/instruments/songs/play_legacy.dm @@ -9,7 +9,7 @@ var/list/octaves = list(3, 3, 3, 3, 3, 3, 3) var/list/accents = list("n", "n", "n", "n", "n", "n", "n") for(var/line in lines) - var/list/chords = splittext(lowertext(line), ",") + var/list/chords = splittext(LOWER_TEXT(line), ",") for(var/chord in chords) var/list/compiled_chord = list() var/tempodiv = 1 diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index 836c2fdd86b..05e23a8c97a 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -9,7 +9,7 @@ var/list/octaves = list(3, 3, 3, 3, 3, 3, 3) var/list/accents = list("n", "n", "n", "n", "n", "n", "n") for(var/line in lines) - var/list/chords = splittext(lowertext(line), ",") + var/list/chords = splittext(LOWER_TEXT(line), ",") for(var/chord in chords) var/list/compiled_chord = list() var/tempodiv = 1 diff --git a/code/modules/jobs/job_types/chaplain/chaplain.dm b/code/modules/jobs/job_types/chaplain/chaplain.dm index 58821ec5358..8bcfaefcfc6 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain.dm @@ -69,7 +69,7 @@ var/new_bible = player_client?.prefs?.read_preference(/datum/preference/name/bible) || DEFAULT_BIBLE holy_bible.deity_name = new_deity - switch(lowertext(new_religion)) + switch(LOWER_TEXT(new_religion)) if("homosexuality", "gay", "penis", "ass", "cock", "cocks") new_bible = pick("Guys Gone Wild","Coming Out of The Closet","War of Cocks") switch(new_bible) diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 607c7214d90..58e7ad829bc 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -56,6 +56,7 @@ /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/food/grown/banana = 1, /obj/item/instrument/bikehorn = 1, + /obj/item/storage/box/balloons = 1, ) belt = /obj/item/modular_computer/pda/clown ears = /obj/item/radio/headset/headset_srv @@ -71,6 +72,7 @@ box = /obj/item/storage/box/survival/hug chameleon_extras = /obj/item/stamp/clown implants = list(/obj/item/implant/sad_trombone) + skillchips = list(/obj/item/skillchip/job/clown) /datum/outfit/job/clown/mod name = "Clown (MODsuit)" diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index d3b6bc3ebbb..255210f2481 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -63,7 +63,7 @@ GLOBAL_PROTECT(exp_specialmap) var/static/regex/chef_expand = new("chef") var/static/regex/borg_expand = new("(?" /obj/item/stack/marker_beacon/update_icon_state() - icon_state = "[initial(icon_state)][lowertext(picked_color)]" + icon_state = "[initial(icon_state)][LOWER_TEXT(picked_color)]" return ..() /obj/item/stack/marker_beacon/attack_self(mob/user) @@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color]) /obj/structure/marker_beacon/update_icon_state() - icon_state = "[icon_prefix][lowertext(picked_color)]-on" + icon_state = "[icon_prefix][LOWER_TEXT(picked_color)]-on" return ..() /obj/structure/marker_beacon/attack_hand(mob/living/user, list/modifiers) diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 9fdb772c4bc..2c8a6af7864 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -257,7 +257,7 @@ tool_behaviour = TOOL_WRENCH sharpness = NONE toolspeed = 0.75 - w_class = WEIGHT_CLASS_SMALL + update_weight_class(WEIGHT_CLASS_SMALL) usesound = 'sound/items/ratchet.ogg' attack_verb_continuous = list("bashes", "bludgeons", "thrashes", "whacks") attack_verb_simple = list("bash", "bludgeon", "thrash", "whack") @@ -265,7 +265,7 @@ tool_behaviour = TOOL_SHOVEL sharpness = SHARP_EDGED toolspeed = 0.25 - w_class = WEIGHT_CLASS_NORMAL + update_weight_class(WEIGHT_CLASS_NORMAL) usesound = 'sound/effects/shovel_dig.ogg' attack_verb_continuous = list("slashes", "impales", "stabs", "slices") attack_verb_simple = list("slash", "impale", "stab", "slice") @@ -273,7 +273,7 @@ tool_behaviour = TOOL_MINING sharpness = SHARP_POINTY toolspeed = 0.5 - w_class = WEIGHT_CLASS_NORMAL + update_weight_class(WEIGHT_CLASS_NORMAL) usesound = 'sound/effects/picaxe1.ogg' attack_verb_continuous = list("hits", "pierces", "slices", "attacks") attack_verb_simple = list("hit", "pierce", "slice", "attack") diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 25214d2ae54..d0e5e08e15d 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -291,7 +291,10 @@ if(prob(7.5)) wearer.cause_hallucination(/datum/hallucination/oh_yeah, "H.E.C.K suit", haunt_them = TRUE) else - to_chat(wearer, span_warning("[pick("You hear faint whispers.","You smell ash.","You feel hot.","You hear a roar in the distance.")]")) + if(HAS_TRAIT(wearer, TRAIT_ANOSMIA)) //Anosmia quirk holder cannot fell any smell + to_chat(wearer, span_warning("[pick("You hear faint whispers.","You feel hot.","You hear a roar in the distance.")]")) + else + to_chat(wearer, span_warning("[pick("You hear faint whispers.","You smell ash.","You feel hot.","You hear a roar in the distance.")]")) /obj/item/clothing/head/hooded/hostile_environment name = "H.E.C.K. helmet" diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index 16ef175dddf..a8fd0094934 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -5,7 +5,7 @@ /mob/dead/observer/get_message_mods(message, list/mods) var/key = message[1] if((key in GLOB.department_radio_prefixes) && length(message) > length(key) + 1 && !mods[RADIO_EXTENSION]) - mods[RADIO_KEY] = lowertext(message[1 + length(key)]) + mods[RADIO_KEY] = LOWER_TEXT(message[1 + length(key)]) mods[RADIO_EXTENSION] = GLOB.department_radio_keys[mods[RADIO_KEY]] return message diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index bf9e099e5c9..c1822ff0e51 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -19,7 +19,7 @@ param = copytext(act, custom_param + length(act[custom_param])) act = copytext(act, 1, custom_param) - act = lowertext(act) + act = LOWER_TEXT(act) var/list/key_emotes = GLOB.emote_list[act] if(!length(key_emotes)) diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index e784aa6249e..ab6d2e2d443 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -162,7 +162,6 @@ return INITIALIZE_HINT_LATELOAD /mob/living/basic/bot/medbot/LateInitialize() - . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb) CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, src) diff --git a/code/modules/mob/living/basic/trooper/syndicate.dm b/code/modules/mob/living/basic/trooper/syndicate.dm index c4d1bbd3630..8f8d564693b 100644 --- a/code/modules/mob/living/basic/trooper/syndicate.dm +++ b/code/modules/mob/living/basic/trooper/syndicate.dm @@ -154,6 +154,13 @@ ranged_cooldown = 3 SECONDS r_hand = /obj/item/gun/ballistic/automatic/c20r +///Spawns from an emagged orion trail machine set to kill the player. +/mob/living/basic/trooper/syndicate/ranged/smg/orion + name = "spaceport security" + desc = "Premier corporate security forces for all spaceports found along the Orion Trail." + faction = list(FACTION_ORION) + loot = list() + /mob/living/basic/trooper/syndicate/ranged/smg/pilot //caravan ambush ruin name = "Syndicate Salvage Pilot" loot = list(/obj/effect/mob_spawn/corpse/human/syndicatepilot) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 4fbaefef165..da43817f849 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -903,7 +903,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(!(I.slot_flags & slot)) var/excused = FALSE // Anything that's small or smaller can fit into a pocket by default - if((slot & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && I.w_class <= WEIGHT_CLASS_SMALL) + if((slot & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && I.w_class <= POCKET_WEIGHT_CLASS) excused = TRUE else if(slot & (ITEM_SLOT_SUITSTORE|ITEM_SLOT_BACKPACK|ITEM_SLOT_HANDS)) excused = TRUE diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 13c2a153f44..c6940f1d763 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -98,7 +98,7 @@ . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." else if(GET_ATOM_BLOOD_DNA_LENGTH(src)) if(num_hands) - . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a"] blood-stained hand[num_hands > 1 ? "s" : ""]!") + . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") //handcuffed? if(handcuffed) diff --git a/code/modules/mob/living/carbon/human/init_signals.dm b/code/modules/mob/living/carbon/human/init_signals.dm index 6e16781a59e..dc5ce972105 100644 --- a/code/modules/mob/living/carbon/human/init_signals.dm +++ b/code/modules/mob/living/carbon/human/init_signals.dm @@ -8,6 +8,8 @@ RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_FAT), SIGNAL_REMOVETRAIT(TRAIT_FAT)), PROC_REF(on_fat)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_NOHUNGER), SIGNAL_REMOVETRAIT(TRAIT_NOHUNGER)), PROC_REF(on_nohunger)) + RegisterSignal(src, COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED, PROC_REF(check_pocket_weght)) + /// Gaining or losing [TRAIT_UNKNOWN] updates our name and our sechud /mob/living/carbon/human/proc/on_unknown_trait(datum/source) SIGNAL_HANDLER @@ -63,3 +65,19 @@ else hud_used?.hunger?.update_appearance() mob_mood?.update_nutrition_moodlets() + +/// Signal proc for [COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED] to check if an item is suddenly too heavy for our pockets +/mob/living/carbon/human/proc/check_pocket_weght(datum/source, obj/item/changed, old_w_class, new_w_class) + SIGNAL_HANDLER + if(changed != r_store && changed != l_store) + return + if(new_w_class <= POCKET_WEIGHT_CLASS) + return + if(!dropItemToGround(changed, force = TRUE)) + return + visible_message( + span_warning("[changed] falls out of [src]'s pockets!"), + span_warning("[changed] falls out of your pockets!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ) + playsound(src, SFX_RUSTLE, 50, TRUE, -5, frequency = 0.8) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8007614fb92..ebf86019242 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -280,7 +280,8 @@ if(!can_breathe_vacuum && (o2_pp < safe_oxygen_min)) // Breathe insufficient amount of O2. oxygen_used = handle_suffocation(o2_pp, safe_oxygen_min, breath_gases[/datum/gas/oxygen][MOLES]) - throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy) + if(!HAS_TRAIT(src, TRAIT_ANOSMIA)) + throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy) else // Enough oxygen to breathe. failed_last_breath = FALSE @@ -307,7 +308,8 @@ if(!co2overloadtime) co2overloadtime = world.time else if((world.time - co2overloadtime) > 12 SECONDS) - throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2) + if(!HAS_TRAIT(src, TRAIT_ANOSMIA)) + throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2) Unconscious(6 SECONDS) // Lets hurt em a little, let them know we mean business. adjustOxyLoss(3) @@ -325,7 +327,8 @@ // Plasma side-effects. var/ratio = (breath_gases[/datum/gas/plasma][MOLES] / safe_plas_max) * 10 adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) - throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas) + if(!HAS_TRAIT(src, TRAIT_ANOSMIA)) + throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas) else // Reset side-effects. clear_alert(ALERT_TOO_MUCH_PLASMA) @@ -356,6 +359,8 @@ miasma_disease.name = "Unknown" ForceContractDisease(miasma_disease, make_copy = TRUE, del_on_fail = TRUE) // Miasma side-effects. + if (HAS_TRAIT(src, TRAIT_ANOSMIA)) //We can't feel miasma without sense of smell + return switch(miasma_pp) if(0.25 to 5) // At lower pp, give out a little warning @@ -386,7 +391,8 @@ if(n2o_pp > n2o_para_min) // More N2O, more severe side-effects. Causes stun/sleep. n2o_euphoria = EUPHORIA_ACTIVE - throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o) + if(!HAS_TRAIT(src, TRAIT_ANOSMIA)) + throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o) // give them one second of grace to wake up and run away a bit! if(!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) Unconscious(6 SECONDS) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 64a2de72f43..412a63c00eb 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -656,20 +656,20 @@ to_chat(user, span_warning("\"[input]\"")) REPORT_CHAT_FILTER_TO_USER(user, filter_result) log_filter("IC Emote", input, filter_result) - SSblackbox.record_feedback("tally", "ic_blocked_words", 1, lowertext(config.ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "ic_blocked_words", 1, LOWER_TEXT(config.ic_filter_regex.match)) return FALSE filter_result = is_soft_ic_filtered(input) if(filter_result) if(tgui_alert(user,"Your emote contains \"[filter_result[CHAT_FILTER_INDEX_WORD]]\". \"[filter_result[CHAT_FILTER_INDEX_REASON]]\", Are you sure you want to emote it?", "Soft Blocked Word", list("Yes", "No")) != "Yes") - SSblackbox.record_feedback("tally", "soft_ic_blocked_words", 1, lowertext(config.soft_ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match)) log_filter("Soft IC Emote", input, filter_result) return FALSE message_admins("[ADMIN_LOOKUPFLW(user)] has passed the soft filter for emote \"[filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Emote: \"[input]\"") log_admin_private("[key_name(user)] has passed the soft filter for emote \"[filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Emote: \"[input]\"") - SSblackbox.record_feedback("tally", "passed_soft_ic_blocked_words", 1, lowertext(config.soft_ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "passed_soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match)) log_filter("Soft IC Emote (Passed)", input, filter_result) return TRUE diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index b4c9fbd34aa..808c8973963 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -20,7 +20,7 @@ righthand_file = rh_icon if(worn_slot_flags) slot_flags = worn_slot_flags - w_class = M.held_w_class + update_weight_class(M.held_w_class) deposit(M) . = ..() diff --git a/code/modules/mob/living/silicon/ai/_preferences.dm b/code/modules/mob/living/silicon/ai/_preferences.dm index 4b0aaaecc25..10958b2adc4 100644 --- a/code/modules/mob/living/silicon/ai/_preferences.dm +++ b/code/modules/mob/living/silicon/ai/_preferences.dm @@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sort_list(list( else if(input == "Random") input = pick(GLOB.ai_core_display_screens - "Random") - return "ai-[lowertext(input)]" + return "ai-[LOWER_TEXT(input)]" /proc/resolve_ai_icon(input) if (input == "Portrait") diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index d655ce03a33..2a8b8e6c4a0 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -126,7 +126,7 @@ words.len = 30 for(var/word in words) - word = lowertext(trim(word)) + word = LOWER_TEXT(trim(word)) if(!word) words -= word continue @@ -156,7 +156,7 @@ /proc/play_vox_word(word, ai_turf, mob/only_listener) - word = lowertext(word) + word = LOWER_TEXT(word) if(GLOB.vox_sounds[word]) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 24d619c902a..a737de7f99e 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -393,7 +393,7 @@ /obj/item/analyzer, /obj/item/holosign_creator/atmos, // Skyrat Edit - Adds Holofans to engineering borgos /obj/item/assembly/signaler/cyborg, - /obj/item/areaeditor/blueprints/cyborg, + /obj/item/blueprints/cyborg, /obj/item/electroadaptive_pseudocircuit, /obj/item/stack/sheet/iron, /obj/item/stack/sheet/glass, diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 31cb622e447..6527205c2c7 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1014,7 +1014,7 @@ selected_hand = (active_hand_index % held_items.len)+1 if(istext(selected_hand)) - selected_hand = lowertext(selected_hand) + selected_hand = LOWER_TEXT(selected_hand) if(selected_hand == "right" || selected_hand == "r") selected_hand = 2 if(selected_hand == "left" || selected_hand == "l") diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 8f1398ce244..f634bd187a4 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -66,17 +66,17 @@ to_chat(src, span_warning("\"[message]\"")) REPORT_CHAT_FILTER_TO_USER(src, filter_result) log_filter("IC", message, filter_result) - SSblackbox.record_feedback("tally", "ic_blocked_words", 1, lowertext(config.ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "ic_blocked_words", 1, LOWER_TEXT(config.ic_filter_regex.match)) return FALSE if(soft_filter_result && !filterproof) if(tgui_alert(usr,"Your message contains \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". \"[soft_filter_result[CHAT_FILTER_INDEX_REASON]]\", Are you sure you want to say it?", "Soft Blocked Word", list("Yes", "No")) != "Yes") - SSblackbox.record_feedback("tally", "soft_ic_blocked_words", 1, lowertext(config.soft_ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match)) log_filter("Soft IC", message, filter_result) return FALSE message_admins("[ADMIN_LOOKUPFLW(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Message: \"[message]\"") log_admin_private("[key_name(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Message: \"[message]\"") - SSblackbox.record_feedback("tally", "passed_soft_ic_blocked_words", 1, lowertext(config.soft_ic_filter_regex.match)) + SSblackbox.record_feedback("tally", "passed_soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match)) log_filter("Soft IC (Passed)", message, filter_result) if(client && !(ignore_spam || forced)) @@ -223,7 +223,7 @@ if(stat == CONSCIOUS) //necessary indentation so it gets stripped of the semicolon anyway. mods[MODE_HEADSET] = TRUE else if((key in GLOB.department_radio_prefixes) && length(message) > length(key) + 1 && !mods[RADIO_EXTENSION]) - mods[RADIO_KEY] = lowertext(message[1 + length(key)]) + mods[RADIO_KEY] = LOWER_TEXT(message[1 + length(key)]) mods[RADIO_EXTENSION] = GLOB.department_radio_keys[mods[RADIO_KEY]] chop_to = length(key) + 2 else if(key == "," && !mods[LANGUAGE_EXTENSION]) diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 88f697ccd48..a408be23b1f 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -891,6 +891,7 @@ /obj/item/grown/bananapeel, /obj/item/reagent_containers/spray/waterflower, /obj/item/instrument, + /obj/item/toy/balloon_animal, ) skins = list( "cosmohonk" = list( diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 47f588eb80b..f0bca6b0980 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -212,6 +212,7 @@ /obj/item/mod/module/storage, /obj/item/mod/module/waddle, /obj/item/mod/module/bikehorn, + /obj/item/mod/module/balloon_advanced, ) /obj/item/mod/control/pre_equipped/traitor diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 2462f62a3d3..bd96c5aec5f 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -460,10 +460,10 @@ /obj/item/mod/module/plate_compression/on_install() old_size = mod.w_class - mod.w_class = new_size + mod.update_weight_class(new_size) /obj/item/mod/module/plate_compression/on_uninstall(deleting = FALSE) - mod.w_class = old_size + mod.update_weight_class(old_size) old_size = null if(!mod.loc) return diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index b4870a84ec5..be71c621802 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -19,6 +19,31 @@ playsound(src, 'sound/items/bikehorn.ogg', 100, FALSE) drain_power(use_energy_cost) +///Advanced Balloon Blower - Blows a long balloon. +/obj/item/mod/module/balloon_advanced + name = "MOD advanced balloon blower module" + desc = "A relatively new piece of technology developed by finest clown engineers to make long balloons and balloon animals \ + at party-appropriate rate." + icon_state = "bloon" + module_type = MODULE_USABLE + complexity = 1 + use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/balloon_advanced) + cooldown_time = 15 SECONDS + +/obj/item/mod/module/balloon_advanced/on_use() + . = ..() + if(!.) + return + if(!do_after(mod.wearer, 15 SECONDS, target = mod)) + return FALSE + mod.wearer.adjustOxyLoss(20) + playsound(src, 'sound/items/modsuit/inflate_bloon.ogg', 50, TRUE) + var/obj/item/toy/balloon/long/l_balloon = new(get_turf(src)) + mod.wearer.put_in_hands(l_balloon) + drain_power(use_energy_cost) + + ///Microwave Beam - Microwaves items instantly. /obj/item/mod/module/microwave_beam name = "MOD microwave beam module" diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index d3b620cdfc9..3bf46f16d1b 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -104,12 +104,12 @@ if(screen_on) to_chat(user, span_notice("You close \the [src].")) slowdown = initial(slowdown) - w_class = initial(w_class) + update_weight_class(initial(w_class)) drag_slowdown = initial(drag_slowdown) else to_chat(user, span_notice("You open \the [src].")) slowdown = slowdown_open - w_class = w_class_open + update_weight_class(w_class_open) drag_slowdown = slowdown_open if(isliving(loc)) var/mob/living/localmob = loc diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index 18f394d6ee0..0ec80da4bbb 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -94,7 +94,7 @@ setup_starting_software() REGISTER_REQUIRED_MAP_ITEM(1, 1) if(department_type) - name = "[lowertext(initial(department_type.department_name))] [name]" + name = "[LOWER_TEXT(initial(department_type.department_name))] [name]" cpu.name = name /obj/machinery/modular_computer/preset/cargochat/proc/add_starting_software() @@ -105,7 +105,7 @@ return var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") - chatprogram.username = "[lowertext(initial(department_type.department_name))]_department" + chatprogram.username = "[LOWER_TEXT(initial(department_type.department_name))]_department" cpu.idle_threads += chatprogram var/datum/computer_file/program/department_order/orderprogram = cpu.find_file_by_name("dept_order") @@ -144,7 +144,7 @@ update_appearance(UPDATE_ICON) // Rest of the chat program setup is done in LateInit -/obj/machinery/modular_computer/preset/cargochat/cargo/LateInitialize() +/obj/machinery/modular_computer/preset/cargochat/cargo/post_machine_initialize() . = ..() var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") chatprogram.username = "cargo_requests_operator" diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 8f29af43510..7e260872859 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -44,7 +44,7 @@ var/list/airs = islist(mixture) ? mixture : list(mixture) var/list/new_gasmix_data = list() for(var/datum/gas_mixture/air as anything in airs) - var/mix_name = capitalize(lowertext(target.name)) + var/mix_name = capitalize(LOWER_TEXT(target.name)) if(airs.len != 1) //not a unary gas mixture mix_name += " - Node [airs.Find(air)]" new_gasmix_data += list(gas_mixture_parser(air, mix_name)) diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index eee170e7c2c..aa3ed0e5828 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -70,7 +70,7 @@ // Convert networks to lowercase for(var/i in network) network -= i - network += lowertext(i) + network += LOWER_TEXT(i) // Initialize map objects cam_screen = new cam_screen.generate_view(map_name) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 207b8351a58..0712e516de4 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -547,7 +547,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) toner_cartridge = object balloon_alert(user, "cartridge inserted") - else if(istype(object, /obj/item/areaeditor/blueprints)) + else if(istype(object, /obj/item/blueprints)) to_chat(user, span_warning("\The [object] is too large to put into the copier. You need to find something else to record the document.")) else if(istype(object, /obj/item/paperwork)) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 0d5f37cb867..a0a51da165f 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -206,7 +206,7 @@ turfs += placeholder for(var/mob/M in placeholder) mobs += M - if(locate(/obj/item/areaeditor/blueprints) in placeholder) + if(locate(/obj/item/blueprints) in placeholder) blueprints = TRUE // do this before picture is taken so we can reveal revenants for the photo diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index 418df177465..132d882dbee 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -35,9 +35,9 @@ return ITEM_INTERACT_SUCCESS /obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, span_notice("You start furiously plunging [name].")) + user.balloon_alert_to_viewers("furiously plunging...") if(do_after(user, 3 SECONDS, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index 7275212ee76..7ed187929df 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -23,9 +23,9 @@ return CONTEXTUAL_SCREENTIP_SET /obj/machinery/iv_drip/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, span_notice("You start furiously plunging [name].")) + user.balloon_alert_to_viewers("furiously plunging...", "plunging iv drip...") if(do_after(user, 3 SECONDS, target = src)) - to_chat(user, span_notice("You finish plunging the [name].")) + user.balloon_alert_to_viewers("finished plunging") reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index a7013595543..0a698817602 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -118,9 +118,8 @@ RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) AddElement(/datum/element/atmos_sensitive, mapload) find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down))) - return INITIALIZE_HINT_LATELOAD -/obj/machinery/light/LateInitialize() +/obj/machinery/light/post_machine_initialize() . = ..() #ifndef MAP_TEST switch(fitting) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index ce912027225..c9cbb0d3ecc 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -50,9 +50,9 @@ . = ..() if(can_change_cable_layer) if(!QDELETED(powernet)) - . += span_notice("It's operating on the [lowertext(GLOB.cable_layer_to_name["[cable_layer]"])].") + . += span_notice("It's operating on the [LOWER_TEXT(GLOB.cable_layer_to_name["[cable_layer]"])].") else - . += span_warning("It's disconnected from the [lowertext(GLOB.cable_layer_to_name["[cable_layer]"])].") + . += span_warning("It's disconnected from the [LOWER_TEXT(GLOB.cable_layer_to_name["[cable_layer]"])].") . += span_notice("It's power line can be changed with a [EXAMINE_HINT("multitool")].") /obj/machinery/power/multitool_act(mob/living/user, obj/item/tool) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 86791fcd6f7..d47d7536094 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -474,3 +474,16 @@ /// Special singularity that spawns for shuttle events only /obj/singularity/shuttle_event anchored = FALSE + +/// Special singularity spawned by being sucked into a black hole during emagged orion trail. +/obj/singularity/orion + move_self = FALSE + +/obj/singularity/orion/Initialize(mapload) + . = ..() + var/datum/component/singularity/singularity = singularity_component.resolve() + singularity?.grav_pull = 1 + +/obj/singularity/orion/process(seconds_per_tick) + if(SPT_PROB(0.5, seconds_per_tick)) + mezzer() diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 4c861a4bb4b..04b9ab8798b 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -26,9 +26,9 @@ /obj/machinery/power/terminal/examine(mob/user) . = ..() if(!QDELETED(powernet)) - . += span_notice("It's operating on the [lowertext(GLOB.cable_layer_to_name["[cable_layer]"])].") + . += span_notice("It's operating on the [LOWER_TEXT(GLOB.cable_layer_to_name["[cable_layer]"])].") else - . += span_warning("It's disconnected from the [lowertext(GLOB.cable_layer_to_name["[cable_layer]"])].") + . += span_warning("It's disconnected from the [LOWER_TEXT(GLOB.cable_layer_to_name["[cable_layer]"])].") /obj/machinery/power/terminal/should_have_node() return TRUE diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm index 21269c90d37..590b135ad9a 100644 --- a/code/modules/power/turbine/turbine.dm +++ b/code/modules/power/turbine/turbine.dm @@ -43,7 +43,7 @@ register_context() -/obj/machinery/power/turbine/LateInitialize() +/obj/machinery/power/turbine/post_machine_initialize() . = ..() activate_parts() diff --git a/code/modules/power/turbine/turbine_computer.dm b/code/modules/power/turbine/turbine_computer.dm index 9e0f5bdaa46..f983e11c1f1 100644 --- a/code/modules/power/turbine/turbine_computer.dm +++ b/code/modules/power/turbine/turbine_computer.dm @@ -9,11 +9,7 @@ ///Easy way to connect a computer and a turbine roundstart by setting an id on both this and the core_rotor var/mapping_id -/obj/machinery/computer/turbine_computer/Initialize(mapload) - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/turbine_computer/LateInitialize() +/obj/machinery/computer/turbine_computer/post_machine_initialize() . = ..() locate_machinery() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 791055fd2d2..456577d3981 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -485,7 +485,7 @@ ///Installs a new suppressor, assumes that the suppressor is already in the contents of src /obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S) suppressed = S - w_class += S.w_class //so pistols do not fit in pockets when suppressed + update_weight_class(w_class + S.w_class) //so pistols do not fit in pockets when suppressed update_appearance() /obj/item/gun/ballistic/clear_suppressor() @@ -493,7 +493,7 @@ return if(isitem(suppressed)) var/obj/item/I = suppressed - w_class -= I.w_class + update_weight_class(w_class - I.w_class) return ..() /obj/item/gun/ballistic/AltClick(mob/user) @@ -666,7 +666,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( if(handle_modifications) name = "sawn-off [src.name]" desc = sawn_desc - w_class = WEIGHT_CLASS_NORMAL + update_weight_class(WEIGHT_CLASS_NORMAL) //The file might not have a "gun" icon, let's prepare for this lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 092443db8d0..fa3448c392f 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,84 +1,94 @@ -#define TRANSFER_MODE_DESTROY 0 -#define TRANSFER_MODE_MOVE 1 -#define TARGET_BEAKER "beaker" -#define TARGET_BUFFER "buffer" - /obj/machinery/chem_master name = "ChemMaster 3000" desc = "Used to separate chemicals and distribute them in a variety of forms." - density = TRUE - layer = BELOW_OBJ_LAYER icon = 'icons/obj/medical/chemical.dmi' icon_state = "chemmaster" base_icon_state = "chemmaster" + density = TRUE idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.2 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.2 resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/chem_master - /// Icons for different percentages of buffer reagents - var/fill_icon = 'icons/obj/medical/reagent_fillings.dmi' - var/fill_icon_state = "chemmaster" - var/static/list/fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) + /// Inserted reagent container var/obj/item/reagent_containers/beaker /// Whether separated reagents should be moved back to container or destroyed. - var/transfer_mode = TRANSFER_MODE_MOVE - /// Whether reagent analysis screen is active - var/reagent_analysis_mode = FALSE - /// Reagent being analyzed - var/datum/reagent/analyzed_reagent + var/is_transfering = TRUE /// List of printable container types - var/list/printable_containers = list() - /// Container used by default to reset to (REF) - var/default_container - /// Selected printable container type (REF) - var/selected_container - /// Whether the machine has an option to suggest container - var/has_container_suggestion = FALSE - /// Whether to suggest container or not - var/do_suggest_container = FALSE - /// The container suggested by main reagent in the buffer - var/suggested_container + var/list/printable_containers + /// Container used by default to reset to + var/obj/item/reagent_containers/default_container + /// Selected printable container type + var/obj/item/reagent_containers/selected_container /// Whether the machine is busy with printing containers var/is_printing = FALSE - /// Number of printed containers in the current printing cycle for UI progress bar + /// Number of containers printed so far var/printing_progress + /// Number of containers to be printed var/printing_total - /// Default duration of printing cycle - var/printing_speed = 0.75 SECONDS // Duration of animation - /// The amount of containers printed in one cycle + /// The amount of containers that can be printed in 1 cycle var/printing_amount = 1 /obj/machinery/chem_master/Initialize(mapload) create_reagents(100) - load_printable_containers() - default_container = REF(printable_containers[printable_containers[1]][1]) + + printable_containers = load_printable_containers() + default_container = printable_containers[printable_containers[1]][1] selected_container = default_container - return ..() + + register_context() + + . = ..() + + var/obj/item/circuitboard/machine/chem_master/board = circuit + board.build_path = type + board.name = name /obj/machinery/chem_master/Destroy() QDEL_NULL(beaker) return ..() -/obj/machinery/chem_master/on_deconstruction(disassembled) - replace_beaker() - return ..() +/obj/machinery/chem_master/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_RMB] = "Remove beaker" + . = CONTEXTUAL_SCREENTIP_SET + return . -/obj/machinery/chem_master/Exited(atom/movable/gone, direction) + if(is_reagent_container(held_item) && held_item.is_open_container()) + if(!QDELETED(beaker)) + context[SCREENTIP_CONTEXT_LMB] = "Replace beaker" + else + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""] anchor" + return CONTEXTUAL_SCREENTIP_SET + else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/chem_master/examine(mob/user) . = ..() - if(gone == beaker) - beaker = null - update_appearance(UPDATE_ICON) + if(in_range(user, src) || isobserver(user)) + . += span_notice("The status display reads:
    Reagent buffer capacity: [reagents.maximum_volume] units.
    Number of containers printed per cycle [printing_amount].") + if(!QDELETED(beaker)) + . += span_notice("[beaker] of [beaker.reagents.maximum_volume]u capacity inserted") + . += span_notice("Right click with empty hand to remove beaker") + else + . += span_warning("Missing input beaker") -/obj/machinery/chem_master/RefreshParts() - . = ..() - reagents.maximum_volume = 0 - for(var/obj/item/reagent_containers/cup/beaker/beaker in component_parts) - reagents.maximum_volume += beaker.reagents.maximum_volume - printing_amount = 0 - for(var/datum/stock_part/servo/servo in component_parts) - printing_amount += servo.tier + . += span_notice("It can be [EXAMINE_HINT("wrenched")] [anchored ? "loose" : "in place"]") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "close" : "open"]") + if(panel_open) + . += span_notice("The machine can be [EXAMINE_HINT("pried")] apart.") -/obj/machinery/chem_master/update_appearance(updates=ALL) +/obj/machinery/chem_master/update_appearance(updates) . = ..() if(panel_open || (machine_stat & (NOPOWER|BROKEN))) set_light(0) @@ -102,9 +112,7 @@ // Screen overlay if(!panel_open && !(machine_stat & (NOPOWER | BROKEN))) var/screen_overlay = base_icon_state + "_overlay_screen" - if(reagent_analysis_mode) - screen_overlay += "_analysis" - else if(is_printing) + if(is_printing) screen_overlay += "_active" else if(reagents.total_volume > 0) screen_overlay += "_main" @@ -114,46 +122,130 @@ // Buffer reagents overlay if(reagents.total_volume) var/threshold = null + var/static/list/fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) for(var/i in 1 to fill_icon_thresholds.len) - if(ROUND_UP(100 * reagents.total_volume / reagents.maximum_volume) >= fill_icon_thresholds[i]) + if(ROUND_UP(100 * (reagents.total_volume / reagents.maximum_volume)) >= fill_icon_thresholds[i]) threshold = i if(threshold) - var/fill_name = "[fill_icon_state][fill_icon_thresholds[threshold]]" - var/mutable_appearance/filling = mutable_appearance(fill_icon, fill_name) + var/fill_name = "chemmaster[fill_icon_thresholds[threshold]]" + var/mutable_appearance/filling = mutable_appearance('icons/obj/medical/reagent_fillings.dmi', fill_name) filling.color = mix_color_from_reagents(reagents.reagent_list) . += filling -/obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) +/obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) //SKYRAT ADDITION START if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) return ITEM_INTERACT_SUCCESS - return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_BLOCKING //SKYRAT ADDITION END -/obj/machinery/chem_master/screwdriver_act(mob/living/user, obj/item/tool) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) - update_appearance(UPDATE_ICON) - return ITEM_INTERACT_SUCCESS - return ITEM_INTERACT_BLOCKING +/obj/machinery/chem_master/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + beaker = null + update_appearance(UPDATE_OVERLAYS) -/obj/machinery/chem_master/crowbar_act(mob/living/user, obj/item/tool) - if(default_deconstruction_crowbar(tool)) - return ITEM_INTERACT_SUCCESS - return ITEM_INTERACT_BLOCKING +/obj/machinery/chem_master/on_set_is_operational(old_value) + if(!is_operational) + is_printing = FALSE + update_appearance(UPDATE_OVERLAYS) + +/obj/machinery/chem_master/RefreshParts() + . = ..() + reagents.maximum_volume = 0 + for(var/obj/item/reagent_containers/cup/beaker/beaker in component_parts) + reagents.maximum_volume += beaker.reagents.maximum_volume + + printing_amount = 0 + for(var/datum/stock_part/servo/servo in component_parts) + printing_amount += servo.tier * 12.5 + printing_amount = min(50, ROUND_UP(printing_amount)) + +///Return a map of category->list of containers this machine can print +/obj/machinery/chem_master/proc/load_printable_containers() + PROTECTED_PROC(TRUE) + SHOULD_BE_PURE(TRUE) + + var/static/list/containers + if(!length(containers)) + containers = list( + CAT_TUBES = GLOB.reagent_containers[CAT_TUBES], + CAT_PILLS = GLOB.reagent_containers[CAT_PILLS], + CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES], + ) + return containers /obj/machinery/chem_master/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1) || !can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) + return ..() + + if(is_reagent_container(tool) && tool.is_open_container()) replace_beaker(user, tool) if(!panel_open) ui_interact(user) - return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_SUCCESS + else + return ITEM_INTERACT_BLOCKING return ..() +/obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + + . = ITEM_INTERACT_BLOCKING + if(is_printing) + balloon_alert(user, "still printing!") + return . + + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/chem_master/screwdriver_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + + . = ITEM_INTERACT_BLOCKING + if(is_printing) + balloon_alert(user, "still printing!") + return . + + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/chem_master/crowbar_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + + . = ITEM_INTERACT_BLOCKING + if(is_printing) + balloon_alert(user, "still printing!") + return . + + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/** + * Insert, remove, replace the existig beaker + * Arguments + * + * * mob/living/user - the player trying to replace the beaker + * * obj/item/reagent_containers/new_beaker - the beaker we are trying to insert, swap with existing or remove if null + */ +/obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) + PRIVATE_PROC(TRUE) + + if(!QDELETED(beaker)) + try_put_in_hand(beaker, user) + if(!QDELETED(new_beaker) && user.transferItemToLoc(new_beaker, src)) + beaker = new_beaker + update_appearance(UPDATE_OVERLAYS) + /obj/machinery/chem_master/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return . - if(!can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH|FORBID_TELEKINESIS_REACH)) + if(!can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) return . replace_beaker(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -164,27 +256,6 @@ /obj/machinery/chem_master/attack_ai_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) -/// Insert new beaker and/or eject the inserted one -/obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(new_beaker && user && !user.transferItemToLoc(new_beaker, src)) - return FALSE - if(beaker) - try_put_in_hand(beaker, user) - beaker = null - if(new_beaker) - beaker = new_beaker - update_appearance(UPDATE_ICON) - return TRUE - -/obj/machinery/chem_master/proc/load_printable_containers() - printable_containers = list( - CAT_TUBES = GLOB.reagent_containers[CAT_TUBES], - CAT_PILLS = GLOB.reagent_containers[CAT_PILLS], - CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES], - CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // SKYRAT EDIT ADDITION - CAT_DARTS = GLOB.reagent_containers[CAT_DARTS], // SKYRAT EDIT ADDITION - ) - /obj/machinery/chem_master/ui_assets(mob/user) return list( get_asset_datum(/datum/asset/spritesheet/chemmaster) @@ -198,269 +269,282 @@ /obj/machinery/chem_master/ui_static_data(mob/user) var/list/data = list() + data["categories"] = list() for(var/category in printable_containers) - var/container_data = list() + //make the category + var/list/category_list = list( + "name" = category, + "containers" = list(), + ) + + //add containers to this category for(var/obj/item/reagent_containers/container as anything in printable_containers[category]) - container_data += list(list( + category_list["containers"] += list(list( "icon" = sanitize_css_class_name("[container]"), "ref" = REF(container), "name" = initial(container.name), "volume" = initial(container.volume), )) - data["categories"]+= list(list( - "name" = category, - "containers" = container_data, - )) + + //add the category + data["categories"] += list(category_list) return data /obj/machinery/chem_master/ui_data(mob/user) - var/list/data = list() + . = list() - data["reagentAnalysisMode"] = reagent_analysis_mode - if(reagent_analysis_mode && analyzed_reagent) - var/state - switch(analyzed_reagent.reagent_state) - if(SOLID) - state = "Solid" - if(LIQUID) - state = "Liquid" - if(GAS) - state = "Gas" - else - state = "Unknown" - data["analysisData"] = list( - "name" = analyzed_reagent.name, - "state" = state, - "pH" = analyzed_reagent.ph, - "color" = analyzed_reagent.color, - "description" = analyzed_reagent.description, - "purity" = analyzed_reagent.purity, - "metaRate" = analyzed_reagent.metabolization_rate, - "overdose" = analyzed_reagent.overdose_threshold, - "addictionTypes" = reagents.parse_addictions(analyzed_reagent), - ) - else - data["isPrinting"] = is_printing - data["printingProgress"] = printing_progress - data["printingTotal"] = printing_total - data["hasBeaker"] = beaker ? TRUE : FALSE - data["beakerCurrentVolume"] = beaker ? round(beaker.reagents.total_volume, 0.01) : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - var/list/beaker_contents = list() - if(beaker) - for(var/datum/reagent/reagent in beaker.reagents.reagent_list) - beaker_contents.Add(list(list("name" = reagent.name, "ref" = REF(reagent), "volume" = round(reagent.volume, 0.01)))) - data["beakerContents"] = beaker_contents + //printing statictics + .["isPrinting"] = is_printing + .["printingProgress"] = printing_progress + .["printingTotal"] = printing_total + .["maxPrintable"] = printing_amount - var/list/buffer_contents = list() - if(reagents.total_volume) - for(var/datum/reagent/reagent in reagents.reagent_list) - buffer_contents.Add(list(list("name" = reagent.name, "ref" = REF(reagent), "volume" = round(reagent.volume, 0.01)))) - data["bufferContents"] = buffer_contents - data["bufferCurrentVolume"] = round(reagents.total_volume, 0.01) - data["bufferMaxVolume"] = reagents.maximum_volume + //contents of source beaker + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) + var/list/beakerContents = list() + if(length(beaker.reagents.reagent_list)) + for(var/datum/reagent/reagent as anything in beaker.reagents.reagent_list) + beakerContents += list(list( + "ref" = "[reagent.type]", + "name" = reagent.name, + "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING), + "pH" = reagent.ph, + "color" = reagent.color, + "description" = reagent.description, + "purity" = reagent.purity, + "metaRate" = reagent.metabolization_rate, + "overdose" = reagent.overdose_threshold, + "addictionTypes" = reagents.parse_addictions(reagent), + )) + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data - data["transferMode"] = transfer_mode + //contents of buffer + beaker_data = list() + beaker_data["maxVolume"] = reagents.maximum_volume + beaker_data["currentVolume"] = round(reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) + var/list/beakerContents = list() + if(length(reagents.reagent_list)) + for(var/datum/reagent/reagent as anything in reagents.reagent_list) + beakerContents += list(list( + "ref" = "[reagent.type]", + "name" = reagent.name, + "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING), + "pH" = reagent.ph, + "color" = reagent.color, + "description" = reagent.description, + "purity" = reagent.purity, + "metaRate" = reagent.metabolization_rate, + "overdose" = reagent.overdose_threshold, + "addictionTypes" = reagents.parse_addictions(reagent), + )) + beaker_data["contents"] = beakerContents + .["buffer"] = beaker_data - data["hasContainerSuggestion"] = !!has_container_suggestion - if(has_container_suggestion) - data["doSuggestContainer"] = !!do_suggest_container - if(do_suggest_container) - if(reagents.total_volume > 0) - var/master_reagent = reagents.get_master_reagent() - suggested_container = get_suggested_container(master_reagent) - else - suggested_container = default_container - data["suggestedContainer"] = suggested_container - selected_container = suggested_container - else if (isnull(selected_container)) - selected_container = default_container + //is transfering or destroying reagents. applied only for buffer + .["isTransfering"] = is_transfering - data["selectedContainerRef"] = selected_container - var/obj/item/reagent_containers/container = locate(selected_container) - data["selectedContainerVolume"] = initial(container.volume) + //container along with the suggested type + var/obj/item/reagent_containers/suggested_container = default_container + if(reagents.total_volume > 0) + var/datum/reagent/master_reagent = reagents.get_master_reagent() + var/container_found = FALSE + suggested_container = master_reagent.default_container + for(var/category in printable_containers) + for(var/obj/item/reagent_containers/container as anything in printable_containers[category]) + if(container == suggested_container) + suggested_container = REF(container) + container_found = TRUE + break + if(!container_found) + suggested_container = REF(default_container) + .["suggestedContainerRef"] = suggested_container - return data + //selected container + .["selectedContainerRef"] = REF(selected_container) + .["selectedContainerVolume"] = initial(selected_container.volume) -/obj/machinery/chem_master/ui_act(action, params) +/** + * Transfers a single reagent between buffer & beaker + * Arguments + * + * * mob/user - the player who is attempting the transfer + * * datum/reagents/source - the holder we are transferring from + * * datum/reagents/target - the holder we are transferring to + * * datum/reagent/path - the reagent typepath we are transfering + * * amount - volume to transfer -1 means custom amount + * * do_transfer - transfer the reagents else destroy them + */ +/obj/machinery/chem_master/proc/transfer_reagent(mob/user, datum/reagents/source, datum/reagents/target, datum/reagent/path, amount, do_transfer) + PRIVATE_PROC(TRUE) + + //sanity checks for transfer amount + if(isnull(amount)) + return FALSE + amount = text2num(amount) + if(isnull(amount)) + return FALSE + if(amount == -1) + var/target_amount = tgui_input_number(user, "Enter amount to transfer", "Transfer amount") + if(!target_amount) + return FALSE + amount = text2num(target_amount) + if(isnull(amount)) + return FALSE + if(amount <= 0) + return FALSE + + //sanity checks for reagent path + var/datum/reagent/reagent = text2path(path) + if (!reagent) + return FALSE + + //use energy + if(!use_energy(active_power_usage)) + return FALSE + + //do the operation + . = FALSE + if(do_transfer) + if(target.is_reacting) + return FALSE + if(source.trans_to(target, amount, target_id = reagent)) + . = TRUE + else if(source.remove_reagent(reagent, amount)) + . = TRUE + if(. && !QDELETED(src)) //transferring volatile reagents can cause a explosion & destory us + update_appearance(UPDATE_OVERLAYS) + return . + +/obj/machinery/chem_master/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - if(action == "eject") - replace_beaker(usr) - return TRUE - - if(action == "transfer") - var/reagent_ref = params["reagentRef"] - var/amount = text2num(params["amount"]) - var/target = params["target"] - return transfer_reagent(reagent_ref, amount, target) - - if(action == "toggleTransferMode") - transfer_mode = !transfer_mode - return TRUE - - if(action == "analyze") - analyzed_reagent = locate(params["reagentRef"]) - if(analyzed_reagent) - reagent_analysis_mode = TRUE - update_appearance(UPDATE_ICON) + switch(action) + if("eject") + replace_beaker(ui.user) return TRUE - if(action == "stopAnalysis") - reagent_analysis_mode = FALSE - analyzed_reagent = null - update_appearance(UPDATE_ICON) - return TRUE + if("transfer") + if(is_printing) + say("buffer locked while printing!") + return - if(action == "stopPrinting") + var/reagent_ref = params["reagentRef"] + var/amount = params["amount"] + var/target = params["target"] + + if(target == "buffer") + return transfer_reagent(ui.user, beaker.reagents, reagents, reagent_ref, amount, TRUE) + else if(target == "beaker") + return transfer_reagent(ui.user, reagents, beaker.reagents, reagent_ref, amount, is_transfering) + return FALSE + + if("toggleTransferMode") + is_transfering = !is_transfering + return TRUE + + if("stopPrinting") + is_printing = FALSE + update_appearance(UPDATE_OVERLAYS) + return TRUE + + if("selectContainer") + var/obj/item/reagent_containers/target = locate(params["ref"]) + if(!ispath(target)) + return FALSE + + selected_container = target + return TRUE + + if("create") + if(!reagents.total_volume || is_printing) + return FALSE + + //validate print count + var/item_count = params["itemCount"] + if(isnull(item_count)) + return FALSE + item_count = text2num(item_count) + if(isnull(item_count) || item_count <= 0) + return FALSE + item_count = min(item_count, printing_amount) + var/volume_in_each = round(reagents.total_volume / item_count, CHEMICAL_VOLUME_ROUNDING) + + // Generate item name + var/item_name_default = initial(selected_container.name) + var/datum/reagent/master_reagent = reagents.get_master_reagent() + if(selected_container == default_container) // Tubes and bottles gain reagent name + item_name_default = "[master_reagent.name] [item_name_default]" + if(!(initial(selected_container.reagent_flags) & OPENCONTAINER)) // Closed containers get both reagent name and units in the name + item_name_default = "[master_reagent.name] [item_name_default] ([volume_in_each]u)" + var/item_name = tgui_input_text(usr, + "Container name", + "Name", + item_name_default, + MAX_NAME_LEN) + if(!item_name) + return FALSE + + //start printing + is_printing = TRUE + printing_progress = 0 + printing_total = item_count + update_appearance(UPDATE_OVERLAYS) + create_containers(ui.user, item_count, item_name, volume_in_each) + return TRUE + +/** + * Create N selected containers with reagents from buffer split between them + * Arguments + * + * * mob/user - the player printing these containers + * * item_count - number of containers to print + * * item_name - the name for each container printed + * * volume_in_each - volume in each container created + */ +/obj/machinery/chem_master/proc/create_containers(mob/user, item_count, item_name, volume_in_each) + PRIVATE_PROC(TRUE) + + //lost power or manually stopped + if(!is_printing) + return + + //use power + if(!use_energy(active_power_usage)) + return + + //print the stuff + var/obj/item/reagent_containers/item = new selected_container(drop_location()) + adjust_item_drop_location(item) + item.name = item_name + item.reagents.clear_reagents() + reagents.trans_to(item, volume_in_each, transferred_by = user) + printing_progress++ + update_appearance(UPDATE_OVERLAYS) + + //print more items + item_count -- + if(item_count > 0) + addtimer(CALLBACK(src, PROC_REF(create_containers), user, item_count, item_name, volume_in_each), 0.75 SECONDS) + else is_printing = FALSE - return TRUE - - if(action == "toggleContainerSuggestion") - do_suggest_container = !do_suggest_container - return TRUE - - if(action == "selectContainer") - selected_container = params["ref"] - return TRUE - - if(action == "create") - if(reagents.total_volume == 0) - return FALSE - var/item_count = text2num(params["itemCount"]) - if(item_count <= 0) - return FALSE - create_containers(item_count) - return TRUE - -/// Create N selected containers with reagents from buffer split between them -/obj/machinery/chem_master/proc/create_containers(item_count = 1) - var/obj/item/reagent_containers/container_style = locate(selected_container) - var/is_pill_subtype = ispath(container_style, /obj/item/reagent_containers/pill) - var/volume_in_each = reagents.total_volume / item_count - var/printing_amount_current = is_pill_subtype ? printing_amount * 2 : printing_amount - - // Generate item name - var/item_name_default = initial(container_style.name) - var/datum/reagent/master_reagent = reagents.get_master_reagent() - if(selected_container == default_container) // Tubes and bottles gain reagent name - item_name_default = "[master_reagent.name] [item_name_default]" - if(!(initial(container_style.reagent_flags) & OPENCONTAINER)) // Closed containers get both reagent name and units in the name - item_name_default = "[master_reagent.name] [item_name_default] ([volume_in_each]u)" - var/item_name = tgui_input_text(usr, - "Container name", - "Name", - item_name_default, - MAX_NAME_LEN) - - if(!item_name || !reagents.total_volume || QDELETED(src) || !usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return FALSE - - // Print and fill containers - is_printing = TRUE - update_appearance(UPDATE_ICON) - printing_progress = 0 - printing_total = item_count - while(item_count > 0) - if(!is_printing) - break - use_energy(active_power_usage) - stoplag(printing_speed) - for(var/i in 1 to printing_amount_current) - if(!item_count) - continue - var/obj/item/reagent_containers/item = new container_style(drop_location()) - adjust_item_drop_location(item) - item.name = item_name - item.reagents.clear_reagents() - reagents.trans_to(item, volume_in_each, transferred_by = src) - printing_progress++ - item_count-- - update_appearance(UPDATE_ICON) - is_printing = FALSE - update_appearance(UPDATE_ICON) - return TRUE - -/// Transfer reagents to specified target from the opposite source -/obj/machinery/chem_master/proc/transfer_reagent(reagent_ref, amount, target) - if (amount == -1) - amount = text2num(input("Enter the amount you want to transfer:", name, "")) - if (amount == null || amount <= 0) - return FALSE - if (!beaker && target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) - return FALSE - var/datum/reagent/reagent = locate(reagent_ref) - if (!reagent) - return FALSE - - use_energy(active_power_usage) - - if (target == TARGET_BUFFER) - if(!check_reactions(reagent, beaker.reagents)) - return FALSE - beaker.reagents.trans_to(src, amount, target_id = reagent.type) - update_appearance(UPDATE_ICON) - return TRUE - - if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_DESTROY) - reagents.remove_reagent(reagent.type, amount) - update_appearance(UPDATE_ICON) - return TRUE - if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) - if(!check_reactions(reagent, reagents)) - return FALSE - reagents.trans_to(beaker, amount, target_id = reagent.type) - update_appearance(UPDATE_ICON) - return TRUE - - return FALSE - -/// Checks to see if the target reagent is being created (reacting) and if so prevents transfer -/// Only prevents reactant from being moved so that people can still manlipulate input reagents -/obj/machinery/chem_master/proc/check_reactions(datum/reagent/reagent, datum/reagents/holder) - if(!reagent) - return FALSE - var/canMove = TRUE - for(var/datum/equilibrium/equilibrium as anything in holder.reaction_list) - if(equilibrium.reaction.reaction_flags & REACTION_COMPETITIVE) - continue - for(var/datum/reagent/result as anything in equilibrium.reaction.required_reagents) - if(result == reagent.type) - canMove = FALSE - if(!canMove) - say("Cannot move reagent during reaction!") - return canMove - -/// Retrieve REF to the best container for provided reagent -/obj/machinery/chem_master/proc/get_suggested_container(datum/reagent/reagent) - var/preferred_container = reagent.default_container - for(var/category in printable_containers) - for(var/container in printable_containers[category]) - if(container == preferred_container) - return REF(container) - return default_container - -/obj/machinery/chem_master/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads:
    Reagent buffer capacity: [reagents.maximum_volume] units.
    Number of containers printed at once increased by [100 * (printing_amount / initial(printing_amount)) - 100]%.") + update_appearance(UPDATE_OVERLAYS) /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" desc = "Used to create condiments and other cooking supplies." icon_state = "condimaster" - has_container_suggestion = TRUE /obj/machinery/chem_master/condimaster/load_printable_containers() - printable_containers = list( - CAT_CONDIMENTS = GLOB.reagent_containers[CAT_CONDIMENTS], - ) - -#undef TRANSFER_MODE_DESTROY -#undef TRANSFER_MODE_MOVE -#undef TARGET_BEAKER -#undef TARGET_BUFFER + var/static/list/containers + if(!length(containers)) + containers = list(CAT_CONDIMENTS = GLOB.reagent_containers[CAT_CONDIMENTS]) + return containers diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index bdd4f125075..f02d0d47deb 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -99,7 +99,12 @@ . += span_notice("Filled to [round((total_weight / maximum_weight) * 100)]% capacity.") if(!QDELETED(beaker)) - . += span_notice("A beaker of [beaker.reagents.maximum_volume]u capacity is present.") + . += span_notice("A beaker of [beaker.reagents.maximum_volume]u capacity is present. Contains:") + if(beaker.reagents.total_volume) + for(var/datum/reagent/reg as anything in beaker.reagents.reagent_list) + . += span_notice("[round(reg.volume, CHEMICAL_VOLUME_ROUNDING)]u of [reg.name]") + else + . += span_notice("Nothing.") . += span_notice("[EXAMINE_HINT("Right click")] with empty hand to remove beaker.") else . += span_warning("It's missing a beaker.") diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 117c434befa..d79eb825d7c 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -1658,7 +1658,7 @@ need_mob_update += drinker.adjustStaminaLoss(-heal_amt, updating_stamina = FALSE, required_biotype = affected_biotype) if(need_mob_update) drinker.updatehealth() - drinker.visible_message(span_warning("[drinker] shivers with renewed vigor!"), span_notice("One taste of [lowertext(name)] fills you with energy!")) + drinker.visible_message(span_warning("[drinker] shivers with renewed vigor!"), span_notice("One taste of [LOWER_TEXT(name)] fills you with energy!")) if(!drinker.stat && heal_points == 20) //brought us out of softcrit drinker.visible_message(span_danger("[drinker] lurches to [drinker.p_their()] feet!"), span_boldnotice("Up and at 'em, kid.")) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 90bd7e14a86..a072166ab86 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -488,13 +488,13 @@ adjust_blood_flow(-0.06 * reac_volume, initial_flow * 0.6) // 20u of a salt shacker * 0.1 = -1.6~ blood flow, but is always clamped to, at best, third blood loss from that wound. // Crystal irritation worsening recovery. gauzed_clot_rate *= 0.65 - to_chat(carbies, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin but soaking up most of the blood.")) + to_chat(carbies, span_notice("The salt bits seep in and stick to [LOWER_TEXT(src)], painfully irritating the skin but soaking up most of the blood.")) /datum/wound/slash/flesh/on_salt(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.1 * reac_volume, initial_flow * 0.5) // 20u of a salt shacker * 0.1 = -2~ blood flow, but is always clamped to, at best, halve blood loss from that wound. // Crystal irritation worsening recovery. clot_rate *= 0.75 - to_chat(carbies, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin but soaking up most of the blood.")) + to_chat(carbies, span_notice("The salt bits seep in and stick to [LOWER_TEXT(src)], painfully irritating the skin but soaking up most of the blood.")) /datum/wound/burn/flesh/on_salt(reac_volume) // Slightly sanitizes and disinfects, but also increases infestation rate (some bacteria are aided by salt), and decreases flesh healing (can damage the skin from moisture absorption) @@ -502,7 +502,7 @@ infestation -= max(VALUE_PER(0.3, 30) * reac_volume, 0) infestation_rate += VALUE_PER(0.12, 30) * reac_volume flesh_healing -= max(VALUE_PER(5, 30) * reac_volume, 0) - to_chat(victim, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin! After a few moments, it feels marginally better.")) + to_chat(victim, span_notice("The salt bits seep in and stick to [LOWER_TEXT(src)], painfully irritating the skin! After a few moments, it feels marginally better.")) /datum/reagent/consumable/blackpepper name = "Black Pepper" @@ -535,7 +535,10 @@ . = ..() if(isvampire(affected_mob)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit. if(SPT_PROB(min((current_cycle-1)/2, 12.5), seconds_per_tick)) - to_chat(affected_mob, span_danger("You can't get the scent of garlic out of your nose! You can barely think...")) + if(HAS_TRAIT(affected_mob, TRAIT_ANOSMIA)) + to_chat(affected_mob, span_danger("You feel that something is wrong, your strength is leaving you! You can barely think...")) + else + to_chat(affected_mob, span_danger("You can't get the scent of garlic out of your nose! You can barely think...")) affected_mob.Paralyze(10) affected_mob.set_jitter_if_lower(20 SECONDS) else @@ -653,18 +656,18 @@ /datum/wound/pierce/bleed/on_flour(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.015 * reac_volume) // 30u of a flour sack * 0.015 = -0.45~ blood flow, prettay good - to_chat(carbies, span_notice("The flour seeps into [lowertext(src)], painfully drying it up and absorbing some of the blood.")) + to_chat(carbies, span_notice("The flour seeps into [LOWER_TEXT(src)], painfully drying it up and absorbing some of the blood.")) // When some nerd adds infection for wounds, make this increase the infection /datum/wound/slash/flesh/on_flour(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.04 * reac_volume) // 30u of a flour sack * 0.04 = -1.25~ blood flow, pretty good! - to_chat(carbies, span_notice("The flour seeps into [lowertext(src)], painfully drying some of it up and absorbing a little blood.")) + to_chat(carbies, span_notice("The flour seeps into [LOWER_TEXT(src)], painfully drying some of it up and absorbing a little blood.")) // When some nerd adds infection for wounds, make this increase the infection // Don't pour flour onto burn wounds, it increases infection risk! Very unwise. Backed up by REAL info from REAL professionals. // https://www.reuters.com/article/uk-factcheck-flour-burn-idUSKCN26F2N3 /datum/wound/burn/flesh/on_flour(reac_volume) - to_chat(victim, span_notice("The flour seeps into [lowertext(src)], spiking you with intense pain! That probably wasn't a good idea...")) + to_chat(victim, span_notice("The flour seeps into [LOWER_TEXT(src)], spiking you with intense pain! That probably wasn't a good idea...")) sanitization -= min(0, 1) infestation += 0.2 return @@ -759,18 +762,18 @@ /datum/wound/pierce/bleed/on_starch(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.03 * reac_volume) - to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], painfully drying some of it up and absorbing a little blood.")) + to_chat(carbies, span_notice("The slimey starch seeps into [LOWER_TEXT(src)], painfully drying some of it up and absorbing a little blood.")) // When some nerd adds infection for wounds, make this increase the infection return /datum/wound/slash/flesh/on_starch(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.06 * reac_volume) - to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], painfully drying it up and absorbing some of the blood.")) + to_chat(carbies, span_notice("The slimey starch seeps into [LOWER_TEXT(src)], painfully drying it up and absorbing some of the blood.")) // When some nerd adds infection for wounds, make this increase the infection return /datum/wound/burn/flesh/on_starch(reac_volume, mob/living/carbon/carbies) - to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], spiking you with intense pain! That probably wasn't a good idea...")) + to_chat(carbies, span_notice("The slimey starch seeps into [LOWER_TEXT(src)], spiking you with intense pain! That probably wasn't a good idea...")) sanitization -= min(0, 0.5) infestation += 0.1 return diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index fd3ffc4a3ed..c45a9ae8c8b 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -343,18 +343,18 @@ /datum/wound/pierce/bleed/on_saltwater(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.06 * reac_volume, initial_flow * 0.6) - to_chat(carbies, span_notice("The salt water splashes over [lowertext(src)], soaking up the blood.")) + to_chat(carbies, span_notice("The salt water splashes over [LOWER_TEXT(src)], soaking up the blood.")) /datum/wound/slash/flesh/on_saltwater(reac_volume, mob/living/carbon/carbies) adjust_blood_flow(-0.1 * reac_volume, initial_flow * 0.5) - to_chat(carbies, span_notice("The salt water splashes over [lowertext(src)], soaking up the blood.")) + to_chat(carbies, span_notice("The salt water splashes over [LOWER_TEXT(src)], soaking up the blood.")) /datum/wound/burn/flesh/on_saltwater(reac_volume) // Similar but better stats from normal salt. sanitization += VALUE_PER(0.6, 30) * reac_volume infestation -= max(VALUE_PER(0.5, 30) * reac_volume, 0) infestation_rate += VALUE_PER(0.07, 30) * reac_volume - to_chat(victim, span_notice("The salt water splashes over [lowertext(src)], soaking up the... miscellaneous fluids. It feels somewhat better afterwards.")) + to_chat(victim, span_notice("The salt water splashes over [LOWER_TEXT(src)], soaking up the... miscellaneous fluids. It feels somewhat better afterwards.")) return /datum/reagent/water/holywater @@ -730,7 +730,7 @@ //affected_mob.set_species(species_type) //ORIGINAL affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION holder.del_reagent(type) - to_chat(affected_mob, span_warning("You've become \a [lowertext(initial(species_type.name))]!")) + to_chat(affected_mob, span_warning("You've become \a [LOWER_TEXT(initial(species_type.name))]!")) return /datum/reagent/mutationtoxin/classic //The one from plasma on green slimes diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index ce13c9c70de..6407ff0fb8b 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -456,7 +456,7 @@ required_container = /obj/item/slime_extract/cerulean /datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom)) + new /obj/item/blueprints/slime(get_turf(holder.my_atom)) ..() //Sepia diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 31948c5cc1e..a6e4dd42885 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -23,7 +23,7 @@ . = ..() if(drink_type) var/list/types = bitfield_to_list(drink_type, FOOD_FLAGS) - . += span_notice("It is [lowertext(english_list(types))].") + . += span_notice("It is [LOWER_TEXT(english_list(types))].") /** * Checks if the mob actually liked drinking this cup. diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index 4f7abbe6f20..a293aac7aa1 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -894,7 +894,8 @@ desc = "Fermented prison wine made from fruit, sugar, and despair. You probably shouldn't drink this around Security." icon_state = "trashbag1" // pruno releases air as it ferments, we don't want to simulate this in atmos, but we can make it look like it did for (var/mob/living/M in view(2, get_turf(src))) // letting people and/or narcs know when the pruno is done - to_chat(M, span_info("A pungent smell emanates from [src], like fruit puking out its guts.")) + if(HAS_TRAIT(M, TRAIT_ANOSMIA)) + to_chat(M, span_info("A pungent smell emanates from [src], like fruit puking out its guts.")) playsound(get_turf(src), 'sound/effects/bubbles2.ogg', 25, TRUE) /** diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index cb008252037..3c04bd924ec 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -37,13 +37,29 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) //Direction -> if we have a conveyor belt in that direction var/list/neighbors -/obj/machinery/conveyor/Initialize(mapload) +/obj/machinery/conveyor/Initialize(mapload, new_dir, new_id) . = ..() AddElement(/datum/element/footstep_override, priority = STEP_SOUND_CONVEYOR_PRIORITY) var/static/list/give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN) AddElement(/datum/element/give_turf_traits, give_turf_traits) register_context() + if(new_dir) + setDir(new_dir) + if(new_id) + id = new_id + neighbors = list() + ///Leaving onto conveyor detection won't work at this point, but that's alright since it's an optimization anyway + ///Should be fine without it + var/static/list/loc_connections = list( + COMSIG_ATOM_EXITED = PROC_REF(conveyable_exit), + COMSIG_ATOM_ENTERED = PROC_REF(conveyable_enter), + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(conveyable_enter) + ) + AddElement(/datum/element/connect_loc, loc_connections) + update_move_direction() + LAZYADD(GLOB.conveyors_by_id[id], src) + /obj/machinery/conveyor/examine(mob/user) . = ..() if(inverted) @@ -96,27 +112,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) icon_state = "conveyor_map_inverted" flipped = TRUE -// create a conveyor -/obj/machinery/conveyor/Initialize(mapload, new_dir, new_id) - ..() - if(new_dir) - setDir(new_dir) - if(new_id) - id = new_id - neighbors = list() - ///Leaving onto conveyor detection won't work at this point, but that's alright since it's an optimization anyway - ///Should be fine without it - var/static/list/loc_connections = list( - COMSIG_ATOM_EXITED = PROC_REF(conveyable_exit), - COMSIG_ATOM_ENTERED = PROC_REF(conveyable_enter), - COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(conveyable_enter) - ) - AddElement(/datum/element/connect_loc, loc_connections) - update_move_direction() - LAZYADD(GLOB.conveyors_by_id[id], src) - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/conveyor/LateInitialize() +/obj/machinery/conveyor/post_machine_initialize() . = ..() build_neighbors() @@ -619,9 +615,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) if(!attached_switch) return - INVOKE_ASYNC(src, PROC_REF(update_conveyers), port) + INVOKE_ASYNC(src, PROC_REF(update_conveyors), port) -/obj/item/circuit_component/conveyor_switch/proc/update_conveyers(datum/port/input/port) +/obj/item/circuit_component/conveyor_switch/proc/update_conveyors(datum/port/input/port) if(!attached_switch) return diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 9bd89517bb8..bc40b1d0394 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -10,6 +10,7 @@ resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON obj_flags = CAN_BE_HIT + use_power = NO_POWER_USE /// The internal air reservoir of the disposal var/datum/gas_mixture/air_contents @@ -99,7 +100,8 @@ if(current_size >= STAGE_FIVE) deconstruct() -/obj/machinery/disposal/LateInitialize() +/obj/machinery/disposal/post_machine_initialize() + . = ..() //this will get a copy of the air turf and take a SEND PRESSURE amount of air from it var/atom/L = loc var/datum/gas_mixture/env = new diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index 2d964d0f8fb..fff78f74bef 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -172,7 +172,7 @@ for(var/obj/structure/disposalpipe/P in T) if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir if(QDELING(P)) - to_chat(world, "DEBUG -- [src] here, new pipe is being thanos'd") + CRASH("Pipe is being deleted while being used by a disposal holder at ([P.x], [P.y], [P.z]") return P // if no matching pipe, return null return null diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index e17b53da692..84dcb67233d 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -189,6 +189,17 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE +/datum/design/water_balloon + name = "Water Balloon" + id = "water_balloon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) + build_path = /obj/item/toy/waterballoon + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + /datum/design/mesons name = "Optical Meson Scanners" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index e529f97eb0c..04d0c30d9e0 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -45,7 +45,7 @@ Nothing else in the console has ID requirements. return reagent.name return ID -/obj/machinery/computer/rdconsole/LateInitialize() +/obj/machinery/computer/rdconsole/post_machine_initialize() . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research) CONNECT_TO_RND_SERVER_ROUNDSTART(stored_research, src) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 58d7f1f29cf..60dcc8716cc 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -24,7 +24,7 @@ set_wires(new /datum/wires/rnd(src)) register_context() -/obj/machinery/rnd/LateInitialize() +/obj/machinery/rnd/post_machine_initialize() . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research) CONNECT_TO_RND_SERVER_ROUNDSTART(stored_research, src) diff --git a/code/modules/research/server_control.dm b/code/modules/research/server_control.dm index 94a429dc6d7..24327a731a6 100644 --- a/code/modules/research/server_control.dm +++ b/code/modules/research/server_control.dm @@ -9,7 +9,7 @@ ///Connected techweb node the server is connected to. var/datum/techweb/stored_research -/obj/machinery/computer/rdservercontrol/LateInitialize() +/obj/machinery/computer/rdservercontrol/post_machine_initialize() . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research) CONNECT_TO_RND_SERVER_ROUNDSTART(stored_research, src) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index de97ea7bf69..172959153aa 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -58,7 +58,7 @@ stored_slimes = list() -/obj/machinery/computer/camera_advanced/xenobio/LateInitialize(mapload) +/obj/machinery/computer/camera_advanced/xenobio/post_machine_initialize() . = ..() for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) if(get_area(recycler.loc) == get_area(loc)) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 1551d6eb952..3d4d9bc4b45 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -1082,17 +1082,3 @@ turf_type = /turf/open/floor/sepia merge_type = /obj/item/stack/tile/sepia -/obj/item/areaeditor/blueprints/slime - name = "cerulean prints" - desc = "A one use yet of blueprints made of jelly like organic material. Extends the reach of the management console." - color = "#2956B2" - -/obj/item/areaeditor/blueprints/slime/edit_area() - ..() - var/area/area = get_area(src) - for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) - for(var/turf/area_turf as anything in zlevel_turfs) - area_turf.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - area_turf.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) - area.area_flags |= XENOBIOLOGY_COMPATIBLE - qdel(src) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 03f87b6d741..b1d613f4091 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -344,16 +344,16 @@ for(var/datum/wound/wound as anything in wounds) switch(wound.severity) if(WOUND_SEVERITY_TRIVIAL) - // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)].")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL + // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [LOWER_TEXT(wound.name)].")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)].")]" // SKYRAT EDIT - Medical overhaul-ish if(WOUND_SEVERITY_MODERATE) - // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL + // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [LOWER_TEXT(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish if(WOUND_SEVERITY_SEVERE) - // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL + // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lLOWER_TEXT(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish if(WOUND_SEVERITY_CRITICAL) - // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL + // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [LOWER_TEXT(wound.name)]!!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!!")]" // SKYRAT EDIT - Medical overhaul-ish for(var/obj/item/embedded_thing in embedded_objects) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 08fbd4e955a..7ab37382a55 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -527,7 +527,7 @@ set_beam_color(new_color, to_update) return TRUE if("enter_color") - var/new_color = lowertext(params["new_color"]) + var/new_color = LOWER_TEXT(params["new_color"]) var/to_update = params["to_update"] set_beam_color(new_color, to_update, sanitize = TRUE) return TRUE diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 8bba59d7987..a60cc243756 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -266,7 +266,8 @@ var/ratio = (breath.gases[/datum/gas/oxygen][MOLES] / safe_oxygen_max) * 10 breather.apply_damage(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type, spread_damage = TRUE) - breather.throw_alert(ALERT_TOO_MUCH_OXYGEN, /atom/movable/screen/alert/too_much_oxy) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_TOO_MUCH_OXYGEN, /atom/movable/screen/alert/too_much_oxy) /// Handles NOT having too much o2. only relevant if safe_oxygen_max has a value /obj/item/organ/internal/lungs/proc/safe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, old_o2_pp) @@ -285,7 +286,8 @@ if(nitro_pp < safe_nitro_min && !HAS_TRAIT(src, TRAIT_SPACEBREATHING)) // Suffocation side-effects. // Not safe to check the old pp because of can_breath_vacuum - breather.throw_alert(ALERT_NOT_ENOUGH_NITRO, /atom/movable/screen/alert/not_enough_nitro) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_NOT_ENOUGH_NITRO, /atom/movable/screen/alert/not_enough_nitro) var/gas_breathed = handle_suffocation(breather, nitro_pp, safe_nitro_min, breath.gases[/datum/gas/nitrogen][MOLES]) if(nitro_pp) breathe_gas_volume(breath, /datum/gas/nitrogen, /datum/gas/carbon_dioxide, volume = gas_breathed) @@ -318,7 +320,8 @@ breather.emote("cough") if((world.time - breather.co2overloadtime) > 12 SECONDS) - breather.throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_TOO_MUCH_CO2, /atom/movable/screen/alert/too_much_co2) breather.Unconscious(6 SECONDS) // Lets hurt em a little, let them know we mean business. breather.apply_damage(3, co2_damage_type, spread_damage = TRUE) @@ -337,7 +340,8 @@ // Suffocation side-effects. if(plasma_pp < safe_plasma_min && !HAS_TRAIT(src, TRAIT_SPACEBREATHING)) // Could check old_plasma_pp but vacuum breathing hates me - breather.throw_alert(ALERT_NOT_ENOUGH_PLASMA, /atom/movable/screen/alert/not_enough_plas) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_NOT_ENOUGH_PLASMA, /atom/movable/screen/alert/not_enough_plas) // Breathe insufficient amount of Plasma, exhale CO2. var/gas_breathed = handle_suffocation(breather, plasma_pp, safe_plasma_min, breath.gases[/datum/gas/plasma][MOLES]) if(plasma_pp) @@ -362,7 +366,8 @@ // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. if(old_plasma_pp < safe_plasma_max) - breather.throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_TOO_MUCH_PLASMA, /atom/movable/screen/alert/too_much_plas) var/ratio = (breath.gases[/datum/gas/plasma][MOLES] / safe_plasma_max) * 10 breather.apply_damage(clamp(ratio, plas_breath_dam_min, plas_breath_dam_max), plas_damage_type, spread_damage = TRUE) @@ -466,6 +471,8 @@ miasma_disease.name = "Unknown" breather.AirborneContractDisease(miasma_disease, TRUE) // Miasma side effects + if (HAS_TRAIT(breather, TRAIT_ANOSMIA)) //Anosmia quirk holder cannot smell miasma, but can get diseases from it. + return switch(miasma_pp) if(0.25 to 5) // At lower pp, give out a little warning @@ -522,7 +529,8 @@ // More N2O, more severe side-effects. Causes stun/sleep. if(old_n2o_pp < n2o_para_min) - breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o) + if(!HAS_TRAIT(breather, TRAIT_ANOSMIA)) + breather.throw_alert(ALERT_TOO_MUCH_N2O, /atom/movable/screen/alert/too_much_n2o) n2o_euphoria = EUPHORIA_ACTIVE // give them one second of grace to wake up and run away a bit! diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 5807e1d5c2d..c01b5938124 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -462,7 +462,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) var/list/message_word_list = splittext(message, " ") var/list/translated_word_list = list() for(var/word in message_word_list) - word = GLOB.english_to_zombie[lowertext(word)] + word = GLOB.english_to_zombie[LOWER_TEXT(word)] translated_word_list += word ? word : FALSE // all occurrences of characters "eiou" (case-insensitive) are replaced with "r" diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 4b9514aa38c..9956305db26 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -112,7 +112,7 @@ Notes: return var/ui_style = user.client?.prefs?.read_preference(/datum/preference/choiced/ui_style) if(!theme && ui_style) - theme = lowertext(ui_style) + theme = LOWER_TEXT(ui_style) if(!theme) theme = "default" user.client.tooltips.show(tip_src, params, title, content, theme) diff --git a/code/modules/transport/elevator/elev_indicator.dm b/code/modules/transport/elevator/elev_indicator.dm index 7b34f2d6105..22b9334be5a 100644 --- a/code/modules/transport/elevator/elev_indicator.dm +++ b/code/modules/transport/elevator/elev_indicator.dm @@ -36,11 +36,7 @@ /// The elevator's current floor relative to its lowest floor being 1 var/current_lift_floor = 1 -/obj/machinery/lift_indicator/Initialize(mapload) - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/lift_indicator/LateInitialize() +/obj/machinery/lift_indicator/post_machine_initialize() . = ..() for(var/datum/transport_controller/linear/possible_match as anything in SStransport.transports_by_type[TRANSPORT_TYPE_ELEVATOR]) diff --git a/code/modules/transport/elevator/elev_panel.dm b/code/modules/transport/elevator/elev_panel.dm index 24b6e0fa317..76b95922dfe 100644 --- a/code/modules/transport/elevator/elev_panel.dm +++ b/code/modules/transport/elevator/elev_panel.dm @@ -60,19 +60,15 @@ AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = "Send Elevator") - // Machinery returns lateload by default via parent, - // this is just here for redundancy's sake. - . = INITIALIZE_HINT_LATELOAD - maploaded = mapload - // Maploaded panels link in LateInitialize... + // Maploaded panels link in post_machine_initialize... if(mapload) return // And non-mapload panels link in Initialize link_with_lift(log_error = FALSE) -/obj/machinery/elevator_control_panel/LateInitialize() +/obj/machinery/elevator_control_panel/post_machine_initialize() . = ..() // If we weren't maploaded, we probably already linked (or tried to link) in Initialize(). if(!maploaded) diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 8f5fae1deea..7912588ab8a 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -715,12 +715,11 @@ register_context() if(!id_tag) id_tag = assign_random_name() - return INITIALIZE_HINT_LATELOAD /** * Mapped or built tram cabinet isn't located on a transport module. */ -/obj/machinery/transport/tram_controller/LateInitialize(mapload) +/obj/machinery/transport/tram_controller/post_machine_initialize() . = ..() SStransport.hello(src, name, id_tag) find_controller() diff --git a/code/modules/transport/tram/tram_controls.dm b/code/modules/transport/tram/tram_controls.dm index 435b47f9d1b..0bfce56aa5c 100644 --- a/code/modules/transport/tram/tram_controls.dm +++ b/code/modules/transport/tram/tram_controls.dm @@ -54,7 +54,7 @@ var/obj/item/circuitboard/computer/tram_controls/my_circuit = circuit split_mode = my_circuit.split_mode -/obj/machinery/computer/tram_controls/LateInitialize() +/obj/machinery/computer/tram_controls/post_machine_initialize() . = ..() if(!id_tag) id_tag = assign_random_name() diff --git a/code/modules/transport/tram/tram_displays.dm b/code/modules/transport/tram/tram_displays.dm index 47fe21f2ff1..b228bb38e9b 100644 --- a/code/modules/transport/tram/tram_displays.dm +++ b/code/modules/transport/tram/tram_displays.dm @@ -51,7 +51,6 @@ TRAMSTATION_LINE_1, ) set_light(l_dir = REVERSE_DIR(dir)) - return INITIALIZE_HINT_LATELOAD /obj/machinery/transport/destination_sign/Destroy() SStransport.displays -= src @@ -61,7 +60,7 @@ . = ..() set_light(l_dir = REVERSE_DIR(dir)) -/obj/machinery/transport/destination_sign/indicator/LateInitialize(mapload) +/obj/machinery/transport/destination_sign/indicator/post_machine_initialize() . = ..() link_tram() diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 7e21b936791..ea6fe8d32c9 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -184,7 +184,7 @@ RemoveElement(/datum/element/atmos_sensitive, mapload) return INITIALIZE_HINT_LATELOAD -/obj/machinery/door/airlock/tram/LateInitialize(mapload) +/obj/machinery/door/airlock/tram/post_machine_initialize() . = ..() INVOKE_ASYNC(src, PROC_REF(open)) SStransport.doors += src diff --git a/code/modules/transport/tram/tram_machinery.dm b/code/modules/transport/tram/tram_machinery.dm index 7371447d082..99375bfbaf5 100644 --- a/code/modules/transport/tram/tram_machinery.dm +++ b/code/modules/transport/tram/tram_machinery.dm @@ -37,8 +37,7 @@ . = ..() return INITIALIZE_HINT_LATELOAD -/obj/item/assembly/control/transport/call_button/LateInitialize(mapload) - . = ..() +/obj/item/assembly/control/transport/call_button/LateInitialize() if(!id_tag) id_tag = assign_random_name() SStransport.hello(src, name, id_tag) diff --git a/code/modules/transport/tram/tram_power.dm b/code/modules/transport/tram/tram_power.dm index ff0251e9090..45c48766db8 100644 --- a/code/modules/transport/tram/tram_power.dm +++ b/code/modules/transport/tram/tram_power.dm @@ -15,11 +15,7 @@ /// The tram platform we're connected to and providing power var/obj/effect/landmark/transport/nav_beacon/tram/platform/connected_platform -/obj/machinery/transport/power_rectifier/Initialize(mapload) - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/transport/power_rectifier/LateInitialize(mapload) +/obj/machinery/transport/power_rectifier/post_machine_initialize() . = ..() RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(power_tram)) find_platform() diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index 101ae1027a3..88f18d2cb7d 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -107,9 +107,8 @@ RegisterSignal(SStransport, COMSIG_COMMS_STATUS, PROC_REF(comms_change)) SStransport.crossing_signals += src register_context() - return INITIALIZE_HINT_LATELOAD -/obj/machinery/transport/crossing_signal/LateInitialize(mapload) +/obj/machinery/transport/crossing_signal/post_machine_initialize() . = ..() link_tram() link_sensor() @@ -510,9 +509,8 @@ /obj/machinery/transport/guideway_sensor/Initialize(mapload) . = ..() SStransport.sensors += src - return INITIALIZE_HINT_LATELOAD -/obj/machinery/transport/guideway_sensor/LateInitialize(mapload) +/obj/machinery/transport/guideway_sensor/post_machine_initialize() . = ..() pair_sensor() RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(wake_up)) diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index f868fe21c48..368223d1165 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -486,7 +486,6 @@ return INITIALIZE_HINT_LATELOAD /obj/structure/tram/spoiler/LateInitialize() - . = ..() RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(set_spoiler)) /obj/structure/tram/spoiler/add_context(atom/source, list/context, obj/item/held_item, mob/user) diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index d027cf7ba6d..a2ba6f5167b 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -96,7 +96,6 @@ return INITIALIZE_HINT_LATELOAD /obj/structure/transport/linear/LateInitialize() - . = ..() //after everything is initialized the transport controller can order everything transport_controller_datum.order_platforms_by_z_level() diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 1b5c1f931bc..be41b619ed6 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -255,6 +255,7 @@ #include "station_trait_tests.dm" #include "status_effect_ticks.dm" #include "stomach.dm" +#include "storage.dm" #include "strange_reagent.dm" #include "strippable.dm" #include "stuns.dm" diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_tallboy.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_tallboy.png index 262353dc0a95afa4307c8c162e9276bb09a17179..83afcbc2a487b963c8fa5f750be0516eb9356819 100644 GIT binary patch delta 297 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 P0smALwG^u4&BOmMW;zU0 literal 33364 zcmbrl1yEc;xF$Nd%iyjF8Z0EZyF&;Bf=hzCJA=Esd$8c{Zh_$L?kutTAnls(!%uJv2|NZONe}}0kNn@arpaK8@3|ScoRR91c7kYq@5usO3(i?37061w6 zHBBdppN_^3=5|izwl)BOTV_(4qV0?bcJRdCs_IQ0wU9!l5WQS{wR}Mkk9NXZji6Jz z@mXa?u>J%!rV9M>LX(7tK-bdwgd5bKWON=n+=6um?30l%?)k`6wq*qVHzYn$CH6?l1-Srk(WmuIei1Wcw?ov`J z0kE=nacaPG>1g90#>rC%E8Mr=#?Vu6d2cRif_beYabLJx_MMlsjiIbPWz$+eP&Pl^ z^MgZnlH+%5-l5XWmz&Z@_GCqhAdy3nN@>;JC3dAWE&=OME-4PNl?AUZcC4uy+jHXXq?*%+$@PBktqo*Jb*2eA5C7-8>+rqT%fGkJ3%=DY zD)$qnnBuL#$4d&%shcb%nKe8?;cBKyO|ns!cuLSxHi$2?_Ipdxc>TulImA@Ab1A^se^^ z9;=>HG9X`ZKbCSabw`}Vs8Z#Tg>^-Y!D_K=%k!?_PhklLMVD(Aj*p#s{?d#-CVmV2 zG|2fZBL014%xCYq*Iud%yK~4%P_kX$!DMgui7UFB5;Ozk?dfn%wV!^FodOE4JUDLAURS2#Cy`$B_iS2n`fv#cs%VJrZh@SOw9YsNa;YSYc# z!9l64xa&|cs?Fu5rL+4ZoQRRpcFXnk4BYF$Qs-NeV^~;N>*B`0-q(HMg9V|0sRZN$ zE~<0jk_FimYuMrpt9!?NOs`|)OgGm1*0%J*0LUMcim|t%oyYT5a<7^fBU8cz2y9SrvwHF*VfP&~CP-;>jNaA~xD_DDa zdfGBDFc2;&Gxm&o1C}AHvECBmom3Ccs~!=cBHrB}Z=YTo2LLV*L*J0Yv^AUGck(Y{ z(QDGfSs$TNV7r$BtNhocA@iefsJqU8L4DslFHk4EKsT9}&%i(rXXKv}}A+XIKwSQk6ZwRwg=WoWb_ zN1ct%>uYoVyQP=?Y1Qc2|E{-RfNI+tSrDuHJ!+-*`1Kg;Izo7v%KC6@rt}vV>70)LpYS6zVqvG;QQ`Ofqf(5nNZ!m8_ zKSYX;L=EuI!X~c*^};C3+5ZTMlh4+R-iZO@)Abne0_%|81-c0X?50hSfYc2gYrESM zaM+d!ssYPP?FJKh^Oe&(X-Mzj4Aae&12J(2XO`hqEpmW9GK!?{GW8hLoZe%}9DdKN zU;1o*^2I{m;uH&IMohp1bqp@v&n*47tl!RIS}^vCsgrVRIFdxuEA|A^Wqk`&fYZxe z`LP8%kuJ$o@XB~M`c0UT_q-gnmQ5*Q(F4tKJSahK7oR!=s9K=(BMCZkEB-SzwC%Z- z+b}@o00PQd#brPLEN2l`)tz{;y`ZU%KY^ThCBzp$3cdGXMnFmlnzr1&9W(Vx0bjtx z$5hsQMx#>gck`AnJ27lqp~yiWb+-;-P)zFxz+SYmF1hIClCH`!V{rWDbs>d>6oQRX zJh*=Bnf-Gg1wH=bnPk!nJu+nPl>R3JD3ApyYAWaIk%L%&ZXLkH#n&&6&D7sJPMf&; z;sU2far0*+ibc(ECx_sG(ZV?2#BmJgEeUJ{&p4r?74zwnj`M^BAoQLK7p#=w+!A-H z+IG1{d-3X1&HPHQsRjvGDC=(DwH0dv@n$oIW)04km5&g`W>OkSf z3QhbKRQGYl{^M_gCgiD^-pTCP$!L-)k@04V<;r=z)I=m1MAvw`W!jlu8-`Qp(*k}l zk!?@aH#9s%36J8PIscyj51ZiXg7D|Y@aq*jERGFDteyIoZqE5&if3^NnPzzZMEuWs zFjs)WcB*);c-D%Qg8tKll#Wz}!#$WI!yI=J7={n4IBc4j)SI__TC5>d^=zgdS?BF! zaN^p%f8p{?)7I;~!0p@H+Zaw4%z4Nt#hpN0WUUf^zieNnLzGGEFSEY5OeV-m_YC zz{a!kDWqc32))yhR}LH}>~0H>&#qIfT6gnUGNr&4=TOxRT9PZ$jj_7{0X7i5RAK2? z3g0Q|Jvh(-<}7@;U|EEmjN2zkCvoE0jOzSCjKBzjP;P|+@p>^ae|MBx{^JT>@8g15 zj7-^%-|STnjX+4XV7L|Tg`%>pM9d9|;f6HG!h#GA39EDdBHy$}RnLdd;CZA^egS>8 z^9^73R5=ZjNia&wPP7(mcMIyz?ZBGuq?x}GS(Ma1eJ}u4`pZRN0@~T{g}5j)#hQ(J zZWmixI5*~J3=Fpjrnpdz?nmZM?mk`E^ry%n^$DwTaz{j6ng$B1SJ+Pwn|CRz^)X8= zYmEN#-V*?fWwS5Zt}uv`QNn!0=@^LV?w2O-ZLmyzaMFGAtejJUX*D-cOCg{N=IfOM z5$Pfs+Vao|>EiCga76YOV}$m^!r^9~i)xs|896DZBJ~@v6QPTTvO{AM#DJc|Gw&i`YMZo-!sU|Lr}zfFoe)t3Gny;gZ#n50^$OQ_@P^lo;#+?hE)j(m5w{o5+v}W0Dvv!)=fgJI6c6{R9b7bpV0fN*NdE8N=qK|P z36@+x?!ukW1fnMC=x{ahv|JXAFh_)4j@>MC_GP&3NL+M`~79Obm@ms$Uva2Fh>% zGiVYPJ*vU(Fl)Co^dmA0bjx3ym-08bKM_yD)hQQ4fTjhxo=Z1q<~y3D7RmM*<~uq% z8YU)G@=YKNCd-+%9iL@vqLHYAu3&tA0Wd8V5FzP>g2WN}&_6i1ovdxs({giQfBxcr z|E6uzGQix~#Zyq(hAFL-*`3N^jJK2nWytS$U4~;MsXNM<0~UL#}b; zNZ&ruAFQS~+Ho%jfm6K~R>27Dx_M*&p`mK>wqL8DUuN(a znDMh8WxtI;WSLm^VMG+X0BIE19jt9SSfP5-0+VV-Z?UzaO`MO+#N{=N0$quUr4JTz z+r5tQFYr2S`ZcdkPxY7Zk%JpI?_JhxeT=#vCd&bfD#7M}>J-I5sE+>rqtg$E%9(5WueEwdwLO*x+QXMHntcxX6C+FYH>V$ zPifORdSK4#-wa;B;jm}8E01=^4C?K^+xiGhmtrV~WNdR#oe8f{hYG(FqTQdI3J^uC zrfh;$f~_Hucl%|NYN1?@lX*m=e6faQhF@=CC2wkcv*z3A5?k^@&mtDm?s|xb{oFDh zzkc;+IJp_>gG^QP`R%UF3C!1uq%pFTb=plXt$#c+$uL>U&uC79@ETpXOf<8#3t9UjL z1HF(Qex-j9T1HQhT`J@(EiHB1jgx+9TvEv70eaq_4?vBKH+U+4&+b7#KrvF(+n9Yf z%k^dHKtDWU=i8@GvwH&r4ffrR0wFo^a1PwIl`xk@XBGMq+LTze7{mIEv8;QcN$veU zNaDGw)zwa=MMx5X>dkxwYRmm#gbV^+ifFs8#EQzpSAgFN5e#IZif%*JXNK!V5X-?5 zF|knm)MwQD?a;|`59aYX`C6<&%g@nhIY0F=$!7u-lUZK(=z7BF2_zB<0rmP*X`1?3kk~V%&hykaOA{n`v&= zvJ6W8B@`O{ai^>dF9;t4(0wDo6AcIAvRf@d&L!{0=pC;35(NjyCxnEhKO{Ca6*+pxpcegu=v>S1#zrnccj18L z`BI(BQsvm#6$6Xl=6Yp$x#I=o~U_f>DSj5IIqL?9CXEj z=L*H6ItcZ>;$p(X#pLDDXlQ7#SIP;OVe4TKaB`r=)!-^2X0+_DcI|f4i=yx&C3?8| zfQISm=9oz)+j98eH|3wxS+4t=brazdF)>l$gMYDD`UkFOQk{0NPX)aw4j^^7RUNm# zKRjP_KC^D5I^m!dx9{RZvd)+v7MIcQ8>?UGCpr9<6Ol~`Sa)|W%%qloN9kQzXB^b) zKQ^W9@JX6Tii;1)+uM`zHSO5izWFRqaJ^*+?XLzS86%B*>(`=X8(|?|W?zX|%j#nq zVbx_98J9YS)JjlbW+Cq0Ug9vn9&Z70Z6n>bZdHfrtzAyNULW1xMK50|ZN=UL}1Z#V|I5jB?gAJ$_D%+fqg0(8X?ouaOZAmX**MGuD16sy1L|@g1g5ZgOU7SHOQl5$`U>1#nz zl3jvq!u|Dw#s-VNXn%T*DrO$@I@ggaB{}3EBqB`kUlUH~Ja^k?>R%kZJTgU+eHPf{ z$w^Nq88A1yFq8JS#+Y1%Z(ECoD%oY2cm$A|i;3jRmr4yw>k3><>8N~r5sTrmF$r^X z#$a?}*c9w6EVoG5=3R0$egJ5PrmXam@F9AbkZ%&m>+|ve5wzRv9uf~mH=p?Phvar* z#N7pejY~--gC#TCh}jZbBja?G!ulBOktm!+K|76&`YaXM2Mo}$44(5B{-D3vC~s0s zWvE=Kr(w|0I#^+zMyP6SnAf=>VkRI`aMn~`pIcJ{BpdSE;aO0CBPSQS3O&GuzAiJ{ zTp;3KNVHa#u`SPoBEJ~RMQ8COCqYf!phbpRMohKh;Z2jqxrMEz^gBX7QX3L|hs`k? z$sN!*o+P!95b@40_mG@*!#meXmWNI?=o{_WF&lg z(}@p=n-o}9FjPxJL%XJ1b^lwp5$)1V=tqWH-`V#zD-A2PPnk;efNnh>0W=VFZY!C1 zHr8Dh)=kB|lcepu$~UceI{HunZs0|Z#2=>56tr*}_^aP@n3{i+PV|24#Nq+%_$^!t zB}0Xq-o0~&6?3)u0;u~edde{PQU3`t>+5kGV)s`Z`o{igqCcNvUxur- zoN5%IfRU{k_*fCaN$4S>T#_&Jp4LSvp59lp(?BnH4p#8m@Ze-(0*V!Q1_hz!A<10( zy%5T#QY_dczJkFn_w-^^VjlI6lbRn0G(VIcCdGyZu7`!@pPHIP4?(S2voKWWJEH%N zkzqv)_^*eB$utzwFfx8=avImqin<$(=;;0P=TB@_R#ZF!TKliPDOk)+9;(_KZXtJe z%=^v_K=y$G;GPlSb@P|I>SYs2xVhs;kH3F`bj)Ca@jyS43KZCohx9(K1H4ygUh<0R zMT!H!e23nJT4FIcJfeSa;cr`fXa~1siUPbMbW`j)MQXFMvMNSyWH#;-xcEQ*PL7Rs zMj^zSWO)AM5rMTyf`n)4np-0@zBgi*y-=u`fu(4E1k*1iSWg+=HUZiGS!KIS;NDlM=^uzZ#iLRJX5o=>$@v+|I4g9+0`W9 z0yu!%W=d8tCgtkL87#=SiJq=fr=>Q!7UE2$UF$%{?K-bhGc7DA<;Uu0sSAtC?1xIt zhRAUtG3tcf4=?f|dme0lMg1t++0f~;Jy-T<7Kgc9faBRHbCf9%^DgH0vU}K(NDhmE zOhAP83|EX=D6qd@qTcng8lB`DY_o{~K*w4Lu$qmv^lK#$KvgqyL(E}fg`!N(mI4#^ zy|#Cjf>!c)L?WkkVm2Xvef5H`>q1sA?bfo$G`XVdybs3+MN6Tm+12i`bN)m! zbR?)j<&Np3WE<;Hu6q{oGzbdH;D)BB7v(?&9WQD%#F7q*M);+@A zxR4&Zlysp_$Xc7HH4Bs5;$5p=>G+9+@RA$q(%Sa`c zgysVa@=uZq?bL#DoBe3{XA$nST-rsI6rfaYDNiAfA4mMHT@F6#;SjGImRXpt%}yuXEM|U zI2z0Q*gLP#)KA>p&w`aLElcwCi66wIzpi}ObyN001vCd8${F(mG)S?LPTyZ?YiY9u z?0|L6tu7!vV`*6Ub!$J_Bh4za8^Y%MW^J!68{+#GD zV4-;6KhD96xACVOaB<#!BIxJjevP*^@7eGD@V>jQB=V7;@vwVKM+PVH^#lg}<(t&U~-Fg_-Wnk`wl2^93jPJ==Cs#C?o=`C6T63{p(%N z`Q>j+i}1_DHBzk=_QH+N&1$+B(GdV73Tpv7{5YA&a8O+X9M2Qw2hVGc|HPWIKa66y zC9CFYe1>NIciITjJa(IaU`+Dx+S-r5wVRaUUY9U10HDHg4uu9a>2QgJqlP35j4m%m zR!s8lJD>mrz;o^@Fk!pr=0h=Ip8;t1I%{=)hB0`1dDNJ%(x+srFEab6+8QYBD*kJQ z_O|j3nEY|X%*`-0+uYz*AaJ5H^#JSe{`BtMGaA8%ZRuzd3U-P#J?U|(8E9zs;<1NT ztJi(e1rhRX{j(<+d*}0E)b$53J8vDhH4KHax3-C)oo4 zMO9UGbsJ8k5r9x_i#UnC`4ccPv(FPv3Jn_!w|HzwK@W+EiD#Azm9Kfi+Trk_RNqj4 zQUD6*C%^6+p=m&uXCzf%{{t`#)=I>f`UwRJ5yfd!0UXe_5Bq=D;;{^M8{A4{Yql?% z3RQA1R3?4?m0#R_9STHO01=@J3)HxAbZrt&zyQWI^k4z#hrSrl-=>w5w;5ms84NvhplnswyrW~osg}jJbW{Ugb_qB2+^mL=3@LqTGR^Qb{Ri~Jq z)dwF!Vn&jKU{agzsRC*IiJ;qVIIPR27rXEcVylr^QiuDLx0A0gbe0(r3ux(o8Xo2qEwz zA7oD?Vgh=`@z6@T>P{PpR1MC}Mtv`Y9gcLI-TA}J}O$hk-&Oqo-B1WdB-JH!Ve8Ck`kzPL!t>^_7L+yk~{yOqTg7(j(} z>E_=W9_KQ$E_VkmpEoeqBIGUF;TbSr;mKdJgN#P-A~ttr#713&!S!FY07)t}MoT;F zl2T8BD`n+|it+&!tt0@QF2XU;XT|1l!O8jcXm{oIl3`XLs6ZNXdu&8p@7YYWS?x&c zLP}YAc=#p7pMWwR3B+tG!;ft!GpHF!)@r;M*t_d< zKOtjBjr_O{K0vpQd>6#G}gaxy`Vm_%xfh1cE)b;^EAC@7#WmwYxVM3xMJmwKSm z@B%4emF%>6>-lvYtN@p6@s`=ht{yA3*=((ELbq@yuhxVl&~rBNm8`5Ecb7mkh3^wE zDH6#S{@+oxkX;YTyIBt^$l_ae%7c?6;%yhAC)lfOq=ioL>C5EMx0SNh4Ms*rK!c*0 zrLC)NabY1~ws9Sb)%X7RxOI9o!{f0_CB(M8rEZ;?Y0>j%K4E!y)tW$iJsRNNzPH3`?b3DgWqaJ&(G#P`>#*zn|Hj&m!1u9_uasN+ zDs-Ai;L}IEy<$vDC)S@=SxWRSHYNVBY+1dcIs*q3B_A2H-M7EX-ECDkA>*q|RN7yhtu!-u?Q>8+{Ywb#X9@eBY8 zcQtA43L~8L*+K?H#0>2`dSlDKJ@Du~KWgg*hl;%S<=h}|e07Bk`Y#A!D=t2QaRB#E zfde#s9a2vlkT=&Va8Aw@Wr394*u+DOy~ww3Zn*eAd*4fwv*y&9+M94%SX#mWJm*v>98%apV5sBkbZC9fXigixD6$xgk58~}E!%AOCq|Ar&uZ)jws zM3r6#9=Y$`vAS#PtH&4AxS8xYs3_+4h#LrA;#+Ny4-h1AMGgA`Y}jm8A2RG4Ulc^J zWNg}q3p|0p9{@D!c5$y#EkPl{f$#UdFqh$IHh_Kfn@0n7odm+!|AEn|?K=uZNczYw9y#UL z-^wGDCb^CqP_YRYWic!-FZ=u0hxgnJVz_B&)mGUru36Lf1;=#P9Nim4MfTJh5hX!5 zi#K-8FM$fSVjUgSA8UP%ri+FrChmzhiBN|lxCI5*V$b*9VMWTpSql?g!SEq47(KvW z+J#9zBk)624v3$38>HPXK-K+TNstTC&41=Z>`|~<9A^X+r2~){)b`GrJjo&D$I_+*S`aXG; z)K8vGFUa1{Wu%iNxVSrDzP)LvV*L6=r|yDsc6Jsne*^tYUqozg6Q^Y24-cV8KRORy zU0ghTj|q*R!9vZBzg3|={lPRAES?4V5gZ29%)2FSNrM9DqCh}p2LYDgC)|)fI#-_l zgc5q4UyGGKO8|~at$!(Hp#o~<%%Ff~df``|2BqqS3-#aOL_#oeuSzhW800u6o>q)Q zsD*L)HsGFD_?3PvFz3Ny>Wr8?6sJDz`t%1^gN?=jl= zrA>KDZBnDZ9kCo13L`bRL$%OFi%CsuT-zI9J&HH$G$P(9PwvBd$JDhO?;!qP2aTO1 z$OCR9b9zvfBiByw-j|X#cO2+{RJ65EejcpYLU0omsVgcf%*@TdcqwQEv-Y5sU&gC` zNd0We$Ynb=RP;w~!LgWjD;=V!sM!3=*LN(v4$qXi{Czp!-DU9g%}tHdk*d{NtNM+j zE5h&{90isHCN!i={}r&Pq^yi}?B>dCHU1>uge2k71w%nib0*RcN8@(ybrUFSUEFBx z078RUvcKogEmSsR#1db0btIvuHX)a7$k#rau-klR3hkjX~a6J3T zUuI3%ArTrIAMgLkk`kRn0A8Q+;m;ba4K&1c`|9USd*ci3G4MMfLsdm2s_%Rb(aF;^ zlUbv(dEj7iN?fK6d^b|eNsr~czZE6KH5;Fh(6@Kc#&e z+f!C^rjCFFfV!kZL0@tlM^H8BPTknY$-jO32CWveN{lu4@^=HX5TJcXR=bsxkr2C((5bMryTG-) z0XCv6F|n1ke4vyA-ywnjO3w$%-M(31fdoTSQ%{z8IS5NCB!||;0GEN~Ag2JjnW+-d z2%AX@(wP9!MN3x3fhLR#C~-Exe9!VJYmuQ&{%{t`Q`m1Kl&9pFk6n8Kx;$L36q+;B z5-Xs0)nppW zxVA4Ia|3iyp&A0PVuki693!~?VnB_OHRZ4gcYPpiW2I{3>Z5=2i{bz3<4bvujtpS8 zUjCH1S`$nET$Mz@x*fD;Bb~YCH~7S}K$&vm#%5$K^r@%_37Zr@iuzh%gvQdpJW#i` zO1PFz0Tyt(t{vK%!SCzafE1$9WOONg-`Xb+z8eDd^eoY?<)W>>L><@r>ea*DWV>;c z*i34TRg<0a4*y1cx7LtyrpNaEI)i{3_6VWLbU_K7R0x(Ce;G67g_6q){-0YY^rZ8= z^CxvWYpCrLr!kn2T@K%!b3&(Hm!K%nb*UTFuTQP_^nEnbl-+Cj`rX>vI^J5SP!SpQgH)w@ z2lVgjNfj8t;ess^35ibK%I8S3uv+h&e+iix5id>+cXHmAE&loC+pF6n6!etI zf1ymHugjMkJv%KR3WWeb`?2POMCxVCI5Fnse7{7oAffxew!5}(U;oUxHicrVn6PO3=<*b#$q=gw;!Xk;0;K+9X0DNVKG0*^Zygd!|E>AiZZF{{|_in$g8L6q@GO6 z4f8X`-%zgmUi}-LC-)%cAEBSpV|Pt#U_Wno%aT|JFH ziKZ+B4E!f1_?CEI?`iZ!%L`UC0xQ>xY;quiaI(o(xXNa+P}|w-Vx36udss(>BfG&R zh3n#QToVkaO}y9j^|@`LC=iNr>_zIt&6qvIZ$&r`(nfR$kczacU=#ikIy8Yii|@R8zP5e>aSESUP9;Jo=bL>ENfNi@kAao*n$7(X(nkht13V)t#SjOA~22-)dKwhJ;?X zQ(v1ZOza1k~dBkIwAVQ}$WEA=N^CuCf z2|BcX?3lkH43w0}fFdg^iz4SG2f1TBPXn`G#y}ja?v3;2pMly~43lpcQ6wK$-t@Vx zw|xYx(_QfuY;d9pJ42RrmJ{R#QuK%U52Pu5N*;ce%s<2EuoaEC+MqtU(RzG+b)KPH za=*JgT{?f3@C0amfNZiskT5AC9ryOmH)7o$%m4azJG0cAiWkev>TwW>HA6QQ6wGuR zIH8$wz_w0|wzTP`Xno}5e0+KF>O%^2`T1Wc98IJWAfU&9-GlBQ$c7kTi2Q%vNy@c zz=bNP_f0$mbM7fIxc3c`7laZE%FHA?hZe;cU{M$Fi}W8ryXnfrbnlM-UF8$vL+~>GmABZz{?J%iPf2Jv zYDi^#zCxSB`B)A58g9k%2v>HMK7w?$xxLE^Mv0|NMQ)+;trU3_89F(RDo`a_+KyTYF6Ul10CK0SY@Eswiaf;X}h(!DB3zZ?(9i zNHuOA5NdHjav}F4(pNG(eEci<6juB-X}v%Zvoh1(_sX|;Fsi9E7Xa!!f}C@;Zsbvf zquwYe)zP=nX?)I18#59zq3o0%a(Ch$9(?r0Px7`74i3%GDI0MLye`6Hbr+l5Ssvky z2oHaFd3lLl!jNbVkLl9F*=kEbiB<3@LrzLgc7R6ScR-?etlg&Aa}_=`Q_b}!hwXk8 zD3?xLe3B2Qv8R?=otc@KnBJ8mIXXDBH>Lp?L1D2~$YE1!1I5K_5Rq6HoPz7ZVz*6@ z>s>~+QTaPT(1C7l{gZ||Jv^s{kJ7A-aD@@vrHc~~AR28lOrq+GzI zD7w0M;cD>uzXH*cl2ELW=K}6}did@&X6(Z>qrzfB35_%2FAu1Mk)3)K{Gw*lXwmAj zfrtfiqN>~C$N52ZaJQd;umZ*sB_uFYg!Zlw+mbUN{ao<7`B5e^55FLPyOT#mGy1@E z=ROmfLbfdiq1(|W`UvdJ*AR4e1CAf&A7LBxV!OCDv)}O<1@`&MT2jwCkzwOfdm|S= z>326B2dv(oH*zUd2lfem#QChJqCCM*y|w%LPbKm3@zb-v-i*jB!DlZU)jvRUM+c`S zTHgKSPw#94L{7)_`Ifj|o_wZ}mfm2g+gIg1;26xyzf*p_}IRxm3|I_~o@1Z;H{u zFXjrGEJ{+fb*CV-IoG;~Gru z*xhXD*CmN)RKtlJkHZ5jfF~lp!S0Q;gm{Jb)+-XMFkHRCNR2HjouQn8@7pG{?qaK- z_kq#AD6LN(@9*T%yE_!Uxoq?y(uDf|00x>dkRDEn!lCh zoOezr#{h8}LsN~O3Zg8nEQUTQVv!7KD)xwUl_~pdZvlO)yNFa5z+aMSt^XCieSiVa zmv0}znZ-klG*OruHkHUcs@k6NaJg4}QVrDFdcT8J+B&J?{vL`)lib2zSfMi@ZgJYw3WPIxh9HLZVqCeJF~Vh!v) z{@mRp{oNIt!rugTHmie@QHEQx`*Vn@hevBA7Wa)m>`a<40}IP%K1NaMImA-@JhK3t za5i0Ua@6PEv2vC?>`Bm744YKKi6(t3 zzsH-=umU%VbvEhY|5xRoqOj?y-H4$Wsq4kcZE-fj!q1bk25kfairn(cgKT2I7t4;0$gwk9Z9 zofZz1*;-d_hR(Zu)zDNJ$~XLj1mJ&*va>^du#W5FO$ZuPo0VO?-WFd|q@3A!p!*aI z*!}b5@BEFS7Dejb4+Z<*74-kpmihZleT z7;6iEzQ{vk0e$F^e6kYgpY8MdV>vO~;}w0=4~b&a_Hheu@yum}haf_7>MbDzY`D^B zed>;r`>cShYj0DW-I&9;1mAJ;g+=xgl@oK2#V#_VlJS5}FfP4gpxGQk+?*8=T;;8?ch5g2vM^(6_@M*RQnhoLF6?IZD9xWvCj8ja=Da!iI97!C5 zBIA$4<-aEv{&?BwyolwaD(JUA|M5-iV!foz0pVVWNTb$qqvv;F;XC!C7LNvEz~wBi z{A6*J`X{A1Nz%bc(zEFD&o}#Q@pD{S)q0%|M>J4m*9%$j^?iS(a7cMci2*r|2i3S1 zeQmI*f%4MThjFri!v{BsD}iIn^4k0zT$PRK@KC*)k{bQtj|2U^c$6{2zf5Mo=?{w) zqBLk^0DD|Pwq+yR1%KJo>fPtSN0tNkHh*!}?)Tns6sI+jW4`I-u5w2kb@pMdw$k;y#96=+3a$r6s-lU35^|zyP%;S6$sbT6P#G18X+% z$LHsJv`Pp%yW=me1=||USc@8}_q@b4Q|isjQ+}z&k`H#H1gqZnYch(8&O^>TWQ!f1 z+$Q6hVI5h|Gpb*wI2>rwPflX7b3pUVLk%(nfRvP*s}M^0^CmFxK6`emGM&opa5p;R|N*vr?e+@An4A2c6o^ zcr-DW55K7RJ!!E30|QORCOOCxWO3+=%{4bqw(730E^Xv{gjPi6Vg6w!m&;9__cmQa z@vpc!ttc!Sq?6OLNK;=-bkq~5!c{y)o_!s-g$-|!XXh4}`OY1@J3auX6+o@!57-{H z$j%drDAjp{{>j?h?+R@2wLv@EOLAVX$6J{fj0@L!;v$SOhH=vm--F_-TMr zHvW^B3=<$?Wo7ll*x2}a&2=Mct+I5ZmfJLGx()Uh706@#YM0K063zk8*Vhw;h zyen#UAS#O!sTxBWpbtnR49S|5A zdLES6>1{t}^u=Q-Uro1O7FBUhGK1Ax#3Nr0bc;>dib18Lf36THCeKg~C<={;;Oswt zJGFXa1r+}n%z-nY)j1PkE{R4xE?Y}1&TW49#>(#*w9=Vw(e!xZ*Wvk7D+kVM_0R%I ztH!_ejf#(<-nAaO0|U{_rdPPp3K&H@M~8>M=g}}f&$neaTS9>Z4`^i4;I?G^?ftu2 zeMxPFTHw>2&zmU5_|<&{rTo74By3^If%q~&W=*(*EmQASA&|&JeAz2h80J_TeM_jJ zV_U#l2*Et9YjO#RW*ZZ&)mJtCbb2n&%t2`qMqBjb~Hijp?I*B3Rr2 z&u#zLy5PAT(A#y&-D*M1_(6sDZ-(cm43ND#F>aoI*V`Y=W)&2wY9hqf6UIA{lDXBILiD7D3BH2XIt@u@9W#D$U4-H z^&1?s=iHorh#o$?;HFT1%(Hru*RIz>nM%IDe6*`@Jf@cUypG#g@<6OkHT`zr>2RGs zZ3E!s=vH`^y}MoUE26J2&=Jy!(kvtcz2%k8#F4oW&AOw%No2#)MtRHDKBqzZZWyBr zbeIjK3-PBquD2YXG7B)!iLOw~z&=;r4g*xdpR*G$ zDf$zP2$6Nw&qq%fKBjZx*hzxdE=Ja{>RUye+(QX_K?&<-K7WCmKS{>-y!+hqHOdS> zQe`_Mf_=!XvFWIlM!}+GhX_Z@h`MEGWt(HU7O{uY~Jw>1_)1mAWeaFSH>%n*@qGJ9a zqDo@qH5h(sB|2=cdnlUq64i?P-++maMoQ*}KWmN*wld)lPRI(|SA|PZGveQCbGUXHe*qH#kr1=F!bm zx)h!Stz9xAa%r=~NN?WEV$mJ)BFC!}c*{Wgn}JgEqa70Xd;i?pDn=j^FsCIr{Qb!9 zum9W%$>Xq8)m0VrO0k&#eBr*?F8K(MYuH0tknxX_BpQ+wX~!8n(BZ-GB@zpu3*bW5 zzr=Xv7E%xhElxIazoh6vP6;H2iJ;JL*CQcm#5>$_A4{$$W*!wHIJ^6*L)BV|Kfhr- z4*Wn#<@THqUCDqcf8}x(vIoOt;&UewAuXFa%Z|h*q7N)ZzNTbSkLtxxtQKSxVl(O>Q(PCrHzF`KApswSDDuh`M4zVLQd=`?TL}MxbFW8 zV>Q$Hpzgipk-SbeGBp)uR7iF(CAd(t!OFtI%KXpjV;vd5T05NTKF39MghoGJklZpd z8Sjl^{jnYhu$W}@x0K4Y*ry^!0vKa7ZI}}j-Qh~A5sk%oqm$BBx&ty-pU>%O?=3dV zGIP!^0caneqqauUe7it5_4A{&8qTxQ%K-O4rZAJwzoXKp=t;bZa_j<|YnDv|~Ma~|DwJZh96zE z;C)F)ggxTj#uk#bTNvVPZ9MoIfO`cZ5(99w=BHii4Ek&Ghi z@Dwi4XesmivgRK&w_N%)(77+Q!+eH&r@Sp~#%x;W2hx?E6M`H2)x_1c z!cfK&`5zXUf%WE*Et$?c^Ejl)?d^}Z|JB)(<~uY3xl_yu0Kdh7UjBZ~^?Uw6MOF2b zl&k^KCSu1&?{_SFDT#kf!q9%vx$6XlAVG3JU_JD`?tIg-m&NR2 z^sCZY)E~nBzJL$Xd>ASqdHp1CVTX zxIdXjP~->#(bd}C?0W-gEp9u<8vWM8%<~&{09JmsM1%q;Awh7hd+ON=L}{%WSy6IYaJ*sN(n`-Ell1z}t7|n*ZI<-1J$KkIg-STrK%R zeK)&^q`lq)hYek}ae)q4JaO#~!ie)HgawAw{*Pby`pg%Oll<}*`_$D+*7;VAy6jKS z+Q*u%?Y#3R_XSywWGueHd>Vj6i4nbcOT+D#@&4Ume01*ADt@;jj!BP`qK~OV;g8Ns zaqbfih>u2=rAEhUk7+yoi2FTD@6&r+_j1)1o*kl~-i|2~m*}?U+J_(~fA_!CKfTWD z76jun&GVG0PB8O)0!esfxMIi5Y;{|PY_yokTh>&>&#P%_v2<{a$3URXPl~Z|Y0*hM zwkhfKIHpk)i8j_i!5taZX7``wW#PnqJRAq#zSfu!b;EF3D9Z$SRZ=lcVSLWja{E3J z+JuhwIv3BjFfdxLWW8Y3D)R5%Pl`wQ%~p zH#4=KKl&Vi`;F>;AV=o!iMHo7yxYJ^MONI#_+4#Hb>YN1^YDX{nV^mx_b8`+6up?o zVQPXNyezw}XK0UTEU^ORsg|_ZV)J93khm5);z++y*Cwj!u-sxZnc75EY9tR!@(a1_ z4*35xc<*_Af08|44%9r|?g;PSBmOI}O03#AP)aFL8SMX^Ex)}hoM?T{zPtx^hqQ)$ z60^WJF4j6z(dyQnIS9O*mbJ@JHPbi{><8KeFP=1Vkp{)%OKOXb4|T39#Rc6`Ab8JpW(`?_3U)w{bhbV-Nr5|v?I zA6HB91x_`E`F(=71q1X4s{-V*f^1MKbwpm)wQUj-5NKwKxv^ecN*w;S@efGt2!2pQ zh_eE;l1((0FcS5VffV%M5$z1bX+hMa)$fgDLh*Vl1`kon(g^jMVsB8Xs zXuHRd@ASer^UNIkSm86gt`M6?Qqxx4My2Wdgm4B=sZZA5m*FD?Q?)zRGXE0WoP`Wr zy7d?xMO3923dbWo_LjVGK$Kjs&(rzTAItH|KTk)qIx^_GexFGk-y48Yv3_dS?cV=- z7Udm^U9se<8&MWf{GPX7Hu!->Z!dUV8gcoT{`>7(cqo!g;6u)5Y3ZFf<(}#{?%(7qYrJXg7i+<1iBQV^2OnYLq z?OX|4VqJ>mgX|nA!PH(7iOS3(tEoaNOIClrBf#xhc;OBhUyG-w z-I~Me28D2za+oiCQ|4*5c`S86J4oEdX%EtJ#Yb{P5s&q{0Gah{yx`&?_NtBfbGnYX z$9vC3joh~nPOu*Qu`{6ays5+jAQyZo>Wp`X6tFLi;%syC^P@ibtSp~$X$y5GXJ6!^ z``Rk}8k#eITB#4;v(~=fjdlcDbNe&*WvsTJ;#PMHkwP_OSCZuGlJoqWNW1&TuJ+f{RSYm297Rx(@*LAhv8NJW5WOr~kj5NQVxjVb9lYa-( z?4|K9wFkW&RWu%{eTK6Q%qB+QZVGY471={9OW%A0iQ>OUqGLidpjK&@x9Kx4RGS8F8NyT zX$!k_3R!wQs06#tt4mF-PI#elUem^R)#{xoSjGWLv=v8umPP>iU&9BhrE|Y?SAg;@ z1e$aEjkU6)RzU6%-SNrqpz!bknal0tloOc&w=vzo0*y5E!i96o(Z%VV*%AA69G&^E z6yX!4IyQ!_pG6ni|G6HL?%T4@*3-0q-|=7By^GrxK(_@FH-tbgFED@JN?<@m0 z@?>=b>AhAk9Oi2^Jl@?^Im6c6P#=tVuI@=Y54^BS5rFLUeyE~(;_Cpbf1O@_;xsgS zHVjqMR1yE!*_{zs_{b*k+0w_QfF2%+3fXtDTV&;CwqGOz?5?aDAF;Qaj1sax2YaoNyK&zPu6cOoNpY_w0<=2!59A$A6{4#bPURO)u@sLxx(DGwz(056KEx9(~2E z2Fl53D6r4C5tHb?PZv*`Xbny?M~&VF1?gpPhq5a5+?*ZcQ7vp4Ci%?Xaon5~L*_xp zS_#53j356b;(hMkjLe58X>mGcra-MT)sP;@2bihXLSYtWej*M>S_rw&j~1$ zy#RT%ZOxpln;~MQ(JTCo?!1$}nuG|lkB6pi+ceGyL=;@Hw8K;Ypb}2819JSu?a$zZR?v}onzIvn;d(kT}454v7 z-FOK)HT#q5w)-8?_^^T(>jjYvp7#s;7euL(b6{bbS<+W+38KzJoLpS20;XN#@|pvj zx*|NGUJTvy$;gTR4CcG#bT}zp9G)iUrwUsayg~WM4V|cPI0{0Tt#fR7st(yH(a}fhs z_y1lXs~`BP%;fLAo@?YIV>gAPT4U59GE43)|MQjo@2w}8+b3e3wZ!er5H`oMRJEGi z6RBRpc`wP9`G{-no!qrj4r2O}DFAkyk&k>-#pZD6U~D8z6j;PYUM-71A6U4op*~P| zc*$Kc+fb7kGxwpS8}zViRBhQCv-|`p>9Zp-xYgz+p5f)SLk$c2#0VWUuYDM3Wzr}f z+f8u~r)=}{u$1w=Lky(92f5rW1w&k=GriXNL0{q7B{_ZGK{a=0idu+n)H+QYQHuY^ zf!hwODNsA|^vrBkb&U8o743=HcOSX#vrzzL*~kjFz>Z7Cl?@4}1aoi6asp+r;?pGh zTQpeP7j7E&n&0K`4_S(rK?x4qC^|`J7qcs6v z+TfG(wxcLdxfx%Vn1xIiT>jBd46p&x?Sl?$oe%m zae)qJM4{Nqx`h*oI502iZFk8Z*0B1Vn{>whtn-#FT#}G#6_W*xoniZ?>$8Pu&pHFP z0;x$$k_sDkeibC%D+fyl-%7^r_hQlCijG%pqX(jPbAjLK`;S8h6!?5S%)J`1tTAWs z#J`+}5!P}Cdc6SJ1P}O2auii|i|9JVaiVExsM`7$NrWxp6sk!kMkJOr^Mq0AmHe~X zpJtxqJmt}vuqCP02(}6248@>zhISQwd>a7ytH!`MJ_!Ov)Dqt8VNg2IJOqJx@d9m{ z;^{B{x(a+i0%ardD*$ok=)cY{Zt{}a%2!5Jkp(aaztKB@j+b!3??%6lM#cTLq>umL z^+BQ)x61G+$L!GUx9yG6fLY8Cs^h9NM+(fu6j&FJH_nXI=q()1E(oVT`53{5=@o~? zv^X+3^qIBylF+SxWnOseAJ*CpP{k+4$!)wVag4(auhUiLBOI#7Z!id`0Wb;lb#RV> zsk;{6>XYQHtq*@)MO6=uIB&c85a%~$j!u^^as7G3Y>zo*@&tm$x=ALyqyyCyjyu9% zS6hXyxp5g)1{pV;;w)Vlr+B^a%l7qmG~(g<+@#QF=kJ!8`ZT3<3T>7dM-G(TfW66n z=}R8t;tPloGx{%M)d|A+_sQA6?YbWG#;L^#1$H|On{h+PFtdia7IdF1ZW=xO`KG!? z;ZPl~qqeHAg4dcAyJdeIPAEtglrDH(3IqZ}>Qzzp*po7uH`5c%$svx?f#ne+%;=wQ z$`!5c7*6mz*C+CH9=4eOlX}ln{}z8z9WM`sd+aWEU0Fr})@pWr!~Q{z;XpdDkWB92 z$1CJX%<`Vye@kAVB2>NYKXRle;?n@H^pOCi3h?WPVNdczzW<(1N;UfsE*GEO{{r8(Ae`mmb#f7Tb z=Zm~P!{S0^F5>FjKSwM+ADe{?h6pnfA5n^G>zO43*$DOSO6Nq;D;rpdLm^6#{odii)*=7Qg=b_-FAO=nWIq>Mv5= zY2I4u66z*w=;TPJBL~7LKc9_w`%P}whA>e)3cVzqgPG^`k$^qjR?|2=cnUN!$1PTm95w(m+EP^<)ISOC=2bF9O$;{fMv-23QjoS5#>~11sojP*xJ>u4$<7D* zh}Q~jlRwUhQcDbb!f7xyV&d^~ftEYgUqOr(p&iQ_m?~HoOP;c!tA3dGu|a_?qEW>V zqs6SaDkm|WtES^MOLQqqamS<0W|Sq$`0ny%a3C#3M8Y0%mGCRY`|LwN+pKBZ5u)X4 zOA1sDJ=);`Wm&2cx*@l7Y5X+47gC=3_3Na4=qwx9dG%xu=@P9Tq$H#7wqnkLvJ}r4 zpFJt|PNO`m9?m5dXPxK^Exh@evd5HFhF z3Wew=&fGJ`D>xeEGO1eKHDf+@qR;lq496$rdO7)Dgz{eZteR)uDvnhc)3fEo2D-29 zQ2clh6BsnZUom{;u~v@AxQ+44@H?i#7yJ_D?m;_>JV`Vv`MOWPUFsi(`z+->upu=#@vj^17}TmWP&aU|xhryL znDva}4?HapT0HuGH;%)B9XuhE5gR-sT&lf!X8Ar?_}VoYulxMQp13x%RJf zEW~+ynQiq6#!q9@ko8Z$nliy@S)3afaA9aW)GdjC0;x$7rkAQon^7jv^Aj~;t5RFG zxPWbU=yH~E=^^B@XkE6YHy_;Mm+KM!+(IoJMx8x=BnSf&8i1N^vP$@l6W$6Nfz&zm z&3Y~TR*Vb%>+bw%MqkI1ysORS$slS>fLgp_-ZGwpw_$k5B-z?yuOQQs1!!vZz{D4u z$xb@~jh5q(tR4t+;7jbhl1-h|YA9~+FrPzB{JOucMS!O`c*5ZA;#gO}op4x=a?Pzn zz8{11#Aqlh^SML$xA)?z+!3bp<#hEOs5CMR)V6ZDzvucNVbJDi|5(17zvE88ZUqbj z?@UL~;T=on%$@pt5NWfW7o`X|eQ5Sv;&7P32@zs! zPDUpYGg5UB{Fl9k;VN#gYU**oC$)jq*pjm)%U9LsKmNG~T;a}IeH3$Q@aE9g!vbArn~@KBtLO#C&Mn&{NwBd0ig9^$(Qi|%>)na^(b_-yxCE!I$&(6@zon{hJ*T*>t{DgOPv68WNDAHr<58 z8XM%{{)IZ8%~A%Ag`SO5!dj?V)H7qKC$jL(!u5Q@9CJF;Z`DX}f~NDo<5cHo%Empm z5*4zm%Q0^zpg^`;-W#+f`xYdD9F_@#(N$V3~Q_W8~BzDA29E4U+cCu=#wU zE!{(_3OnXsHtx}1Nt4^JzPOt2>n`YqVmEr_J#G!t{5?d4C%Y&7gmEEW{A3rPDlFkB z+tKoUokt{3$}z@{J}*gByg2QjfEb9^AE+w9e$+bi_sf0HU24vGR7ev14*Saf?AOIbR?Ie|%!_G8`@@Mz&7%%eu&Dh6-bq5D*>FaJB z%)?7plZ3DLG|WpEnkZi=y=|r}62{S~QkYn7J3P2kZQUbH@^{h_VdCCaTMpRwZP_>w z+BDF=%&k_d&3%6Ng^k&?(VYXm+W_6Z8p21S>h8v-`wPrmE+#o7InLFZGIt}G2qNcO zhn8Z|U9(uGJ*mCR0laA%g(BQbI>8iC?bn{m={DUe0nPiblXwZhUZr(kN43%~y|HD4 z{5|^5W?2stBSa6Bfi4-+pw8hl`v{DG_R@{v|KPpHBe5-SGLP;_sP<27uOsXmKokyp zX%t|P7uuMPZXQ8ootv&J^+WZ2qd8iK5~Q>YR=!_Tcjt%Up+j&jD~UElu*3bCjA2;B zMoPnQY?W~|o4e+-vKT1`49r>b2)tO+5PWx;!^(p|Li=~(;AHzG z?{BQRWCA|$9ZM{yQ8j!%R45hqipwc?{PH0_?)_Er=3nHQ<^eUTN*8+%?=R2J>P@*@rOo6 zYCWgMFc@oP;QEjQP&*=UEi6vN)6OlnawT#eQqgkclDLa#CfZIpdS3|8l2QF`Uo$2*kf}l-wk&bT>tw26;`^P@aJ+a1ydYviCYc}xJUOli5I(T2V8CR-3u5RF`oCS2 zv*oF0Hyq#S8>j((g4vGE4v=uE4KB!Um90?F!UyKJF5ofP z|C|x@(8tQTuvuPS`ZvEs{tOl3o%w#WKjKmiQ=z|bta`4xn_EkbCG{WW=QZzZF^?3p zOaLMhd43FX*(-&0{TY%fyV2TTHvN~TDGhmgsYd)?zpnttpepeqoNv(b5|@cg^z@4^ zFGjfsOPUJJw^v0z9X`bl+(DVo?Lj<($cW3EWuFVhxFhK~_#HYi-1I;?QZHfdu4}`&`xfOH=ixOotYmjrH9&fG z1Z7x*57$HQoWzBd$!NA>+7>62ez> zgJUl?b;hp~FH!ttml(&CU?HM5VRj_F*;?*ah2yfG-*?F=*s{Fegk>M? ziO$(f?GXn=m45zGsz>>+<$P<>b&>Zk>9(Y6c5jFID^jpf+yxxiJd2A&eFf=!mrHoW zU7-r!jvMpvcDF^|20nD!Ul6cif^?sw%N;Xx9Lg_MEfK71^5<6j^CBeRoXrd~#IQ31 zL}54)xAgwZTB)IVwbQbKU&N8K_e`Td*$E?>?}ldTAT5GuRBFm%u{H9V81_DK1{#2M z!q_Nq*#=bNU|bqNrlH^>#NZr6^wzL+AyI_#bIIqJAD9^f_CIADrUNv`08#}LA9ZE> zFJ@r~4IYRuipc^b$&Me-^_~m3s{fUyrD{O&YOJ{V?Q`Jxx?@^j63`O9spj+h@nJgd znCQn60E9L&p6z?{d z%3#tDI32VSk^nkM(t7C*ddnjH81#%$*Zggb0^*)5lHAc7@jEzb;?R%V-RQ*w(46D! z5glLMvc%hE^l^*SpUd#0gNi$(@)92u&FuWT4ti%fA9JvLH}h%l5+?ca-wgVjvgVt* zyR*?df!h1;DkrG3-qZ|wso<9fLgcYJ&3v2d+d1?ZQ8M(-7k3|eNAwW+xdMgz0Nsv0 zy9sWXK%otzmNL&}Pb;wGqbFM{KooQ- zbc;$@M1ixLlpt@g3NZbAT}dF4#w&j-RvdsDI*2}F-=8J!T(f5dHrTSiL;r6q>Ho^F zf<_%?ey|!OJzt^k7eV2~rwvRd&z5rnM~{(fRDBwn)U#CBvacWNF9LMdsL%Kh;Tx%4 zT*mVb!6avKJ=?b-TX$yeREAK>_ah1Ec?`=E?^BqVq{3LlG9QiN$S>OE=0#j7kd}VW zDXwd#eLJ0}TNYZ%(O}}VMD>qFvh8-WiC%1)7F!_#o6+u?RH~Xh&b(MF5F2#a9eyZe zuBbwhISjRp$*o5^Se>r?lHoRCw6nE+I+jmFL{u2O^ljRT^K)6P$xE=+Z1OP+sYd>L z?;svII~EyN-Ut?bDj-{2^L2@Nt1+vj(`DPjf)QyB@V6S|hbtMLODUFj z|9)`3Zu;byH&~+XCA_`Q_U&(WSXh{h-1p(QACzf%b6j+LW7ic<=ANBpTrGMEk;Me)Arn(7%JCPPf z4iT8W?4+f_EzTZIhVV=}Ef|l}io$!ddYEz`_Q_9E?8tqHTK_mMHr8$!XanY3l^yJ8AVnZFEbKw=nME=Q>=B4hQu0@ev=o#-g_fF*?&6u8 zey|jZc5sghEu78&HnxYe~ zK{A%>jyA0b$TX4}zQnV+_F0destEB-gf zoN_nF2?-fKJu%-yy*{i4RQ}XUGC`7l0_B{^4$bSYMm`! zJ;H3?I0=4+xbrjli@a`IPpHj7CAc})jn@Rs);bzzx3<#vCvtaHzV8PLWX4_WO%LBl z)z#J}rmC~C@?_W42)SMEzcJTH%fvh%RR$-vh8)T_)wPx9XNzSSmK)37O6TX%p8lM+zlBwQEaNXy!Cb8}A!8d|D_ z)L$phf$8bXPB`VrDYUUy$%TqWgHwlwOKf*r77x3!w**Amwy*ECY;myrbh7pt}=XkjsYmhP71v7psU!R|#;%K!O`Vu^{0%!|f@6D$X1d~|B&;1g5p@vOAl1&1e#z=>WwM4@mZEUhylRM{X?B%25 zgRh^=g8xH-*t%lvX^l1t*|LM-?#fyfU_mxM%9WfccU%JD$?cf7ie2jAJhMY+COnLT6cH&)Z6)9z1?vnqD2hcYkX@txhNYUrll164%v(M{)}BGy zKdUxiwhcOpf5F)XI+~Aa`mRz$ezP+E8;!S_p8G)g(XUI3iKNO$#I5VB_<$f=86nwG=df6R!b`s15QhK+l4*_ zwC#96lFJ^hZUm<}pC#Clf{m|Z1M#9lKr&1)6)|P3hkVSeQNPpId%1XrnL}iDJR5N6 zL+|{mVf~x$pu7dtenqb+bFM)c%vq!!B4RKyhxW9^^zM+uZnL=beNPWUfvPI&mQJr{V{!2@lKNFlfS?J?6R+i$VGWWcCG#WfF4aQPLyX- z?P~+edqD7KLe|1ytQtad-m96ClIg$Ij~nC@`nd{`{yO(E-PXMEG=5+x?=?EWo~D5P zWfXqcZ4I&Dl9?_u-XP2SJQeZ$+)*fyH^-Ai5e(L@r5CLw8ha4 zmnvfCyx@z`3RYFdZ85O|$Ae-#VK!<@vW}>#_HJA}Vho*)TqQ|678d=-1}-^1V4Dh( zyp^_(n^8g?5%Z7^W;#%Q5DdL-N-P9(bZ1iGy0)>wh$4E+Ds#YgdE{h%wISeHln{5T zoG{YJ25VUVFU2M|0K_OBODFN_n>s6&ISlyH>OZSW_#0fi@5{Zqf*tdY=6=~47Xgeq z%!kP41Eg;H>tCz42m!sb<}FVndJ2d_ssb)Z>2w{WP0Cb9rQw*RB!x_;e)J{}b^nO- zk3aE!@3z^(9ezLoc;f-UY@G^|)S~O7wUpr_*|Y*Y2eEOeRkWvI`yz z$};1`R(|?P%6cj|l>Ef6q2Z9G>gZrbHe+Cd=&|16z-K0+v{7YwdHG+L_-4msfH|5D z8CjHN!UmDx%i!}kEKps{6o3+cKpz0=(M)<2E+~p=gB#LlUqZ3|)9V9yiy+(Ad)0=b zv!lDmappp-(D5}wKqunp%C%EL8ap}&bDoGAMGS!6oCgP3@`M0phEs@{Sr{G@5V5+t z>aM2NudSx0_IU}Hzs8yK7UKgm1CJbwu((bXKW5G>xfjbHX8!pjMA0UA@M0_E;54pa z?Wx$+Ckc?`*eCN8e~)UK&0PBux?Bn!PBA*~T{NI@;Ou;K_Wl*&bB79Lr^@SZxk#L? zT%nxC!tCT#g~Ri;jn~NBA)-7GiyZJ{D)LkhqxZloT)zHQ`Sy2%IPj4>louh~6Rw@4 zrX7l#>_02;k8yOOZJi|`5XHC}?I;%ZjZKSkY)9}_xmk=g%zx_Yf(n2o4`oQi1l zvDD#dzkvS0Cw^N^ixv1f$&!86u<*R1g0?F~z?uL=JB>OK2R|TXeEZ5q&|4+>R}@i) z#FaPrA#ARI^a#uKg@dMGq9P=E*FP&FD@DY{NwzIr8cIJtKF%cb{wl*76I=i2>%tF{ zculGvui3h%H`@%^I*~rIjZaB11qsInkEuZlj1byIZMZ5GQj#?4`RSWqTyHA#Tu`?j z3vRu@nQEO4XDG#GlQwFf-ssb)NBoO0 z@+yu|lpvGCd0lDs(n3eL1EXp*%D_*-fV_03##y@9NWDmIqg#%WUiP((em-FIl9}bs zDR^O9p#R78J<*rEw-erykuU&?CnM#58_vWSq<|v&PWC@~X#~#y|KhPpEbt1BmfsGu z{1emDma~=bvrvGfO=_7eFOz$6(X77vrF26pAH{dV!KEBa%K^fx9^<+Zkd)-A;=>El zHt-@CSy_2INXXl){kqPH?p3K#C}0;`0CM|%=o@=``v;&*uR|a;%IxMcF?MQdY5*uC z#VIbWS95KV1_+L|okG~3-N_Ox)8&y7kdfY>qngG@HWY)KJ3e6V6oN3?0m)KfH~IXR zSqn9Q$DP>nUTa{^e`9+S@azpBIxA;g*H62I4a?1XLJ6rbO=&*7n!k4zPC+rWjlO?@ z=*_`xB{L351PKgs--v{T#S$GO`2{K&^re+Bt?q@D?yC_kb^QRL*2qY;X8>5>Q03Ld z-|zQy=O6@|T>%7&*Ue_q$&Yfso~xQ2ch{he>}HozOs04A5&6|9o1>QbX0Svs;n-?Rl?CT>Un?CqC5m^k^T~VM6Dc?^rrZCH!(|_g4 zLynmM2Otr|Z2WXU9ZM^wi#G=E6!Si{njL#At9Sqm%oAGLbN^DiW!~y)eu~@kH>b~% zY|Tx>#P%x(A{F%Bu=Io~UNFPJ@=T-ppJ*vb1+v)PO^6$we8m&rB*E@@%8A*HFbh(m z6HZR97wipZNJx%>Bpvy|CEUis!^5!_c_Xf87>4iwKL{4@LIY7XHCz7APWfI7O3hr~ zd*+m_WKaw`lVnM?zs-*?>QJx4sbF^E)pg2LIVf=m0jJZKji857({vW?%!1JAOVxG zmLZRrS5FU&1p>fZnxJ-O3G?(hi&Xl0X*ds#RjrlvV!BMbpbf$M?b-8MU z|Dq`BEVnX6&)yMDIURAUnK!jiS)1*1Y!>>3%!}!z=Ww(oE1B2sd+XRjkxHWu~B2R#GssUHZSd@+i@ zmD0@DO<@Sw=^oM`pWNGiik#cLI=0(&Kh@D7TVxVqS@8Zw$x$H!8qw%>%;Re zPH032HzvVXfW?@(LSezBG=IQtkv6i zCMixp>RQxVEL;zkoO5ZKI&iC4jZ5V%lIrBfr4a#i+=qijSx%hzvl}?}&yd;@J(JYpiYhGFg0C6(9q@Kl z1izt7cnaxS50XTCwAgibs0>RE6ld+u*a)gI^Y$jL=2y%4$FZrl=jtnjdea|C2hKkJ zP`(Xc>xs_i2<0(relp_(kq!f5efJTr(@|%npVroD?9ykwHy|5LLAj)1URh>5ngnIy z6E`(7YzrPE3|)zHD&KHv#iz|ToMm_s)4y6iAPOLLJ3BktYg#q_OKn&KJkl~k&|R#Y z)*QR-e!M6_7{1)O{w909oqWdLVI(}(YW+)K^O%Et6{$8kHu*AEPJ%NK4^ce=>1;6L z)HC3jMSz~R!;^C7pe7{o;x|_L$dxW%FknNd4LY{(tK*$X?UG<;S4Mztx*fNijs1B7 z91QK4UZY#%^uXZ?Qh@g}n>DGw=O7r+NPgqJA+5s#bd%0Ch5xM<60hSDM9d6Kl@k>< zqc98R|4w1aBeHo=*t3+=?Knq0kM1KE101e2Oft!)nyFKtF!-z!UU z+lM<=y?@3=fM@D3VPc~y|7j9_J@HFJ#3o)&3YPmhMc0VkzMhpE}f(e_|6nbRuX9kw%Mh6PBJSCx%gCXQz^21VQE)uSv1pm$(Nx2y~9%6c}Qg zqueB=YPp*^_fmg^JC_@XO^7hb{3df1&Hw5DQk+KTCU=e!TegT*A&{?WhWhAyTJgCP zNqFj?qh5rCSE@PG{mQ*E_e_TvctZR|;D@XP>mS{v&VOp9$B6VZ`t&6`-zfp3_6``j z*8@*PI;1XN8+RNHn)_e8j#;+voH=9qBCT1J@J}vMa1D)IuLg%Ywn6YZ-?gg*>i*Qn z00DL$4v2QK<|#6H4A|$M4_iImB-&bl<=(Ds#EoAF->WJ%c{D3aY}fOj zV_1dO^yzZq5L@|h5Te(g6gxX20c6^Wlznp$H@&e9`!?pNAZ_){dD6df@4F!!#_hE+ zo^HdHuPimEZtck;9m~FSp(Cv~SGKq$0p#1c(N46cY3+JD2}Jle#!;V$&R)$uxR58N z6#oOLCFL5scD}-PKFyS>pC+iEX(M|-MK?Mq%h+vTkt;IndOEs)!pIUEeVuv{csdgi zw!p+tm)deKgf_Om`7FJ{u71~Z@cxRR(cnMrbj9w@1=DXH8)Y6q7-W_U%H}+x1Kn+9 zU8DR0XSc(L-#H2}xmFUAD;9aK=udqRw9+lPa@)W1<%k!4vNoCPCOIx@7p5z?7_6iFSE_e0P#ZchyWbO^tfADau1-K7k(9658)Q>_VL$0lh zqcOc8v8Btwb40nfopA)m_3NCgb#sIQD5!4PkQ3D0r-c$V-Y-ny1} z3&%S7=OS&EcLJC>eg6i-?|}v~3a=5aP_*k@Txab!qEq_#-^nkc0z1hUWFxx@XbPAY za(0QR|Jw;7*p~KO&cqLSy{E7MgQj1u2Yix!&DCe(5~d9%qBstjqg6huP<(-?cKS|- zPecWNgQY?oa?}2`o-UbpWPj`&cYp$x+a&C{ab}so4V41axjtwLcVFt3AyUKowvEO=TxrQZ8541l^t>nA3oQoBC`tRffSv*K~ zUr^kqlJkc%;;tkeB*43?88J7=cHOf5Ij#YZe$f392`ykyN%S$?JM{k_yXqS1Ao=E% U9nqsu5b$}asHspU_crK%0Z&S7R{#J2 diff --git a/icons/mob/clothing/head/hats.dmi b/icons/mob/clothing/head/hats.dmi index bdf9980b9f2f9b3c2c0f588f647d495d1f109554..8ed78b1c1617315c1f296c0aa47eeac6eae2946a 100644 GIT binary patch literal 16609 zcmdUWXFwC%+Ag+@!WP^X*cON-hzNoRN;5=7#efv4Qlp|EH6kTINTQ;kBA}s37o*yK3S~6r$G-@wzxH^?-J9V*E}z2v*&`9i*dyWwKaK^dnb76;|7OYgi;|A z>`?d5;L_&WW(c&hxCV2C<{CZA{bK7Zb>pL1j+^G1u_@CGG~D<~qBqWf_`BXd$=*1| zZeo_kXT^Kls?)dM<1J*I6QNmM|FbN;vPR!_O3Jd#JiOHrWt`(&xr2Z9*1|SZ#-;BH zO)kA9ZMO=x_j#=_V$MxmJ)0u(Yh%S>G^#Kamo!8 zt&yhl_@ux=Pwcj3!BMvk;r13&35Gp-}glG-1@$RF3WvKO##aZgxU zd@JLGH?R_}+>m1mFhP)bN_qZJ-O{jlBA&BaVQY~iBy>~=cJ;EEU*aMO6=>F9D-a-$ zj^N(De0pi?>z%t?N<}_pG=;nk_;?y4|GH;u*4Eb&2jnu!tTP_IoBxurzuV-;3A66k z$7efjzA(Knp~T8;Yf9g5fAa)96$}RNd;6ThaTrW!1{=$^jcQfccQ&1fxIdu25y%|Y zLe;X8_e5SveLLYv@*%`^Bx&X9$13XS8<@M>CCyW*r3kWi?eaHKm?yf}VrNwy*v_-z zK&C@exSo-bC8Z-NIwn3xDg`}b!=n~dcO>>@MYvGsOMpTBeSNc`N_Ab-Lj00G`p&R8 z?c5rcV~krHDq}k|8K^=6=-wa>>3a!i^g&{w{OK0@f{On7knRXB$U~?ph06`xrzIis zB2a5fX#*R>+~du2hSs#w+vZchOrDHa!TV-%?Vkq~(E7p_n+v5A7m?~-<4!w&9_}LS z_ZW(q3S{Pb*yMnCgEZ;A<|#r?DyArugg0;ANHpK#^{5P5B@Uh5J?mP8V#R=2#VMk9Y(6Q$LR_>0smEM6GO!FS zWKQYjm%zCbeTSXrd$S@meHT7?kgDd^I-vwfcwlO$Hm9wHjSE~nR>cQ?AA>CsFnt0J z8LHd~;UpSDC(V#daD zz=S+EPHul{Nu>25XO6yHj7@int-T+>TH7n}YeKz*30|GJtV zD<(v+Ly}@OH*Ty>#g0EK02ztH``JPZ-p`4n2I`in_9G(VRhWwqKPzZA5yX-Lxa|?w zRnmK#kWf8#JMc^4D)3Q%>|7s3CW&yNBrs&=Qi=Ye>4O?fY%wY_v|bZWIn{Czf~Wf}d4SQXz+ z&EVVyT+5sn@Sp;OVUD@s*WL+AO{bANZ_`_?PO^*1&j9oH)ea{N=ZgqsmB^o!rO%V5 z*1o8EUL1%`-xt8}g>o0Z4tY>cRLMebZj4`1nXJ)I0FdEplbsUniE~UuW-I=bQrI+h zVs;X+r;t%@ZVtn(;(c8ro63M?ny~9XJ!($MlZ9R-yk7h+{w1`Kyom#lO>d{Pbq;Bm z-Q3jkvUq*F%un`Z1gZqM=s>ca7CL{!d%UUYDDrc%B6pBb<(|QB$YK$C6QI6O&f?s+ zhy?m_laE$lHitVYc;GnVlgr*cO9|gSWRgb#36#8e?NEcFFPN2>d%G+3>gZ#Av3+^M z(0Tk9I&x+zG5Jh5TzlN2lY-A5VC9BfB^ZgkxZ-(!dA4NbBx`D4LYSmGIiE;TS_>2| zdBMi*Hxt(-VqnPxS_uo%%c85qzi}sWm0&&m0*aruz`e2#1o0l`Bqz{q=D+8%)ojtF z2Q|-H;`$0LgSG5ya;usTI6F^!@WwM@_l|zwZ3%ZTss?EJ5rz1P$|7A~AQXGFiqJ zjj)#X`SEbcXv&XzR18{hIBdU`C z97he8qL!7P7D}`dl)Xz&C)s#^drK{K`o6~g%(@E43MDQdgQZ9!qQK;5^>GYDLX>pY zC)43qxOB+jQCxw@%zS;XYb_P@WAB@Q?4U%1rR%`g%KoCdZW~jOdd{!a+eY*JQ z1$O%j%Iuw6!Ahd;wngbjVL>J8DZlipdhnTiw0v~{LBWm z7P4`wo)cHSt^_0-sxMk2r5hC>gmSiuQ{jbH**qi#)7hltVq}mSqhK{*#T(p#$R4$1 zevms&Dly*YT?R%-PQ*xz+{SF*LJ_HHir#H7uN_@&F%*>flUn`wd*{x$9s^MZFYT_u zOxi^0&vvd~Ib?~v<&gw_b7orW^`{iB7@k@V>iy0iCJn=@Z499pfCOTu259G&_sT4e zP7sf5&b8+i-HHj*7xLOZO|=EQaU9G0^C=xT{wxf*(kxZ-21{Dx{z|F$UY83R+ukp1@C6Hzls;ptJYa6* zr|I%h$jjLCW)jq5qvW+J??`qxH;<;kcP5>X1a(~Ov+$s2)PeggJiICPxSlHUfn9U{ z@#>ywP8|Fc;u>H-y%D1rqX$Tfhg=<}xd~<3=6Ci&hX`+Wk!5CnI}2DAe`~>=Th~LO zf{qEAIZs*TY;d3R#WxBuVIP$_RMtO5-&x6t4WZiK6JD+v)Psota_Y(c6{CH z-F=<@M+>xsK%FTbV7W8Jx!}1eQ!g-#2$j3#-fy3D!97`N*ZSl}uYt8A;Uq&QyUe8! z>^~4re9V!)a|bW-N(7V0P@Q9|r+5w6Y*^Tc06?=|cwi zEw=2A|4?kcVqKJ0c!OKD`yfhYs&CQrK~T&*+HPZb4`K#895hoX;JLq0!xzY7NruiO z;p*}+S9!JhQV__jWzKTeMvV_!n;|diqeDQ9Bx!rj%H=Q=LvwLs{aS_(NP*&URp-GM z7kRY+3$3b0yA#i0Cm|3W1UKg@u+SBg83_{et6E-Wrl$Ea z`YH5uX8K`|b9O3KId&N4AA*FSRFlR0(Og-<@^e{;`ZyfNeO6xZ(Y<=AovDkcK4H6(UBx(@*BPqT;;(fdySVh6 z08()%+W0=*UsZi_HQ7O5j=1sF?<~63!|%k2)bfv;+$A19Ykz@P)L6XZw&sybzws1E zQeI`m@dl<*qI$Q&!FTC%0_5zJrRm@TUgH?V2&YO*xE5bA45s^fZ<5;AKS-@)jBCHBim7$ep4&)rBy;NcS|>+m`F79pW0ll!nccM1uK{s9Qp=RLrlf61ot zV^_F3dN^oPgt*m_dwV-#)x4N4<@|-X6M=;wqOSY&b=YX<3l$n*vHBv8#4M6B>4u4; zV`ffH4j8ruilf+oE)yaaPs9_@+i&fww=^|5wf{ABM{gG7Apm@f$1IGsk5kfh-f8pQ z(G5BIBeVK@UKY@ni}~H`+rS@nK9eaI0p%zWZifpv#6yf+Gh`dhJw^R4ZjM0fbDV5w zNO{=YBMYG&n`Ik{&&?gg9X|%PHaCxU5?w9P%1nrvhnW}{lqwMgBqGMSM+G&XZu*$? zMJh!iJ2U5ICxlsC7|5H|2FpQ;v%rFkM5XuuvDM&2XTOzGQb9|RdosPN)(O5g9+JTLkxL~hJ5^J2^kiU# z7t8C57vacWvwgM8jl;KM^HPocEb$o)(5f=fu{#5$?{=tXnd0uDoROWjaHim^hRO&q zR-dWs@%yOYUf`A~ef*BkS((N-RV8F)CJzzZ80(}LV1O&Bc1fKP=$2+;6RCXUtC>J@ ziB5zAP3Xou;<9~z3Lp=g(Ct3ALZ9QN7 z@J;$p+eCl>T|Oxc(4EEOA?IIM7u|<_6aR+hFr9&*ZhoY)*nZtp4c0@GmF|0)V(AL( ze5Hu&W1m0YuV>WxND=~_*SaT(fm!oHO~L-<>s93Hapko!);S**C^vjKLeeFth2EKS zF2jl0$1BGgIVJg2X>%VHJ3`pHEWJK`AM=cy+|%amsnThj#}b#6?0`9Lv|5+yh^_#) z2bA29m*jl|>$@3g%g1CmVR}rpQxs$IZglhl^zm6(loi2Hx#Jt{QNa%x7?hLU5il)S zD+vKcW#5ZkEH)jcE=2vj*jDBH`jzbV9}I~nUOSkLNu+4NB$xdB)~Hon%jjhIQ-f-U zD(BcJpC1(Q_{TC?6CiMQyfMQE%?%V?-UQB zLzOI3#3%zOeQp&yHhn3H3cj{fcNG*0P4Owrf^aAJ!Xwg&llHjNEGdjlS1WH1dI$F> z$JM)O=(`P?F?6USpB1z2!%%_|tFL4D#1=l(A0f-auP6xJFhG32zBW0vkACJ(R>~doR|A<#U6eZ`o}gdnlgwGq$Mb`D*u=jA5dNM${|3RxK+VHp zsa^wswK)|zIeGwV$3}fF81_TM;sKt88FfB9H)AQ@yY${84MgZOa|QSoO~MG(ubh$F zFVetx_G;hBI1JCw{erzM_mxtpaTgoKMav{=uAzFY|CVV_P{# z;?lDMY`Qjh4xb61at1+@SWts+aATq(tk+W8ZN_dbvi@1tB7>+Wu8t|47rO+oIap3b zrI$Bs1Zc_9*EyZnwy#k6nVG}+l0V9{LhZBiqP_=NQRbUi+AiGNFRgR%aHn+(I1b~t z_IqSvzft?lxG~nAu`-DQotMi>A>MBrVg|3?<1tq%>)ZtNXz>KVeLK%By(vBgam*2+ zPEn5U_vRfwIpPMM`yo)fv>6%5+0b8soxg6y&S2;J4qnFvj6QaW#PC1UJ>m0E{KNsT zfgv~&gk9$gS7GSpb?w+L2Bj^|^|9~_441}Hhm;p8LEIFFXY98J0>|Le)1F-+d3C<2 zpf>pke<-;KTnUFr$`bHru4&4ZUIs+QXHvk67-dtTVAznAT(ZFxZ{BT8AK-Ty@`Ah^ zKe4zklIfqlhWGa_C0A-%qm{~`zALp8g`KkuL|7zvQAr$yIX`@FUHwM{+oZPvYMqt0 z-)@EAM7OODPd@VlTH_zQvGi4m&Mt3s#`;$@dxe<`aG+!LR)ItyoTH&R{fs(8&D&AO z@Dk%6sN}Qbj*+9Kxz+1stzpmkwX8);clUhCu{*$AoIG>Jz>Y=*!!&R2_di_Z)-9Ve zR83ghGp10-V<#DAo;RAM&LA8u6x^f!yBh*88^B^+`RUp^)7Wx%*9?%3hKh$eJi!J@bgJpNM8^%DmgXABM4M= z{KE9~gI)PF`cYWN#f$VO`#GqcI5X2?c>GzpRIfd?ygBia6EN$V&;IVP(@IJzxV?2e zT%WOh9GYBb0+H?`(= zvsDOZmKX6e(63TR02mI8>Jjgfs1dQ$gh0`VG>oAX1x^Cu5?G7*_q3nNaL%N)3|3y_ z93~8lR!`hfQO4Y7Zf4k$M1D998mAlXE8MkCwz%XU5gaoh&bgTaP)#D)5odG zAwww;9N7zNr6@9|#V*aYh)3ZbuPYj>AF*JbhqI=|>XA(mYI1UNIn?1POXd9#S>W#U z)@|Pa=a{m6D?hg!sH;y(NPncBM~OMJ<}Ee@7%#ZFa)+XneUy!tsHS~qpi1`~*e}@OWS8*z6mU=G> zdz~E8>&0Q4VE>A%zN2mb7D&1Cg9@;u*=_(5cDVhdCa&(xM$dP^53O#3170XNyR7WG zQr_*aeAeZzH4uHJyja0)^*6dNNYY~{dlX_Cm>~E-#j{tfRUXa)X_r~;c_wB_Up(8c zy0QsA9+QMiH=qud^OTvj z-N?wuD8F4zeI=WNrgXeg7)tvEiARxyT4JZckd#yZ}E;Syt)bvpas z98{B+k@qO z;Wn9%)Q=#AUUAMmDLXn#-tyV5i}v-K#}VvT5jMmR+~Ii;hzsk#jQ`stHvdYl>Up$> z`o_F47=1FjH2Lj}R)4jVp2@c=mq~_cwXaHdsf;r)NryIorKT^>x4O1}NTulE(kQ7O zG)i3`95Q~g7w_f7S{XodRPW90`z58=^O$EF0gtD2Wve2#;IVzN(q-H+U)DOY3XuYy z3kv>?ROu$iAq!vb#CA2on-^Sfc52HlO%`>2Yl*AuDc=yU;>#o7DC-0qc?-VA>c&i* zg9kjcJvR#Bw`hy%<1UzacbP{hL{ww`3Qs#Ghedds_x9U%LJpv;r1T`F~=|0 zM*yuliGSH_RZ#q8+#ra?0m@)tIzbICWL8(!fCYMLs>*ABw!R)4vkpZ z*$cLYLhp{(hH+ohg2WFUN=I|j-^FsN!Lv*D@}(M=az#a%pmx`@)S2`8I_B3AI-4Sb76nRehpvIl6h|bgR7wlM7h1 z9DuhvAtltfXMUi2TtVgIz+%d8yCIfZt=}43wf+F9s?G)tTWgdbO;U!{DG0%h3M651HR0-9yL}7b@r1N?}zyl0uF_(g|wkv6%k4B@uvGPIu4_vuuRiFL&X$ z-KqXS4thaS=RZ3@M=jq-oID4>?uo;9=(g?uZdw-IR@X>hh@8+?q$S9WXy! zNUpeF^Qzzs?C@#L*&N*%PS5xM07It^=T&Q9HXI*NbJK+#M6ZASzh z_{#(kh+TH@y`%>1I!pQVoOm7mbIZt>G!{4_8hl`XaH)d8$n&pSR4w3m8i5|EYq^c~ zj1i9?@#ZzkOd7bk13n^m=a#=vQVXCYF%n_D^kC_>dv`)z5>U90BqY7I*$Y5R z3{2XG036Je=SE_ks{ggBjc-#K`Eq_o|1Vr4C9qE85sTlcdw?6ebI(=p-O;Z2J$qQc zprLy8F3g~?Ud_zg*szAYpiXCJZo6FG^?cu@^cx6EgWo?N1l3fpd`P$6-IuWR97}6lT<3c#BUO9YDEY!s?)l?N|XQApM`!PX5&IYKOff@JA(%I&Fzbmn1|vo7I&w z>}^eBx;AC*&z{LA7_+x&QBon>E~zU3rn@FJ`2qlI`s-~=`AFo=(ckt^T2ME{=NJa< zDe%(5>Tlzp3syf1!vY+U!ui9oskaXFwPTB84rS-I1O zb5r3jzK5}gzmEd0RIqGSuDZ;%9S-Gy=m7?E(-qMK3iG1ey<@KzdhEkwv25~S0Hp7PXLu_BJ)!X3g5QC_`CptI{im!fkSDcQt)4pM z<>+h4TG7owomX*s@R#IS#vQ)t4Fn&jes{Ivrv%R34V)!9-m!lTmJ5)+F2nm8%NFO; z?0czGZmgAp#f&Nrw2FN}aG4<3P@x*cVz$Y^y3scmOsV?f`r7(l5qLYIz6^}fu!G%D z;WZ@C-U;xZHeUi>K1!!1PiiX`D0ELra)+2@#)8pSdu6oB@il2ulZ>cW;M{n=oXpaS zrLEO**sz6Nj__#B=_NKS)%a9_q!T4t`A_MZHuogsu{W5CUvEX&-#Yis_lEuQ2pr~bkObh>2uS>byC z5<5s&_Wh-EE#d`|&^}4Yhn8*cy;l2y^dRaN&Kg{=^r$0Hr|kFPf+;BL$%n(kT+W%< zjfiR1ie!mTfWez06H{+qPyx?@USmq@EF}B_XCZ z?S1-f^};^DBlqE!MsJAEuY0-WD)yJn zn;fuoR6Dq)Pk!UZ%jiW!_x$O@^%0>?ya53LiT=Rj==Ai5#DQGv1@{#ns=?m?mWsH} zOx@FE)+|?eYD7*U+aIpG@Bc%2J5%RTJ4b*tp>1ug(wdbL6Mp5Xc;%ThrMNfGUl(JXHXlpn>@sQ0LmOSdCMzdl06{n@ZM% z7KUmqS&9qR8Q!dQ4(e|01%y&07{bmnU%;l!Yr%z;1(!kC&7j{<&;1dI_DO%BOIBii z6RIgbi~A#c=N?tQgB%ahp>2qw=k8KUVNf zVHMxTRPW}0RypbF4PnQgQb>FlbmQI&4-}V`+=&HxshS}x?Akr0CF`(vFK*x{UR@G1 z(4TDgyZnr?aQrm~#QBbAl8gPX!KBp%+Qk$gmh1%by_GdKQ&k$8&$;7m%DD6tgAP_n z2wYL@AgpTq0Jz*GM+1g{LV#eSv2a7utY>2G|B7G3J%(QXDx5rk_4q1P<=tlY8gNi_Qf|LhEjd6| zS`z9~J7I&JquXStW>z?i8{V}`T={Mh6+s37;GU~!?)ktsQn^sWaulsnB>v(_rk~#=oLj>0MG+8r6z%Im58Q__B8F9tIJpE@*R5Tn#857a4B0K9d;H4`+6=kwR{)!FK4`ZW@GN`*}2$ zSoq|}ilnNO@?*a*V_!i{4>l#RDH!|PPN63+fEuCD?U%sEzk2gj<#{D*pep2L;u6I1 z)3qxK*8Xx-?ygn^Kw*qvi-TH@(tv?7PkP)V<6ufX4`GbAs4d*WMkI9zNu{7sPbTW z0DVbSwE_GM-9VC{8?yb20Eh@SeUk`$QiQ$RYYWw?2ru1oOBzuyLF9(4t{E)c#+;gR z<&AVN%D`$BoeLjC+m%d>9e)wbSj`CGmR7g@@GXBB$O>2tkS_uOqRCM|bAM!MAy+cfDoBTc6Z z)N$klj6F0JXapo)$O3Nrapb}rh%`Zj4Q8h#$IXTJo0)G|{8CfMQ{6wb zOOu(Or;1f0ktX5x$!jXGckZ$O5Lo((Bp?lF?s-gLT;*)NBrbioX~r?pTA-x2t`e5cX(FB{ zYjLQDB9jgr4D=4Va5LK8oa?pe3FCN~L-(p5F63w4$F5x)lHaU}6PY`H{qvEUb4Z+a6WimzA5v@O4+}uU=bXl{9vj{E|M=0KUTpntLX9 zAuY5{YL}2s+aBld!9Ukis%C#PlGmLI_bAl1JAB^lbBXWAkxpk6kz))ofu2{hVb3`A z1n&;WQ*K3jjP&R^-&QiBM%Y+qJ9R{!MlKK>w0vjFnA1IK8GY59Q{|sjmuQ5Xav}b^ z8r^CDnszJYCuz56yo3207M}7$2(u#m<0YX<{VX?y2rTHptB z%x~rCL4s8oq1h4bL%z)yU_GA^Ej;dm4VwF@0GK}Wo^o3ms+Nn@14$UC6u?864g1Y% z3!--d7I6?3&z*|fl_Y40)INucvcx1bl9=y3QkGwyEUUg28I`(1qGr@h&ll(3TCopq z;z?Yx8B=H!QDoIDxe?Hs<|2**Kh=)kAv=@jHP0k!IEV#>$(D`>Fvr`(gzdZ_U zfot`9&!(hqv&lVhsO)Gni;b;m{)CitcB;KXMtvi&H-O(aZ~@3}T9wf)fB(wWwKX*L z*nW|?ygUVxb*1sJ73iSoJ+ZCvSh>MTrC-U^gj;7vybFnW8cEQ-5qh5mqq@A&^8N8W%afr1{u$UJn=^S?f zTJ4_yo%o30g+Tf}(~`7qbfOkOoMgVFVDI{{o#VY~8`U~gt#9ptxsMO8eMETe0T`t6 zBT*k0VAo^cdb;{y^Ve%4yQ$O8Xv&l<>@XSCDFp&<3OBU@I~B0} z;`}tDGPjjLPSOU{r(Wm*kADy5G921T1hq%70Y}Q+ozK(eA1U3~*j)>rZqvRt6pPL2 z$w@xFP%=_p-7HxPY4=`8NmUeea=Ub0V)p>pF-gu{FBwI_=!9}gioUlGm`~eXLiYS}RcVAyqZT^JKnUJkYssLpk z)T+5vEOFz6OuO~bFsac`jS)&~85sVs-E~S>*Gt%3)oe_$D)WVxs;}S2>n$l7JEtiL z?_RsD4N7)&Un@_{_#?6>W9|CYfVJBZ$q<=qhE*N9^a?_ve8*r!jD(EQk*aAbed4A4 z+nW7$SqF|j?KyM@Sw`dH_%Vfu<$O=iOb7e+%BNtdqX` z@bO9PeA?l_Pf!o%jARX?oRKf^h{eHF;&7}!Im(2#^l>E3q?1YkD7J6JZ7v}NcKE{V zm&Ux4wE&rRx;Q;}knKt+2w=};C4>Qe?bcRSR=R!6|jT)4AVqHj~Xc4!N>0G1G~eEnQqo}hi zT6F>Ej!VBwj^b<#m9xQl*&nSQKYADArmYh(V|Sc~4oO!a*{{cVFT<06d-8v0CwovZ zy6QqsI-*i<0NGd6qKIR<0#<#foPKZ`prwXLX%(F6Mzac}T4rV>m_bTqY1?Ra`vQb8 z%eoHvQfx2Wx4LzJg9Xb@Kt?v0Q1w=!o@Lc*=^WC9EftZQ^q(NoKCD zq7E@)z?5c(q@OQ66V}8@vX)iNv+Rj~=M*PsWmjtXVmGV~@#j5^$lEk)J`{96O3H4= zrN<_4)fz)ULS8zjnkxy9b?B74wIic7CieD*I#p}0-xndcqX zQl=P*IH7ceF*~I4crShRe!Y}XE=_3rFPn2869f9}b_%Vp`VQm@R4mK6BPyck4TFbx zOn3gZkb?SqP1-|6*LqTIx}!zI(x3A^ zno#38`DU%u;O|EzmHF1Fo~=m11O4xts=VcGd7gFOIrQebptW`;CP9zN+Tgrr;C0j5v6J5~zvXmop2 z!T)@dpj;=^}f{oxI)R=hEpa3ofyfY&tG`8OO?@+_< z%Mm*J@lJ*RBZnARYo}TV;g!c5wtIQVhjKEL?Vb^G)Wrn4E-gLs{=ueU|1#=$Heb(7 z97uS6>NimM%R|!0?kA7^Ib;u=m3}sgA#Pe-7ZHKteL(FD;J6p2yp#rzp%{RQpBseg z*hzE@)PxJ0o0;V3OU|rc_~XBFUM>z5vMXsL54|z9;JI`p>IUxIXyDac$HVZMJAG|n zFPrI(>###r{&`^Mat&`gRPqz3IO}QQk zU|?x7>X|4Q26xM6PH!6MlSDUIPaJk5hGQEpF1v*Z<)rWg*_`*l3de?%c`0vqsWjd= zxm^A|@Jkl+iCMo2P(!Rvt25lKw!LQ?2dch+#eNYaI0%F(w^`VcEn|r-+9nxhwugM1 z_%;4PI2;bl2(NzXxA=dUXM1%O0k7R;=6fdAqJ9yRl$> zVapRK>BMLcZBoBoZD#sI!ne;_7`;M05*iyup`?DG>avbDFP?bG?)K^$W;g8@GPKdM zKcv2KyRJd`OD)D`4j6yvP-}mdZe_`p`Q8%&wm41fG*xZx@?*}CwSD~uVbW{cJ5>j?*KU6Q2Wfu&u`BXsKmgFdmzim;AEP}-ft4fNMbE&qihyum8e_U)K}-hUc}{+87v zfDOexXdyx~zefCmTal8$Y;zCbO*iom&I4%ek0qtvQi;5nvhBZdpr3lJwzsu;LwkBv zR6W0e;Y^@oFDViMJZKun4`Gh$X;}lh%JVOhYsyb&Hk+Y$m*TuflA9%zUs%f$A#W?H@JX9KIXBvjSxms5W{tQ#btxQvt9-&;sZA)>wuk44_^o7$6s^M1++Y|uSm zf_a*~H1J`~5`AVIac#RDKI5M)4(Oxu@6OFyB>=3{C0Itm|4uqU;a`h#e|CA|`L-jw qnm}*={Clzjx_$eO|Kp@H8@qO?4?sx8Y?mgo-&N%n?#~v=+Ywx|vGw1Wnxn^G9)4Ox@ zFyCPi2y_&B_m&|D#0E6?{64rJ_@}RbUC3Z{Mnv8(Frx+(l{mF3yj;=Ab7~xV?33`*g-hLO5!A?+iqSGYPNRh2^{Qs z5Sm(^Dj>HlIry$D?db!xyQdGm2oQ&znQgBtGZp>G@#b5W@^nW%RdP7wusuP>$nB8< z+o37@3pG}0cG6dE)x~VI!ZcD2in?FF;)I?Qh7!eOuYiA?8}YdC!qj~4lbd}8qDV#g zt1#01naAPbepv}V!fP#1S!_f<&q@D)%kt+JWDh2*9l9GbY3r$6p8Ne#n!&G7;gTiL zkkhH^yd1G`59I6J7U}u&;*=Y|7GY$$S)fCj2VwB$8pol!y-$9GOs>2wD>t~*9;z`# z6dU`k;w52SUWPNcak=kiz{u%H;tz{Ny@Nr{&-pRc0Sv1G$-9+Pzo_%%I;X%(Z9b@o zW=M9+4UA_71@p)!R=SAdFRwlry617g(vz$C5lJABaxC=Ljr)PaOJl)-_XoB&SA)-` zc%RyP=+L?cUR-mJf$(JW*R) zfqsj>49aC>hA9K4gA4i}t~72e_GkbPDSQ16Yin!sUHN^ZVS6^&WMOY50+wgCwi6N3 zNgOmm^iJ#aq20Xa&`W}j%niM%5Ucz5Gl*$ct?6(%^HUmO&22w^T#0Sj4aK44@ijx? zc#0FyEiR?sI8M|lX%B(-+(={@o|1|=%6>ALNcL*}>Ui)jdF1ExW5T?T`Uv&_`Z;X^ zIN_?!y69`oLA9f z;XaHB_%G`aLrg$ocDGY9hpl!#7<$K5rI>QupMlKY9jhDYKX(gsJu4+>_TxfNRs?G) zI#X3hBouD2G5i3q6gKEK8nSrvxHa>4V>t2@ZTL1FK_~gF@A`BVG0mKwN4xKkiNhO> zi1uw_`h;5vMZ|2ru>jm!DdTlZGHfu&j6m{VEHfLIu2a_6%Cd@JjZ(1f7npUl-l_& zAiC@0R)ipKxHt}hmk+`NpD;RGQv33FOYc573d*Z#RhUS3cRNIBf|y&-KSHb=zd~x7 zX%j*v1&j)t(TA`A?QWp=$MLa~#o({jc$^PSE^akdw!hBe=3J8_XXmzx5HI1HMzzM5 zHJdI);9ct&tkKA}l7X9|I4EUYbR?y>BsjIJng_zNIPoz|g!<#n-zhcg4^<9!?9N}6 zrPlvk2&rz^3bKNTXXeeO1$>m&;g=jyQz9<)>uJropc$RWlTgFvfX@7N47xutyIw7) zZN$hNC6-Ji+!L~v#8&fsd4CU5k=r52S2)&BGa%%ia9Uk`lSpY$r~a_sTpDsm&&pm) zpZ{9b2oojB>UR#2Xo;KTET?KXH*N9zb_8`LPq(hPA3pJ#DdR(~H*470JSMX@h!NV!I}XLA3SxN z&bTeVGPfu$x>RLE66m6PqdcrChAD@f4^c!~iv+RryCSvLxF!atE{fqa0KYJ_X#+Jh z9<42nL1>qHWv}MBK<5BU+4gj7eTOVZ@Qvr;#Set z)P|E>B+7Yca)po8KXAOX?%B>Y8x=r6^bWA#X~+WY#K?Hdr0R>%C!cL9Im7T2{=V>J zN`o>}yf4&Ya47jNnnh7n+wP)o2^FxZ=A->9iTBDKjv*%)q8sCfKV|JuFW9 zZ%D`B_87b_yG92XpQE#>bct8B+F*|-(3`lyl1RhV_$eBe&jsB|B} z-VSFcxY9GoF8zauIWLcATHcq7_dQ*q9ZRO*3SubX*t|y0-JfXn+2Y_|k87zRQNy$t zM-{3ld)S@?GB0#(X{^-frDYM^3_KUN{LzF7Qku{}0t3DP9enmBtc|MUi|-pazj+_p zi!J7{*IROve`VQU@^$ei>_#dr>WILOX^=ji1X-E4%hfe62;CfyP~N$at{&Po7r>KR z)Kq)Og!@8XsIUb^#AR}nSCsNq&aa`u91<#Gk!TIS4rvweC}99=>X@cCl8?jo8gyBX z>1%r45?`TOmY7w2rO;SQVPFMw3nfOxhdvaV*@Z_eGiiFpJVZ0IS1GjE#{-Gk?d>`~ zS|J#{YwJnfN;;PE{pR!_j=^MkBgKg3P=XWK#l|e!q||cWoc@E|GeO<3E#qSw0i$E& z7fs@LqQT*zK?T)>hpq1$r?f37`=tXziN7H`vspR{KtmKkx=I%g2uv-%1iM%WRXHBT z-~~CYMlQoJ$`pQarxV^cpLVc+E(}2xwo%*WTW)jexkEE)z~aPvlKtK6u4JsKO+Amc z?cq7h4L1<`P&*%&AhZDNR44XF9`G5zO-*%yPTg)X2}spdsvi9ZWUG2XB@$Q39xy*} zApWYeqccbMO8{s&N0JJ(QR?Rk{8g?1%cz^8(nQ&2F02!cty1zfICd^!n5VUHWif@3 z>l*{aE{kgcd7;yjo<-Qotrq_R_?B05W_@5JdK(NLKgkyieY14+LEg7K30c`b^fu?N znyJXO)3l*rp~BzM7j%Q1Go(|uu(_&o_t*nY%{!6d`M?O+8EGU}IdaPXStHknC4-H6A~8_h4D16h1+St zbDX)~X@vf8eoE?6-fqcH-x+?5_z!|y!_UC21>O9nj^Ym8I{4}@e1$^Ta~Lba{6v&Q zrJOM_e=h3M3rOs*;g@eiPI@o+1Mn-_h%F7Vd!;f3*}1X4%nY?@boX3nBUBqaPHfDS z+FF~Gf=z8Uy;(-Qkj65)%1KKPx&wl*!a_kdAp zf13Z8FIVF6JOy6ymhn9+L^s5Is2Zh3%xb>z5EEHNW`^c&Z4G}{l#wwgBJbWp%F&|l zO9g#P-C-_{%zmf|H3~+huXSHfh>yRE1YYXb#=ItbDxR;BD{yqrmmrL9T4?H$=N;qi z@ov0_yJosjokaZOXk$VUpU3jj)`}R@Q#qif6S6xh(D(`5UrV)xr`Bk8j+{512~KWc ze5;jh7rK+UP+F0h87YZeKQPs})qzRTRKt#7RIuYg zDx*qFz#J>RIh>@2Q>=0mcBq+4V$<4;{1v6R% zK%JKY2SUITiz38C8RyS|KmhrG!hq|)qVaDO^uIT%>dkgMJ#|nD7Fy?K+5oV9?$Zt+?}6W{CO9LYP+!R(XrXzzTNt>$M01ue&Nj* z?rfguTvD&kKlFQgdVPl;WgP}!(d2&OIBYxma1>qlE#L(1Ti1WrI(`sEE;C~$(*l7T zRw49sE0SI3;(?Aj<_?_I&xx3J%`a(wZ09YkWqnN@-)5}8t+z?j<6K=m3&+ zgRJKs4M0b*>$}T!Ueh)-gFY2DQ=!hpc_LI`I)xMCP+>qlD$RM`Kh#x12=%{;MBgsj-w0(G< zte4!QcNMrbh=+FLWl;r20UiAvEW=fo6q;UO_wraY;Tqk{6)oj6camh;EJ@{fEC&HY zuq=2IQ2)^Vg!155w@R$=HMRJJgu!jbAi7e{dDrkS%Y7W^{pz+(SD}w;g;31`VdW=N zeuBd@8<_IKYa1)_@RnlL*2u9vrgX3OvDqKKozmRA3U9x6^z1L2@9Zj8^O@S-;PqCq zk&S6mGAT7c6N(j{M-vk<{*2_@uB*VC8m{HP>Mau+Doc~_o(NdMTwsUR<^x^&YO^vayeHFdijyr4I)3Qrh{{m z*3Hc4aBd!*WPXyIVENv210GFv#t^{4r<_bLT{%A4Z}qPFwo#h0hKPv1TkFMeOWm}K zxoRZA8+ zuuHYr04F&Bguj;hV-u90ZCa;=(vO>OJnj#;CB2KRVwmRDVYXg|k{4Rq!y#JzR*1{n z&7qdp$VfJNUiS6X*R2@lppeV&FAUmroO=>;F8!wdCy&BQt){>-wMB0nA5W|VVH&nn zI1pQGXU)$Fb_`%?OOdD#mK6JXg9D_Az;fzmGKuA3vD(*&nYn8q^W#eVE2 z!fNRuaSWGV^EjPr%!GIgAKe6WNosx`cDsT7x9ZadzdJmdRNMt$)z3@1Q4HO3lD=)F zXR_V!7BYI9-jv%tK-EY+eh#{$<#U=Lhk=>95B1>0{rxz$N>ng+k-4f43#!{`$ama_ zwLBylQVtxQwfipyfF8R)RiSiUE;XFy&KS|ZKB50G)*_6#)Z5s0<~d{!uF}8ub~LW1 ztNBcM(k(Lto#bcC(3@GQ+b!N|EcqjLzh)dlT@=4BQ30M!-wqG~ zft<&_dfxINY;<2GBBs9+Us&VTmvJANT&IA*Hq7J|;vnFY|1To`9Lr<>XZ!2}`d()} z@V_^t%W03SKa#lRF7-}7@Cy+fizT)esyp(9-4BW%v#2SX7NU^>6>efpka3^y!SV-QTtLtz>srWW3 zbmvRSAloZEC1xN(nBJA5ZMihX6Uj6Y+YRztM#?#jH94++P7mf*wFsua@7-%YbnH45 z`dV0AMn+}>t!s_vBsb1C1)U7AFf((>PvapjOTq+@pJD`c_zFkJ@cv&9Uhx&$| zx;TCO3jUS|#iZehQg6Bid^D7tC5mBoE4QThprqUT$mtL4XLgA|WFVZ|l203BQ+vnw zAl_Q=u0!(&iH6s0XuR87z|2DlZf(dImF@aKdwX;In-PP>wYQN-Pt`0v2*Q%`Jb?x- zhIbrMB`$W8^wnt(@X@%o;jLgR#Kc!k(GnYsuy}n8!=<5kqf9Cw?+_#a+Sbw8qeg9a z_od%n0!_0(5>>yYN++`?<~!-2{f%$U(+~_@mH|TzwG6A=!jD@+kWnn@XT)6jTDyR? z|0tohn5NcORqGUsEx;xdg=)8~SC=bc>yxc$4ugl?l)Rq(O%avH&GUgf5u|sgN+ibN zCS5fy3!mk+@0@xlu2L!!)oJk>_YAn8tJ*J$Je9nTEMMEXS z!e7Tka!6s_dtEh{jGe;!*4E3ggCFGGN?%7s8IQsRT*->HXip7pNv5U44z*5@E#-Sn z0J-mG%i0>Ys`_BC6#-DkFCZ11H5y;4M^i;Ba=G>;on(u4JMjAsB*h+yL~7{QNxX+H znC+P7X(2EhYb$v+KEJ>0q0esXKMAh5749X5`vq}fEzvt{7jLQmXaYZb6krv)P3gA7v6~c>@2u1Ghiw3b1jI; zc&&-m?Q`OFYH!*pcW1(lGrMHsmIjUjVS`~(VItmoeWoT+Vqr3Wcxq~qyib|KD`=Z| z`LeWkLz>Y=QAKEpfrr0dgI(t&k=<#}`)ogO@c@7TKlC_;XV7&NJ(avfb=&9yW%#+x zMF_ct>ldKY_pDZg+Jlj&#$%GWH zJlfnjb!0zfcVVD3y7B9a$hX4REPhW!dK*<|Bv6W##5FPEQK4vHh1R z$}pDO`cLHh!fHMxtwmZt*h%6I>>SF(r-y8mmkJ;f{&+IN`?|j8`1jePi)Y7tx-2Es zBrQMx$fjr~3crZaU{+b1EI8?nPx*Z{L27yB1#@KJfjn@Rv`E_oNEu@`wci(L&WzvfHJ2D<>h(IUc z_ZOMNTAVUZQgyd#wR;D3ljUa*H1S&zh}50rs;$jsxcS@z>+!@v?uRIn=g%>h3vMbm zzT7_O#f@;9h*|u;bo}>d2p1QZMvIn~R`J;LhEnoqNGiXly^sgtxf2i^+#2-dzQ7-O z&n+E+Y9WwFU1lLW8_T@P)fYVz(VD+Vw9ZMgUO-&#MVu{upc+g9r*T1JK)n=jdcR2YvcQ8c!O^e{vxT=WZQ? z!{gKO)gHr^os;gP2@;LTXh3oaSIdSvBKDnXE;lZ8t?-eW==4#otje zu+xR!OZhsCf19jwVrItSG8oL^4i|JY@X~(#xc+hxXIntV1>fQdT1JYLK@EE8mjQOu z;OO{cJG-d_K;}Q0f_4Y3MMgz=midnsBy$)|ANhd7=wH#etD>iVRq|Dcv(g4=pN*iddhRhrUk>siO~EcY*axZ?cl9x!89 z`hh-06NxiN6qLi{Xi{PCzmU@RI4{+Qa&lWDED__YG_^pvbgrualEXYB{=3tC=U5ix zsVP6hvm|{mX#+c^f%2&)n^32n(@Sz2N`<)aLoC}UNmg)c=X_}~KS427OuEtZQVaRD zCG!yzZ?b?&S03A#|0S~lYk9ht54`|&n|+Dqcro;T{!#{nL;5-V(B}A zaR1TjhT-80i+*sY)c|hB5B1Swdsu_`hk1MfOqC?y!;M>poC)pq{8$WtTU2lRM&x|U zp>ukkc6w{qwmxIbmA$UN31r&^T3M=dEoLC$`I$BEu?g>n#GgOq6%^jDQeXY`T{JK^ zzE2t17!{D2=2HB^4M-=OB-GPGExYLISP6A@P@{vkBd-iP@^28#;yQk0Kiav6%Vd8D zDYs)7<5HO-wX$+=(h>9|t^UAK{zCa8n-VJB&$HO%${Any9&7p}mpQfBHLA{AE8M5D z?ws@J=xf#>g%T5g4m~>}br_kz{(CY1Qc1CT#$3}KM2N@(`1Owl0!yP|_e?Bcb8!0Umq5z5zerNsK`Mm&qw}1?C*ni!b4=X!y4!Hhr0(!*+5XT0# zjY@H&7nL_Kzl$;qi6!epuEQkSAGi)9ro-;|!S7&+uabj!mUDNrFlB2?vd#wNgjj-Rg!$7@O+uBZTo1bFc~s2gR^C0_noipwxzd@f2L zkyn}VbMy7i^yweh?rfR>Tm2Wy>@5FQfWe?<^cUhN!$#YCykgt`#59#Y&oWDh%8?Z> z*gxCAsu=6*&NG?;2kRKF8>taXl3N4%{sz{*RTX0JAzM!lwkaK>nyDBkVx|quH~f4C z-6yX=`OJMg@R!>-_U@B`bXibIDxTcKxyCgq%_Y?cmCyv*(EaxbB+dJ}Lztlex3^8Qs^wmw<&|mLfku2kJPQ+he z?g7NrlQX29tOOb-!wxs^Z>}{*NdvF@;i;3wQ8+vWvAyWnR}cV!8U_k|RBJ2QC|fIf zz!kcTy#Fz=#70-JZMWvxDwRgFka<`+KPDo-p^Q?>-~}H;D=>glR_YpF2lagT2`AZZ zy5hcsTD`2SEla@pzn>*NtwFi|Pm59cWOH-w*ULr2KO|$LfdBZfNMmXu@^R828?XNHd zS7EyiSVnzyr5uita@K6O{jtZtGq;1P);_5`k7f^- zr*$^@?^gvJ$6|`DGpRxE(vv5Psbb{N`JSUM!#2B8a~Evyd2f&3qucY$Xx@^5K+UwM9~=4`h~ z=xsM^4oNkfG~B=+!Zkp=VnX$FRTtsHs76j6AZRS!JJ^ zJ}&M%YQo86ETwc)sHhYz_nnIC$c?#l8%KskBMX`CN$Nj0-WD8d7&ktV^H5*YD~wWCn~Q<3H70u?Kq(-sy$D8lS) z4|`p_v~Lgp`7eKk{5(L&Z>KnFpKH~J9$(F~zT7LNuewazs(DUB-c+<6;V{sMOs_l+ z^@blY-`TBszDixAS*XuDPDut%ScBK*n~99yG*%*oAuro8*NN`xm^eQjvsY9Lxtta| z;mV1#o=`;kj^(*6>^ldAkw^=-Bf@TzL5q?dsDO5}UGu%nXi2Dsxei1R^aRFVa3Aj$ zN`uz&VGa#X`q6(_n``LK;${GjZCEUP)l0wz>&{U`gzAM0nzfd$Clu8D0;l^{9=gvf zK}luz@7pkIHVYIf$i9++D-OCVgxD=FqNLlvlBJUa^8j}Sq_GoeFXbnwZoZ(ogm<5C z{#y;7+&*cvJQH|^k(@TV4!$NMJKafJ5r zv46@!`?MGXHumOFauh&ABUs7qYH$wYTB~35Q18hFd}!&|Gr#C-HcZmXsd+Wqk?VCb6)We`7LviAorYtw~nRrAthSHNJW zzu|JD*3vxWqdm`$A|l31V4x1qSF6!<<^rsU#SBe zx^$DQP8;xTP8tV5UwUZ)*LC6f5>$~D=bm-cN0-|Hr6oLq&lpO!pM>X^d3j3*13a)0 z#@JeSxl^cr7CO1i2%;_{<6B&u{mmRsoF$D0rmBZ}b)ga}B{JFtXG%9&gc~<5YmAbv zSMgo`!*XkXk&YlM`H|Emt(bUL`4Y4(N#v-RdGN01(s0qzN6$KS)+FOD6a)vJi;edb z-?t@uwf&61HL^v-UF6_2&q9O{T#_E#KstZUZb~p~{r3E}Pv_vb`0U~E7)Nop_Zu*- z=8PT{(9_FCp5<16f8ff$I#?~m%9DB$8bmi}NKR|yeY>2^b#2c+2QKmvDOxn(%_v7J z?-352`E%5y7Jq90Mxs3D{8S92`sy)Y0v3?ZM0_THrj+sN9U!vvz*>88hq2ZHX5|y! zf3b4_7L0AjABZF;nwqz)b1zHrTGLIzV_lKQ#d=;Ny9K73=>YMsvU6-F=qBiL& z7gARBB=Tmu9km91bsX5^%c4@6nBNlO6525X!Y{CjLB{2B^~psPG1TS3N+R@oUE#*B zQY%c3d#3NxQ$D7gIWx10G^$&A3voYxRA#%I17aBInkTDVVw>v;av!~bm1rFhnI z_~`jsxFh2Qfdilu1O&Czq9b}Nm@?hhRhtCLW7;F<`{?&m`BW{5fi%Q8o{JdsPI%p* ztQkG_uJ8@Lu<#e^O+zqctN&1o<*Cu$^P+kY$CmmV>6)2#5y#jE&gUj3(A+a!kC5*qAzf)kF2rOV1qzx$*M6v)!4Sjd7tY*8Xd$Uie=>2FAC!JI(iO#P;I+ zp<2Bq*T{Dxm~J8JX|Prv%<6<})8V?DXZb+6EJz0Ob9ggos49 zwL+%^>%d48o#6Jny>IjO%aOKFA2thOvp2q4$ZfxG@g?=&i65H1t!wlw*S8=ZcDk@7 zjZc14roP8>Pu0H8M~hxQjT&%32p=hhltRdl&&YnA7FP4$n8;e;jtYeDokFlF|37d` z&aJG9E6wI+vs|n6eFDPLdzNZY)1o%q1Xa7Xs^bYN!_WBWFW=KNfubdegz) z{sF0xOij+t79O*#*BQ1l3vQ2;S#ka&_x@O3?a)P?#5eBdTa}f*Q{Gw9r$>D8zrUIo z5lDhbmDNC1R%KFVk0Q<>>-LN25*yt3u56Zu`e~@V+4m1FVB-YgKv*_egpj}?x z-0>IlR15y+V=>mQ-uS`i)_GB$Mawme0c$qGKlw2DbZJSs!hV)hP{5W57mWOGa~Ekp_5m9su7{!v?6Vfv-t*nlR4|R z2R3IbN?ThqlS|i6gpRs*ayd=k(TGH<%vVYRkw z7sPwF@$^D+;=i%wnCcc+*KSdR9b)ygUk^@xdytcpI|r8CYqHGjoFpj9Yr>6;`gIKz zp-+QsF3}qbN@H#e@8FZ;du%R=lwTKr&F)GNyRoz*oWHR)BIlom>apvd`-TLz4EAln zdCS&iiu;9n%d)5244WmeeTgB=3}Kg7ycZlC1_YTtVpdL>jA`TVuuav1K+^=l5wvzq zl~la+yGP3lnN_19)IP#i^&6;mtn`*vTU)Q4Jk$@?x8hMcpr@r}Xla>}2Gmf)T3TX+ zPyp`TBHxKcuWm>{vu;QA(kLV=DWO`5m6OiP01mYiX~lnXc|dp_LPy_kKGS+e-<5o5 zM_F_(bpNnv=-taM*s_r=smM$fKN17(Fo z`nq+h^iD7_d>|8@o&LLqunDQ8ke_xKzlDo!kA1Ro#cu#KtkrOMz)nAE6niB2+rXvn zqI*v}mROXXeYr%n-ZIWqtqAZ@RgZ@4ZX+F4<-ee%WSsa1BiSDqhAR&H!%v=KjOSbE z+eAc{gOte{>3)M|r3qk3$$ns3@}aw1z#&U@hW^4Tb&Iwhva5z=2)j^YV?KQ8*@4^o zWM-oVHg%}P-=mX)hUM{zLO}iD&uYo-5OwI-7$TO|RRNu~P=2Da0%K zj&=&&1mp+ysNMb~ged*0?;_*tQ@&N2wJBk*GA6^L`{2>;BhcO=zqtGt5YVhLu4~Ax zR(f}R#Upckw0@5knv7P~zty>#ytC=Y++S5^xDe;HD0Yv7!!~kk&suVfUvsjj~AM2gD ze3~lv8A~rk{ECDs_=C*DPM|zj2CU{34lY}K*o^iV>}UyLW3{fvHy#72fW&4fEyu#v zk8_v*3gFSZx2pnD@`&({cV(8*k21a(;HRgDlQWVP_X4k?91Fwag;aoyNd{%uszANV zdTfQ7X5}~|mg!E<7*SMvswub=va{LEHQDj~XM1d3wqvmNWxFZKi%_Zn_O>QF`{m1* zlpMigJ6pj|=;#lt)HzyHYb0=z--5Wf+vnT2%+Gk=m>Csp$!xiIlX=*DZ!uj%lCbi8 zb~HY@GEtei^;1#us&zUps+KxQQ!!{Jl#n?0fif5!S0D78 z`TvxQ`OoBQSbf5P3n=|+QBVwi9^|EseBJTmN+(_+8A$Ts)vBJaCkmq$s^bBV|9hss zt3&YNBiXBO*ZtfI$$p$t6T7K9?-CK4^`*dH9R@0e;y7mm+);I?xoS|w6Kr+sAEr3j z3Dj=bOU3W+y608`bhIA8x_M>lU+$l5jf?unt3>A8ql~gc$LZTZ={sIc?vDGP`U3Ff zt{?f!qT+sy^IE+07i-$cguaKm@g-ci>4u?Pc=|p+^Xlu7BSIz~=WG(Cw9(baqf?2p zHK)j>vDpttM4`z2U?r<-JS7!Z_q&j7JbgoRgbRoVtVE!PJRzSFdCo}Kec6>|wnNst zcGI`k33H&|I*fNY4-bIfp(DS1+zmxZ9u`P8GW1xw;3bOlbbTZ2^2G*x3=SUns`+k{ zK@oM>;K{`I4Do0ok1bz9dvn<`J|ciJ4=09x^mfhr;Zggyv2PVUzb~>}(}N{g1AHbT z8)^S^`@lNqEOW%!7xW80eNnXgqOW9G?Y&;SYjEz)-cXMxoCOcsesaEyraM@?4^dCg zUM|IZCPHi&;D}48&kB2vaqf(N&`ZsUsw}L#FYLB77o03_X|*$Z)99?}rSHCjBPtad zEnPH8J!BR7s?E|GQ5(}Wur)>WH@Tw=eqJYJgS=XUD|L6&4=q$Z ze#%_~DIUF!m9}{A>VEED2?j2QqELVo`BQDgp$pqLOreHfM`Gq?*qhtVy#0^R^#?)# zl9;a{%&23a&S`*x4d#BOAidpqp2}`(yniWBe|=E;SrrwfD4vBo*bv=`y@&Mmx>JzA z0vfhJ9GSfb(V(=^aGyhQ&mRZ@NMcTZU^?<%v3qN;ico2P^9McC+OaMZvRD$*n zwuPX7ri16zO}lVbjF4^I*-!P8!~2v}7lZAT{oX5d7A_mc7NfJsej-QzHX2!`Sj#S= zNQiAi3(&U%OElr<)C)=*(O;0bOMO|_7) z&~9U7{L1D)eE0epN$}*^L}}rk$Ea#cyxS_PdCxtDoQayP(R! zozYMVdAJ+M#m^50k_vXM7b8nHuIyA_`;%0tuh#*W0wt^rea5P1Cn-h%$fPQ31Ii?z;O^jX4;8cKe?2JZBT)C@+nlqC?0i?%wa@`k zP_RxII54Af?}W068T?-7`}~n%|HVr-JD1qm>K5RrmGC}cdb_=YyFm~VXI2w#2Q1gS z^Wnx@jV@ZW3i(G0+{@b)@XUcyc2mU*{_tol)zA4(!ERIHZJE^f z+!GfSH4Z4A^`fVK*y05gK^DuBs;=&8T>o!79CdDG2ub879x{4qewJm>P))sCr8jM# F{SS*yh^7Dl diff --git a/icons/mob/clothing/head/helmet.dmi b/icons/mob/clothing/head/helmet.dmi index 49edcf8422f26a14c1723fc4fad8151a6f34d13f..317edb56796bd9678dffed8fb2448b26d727a66a 100644 GIT binary patch literal 43611 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 Nx>}Dk%hc`O{TGzi8HE4< literal 38349 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 diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index be2ba8f3730c1063cc9999c47cbc50d369d8351e..90be12b694abdf5fbf515bf4f39127ee2d00231c 100644 GIT binary patch literal 101933 zcmc$`hdW$B-!Oc1qD9moh%S03dJ>%|5kwayI?>x&AxP9D2toATd+&k}y_e{H5p7pl z?0(06KhJx8f52C+YuC=1nKS3iueb48`=v7RJ=%K!01&IHywC*z%ueu|iH{5RBrg7` z125kB>lu2!u<@{Rw|DcjcXa^(-?X3KyId9ph{8utUf~~3KTP3K&}t&$4QE&|5U~4P zKlfW#ew^g=T&h+jrM$fHaT50BWrQ4;ZnJ0y15~apIbx^4;n_$+_WY0GxE6=^tQ^Y+ zL!(}G$0}_}4UBK(#}0;wkH1{z8%eA?dE36?eHxBYGyh|nqj1eWn0K}>n&ri z)BL$sG#UL=_4|+oVU_|7(V}_w)L~C7daDOH;*e%4Bx^&MReGp|dlIcZvn?pz+bVUJ0FS9 zU6)w%UV*ZihCbd9U3R{$dpvB~R@{InHZzC3nZB6qKQ{6a`-;|1f6&wyj(uGrDxRTi zef_#LTLf|sd%fejLeePf9}QA(`N}onZ@AW?G zk33huFS__TC%0CYnzyEQ%0Za2YiUrRW=VANFD&OUfOo|{`<#pjD*r8qNEmx#NP@y& z7D`{yBNHKv@BUBN}6+`C_OS6lnqaPk-J5OgJOZlcP-U>|j@v$*K$TRKoy!hCH zao74!$5(tTp8p-u`+utaBD@77spk_J3oD}Dd9nUS_c+yulTRnq_|ZEjO@w*ziRL-E zn`Klhb)}^NY-NZ3!je8I*uefhgVd=-CxW))ZjUo!N35>;UX||gSnUm`smpgZOWeJN zJiL7?I|zp$K7`WJj?$ik0;H?^TKN9I6W7CQsN}Va!>F2@$Bs1HBWb;2doiVGn#aV= zC|v1=%{MMT1$;(cJplCd0+-gC;BYi1P>uuyY~h9k!1~5URlVCVrDb#e=F3DF3Y>|{(a$G4a;V@|v=MDq{r)hxwOs8CITpT!b!Dq~-NhS5YXWjuJ z6C`FF&(2xpz%6sh+;+GfYjfe6La_kUb`%qf$^s>&d8jjWT>NUH7%HAD%*#$MoqA)` z=Y~LNv9vFF+=?xS5C0B4GgRe*U&(N+CzTid92^m4`cN8$LfIWj)SEXKY8?!+^pwgk zJ52-B=Kr1f6ALmOeEuF2IKI+xiKr0da-_c?1fCAO9QnykeA~+(f(-S+j*amyxX|j^ zL7&Mf9Ikm`d_iAMK5!JNLuN$pO;D#_jqlZLNA0Gje|VatF1Q-}enab;*0o{7P_gOs zW{b9~ez*FTz8F0{e#LFtF)Z2XNI0APbqe}XSX!S zDD%t%i>thqRUuWr7G<@g3@T4|Q-j8Z+<&A9UU!+tm%H`>7Y9k_Do*Y;X96!J#%2Xhq?i=VvB<#EmvK%B#J*18UVuyr z8@*6QFriNh*pNY!T3+ay(K8yTKNNA10k;nbKrD(9@X5+D>|h4L)tYg=yu1nvFKNM_ z-9%4f5V(J}+O1u{osSLEmr3uw=)9&XT=+XqP-QS7DzSB`FD&}p6@+;oSAPR|gQhm! zvpOBE^4t@xNFfl0RU4!LxGI!9n&aM;U#ZsUk*B z28f8|?a;9E)M-88%#6Q`{<;PRQBRWyWh)E>4NtrS&O%jtGHZclBu^^>Lvjlv_!M>E ze36M-l}5p23o@pZos9nrnVR`%d8W+3(fK3B>)SYxm6`4b&pXWwW0xSNSD+IGhlkUy zNf>6vjeS$Y^u&M#ivR!uWcYSd>g_N5A`ljz;^LJ3kx;I<%S&Gnj!GWx6t0DGg{G}p z5SzM~XO1^#8v#$81>J9i$#Y*yq0Zuw*!FZdd0BSj;4*FKH@D5rPq!>Tw(Hl{)u9AJ zw6BMRX_r^8NCJG06yC-$C@ezE_{BBrUV?%J^8)~WK*EqeFhECD=WuAh-^3O-ozR~2 zT*Dhit*V0a=UM_tQ}}Mi)|;wx+@Z(8%+8&PEWRfgnZ3^T=}3oA_3fkrS;x*<5b$N( zCeF;J{^`gN4w&q$LtOe{VM$3?k51VQ11w-9HVSMlDt`Jddwolajj6D>ShB*0CC%nj zOu@)V+9H$H%K~!9k1t*1Pa9iI>IOrXTv&~6yHefYl38^f1A>~C577?h)&-BCIoD}n z=LSpcEJGd5j}CBr8^>UzEcnV9cQPNNdQZwor(Am1`uXVDOhLRUxXr(H1p-c%BC^Zv zk2tummOd0Q9E(r(FE%vT#f|P0!$=v%m9xvs^~dd-kFf&HT%%;szSrJ*q?f7XAMk|? zD3+##GJ%epS9SB&{pOBRqf%rC0o>b3d!)-76{w%0x&B8!s0}UkgXEg)62$F0O}oIr zXAwD_S#W+))ZsXYZ1#8^ofEGpylZJKkPQ^Z8U1Oz2)`?q$oZ1T%5v16`#6?y@oYfH zpzV{f9pjLZ>_nJ?{X-@BjnY`)i~+5EJtTi05*a;;EaeT~?SY|@V?RD(f>saLSgS(eOrA18VDa>%EjtmLAAO#2SJ7oCLRcbfG1lP(Ki|@%dGC8Ne z)>czn7CLGF(|y`GkprY$l$EVOGiIY2WNTK-Mq}TaK4!d~X-9*gy-;&oi|q{O#>CF- zWu-3GkUtb)zUMu7;;fxf!Vz?m{waq68u^P>2IYjEyfhNeZF4g(YY>Otqz~dEgWbMH zj|4o(Hp+n9Y;wr06?Zr5mwoislgpi2=3|WW7MuZ%x3gcGRJ# zcQV@X$LLHwIvHNa{D+Or^+)uaE3Xl^RG|TdiRt@n@MY`Ou=xMy6%DYHNlMp@K6C#? z8gWRJk>}_fjxD@P=ddh8`6RPGABr=|@SGk!*;IQ7Rkqrdy|@~2pVmKeb<9v?fqx!8 zdU$c=s2<=uVU%%3k0*wiBilst5Mzd!p3Gt)f10t?!s}UGM1dHh<|$^03ms{BYy*zs z6~4ot=@YSXWL9+fSN3F047)==nM}QVLQ~GSs0xrpCvxc1$dHFd1TXI_x}S822c=oe zI&xy{J1^sFvmKqFG)?zI^fMwHa?C2ZzmPe-EGAPw!5kA=ZIuf(f|UFtWr%XC9Q#$S z%{}%|5GDTyCGPOhT5Kn2y1@Bx>B3tv7zZ>K$C`9@n7wh&2t|~?PjS3q@eno^4rm=F z-7CJB{!Pd6)}Y~lrBnn+vy7Ft zBPChj#*-pXF-dBd8U1^dz8jZFcXMMd&0IKFw0{B!|6}0d4{ZLm*9A464VOh3zD4U& ztQF zhEbFJt%*x-J!EkjA%p z!i6a%ID|}!68InBmfIP%OuJe?3100FRr&B=+ulvJcF^tNn-q|2OY_HHbJPk{Kll|# zX89l7{)cQLKe>tjk4qrWB=F$>HgfO(<#y!nKUW2yBanB8>v)d>RiL|`L99f}dA;nR zT0bYGOqO(3!bEk0kpu!_K_KNoRr1?3ZOP5yiAbg|dsl-!0Ph%yKdeX?M1)cMW=eI#U+;p%MF3Yj@i~?sfisi$b+JR^n{#1Dy$E{GT;2z zKksDk!-eT`=$*}e>emJYgO)gG=XLKOy7ABYza@HAP*_zl$;x8fNk2f4iqJs#MGEYe zxX#q|j@3Z3L>sg*E-$fdq;5?O4E`(;+1@EIck_7L#{P^2AlOlgq1Ck-8-V(Gm=ea! zq)$fO+(>>q^W>d+O1domM(yASu(M}Wjx41DSUET>w}*aMwq5#OZ6)Qw9Pj{|YIJ(| z)4hQkj$>F#UE~O3!OO2y{1AqjIp2RA=BdNsSA^*$%A06< zn&b-^Zt$;kg2s*5MF5}^ciOhav}cTuj~{DrH3vGYtoplcL(GG&Y(6{VAqcg|18cKQ zFoT2k9_G)~pD+dJ#=GYz!wUx-W=EonJ%I*HWQVhBeptMoZI2c*MPTW)p^>_yWH(QGW zfkoQ%se8$u^6epC3UQj+P{>c+YgE zKJKl*xXUT9$mkTX;25%)h&7aAUNcW`9kj7QexEVpzO^qNoACc>CP1hV=HTIh?F_>A&_wiS~3wdzJW@x1{uETKf z_lm!FlkHqXn_*H*& zq3lsoy5&R*?;X_@71_HzbzJps!T7z+4PxPK;9nPU(4NG9*`8>)5@5 z)$GXr(}Yt8J%NKCHTfn-dgnxhX>aqH>Gg-@I9V+4@s0nQ6&lYMmhXNQ7UyU8W9FTd z_F9CG?Z>fzlo*cGSSt#LL#-$Vd9X8tk7)5(i%0N)8!jdW8!RR5TQPo3!!{zkcF#u* zVxcLZ#nM>rR`*$B&K%YL2slpaaP1H6pd*RMNeO_*pO)9biy+d7=P|qpH0)c)n)bXn zU}6H#fIx)H8QpmEZI&k2M|$!W3h_#>tTh>bXfJ;WU$Caj(qf11O|Y>e>45f|btcfI zpYUkS()$uaC-(f2*XU>li;VAz^=F?azt;0cu>cp;-u;8yw{luVUlw>oMMY^VM5wf$ z|NJHOs9Pn67<D_7AlNBn*C%y2-}ohGiEGV#W+Ga(`C~eg$NCs! z{xUy5zst5JtF={QkB&t}BY{6?PDNsoPbLe+5Anej5=vrbv67D}ESY!GM`i^&$|~(Z zfd=E1leTML?FGCQgplr!1kySr2b^j={H?wT$=ZM9ABa<1eD3KZUwE_Ar zyygHRAzSk7#Pl#A4zw@0c4pTKNz^3qsVT0k7ZcLH`R_pw0PD&En&xvg73*c7hkZ!S+ijGtU|A#N-b`7qS}K zsX)>BK|V8#K$!Uf4gPPk<-tMn%*7KU=W)Wg0t|3aJQ{)nJcEs$)AhAKNJuI!kZmjI zpB!6PSVYXc`+<1FLlyKhJR*`sU|-m;w2tq0bV%(x2vro=Q+d2El4t6iXNud1v}T(# z9+R(m40=Veps-5Ok!;i6ugs5IP}H$x7{eBD=ts-tLdRq$&sq^hqZ$5o8rpKlGX@vV z`ZI0c{BOVxBJtY-2HMHDH`CWc9yb_%>$6{3f^IUjU|-YHK3et1uFX|hsl0r-Ui=4! zr7aToNQ$a<$!_Y_@?-iqL7$q$_ulE3k*7iSm!Bd7lDwJ*WaYUBZGawx}aXyL8wGN%a$YMV{mq`t01%BE zTpT8fpt2SU#X&uC!+PRPU(xbV4-#BYr@*P11E2l~BTe@=>hPheCF1y@kZwZ2Mdhqm zQ6JRg$t26`FaN`^XPa7gIwCq6Lru1L-l=bqjZWi(Jdi;p6U?7PGG)55S88u5A)SuP z_DEg}BHBWY=n7C*ej=GEUvrYbc+{FzcvPTBifu|1XaonAjh{XMXNz9nT59>WlL-l+L5=<5fNk`K_3NjoFqQ`V~)VhX}OGy zt+BhTB3$=ACuR3<>0RxsF=@<9M;!xIT#fA|#+NF8d_ThSjNwJB6l? zuKr(@{zIWm z)P812T9rR^Zh4_Tw<445fn=! z7~&}9{qM%0tmL=tAoBo1) z36Nayvn2TH`AZJdf{%5sRIfPX4-u#<<4dT)AW*ik3V_;0U2Mte892a}Vxa9^uJ zrk77#eXtE5z31lg`|~T{l#)egN)NM0m;l4k{eBUUg6l2p1qnqzp*2@Nqvu}Q8fPGdX(lXau*?yK)LTo}!1B_xn zObopzqWsi~=R1|HkNZE7&px~+@?ww!)>=2ZS2<&}P^LyX-$|nkI#HA!CJ}xd8DT?^ zZ@ z$SAG(^4DE$$xbDuXGKG%joGMLp36kcJWG?8sSA`C`p-oz{AN(ZID2LUgz|U!q}Bc? z|B#r)!@hrtkdW*uvDBFTp-WIYD*Sm|Gv`$A&5sozS^4K*bwg&6Ty*es^}G}Bcg$@C zN47D1@2?c#`=T1=ox+vg79AKi?gKuxJc~9DSKl$D@;UpyPxrhSKE(q=&=_E-x^a8u z!JTsmHWLQ4eOA)KiTOw3)BT+M3z}~4C=Amo6F0^+!ZIrPk4ocMD}t zKVOtaUmVf>3O&HPSI~iUS`IhmI+UZ7D&Qo`g^u4aN0q!hS|r`bui`*4iHur751Kq7 z(4B~>umE2*!;SGp_P$Pu?~2YI+0xDKFh2KAr#HEa2hb2o4MfQd=&JI~d@S0pg5{0U z(s`f$TnIcHd-uL&X;Ajnm3YlOQCz{=x7UPlc~id-WSEZ{AT?7~7VMKZ)wk8Vl}~$Y zr|bxANc%v5j2CKy$8ZGdl?GX@d6(A1sv2N0er0~ zc%Ykvu zEQ_-zidJ38d%C&_1e0Q|eQo?Ia$Lo4B2i+`pj!WkKHpwvqFWy~8htn$@+Dq>%_Ys6QVEl__3vr#w@cE2kB^_~X+JTej&u%_ZC+`oW2 zo;wi$FGZ0U!PoEJ>wUkuf_CIydF0o{P``m1^1N|g`ueveqq?ja#wq=eHsR(<^&c{) z+Ezto5|0~7msf&=zdDp4(>R_v znE%$M&cg6yU=7tIcL-OXHBI_JT8|>tEw5v#u)tA6-Q;quMSObjzqJ7Sq)~ZWgbZB+ zt|l};t_TAWuOqZzky5%Al8~9`HPwQ=rnV!;t?}x*^ z>X9L~i3xns^o=g#_|ET(9cFy7cASJ(0&f8TxfaPVb-HR0HTsS`X(O~l)pJIHXaoNx zFjPSTN}}p$6=Q@IkI{1DU%^r)`ov{b(6e zEHyd+6b)`?a`MOR@!w~}(vg6LSSrZVMmN}FF1KRJ!6n5nvy1N;o-e;_Mec?wj3WO1 z43TSxQx7pf@BoWd#G(DOMMJ~m=!E3CM__2_ds{@c3oAZ&q2{~_#-mqG{s(kqCw3Jrd>2{UBy1$iIL}5JXCat8Qvh9!X zZg<{~xnjC8gl4x`%qXu|O_o(lZe)>~h{!ex0{~7#dmN6(2*97-m$|C~>|A|vsN2ZC zN=5b-7`E=d)@ZY&et`G;(EU4aLZeCW-vzpgca)DM^9k^7*{#`se>fh(CNOp!Wx48| zEIg;g_|(Pw#=qpxMg~23n8LW}mmg!;@|a^EH^J<_gE@5?Qu!Kzo9*Ijp#zR%j&>}#q@0N)zOJhiu{ag&F`LV`ZkIXFOrT3l zfj9pgZu}2K_SUtCT2FQ^cMM(^mOqUYCFJm!tSEnaFXLJSSgmZq1>7JNoIKDy`i2IR*20G?$<5SFiGvtgNEwnZ10ay_oH{y3B1`;#|a0x4M z|J;uQie`BS2U^g@DTOyzl?IfaK1?&+2nV(Jux%(9c4_eZB3s3+9cOBG z{sw*SN+T<;X^y!PZCX!xlCHB>cwfzsMRHOB}DE9Drb<+zrWpuJvr@L z$co3v$!@Y@r!g@QHUWw!HCS)vF5g}M;3N7*JF z#-8JnElvr5@9QU-CgEJ;phLpQR@X97F0#xaY}L=dCXfF1Wi%m*!e@81vRIYXn(M>? zi(yPsmr7)1o&I-%2n^g!!Y{g7MEO*P7(nc3v1eST*3XWYZ(or(oTIT+RaGx@ z$p{|zW#F};vI(Zkh;z+Ny=r?s+J+Hs67-j{K>)zX{zeND!dwAZ)Oq#qMPfD1EK`E_ z7T){y@EeJOJ!yK>_R5ZIO!{7EC~8LPK^uop_%9`2E|}8Tiql8Kqa(Chg_O$kve9}? zS8$mx0LAUplt@BS5*L*2Jqm9VGV+@ylSU^p81pbL#Oz-4hUil?7Eq05&QJ*Ycry#S z!>}On$Z4&nbK10%fS6P1TgYju>tY#nK-I1E$~5g-sx(y`w?Y<~DRh56-aXfV z5psWjJEm*>?@HI9caLq&9p3kJkCv!ZRvco&77z8Gn%`#b*a^TV-eq09)YN?hb%3uZQ z+C%(xQNuAaSTHoGB6`L-*S?!yyPa9dR5|>i$YfPEsv_cyu^1lWPAPaz>#$z@izqsq1*>UF z+xty(q=RkG_P;p|dbc6o{5~KBCB|{1%;7Pc!R@lcA74zo;`n?yoVipVZ>OOy7vaIWS zLMqf@R-x^q9>6%%L2FHi=!2ew=sWGAv7!apDhhgZ-D-x+0_6hb#=t-5aF$k6 zoGT5$rBlmK^B zM2^nOuw6<@oX(1p^nTM&Sd<*(-{kM%R)RZQWPCEVdyVt?5$kGR)5S(f#h@S}BNdSM zlOcr&`IcU>af&|Eg79(@hw75r%3R=*K=klict51Fuer~zBXj-J@Q#;ZVeTEHfzJd{ z{yjnH;B8N=b3UG*(AMRnrXci(RTU0G=UHR(Cq>>c}Y{SFs{w->pA2NUfH0}?-0|LDm_4K5T z7qn4)rHR#K)s*4W5L?5hpd9qU^PCex`*9i(Mc-ZN?CGQI8HyU6AqEE4f{WT#0Vb5hY~|XjQEK zc<+kw<(lPe((!>&&UKWdtr(c^7FL8gj)E*EsX}R>X zp&MPD%(JMgFujq+O?2u3hxX1DjQ1^yfXWX!+lSLUC zlZ=!8+S&+ow>-~CNP{`^ZXS;7=S)!Lj|5^0)~BnPaV1LScwz(91YQ!s%|<}g;C?cC zQd16eB-o}N*;@vErZLvKbL5ub)0>o~ouJ?@{}B~<`3H)1a_cn-R$6$(U1w$&Y3SaZ zu5ezR#W(M^%H9gHf+Tk|0|w+DJS3V4)Dhqms^-3@wmB$2gx<^7!r(2Vw*Xy(n)%X_ z_7vW@p}w#v4|-reTE{qAtXsjS6$-Tbof4SXrKe`4hA%*Mo;sQSJUHAf7`AyKEPbD4qNPcr5MM>pwThEzYf-Er4Q3z)+g05XucbC(?I^(=! z>sNH@ZudI#+4g7*w6k(j#B7$N=W3Zu%jGeewDQfc;IyzFFw?#Jx^RUcV=!`wsPn`2 zsTBBd&W&fctst%NfS7**x~4C5cFi=V^!RU6%T7P?FF*lK!wD=$Dqqi81CJU}+#fzO z1AF)FTzaN3xrO9PCSR9`-s=-(-kV9k!#^7G9{MQbHHOr>*W{bC)3eM8E8xDBL-5iR zWueCg(oEHNZ;98}b4G(6S*-8J0Hg=;m~*M-7s$e5fyQK9H`8yYPa}FTTH3fx{;@Q} zN-WjOC|we{-+Hzs#|Je7P7m*nOLR@ODR7?GCw z3l^gH>N}A18qfkXQ$~c+(2o*zP(aReW-ee?IZvpY53jaL(j;6Fz6g9BTQn*gJ}>&= z3;CI^LSIsh@5?s!dt_PzD~YaqE!kLLHUw1I3Afo&%UL182bW;h*6z&o`g}J6W>rsN z6aY6C?aXp0@slQYA1G@%n&naLYevLo&U7Sn=r*x!YTRo!OFmy$1wBAUx6w^GmcyrXZbPBu zU#Uq4-zetK*4V1Jm#N&swO-6%nlYhhg(v*y+}5M%>}8xdO{B^DN2bJ~DP9u>HFpt% zj0%N1e%uC%_P73)rx4v2wFK`4b?#OVY(5dBKZX?)^cK)D_Q=GeiC6(dyOPN+d)Dlr zxaOT>Q6Os`T2^PPG09CTTJk%$Js8wNbJy$kPG!y`7$X{ARxSRaxP{$bjR}gtFZ=@~ zMEgnW0qJSW8Pg0)Fk)k0(I26auQ@4Z@)xykUwZW&isG-bctw#P6htdel<(|Y))c23 z+y;t{-|4)2I;j$%9w@E($5(E(=_}d9)}cq z<(lxfbX4|2BU-GHX(FMH7GFpqelf3!wPA4{*O-v%!kH>Q8KN)54`ecU_ zWu+sX?aAvn^jhHIyq9IuEB=AI_+It}wfWerKZU!{({D=6zJ;tTH{m)a6WLPl&_RsrkjjAN+H)I*hG*LFYS}r!KL}>3$)N@CQzGZ zeYJ|L7#h@jA`;}NN6F_uFh+Pr|M^i0N8p{rb)ad5Z>hdpfYUDEJ4N2Rk|y;hc7CxJ zOEbJ<Cxw zeGpSsxM~PZ4wH^`3eq%*LpxMhiKU9lkT}0GPxGv$PyHU`$R&}K104{uGhl{s$GWj+ zzj`JS_rThyQuJbKV7JxsPw;pyQ~$fyf7RT=LL9~?p109ge*GdQr5Y)oYcmy8qwd1q zFJg(Hs`++gROy#!54MD`{J`K_o)RxVq!{-ZsdCP**LTs)y-c+99GmuMy3+PclmI5| z3~W%1j)wufUrWXH?1N7&_Bi71VH+7bFD1TS-Bnn`zEO>}@2>t=m26Y>_!jSK2W*-= zxo>y!=aU2&2P2tewo1TrCd30nLQGtPAK{E}eueyAewKBLGe@{zT(JP?j@UVT>u)J4 zQdQO5df#tarX}}tgm$aT#g!kegPR=VTP-YKm%f7|Rr4i?Gy;P|v+VrX0u1#=5)_>) zK0zoMxC(N|W8y0M=*)!eWUVYDrIWm9g%iw}48)ghVs&9+u>|KP(oarh%lJEfy^`LQ zg9;)S=iX)~=IA^Fsma2;z`)opi`d`X$QM(7>_uZ)-SGGt7&Vw}&s6n>p_V~obOJ1! z&Xj$}Z929yKF(Q}Oh2oWKVr^NMQAq0DpCJ;4zvnJ@=$zZt@w(ZIY0llFoKZ+1#*P% zS42ebgX%Mr>Pw0{@mWD833_9q0X8s3i;|2|31@lh)cV=Mgg%sCd zuF2M`H`O7-B^r9(L|;0-v}SjD9usnOxpuDoLN-s^P4-gU)K-Z-BF6 zddBo3jLC4B->-MmBSUG1kxIRmnU3)2^=hpMC}-6Id`mHvE2GB7w2*&m7X9)ROa}U) z-M=^FEPtJtYZj`ywLXsD_ip*>ekj^_R=xrRS4;G5C9nR81$GaW><`~~z!B({=5iuA>gY*Yd5?c8T4{Af-G-C zqBg0wBPKny%AgG}#X1rQjViB$R(S4?`0SxVIhUZ7z1>WQc}uZjWy9)V+H6FTSlsE| zqLY}mvouRIr#(&8!COwHQLWDN*2zKMr13LyqvW?{we=L`U-9IxVCFM9-`tdRD|7MA z+kK7f2`hg80pFPdi&I&uE{9&PKvFmhjHKpgsyg`Zxpp+3NBECNnCXnWi6B?)5;6;9 zHBUW6)Tnbhf=aKboI!fGxRxGp?M`uJV^ti`u~5#@@{3t+rr63e{>R`GV=38~6)jeg zIQHy4+ZMgC^HNiJAl~orqvm~~O0TJm0|+SpGRd9UD8hCm zGU0-bd=vXUF37QAZkOukSF$G1iv~4<9 zi9}I3nb|DtpKwW*gH$pHHg2^zSY+U;q+kA2j34&bpGS}tE((EBi2OE&+u@2)2rYvT z@k;}GZK`|=XnMIsCXc}oR>rkw2^UpDc9*(&6s$N$;%2L(OBf+f2s`UBM=gH&EycvI zc5+am^!D0EQ(?~)eg?|j^xJ8bJLiE9X)t&KUHrCFxkctjRtO&D7&{3s5x@%2$lXAH zSGKhRhls{WU*j#{FKI_XP0KIr&*mq=@)(`tWM>-D5QBG>$gI_(iW!}xH6Z$msgl;n zdG#|W?bdHwG;oS_`{7$YH$PXfu_OBipac7DC<_LzEj1X<;E=|9Fc0vos;-6(sXwH5|}uS5c2OT5jkB`lR>?@>$Go|qHI_7U3)f4>Gq#2)>+h|u2p?b-AcJN zq@Ea-M-wwcI*kh+9jZP3uH*mTiuP_S&3f<@jPG65#ZqrXMjw=naGTnW zX8HclDa-pe1!s(}@%~%m4yKWJIlKR-a2-s+QvUzd{(5*DapzP6cRNr;Z=1*})pAQo z8AsOSTU`w{@rs<<%5Y2vJkd5W8Pb$vK!=8%S@z4B3V)~xTq#{Co9?@l!0#mp-=f;GzgrFbw_ga2GV0q#Fhoqo1QPX)PC|#DE>p02hpo`{n ztX1d`f#P!M4r>%dWvpKD?4QX0rb-VEoc2;`d0s5MN_5sNR|^ct{==nF`tbiUqD7~Cq0Us+Tcem#U|ON?Vy%!VfQ z^}2zl%Ee_lZ(%c@M1$Oly1GJOmgc~03J)!M>(ScbRq{9^ROiQ!iP@6yw_rgQ7!h4_ z)7w}*r8^#YN2$Vqrsi{20UsARLi6FyM}`T>6a}SfUag#qSj{Tx zkl#y({FZJo3;H%$MS7Qdr%~la!F9Keb7r@bTiA^R9ch!q1Jv zELbJwBt{2jPJwE&wzP{q{M1x|5Mh{TL$V&JW}cw6}`*k@v&ZS#OAON@CwAbfUoYu@L{Q-J@Ng__TIN)U@!ML^(w+2M0L|X*6?=2PUj1HlOQbm zSO?G~r2z>;8ja)?Hx*5X-qwd*9ZCw2bu^1Unx(_nd*?r*x^K2N!MYsLH}{X9{Hqa4rq<7CA6MWp10 zqCcW$0t|%Eq)A~h4z&k^?Ed~}=KWmLzw*paBCfx0ZmnL)f?4&RoaZRKsd6~%T~jm^ zSt(0{_(*=?@~D9R0=RNXo2_F6FCuibBm|FkFV$Now*-T3H90R`NWdrU-cB}s+Ly!q zdaidTSeE5}5=KGr@3p7)c->&!B|?fpxL)wYG`)>QgFj#S<$3d(8#Ye*8I!Vea@H=c z*W8;d8Wt_lnZSc%)+wPRx*P+!?O%gWEkmCYcP zMtm-Mm9Gk{UR+bg_%2S<2>X{}16MVOX-DD-TJVCxwS{&{E~rDUu*^Bj6juVQTCcUT zbiJ$H1n$Zf!OS#>h42)M$Qz@ws^7n90N^fZabP%?>MB(osR7b~N&NRP5a^#7W^-)@ z8n7f&v?kCFA;#dTfdBqqfb$oh-N*8jL4LVBe?b6+h@{@Oj$UJYaqTz}`kCZ_m-j*2 z*tgE=?_3pl=;f}G7|iSQP?b2LT(0r%h=51Gax{)kN`H1V(o^+v4J;V2sSR8jN zk@-YiO28oxkE`vvbFDCZc3)v(ceH7*IvSj=Mt3XOYDNmKkPH78s>3a#ax+W<3XR?# z*G8||p;SZ~g}s)dXCMBr6%j`2)`<80o1_>3^#sGO^SJX>b!AeKrYB_fTGLDSzo5_z zPb2OUoN{7Ycrr&t{#Y~17c5V$u&E*PVjVr(jIa1a`YSpJq-K}G?g$55$r6;2h*|Sd z$PE|lB2M#a4mHl;gbEPstLRX*pRK&=_nb{@u#0#>eFF;bJ5I_?n`WFZ&CT^Qy#}93 ztVTYro{@b^$8m@Sv?exj?Q+PBJ~szbrl(1+&q2E5MLwplgk;E;l7eS45~L{nbzZ;D zOD-ucegftcB!0eRWoLgomZ_kkq49BY?*$X+2QDy%%Bnj%mz|=5IvAC?V;>Lxr6lKg znLsOzNS1idd~qaKLTU3aGKaE1WI@l^c(MG#F$rV2s#5#`nDzngvQ%J&H<-l+KVT8K zY4;RN(Pt@RT_#8{3BU^!q9BFudCpu^Z~_ zWm_KK=d%o-bx`m`VJI)y1sLbQ*HI^9sj~2Wv4SG+Dct+UYyCA?ohAAZu8Hn$`^zKE9w50Ew_Fa91Z#;5vjJGCdy{ z?$B?cUIgztAT*SP7gl%NiJO!Ei?X*4iz4j)hlfVGyA)8QrI7{|q@|TuN*V#_TtY+% zLAtve>0G*`Q@Xpm7WOwh&-4BFy{`A4otb;?9hUo?bDz)2*|Ssgf9f$dF_BGC^q-KU zFIZ7cBkn~3ma_K?NDBM}qnY#PaqJ&6w^b5&(89%USz_5g`ZFuU+K*!ZFhsI3cT!>^ zNthoB#xrJSw3CyQ?a{2D!v-sl^KCz{s5?75+i7CYnz!xRC&3_mDBb>kVl1u%_=h#CG%&sH1 zYi{&Ur3Tdsol3x0g6t+Iy4&-I=wMKpBy66E8eKW78Wa!(UV4b>IX@}lCnG^aUymYs z3v*v_K9B`PoUbHKrB39EPEC=5lH``A`xSBY`9$8)JV<9GAZ_1^8rERqf0_tlmE#8S z^~^`HIW~hg;s6B~1l*D}JdBOY3Uz_6LRpBz(%`@<#7jJgkM2?zF zZtstvTnUP&JEkB>ggh_VfmY*+bnEF-unfOPQyXl9gMr_Ebk(tSwvys{oxdcbVz{cX)mKrg)!PxseX|t;-GeEH+T3nsy9Df0|gNBy5?S8T^*U2KrNdt zsx`$PN)|>5>GJRGl}i?NCj#tuCkoO9YJyz0fX0QvS_=0xi#g;u^cvfybQFEv+Ov^7 zT|_joA_l;7JQN8JWR3RI4A~g*ElZ!Du8ZzHOz(;IT}1Hc#c{%W0zipP7Iu8> zL2>LR`bY=x7SsE&1+SK~A(7{4!x)VVzd-d4-%)|KpAAbqs(KxEvNy7_Y_}eXcKrHT z&ng_&-VuudH~y_w)l_syHJ?i4QR8jZr@|-i> zRhTR5_bzc%O^E1pCeA3o<;U+E?H>Af74uP88t(x$LUaBpc;OrvZk*7vO=S-|?(o_~ zMkYjh#M+h`X1S<*dDH+0?yKfs4@UxcAo;vh=v`K$hFJl=VazFY$RG&rB1jzgMSl|d z{)O&9xg%EJU>6fs*uU{~p4&1y3x7Iv3ku5Dt{|hC8KN99RT6=A9s=h(vS;nj=tFm$ z2N8K`;xUq0RTu(9UTa~3{U79MFD66v$o%RaURiuyKwZ{R<(pE!_&$aqdb5t$??!_# z7B?SZjCkQtfY|WOtcfa=3Hh(~Zr0l#0dTwh`a2~hg(FNa7B6JsNm&s+yKKsFgMX3X z`k;q$CSp&HL?BumU?%lvRa4a@61xcKW#ySX!c=z1x?E^6U;b4LH%>Te-E}?GV~8GrQ=0h1 zg$+WvrZgd8dRBu$D1p=;4AVkDi8}5>%-{n59`bN-5aUL)lU4Q0Vxb4n{?^{lgWti1 zCR@gBlM38IuHVPBJs9Fh=TJ?NNi8^Gm!RnV7?SJsYtNFG2-k}(&HmXp`cEmpuEB)# zW7T=t`@ij=?HPTKu|B+feetnjFX&5@=+UFdeKt1en(Wr>U~L)yc5aju9RdXVXzz>v z+NXs(?d|P-fI#R?uQ@+=pHD&8f6Ee(lVgB8TbzN%6S5FA=lk{x*~>pnA0>j872UIr5bHLP91ysQp|^zw4sj4p0BDPgxypGT@{&c-m( z=Pxs!xSu!uR&6PnLPO%xp!UM8x2|tX^Y*|ZN^CU0dDt-D5JH5m5y4hrFkMm>D-|3t}YgK za{Jbuo)=qG7o-!0zKx(cREGd(&(|oGis>Pxx1)sqrDn7B(55f>{r8z+g-8YH=nkE! zTlwr&)fJj_d)eOncb;W|kN8UQf%p4)xzW6h)M(t3&{ zhx+LM2_-Jmpx!#Inbet|rV(PKFHU1xfBS|uKCW~|78ds`t~>ofPJ(^!JIH2b(Z^=>bVTB8{D5Vfi_gN_4ID(@K}j1AJwi{@8DnzI!*+e zT|%RC*GflF%%yv?!TRQ=d|+Up-cVnCeSPH8k#-fp@cK0sSMzx!D)9O9XN&x+bluu* zt)-xx1$3R}F{-1!7bO|LUN`IiY3m$EjaorTEc>=oIQ~QWxY)uQ*<;4N~jGJ&v2TD~?CrUexSH|Kn>q`?DMV?VFrLDy8s`x-aKcL*z`pY(Pxgcvo#V$4Qcjr7v{Of^klD}z-c(|{yTWTTu9?ow9Lfd|0 zlKnTYnlI?x*9k$W%2JlG&5Q578kGC4OXt>0ytA{@u+ufhv;H8uN5P3@QA(a|KOx4xpIq5QF+g8*b#x3dyh zqQznip(R5$nD&0WsSD+giHUi+NgfgQT4}@@`#_-8roW>&!Cei^iXJd?4C&=o0sBc9 zf|>MkN=nwFbXl{Y)6}L=&WF{eyRxqC-?!q-a%zZ`fV?DU`g;;m(u76#En4*tAAT3Kv=|h? zmrvY4H9&tZdM6=zZf$MtaJm0+Sa6x;0Ei0iUzq-|66SUIw50bVSG2CgI)Z{pKz5Ien~PI=2Mb8 z;dO`6vQ@CP)axndtRjmL4(wg@y8n62%gU<`F0K4IInYfb5;*AXiDXf#NQl`>%6LAd zU5gTdD`BY)Js#7n^}D43K>r4?+;C+225`UNNOVpE(anLuKk})Bhv&#Imuu*ewnv(>Lh##(MfT3UrL@A3=w3qa%gOFgQa zb~s!|RSD2g%_wU8j40z1wyt`PX@+o6o+b0TUAV&x&ZvfjJG@%9ZrTU7yoM|1l|}4( zF746V1z;&IzG*>={N?--CQ>eO^o)3FGU*8 zGi$s0%Ibn%wCpKN3SJq3gOz{vm;^KVexSx`9>im!_`#cbdqJ4d)TXt}kVZyM3FQ^d7WCnhzi! zKKOy>omMzHN6!Y42`4O$aI}of%dsebO98&2y$n9|{F`dhYd|r=b7m$%`QQQYwY%Hj zSA0M~b{+HXv9#YZAJ^XPa9s6hXB%s3_z!-qQrn)cU1ijNI+j2xtiGt!v{Tz%us{zS z+dkwjQN0h7pw&}k3v;#7UD@lTh-aV3n_Nl}as665j`xopc$$p&C*Q-;tpfes_*EUq z2S>XjBOp^;R@lJppU4iv{z0R_U`3tt9@**X>GkAP3;a}plZy)<1R`MqMy@C&my4EZ z6R$=Z55W--yf`Ncyv3RO+*Z(}8ztrLKd$FP%PQ~S$o!;Ws|v4?Qp}<6R-2of0tLuk+5yYoFt_Gx zIoI5|I$I67=@he*9TVFO=XKc)n&PkT?&dW74seeX`K{^Vhf$2^mpA^#iCi>kmwb9_ zL0b0`W#zB|S+SlRXRDb2C7{iX+h{Yc&CNdD+xDPQ^6{4piqo1pMnpukhEek7ejL)r z0h@niAP*RFQ{bQnv>C#=R^d0+|2^lX2sQggY4|t{-t9&~<8A%V9B>>1%gmSZe;4>9 z0|4*;zCp(lk7V}0M~SL(qx|1<-O>%w5b_z0lR>?_Kx)<4n49)j5*;);W9!rFD#1LD8TkRWGx*}Bbh9wC_2HGu z@_x03Lc4^E$RO$qxQU>!C&%QN#O9OuqG03@aF$9lH>v?g)6Y0NmRQb@#*u1>N#Qd& z?>V)z%l;T9m)*bcwSyS8lw8DR|KvCEIkI39inebKP1`__RCs-KHy3@dYO5#Vl9$e8f)) zy9T3yUb=rxn*d2m%kqF3K>|*9<})7i6CKW#IbI40Doi z^Acd-`NOQ$bo1S`qUqBu(G#3wSpy#=aSflL89Rj>wh7nqdXuxg`X7mWgfAPf42Nb7 zHPAKXO6}~b&SD2Pp)TF^*n|d7s4cZ!oBvKH4|YK4sxZC3Vz05gds0^BgUkF&g+Kqod4$LEei*SUz=*bguH@6L>gor^}wt1=sGlH>4frXWiw3A z$49)>pxHk^Urwm<8ORfpOsuR#+GPeSgIr;35)zQF_p9qXUazYuQiu`ZkH@aQ&ym(@ z^G=64C*o2DsszgSZWQiPQs9+e(vbewgC^$63a@GrS$aRD2TYvfp3$|AbPC>X%Ny-b zN||4D^yr09HcveIxRL1pfQsHR{=JixOWLNH9K|&86t6mOjM&nT;jf6QJ3z?Mduuzl zHwl5+Hk#f_bF9eJLFD!CC=N-&|FP>_@|;+&gp}Tk7@vV2$=6A>WeoavuHPWo5b)j~ zrdN+M%2wo-$^yAk=>#Qtyfeu76Cas_phg&ILJXNFM>{B{z+G3j=zaMB;Zb!Pr>~iL z5qyBp15*6!o1@51!!oGP2*blD$-M_#D`0=KZ*bb#x^*%m3o%+K zfMK#Ui{HCulD1X)aPtC-%YeUZ;r`eD0%_Vx&PN%ComIQ-F>mQ8B^~`+b%+-_4dyvB zsnGQTjCq{=D|}m}6B$oRd~qZ$=IKaT|3r=gIl0XHz`r|Du*{L=UlBj##u{De-=mYK zihK8G_9ddV3Z{bbRq-4RlG#qb^ z4bfms8W31(7DakA{SfNzi4=5EQX`j&5KplFF-QEg?%8yjq*e>9 zrn`1MOnFnesQ&tFwn1}DfF*%H#15`B7gNXIQm*x|7hGNODBMg;O!g+-p-&rO4`gM^ zNmlBCIp|JfXN*#i7iP>_`A1t@7(n$olCPF;*A#g-lJB$*%vNMkzbPX8^X>W0n|`di z=I-;I@jj4iD!9K;(G!QMVA&dVeb5Qa=~mcfW#VrmhbomihaSd#f?PjL*eK}VxS*DF zqxgC&s#UjLJDBuE>(K%Xs^u^eNnzg<<$OS;Z}KUDB<3`cc&_NSK1#+@%3ka2mc0}M z0>laI48z>Y_ z^08=D2))D((lxe4xjpBiN{&>lMz`($5WPc>p5Do?x11)%TM7_{Fpu9ir*kO3w7t6M z(~}7v{Jedc_1i9lT964F39zXO4*y!$@JFe{#g)X`gi^?!;X~0R0NgymHQRpx(rlLe zcE)p0-@!W$M7Y<2)FaYHfJ9>W5v_zzQy=8}-TbU%g?{#Fr3VxaC^^c^o5m)oo6x%l;aZ-5v@exJ^R00fV!RW zJYoq635u3GVq&B}vX0V`ZtzdntE**wO_aIMi>(pA;KOQaZjG3bFFKmm2>%lL_oW9v zz)d6b*yTg>f=uTdH$t`PF5hT3z(Utn{H4dV-W*t2#|Jn zM7~}DYwAVvt<^)4#^glUdgWIS3L2S&RX73%=p0yD1 z2qQTMiMz|2?hQQqOj@I|N%hBiMr&VP9Dne|XUv3^K8bM1CI541#XB``+2rWJHM5NG zcGv|kIf^Z>qW;Xf8h7Tt<&pAQeA%k;q;`RRxy0ZAX(E16CAGp}A2wMewm5r_bnN81 z|8T3@iGH~+)&s8Yf3I2x|}!_(-`0|V>GV5PYmZ>RF=Ktm|!Wbb%oddavOKaU$k z1;%tdgl-RD`8|6lDDOXgdf$wm?@CLUK3iI%1P107+s^5)BKo%s+FuNxw`C(eRqf_P zPCexOhy&^XR72}`>gtgxX5DJ)k)xc2S%WT)(v44r){p^UG3^2i*a9^`9UF-pimEaX z0ZY*gM4l%?%X^*@ta(jb7EP$$OTiei@D4IN=^%dj273xc*U*;o%dmhG) z)2T9#-mzAkMAcS&?ohUwPku2WSgm?fC-8PD6$SDzUS&2&RhgGm?e~|B4apu8=Ui6D zP3XC@C!NA3jQC%cHhGoJU4$twca_atTeR1W$}}$wg6Cz|!LvW}!2hT6kG+VlIxX?? zPOfB}a>iy?hy(~|4Ih)Of zxPZ_~xbQ*#r@$JEPjQbgp1XN$wx$laGi=|d2JW@-S`eZxGhCZDr#+bs&5GO+@vsB$ z0j@shNvH{t zv#eeWrB}}QI%aKux9PY~zZjk*Zp%8OZyUTd?1@|VEOp1F6Q1+;xFQI{MPeKSR4l>w zX+Hf*2nYOvc$e2LPB&rC%xDrV&?@nVq{WKyN3^x4^F+4`4k zy|zm+w((jzJ#0uIhCr8HT)1b21j*r-k&Si3&2`G{`BE`0b}#IPWEv3eb02m+{3C&- zG}?}s3{IU~@1~_$szkYD-N4~r?~~4hEi$b-Wy?)^~7L&A|{T4 z{a^Wp()ga^QhP$>7D2jJmiil^iIVvW%V9DcA0uEkdlm2{I~z!x{n`X3r-z=yrx@=RW1@<};6y?q2OLO?JbPr^M^T?p&RNTkdPT zJ%s{pXZ898j#UfoMKjR=YkI?5z;}(1V>u(bhAmrF0>2e%`Z=BU6;%=BFEAWmoxE1~ zz_fDk&R$m>Zob}d0Wm&I6h;MF79EKk&91syxBZSUuX=JO_8t%5RXlGam(TSjGGI7L z%@ry3WJjm@)X};A?;4Hv#fyYj*6snNoz#Ue&uLdVm@{>wtGDZm`xe(M2sysk#OMWl zhskE9sqb{)hxx1Rn;<3N*c8_Cul&N+%heDc8P0sxB8v3z_3=W$#+zE@at|AzIEQ!S zn!ghb;YbqvIFzQ`E`#qJolX5+Z6~m|H}*$x@Eb`<-$6%H)4#8A6XI`uCzma&sVH!A zMy&XoR-!&FeGsjZ;ITz1AgqDO=Q!;O@7*h2P^mVjWsj@K9GSO|D75n5qgiVMZD%72 z5gJRQp5TO$y9AqAX{&FaG+<9F1kgWS=>56X2bPsKM>1qi4p##oMY^fc?df+s+WsW< zl|2PC%}*8QX+>32Nu??Gv@m+%P-}BA{a92xf$=}2o^A31Ic4q;-|+fSMensc@|Ptq z&P0P02d^_>&JyjT#9&iYDs7EZ@U-(&OlSxshZ`HFB#eT*{vTyC+K;K?q#@XOF}k(Piq)dN$OR8 z1MrL~6X(>D%ZDhGuT{#-S5=twjWeRJ!iBLP9Iq+BV2K|#Ku=FkgIF<7mN1t>E*b~|m`L~$k6kh!S!DVHJgmUZjJb+>(uZn8V^lC#GLuI-*Q zl(i8BN$9!>>QnSwg|!~R7MyVLqJ3C%mnB`{4|7V>VkeMR2}QF+ct3lo($?syiNr&Z z*W>rW=XA(?>1{j{Sr9uB5np?>@y@o&W;J|=(_q11YQY3m7-yh(ii1=Mo}YZqH+x-q z@0>Ag&`PMR4;<^=&ynQ}6$~z%OmVI{u}Ph&VrkE=d6O=84@j<*s|ndX z$m0Q@YIX*XJS~UVZQ>h!H3+dy53xAUHkF*b>aZir^xj#7kO_Gl6Ram=*U;zFcKU8N zVi#uI?g^H)whP;Zlpg&!c471PM2$2MB$zv!RrgkNf(mv3G!!wDjN(|kS@Jz#Rpa5_`S4`jc+sTvm;)cd6cMbvsj8so@A_GMTe;AY%4-_u zW|u#$9R^4JJvL%<$dz>DOVR3t;u*>Oxo|l;k}VegS8jyz+GYR8x(K|K;+9^`-4 ztzi&FZ%-PfGA+=D^FmFT@s%KXUteFVf_hhM^~x1v&<8IO+J%6C6NL*&q4Z6!oK%dD z3({esNmPp#Pij*>_~m$9di(A;6kG&)orE9NKYD!H{}aimO>>s+7x*V;K|qONO|N%{ zHCHz<_jsAGZulGP9z_I+)iYv>2X{Cc7x z*}Z+uk>nCt2UGUIgB1(=)PEzvuKKnN)i?JbEzH40z|k9v0RQD`XSS=1=u8(mvFR`R zLWx^$-bEY&2P>p!#o4ct3k4nwo;;bqMek;L4lbfrWm0me!6>xjNEYvGZYW*cge~WW zc&Ji$`T-n`l1~k)aR-wWQf!}ISh=-N_I#5NK{1*R@k9avj>qK@R;#R{*KLQ^Yu$PzKDYvU;ps4zjEqW48Jt#-y2g3 zsPg`sSeVS7^7oXV+7u|i)hv3#r=^v7wkF2DxJXCAV^duG;A%-FLHF8_lao_+3_4WD zGCvOhc3u|zGDT#=f z_w^(vAy9hd-J&WhJ8R}?@)lUuWrV!0oVV>4dd4iD!+xMFg*UuchV6aObM56pGmU^hJPBnmsuv2|0$0 zcvgbsr=??TxrERE+~gh>fHfo1}k>nxf?? z0Zx$@fT^6GO*@aJ&mHq<@Pl&Yl&0m?Pt5OSmjM{-v^H62dz`KhLt?gd`82-zjp0Bt zMc;Yg{J@Zd^GdOg;K-b;RsCy+-}MYHFTmbuWYSC$cK;U?Knfa97k*aOs=0I2v$FHD z!fsGhSA)uFymm#l;LPdoV4=RD@j#e5OirUX+uSs{iOL1D*FD!d|lZ!=jyBiNW z0GsqkG4YRIWIP~cH&xLTNqqXQMVM+<;QX@Wndso-<>}bhZ?_l`#{hJ7gY|&t+y9~{ zSJ=1$t>I3d{&%-~)XP6`h|QaRNUD$``GOzMhujEhey{A6*)9M6q9Qj&`gpK6Kq?{F z-t^<rC883vOPZH+bhco zz4p|U_0<9i!(yJNd4z1~{}&$0pVyom!@&zwckN=jO=_QU)0`M zfG=@T^|g-UoZW^rIuUlEp+)YgNAn2gd*2hRZehf<(`qZHIz)cO1rL7mE58UNB*0tg z(ZYNC|6`qpTFY{zMQ&H5KHli%`I$=YL`4ez{)Y9@{130db0ODD_EQ{Y0=!^i;zEd; z8Zvf8dgdE^AfIJ4z&E`(Q(DdYDec1;w%!Fp-6sY+o_T5$ej46 z^u95(sT~to7Q&-_cy`Z|{D0&`!QDmv@af!+$K{gS;;SFAtTMw1!pAo)oStrXksNV# zKg`0;>0cWzc#FIJtHu`Pac<_hw^|h^(&cSKlj!yJH4@+jNBN+mhsu?s#^ddY2^>YJ zYLJlW%+}ZqYbI_ar=_I@sco!PIE)+ce4RLpw19dZTl3f*qDE7l=kqmY*3?TuGnsz={8UtwCe7>g32goZ zbO2*6EY&-jH=XvgWpV}1&)-Ua$EAKJDkg>m*v?i-h0}>0&pQskFSHyMT=J3uv&93d zs`voOj~^-VXkRnE$LaWv%lHTeaR5w#nB@iiCrwjheI|0HMdSd3pddN$ChYV1_9znz z3no1jenPwC2)+{LP2TuQQCUkQJH3O0gXvt2t@7YiN(9gIJ2<`#uA*K|%Jl5n5Z_mL z?uB_QVpD22ew*B;jBcUAYS814*NL>UTj(JMu=48VIaI=t47lckFAXOLPTWd6eZmD8 zo1zt0wWlXf3PR-icPvNYJ@~(uLlHi1XfD!MLv3>M@~h#lhx3%?QC~kqx{|JS zhjk?InjarF9tD%hI__ap3fMf_8B%ZFptg5(INY9FK5UJQsP=^&Kdu~z0U}~z0tW^Z z&kq-p5Fg8?L%#S2flJ-O%Gu3!Fe}9w#|SPG*i()|+)F4jGI9i@iWit*!}9W_pK_jz zrY5Plyi%8io!tjxN-+<agvV4q65lVJDX ze@aP3#-|%~eE+T4)%9o}fltuZT zG+wbcf1ycXZzH_tE8A`ahv6ueXI{*I5&3EK?K=g`R~iqVN5}1Ld5GxsXYoFxc-zzD zdxExY?e&!vKI3E$LJI~$t^%M34i}at%vSis^2>dL@y9At%BkinJo=EzPy&7r?5&|q zlZex%q{jOsU0A8kVGw*N28oW}ibUA$nBm2|77NLB(z}4Xx>!uHKjSZPBZ$QU;UT8W z_Hvk^?-=(@h`tDtT8X~|yYu>ohvR!(9fpDHyuQA^4EiNU_AcT@-FXnND-7DBL;B4d&;ssRfv!w$QVPzGL`WL55o8nxuVz7D9po*wWz;6N>qaYI1{K%W2C_Z?OVJ*Lv$d#-})vxPFeCdAt5s~+?d>yt@sQ;1MYw$I==ka3Q>?2=6qCy zSPVZ+m*MGBkylTIB`gTuKcmD%vr2$ajeq&Qs?*@~@(DivR_!oYMiMCP_nT4n85KC{#s-52#Jg9Lq|ulz|X2I$C>_0c-v)wH0$sa_r9*{ z%(b!Yd3^@ElwP>u(w(d5o8?KsA>9+Z#o3B z2#=1Ta^n?pb)f-oC}h4|f8)lpIrOWehrS6dMJwQs8VVW5$L=0xfs2ha@kBPnxkK4H z^l)G3Jzt;aB)TN`36M;bqeva2N~vOPw}9wP&SHPmu2|sH&;?7ZiF5dCoiSipC(sl#r{ zL&?g@Y7cIYi|Z3_m6h>Y?k{yUG&JOl#pmbemp3=jxni*B=;$!(Q@`-bu#!R*SI7VZ_5r(npe$W!Pwra+dQM zQX-na7R9(>2>^+T;omr*>g4}O87YT8wr?Ea&!JmmKV1gd8jKmuE-w%t!!YCzdKcv{ z_yZj5iRI8ubP`!!ZVM0q$wDoT#BseQ9koY1f=o6v_YN{p$^b;1o1-(Fp_?v7G-9kw zL!f8?sC(}4U@yfr&cMsSd9feiY&*j^9~Plw+3!22r^($LM1y*8(NQ?RU43sew09F# ziNkI1N`BLY;M+Q@>zVHwu!9sh+ z$S8$jE)bIl-=m=uq`*;yx`~cH~CKbrt)L+?b z8;0r`@q4n_v6oZ*AwA;;2UIJ+UW}nV=7ob(!vvl>gNaV?lq8$;t)qEVAahqF_{H<* z=zEKvc~h^9Jmtd52M<18EsDTfi*t7;;t)T?&wjh~VUQNcJRS(WH%0gnzs~(O|H8QG z3MwSbpN9281I+#GH5@cqNTzlnMo)Lk!hXoowOWI|vorcm>D?l{CESj8%1mGD@fmoL z0WS?LiH};F|F-Y)g|>00us9q(82;=1xjs_sNo6Z-dp_7@|FnyxuQ513pT$Su2Pl?r z-oAaxykRvs89Ja#;w{^|F*O$o(l{c{c`^4kDJm-9boY=_P1WFok$T`6=-mWc)f&2C zfJuNTKw)8MrUkgS_3CeMYf%vr88@dmJ))88wOAVlF=`GZxNP|nNNgZ|)FRzpJ-uIJ zlEpi!&$Los^RsuFFW;WK);HAFVa@N6L@4w8H}E}CQBhS;@onAl#WppGqN1Ta6^MI6rp+zc!-grmvCXk)>f1kGmji?JN}QtROXEL6LHY8k)Gn*qY3mk z=Lz`Wd3xhV{bYOThi0>$$uX|_y26=LE*t#mo=!DK9DbNVMmW-SR^N@C8rnY#KIyXQ zHK!oZThN-@^bsY4Do@18*PtwDl;r@LtRjisyMcun#&lr!!b=s;yD=#0FR4Jxrw`}& zw5#(A3q^xpu)yL5d-%1(!xqRab&ZW{pw~Wgcj<}M0AS63+3JT9>EfTKY3^xT@G3!Z z+p^EEHcpVP)-+2cmQwxCz;@KgzPsC_?8SNV20TP0 z4TO25H9qC$CU~9ls|@(WPF7b}w_LDq17EP{^dC@6wwRPBDY+FIEhHr~HCsJ;$C%nb z^gSd5o1F~%2ahdS#QopC01%{!9Vbj25=2z5DUaXz0QgJD>v}4mUcJDi-9@gKKmu8y zskuqgNNvRSjnkW5W_+sXy^ z<^e6TzEhRK;Y{YgR!WrAx5s=n5U;-a`>BBC~qqOV>NhQzWH=OAPHmI0}K ztU=n-ZFm>W4S3xN#a~;HF(oIkmQTB|g{^$ZhEl>9oH0dXrZ``;yJdH`3>MsEyyE!u zN0DS)8}i^sHEzytTqBnPmAxHIfEtOanJjH84ML;H+qtR2w!IIi0BdJ0tNeFI*3(Ra zFd%&xHmFT{f!=<_t688SFbuXOAE7RWT5D>)Yk4-K5$vqp`q7G2w2J<#p&eL=RuSCav)#gd+6o=Pz|k`u_fv>G?(L0CE`kmZhxp z^w!NfP9X|1$Ax!#?CfT|PLl!YENEzG;Oo`8Pu6-yD@>{&U2;_oqixT4<&o83SslrXEssU#uHa5)d`|U+vev zvV76QbN=*DU@*ryWmQLVGi}K)(K& zJ;jaPF`q@&yRc`D*x0l~S0av^ieq=P{7y*6`JHD-Y4m(Q^uAXk?_1FIKU$MYK0cY} z&=egp7&qXS-;_SsSL)gt2MYOXKAes3iEVbCmxs1aG{i3y83;?}GPD1E+L_ukT{>|E z-4m)TB*&+hQk#R+N@KM_oS4VQj38DkmNh6P18aG_l0dA)z$A*SE8xx0x74~{Uq+~; z^?ZJzB<6Xu!K120MK4;}I0#^y)NV0W3OFA-kCQXBXOKT<2Dz1`j73&KsPwfq0bYGF zo9Mh)@xjqrVAH&)*Tc?M*sss~U`ULK3Du*SZewEuOox)mYa-I9pQ1Bl7EEwZItV#E z{rV8w3?l53XA&;^I;%%V;r{-}RbQr4hY`H~bAvBFRr^b4NJ>fhZM!1pw~ShJ0#Xtq z^#1&CQID!p3B@oV^aHCmCC63KO z_zd5}yFYsYciQLcm&aw{r?6@Hmc&D zMXJSIHh+A;rU^|=-mR24AgQMcYX_2!La;TiJo(9GGE`d^I*3_guwr5~k5%3I--E9b z0Vx{z4at}PIXUInxSH*3$A`Hef$};2AX+cWnBF5KA?mi1t+B*N*&HH&;wtl5leEdJ zsg+VFT3csO1d8j2H~oTG$%$t0Ke4R0A!H!dm-_sfSxx$W&r9Fk@+Gj>RBk*V zX{;h8B~=1P5R!D__x_;>V*yp|-c-rk=`RZn{Ct!5FvNH%EwGoK&ybKj3{{njzrG=d zBVyuo?`n1bScmi2KdF4M#Y7-FrQ@OQv92j)Y+SBB4*|i2s_q(rcmV6*P#-i%kJO$I zOMiaem%#E&1*YSdNLoH*P>+_LOXPal&q00ml<$e!Hmv?q-Roq>6K=hzcUJ)VnYXL7 zrO(v0tja-=&0Weo^4?C!6a6`janMO+Nh6X9~4Ng-7C8 z7dfpA+!wEv1VB(~_rS)=x=TaK6EZUe&!gTO`yivB{Emy$ zW1Adegx%>ee!DraZRZ~1CS#hIJP_720NcUb5yWa5aoHT`%2o>Mb0m_Wv)W53(1OHoaA0}Aw*(R)ifO6{K5V)SCowlhTS0_EucFW=r&g*^#)>EVd(e3xu zT~VXEuW2Fn6v3mTDo%h&1G)?Bb`tfOQRR82bR@m6ukR$UqKuzP9`bXZDP5WDXMj%2 z=sX4z%yL$&c{`%y3j4Uo0#5G)O$(zGiiJ#$+_#+}7Y6k-L0@%$xnqVHEe1t|htoj} zQlaYV>Y}WI5V?Hc9~CUyEvyl1h5lpvr?}!3&AwW2sH^xsTnx;bL|VAhOVNA3T>Xdf zAHd>fceiAQqcD4>X!w^Ue$?-&h+9La48Zo8y84uVEt5UozcM<}0|*!!IXsBB&-LYS z)%Q9qj{fGDTMqaDgzv|e{x>=R(=Aau6GE+U)RI&@?)KO^xeN&QqRl7SCi7n#7qQ~C z85=2jNs)3GA(z>|e$YAN<|{Ne951*oeW&UM$#ow* zJn9D1a{BsYlH3);rD%b*lq3uJ%lG(rd!6*{t3QR;x`9$`Be`;41tP+{4Z{ZeK3AMFs4gjfHP`=? zFOO#Gbz$Q7XH)&XV>Q%q@8e-aIEPqo=#QAa8ptH1^RjKktXk zH&Hlmol{6l`LJjxL#pSq#YJb_p{L|_c6OlT#V@zZ8MBe>j{)W%hbB4;)lGk4tFx|Q z_&euwS-LcXgiD2*`+$`vygIekkKex9@jdJB-)A6fgC+pfjqzFIZ<;kN(-230V{Z>s z5EI9j)pxyTc7WJRi3y}5!;UrQ21Mqf^ml;YOUP4V=wMFY%Jtm?-B@cQ{vtpTA$Ben z4?8Y1K4L4i>viFpME+lS;G{oIU#0d3p4RH*Zl&&;zDrEuq%{2@h%6KHWP!?yKqe+6 zl`J%3DEBs-4Ef!~PP<;JXck4lyY%W=3msr}2d5JClb-L6P(HpFQwNZ`^;Ez8J{oH3 zL+-0HfodYPS2WC-Nxq)Xdz^3P!Oa2qh9C9O8HLAW%&I6qTD9C`(g|Yo5u*w9{O7aB zO_f3jC~jPE&58$tYdNWbKm{7^r_*L|ol@SXM`dSe`Py7qMXiZZk)&8$U#ElI8+7e< zXsDYbGa>w+xss9+q*h1I%2s`)32L5o{{rFza56~px}zWq3H>|!@vlH=C?}~m4t8Lx zf%um%Cn?Z3$bG1H-!oQ?lJ1BJiO)7QUcXoxwo`hD8Qzc~LsR+%C*l*Buc3HdtEUTI zLcme)nW9~JS4Rg89bKm>0;EODUG~F=mAF*GxqyG(spnplAciyL696RFGA|qNljGyJ zqqUcl_-vPfw1K(nBkc7+^USCXVAbJU-o0Xbh$G_Ws&QxEDry&4_n(RP72!+Bj-nV% zv%jE#n3X7Awdycis0TcymBLHVhAbVlv=3@|&6G=foG}Kd)%G!2)fvY#W$(bzS`1b1 zfdM%WxVrE6%P$#cAE}^sMPPH-3B=M%F%kP^2p>Rt61VB2YeO|C3hC7uNlfszzRYM{ z8jXh{;Xg3_N>h<^CWnz$zQU4GG|mZ6<#Uot)Sil3 zk)|R*G43|A3=<0rx}$Rs%y6~C+`IB8_DH>Kuf#Ro1!ORzlvUH$!vE+Li>n6WWTW)H zVq%kST6m(Fp)9gokl&|a)yb9Q#ku7qnHDr=!2VwFLQ_{s*U_YDU6hFD=w3}^9N_9SJ^dDgh``Li$hX>eK@V2$?YSA}WC9tGP zuH{Bv`{k6);ia9eS09+gUx-4W;^s?DB7Ob+D=RC$p~P&65V0S0So#6NH z-|R^?w+$o3cuxWm0f!8by>nxrc|23m*c+f0({<}zt~cWJUrsr7;42FIj*ox(Y!)g6 zyH9x}u5%MJ=B}Q!wQ8y;gY?#rkS9ruWr?A{wUktwo`TR1_m6{bgc3Wfbt%#~{dn5A zA;aXbW0CjBel&kRyw70^NGt~QvFV^YVK%D&M<>R|aq9|C6>qxX1jz(g>7Te=Z~3a5 zegM%{h&T^1GB*C8q=aYZP+nec({#S=;_fcs2OzxwSErH0MbtnAw4}}UCrX`sq#_>k z3NtTI+z$^AO0Q!8Q3%QhNNQ-108hXN@Q)F;OrDQVL=*&`XZyktPZZ7i8{pMEs>LeZ^{4A?C1)Pe#gW}?uKr%OfJd`|n*PZ#Q( z{Z;auJRV|XvgNUu;mmNA4eHWGmxJ^7d;sH25;C9=*7WcmEa!bnAERBketN31tq4e= zt1E(CBsF}X>I(t1G%_;6%feY1p3|%&Fw}lmWf2VU6FB*D>NBj`L2M(HbXkbqZc&)i z^V%L1W1{8cjN+>$0OY2UBLykxcTlAXi&~TdIFIl*aE;mmFhI7}6X0?>zPj3?mI%0g z`}XZqLPENoI2r?<1yNB^^QmG=01|^+{n6UT#_(0VF(N1gqTD<@jEq$Err$()WB7j|Gr zi;Y4+|NTr#3JnXx%6qB#u($lCSIpqPO&56N#9DfqX5Zyz?oMP10m6f&jx_DY=@bsS z$2tO755ZtU06{}HQoVJ>WmaZ?Xze}0QFnla|88y-oOlXcPAO_gbu5+ik5~uH3(O8m znt)}n&H7zcris)JXBN=Oe75s=s?GWNPe8U>QDtPrO>F-LZ~&B%k}5D{$2~E;*xA?I z5p~;bOVDNAKReppeUhTkt=NX^v()ru4Yj`+-vDL?bEQ{j(`^CFj`gN4;i6wokoi=E z8z^=d;w`kOmx>dVapR;7)@RADXX!X1`exgRRW@&^0n_7{NZ${?kAd=HBL5%hw$8r) zlj{5bG(Y$M-s29w4VS>x#%E9Kpj}gTrAVv%H-)IffYjdcPvedm*^`mra_*xT4UGrt z{W~xobLk3?uKD4?!OD@o!9lvA(Oiyy;1W2oks-({hSQNXJfpbxI{;(yC>Uee^m;HN zNA4js!t_KE_q!%X*SP=V+ujag09D>9XWJ6~xhTrXIfW3loZ+x)D@D?aXi5d*cu2Q6_;vYtJy;v1a|D~>_B_~iwE|Rmou-oo2x1kSSJNp&K;p_ zP479mxDX(3gRolnN}7j?bn9d9uGbM|lx7U9X0^HuN-W-=h{GOE;UN z0oT<bfK>hFue|G-Hx$_w% zWjL*L#BmvaKl;Z^5W_p%O>^On)RK2yyZ+abS&wS0KDNsYBliPwJHq+*1*fImF_P`! zI8|fdl&Is1=dp_Y$mUmNyC5^~=K+D#k>DKPW(&jf#^~|hGWr%I8!R2(Hw?*sfieU= zqdixRxn3!-dpSleXiC6AK(Kt>95FFU!oO~@y0PXD7dnnvcaIme@e8X$;&{5hQ*t+5KtxII^%zOc6rd70&R5i~iT+tF0b_(v>Ak4D+xUK90j{C^YQ1wKfKYz!wS( z9E>j^FiJje<`MGOa;8SydHzUpt?6&*XK_@lKAO*=1*0a6w<6GUaU`AxJsGPxF{TSm z2d?6HPLn5goVjude!wMZ)bryxq;S)*FPd?CzP9}H&8P0CPVj}@r83NS0LcPRx@Wd* z?!>ZIDuz8KX6q^MlR^pf;)?`G@@&8Q3h?{|(Kz?$qB!u~_`_$(_f$mE(Q!NL#wnO@ ztn2{&RPplW5(~se_)G)<%Q|h$(mroPe`VrKnb|J$$GeX`bsUXluLr-$La2KAgMjeW zM?n^^NBb6(c?kzj{eL;mFGataAm}}8d%atd>mHa|bkKT8$+L^hyu)1kg4*U7D+vGj z^XGJx4Y~e~oT8#MNH+}MVSfD@5z_R89ITk0o}OEYrQe{w8B%GYeLg6U*5Cb_2i)>r zQ8Borq(okuLcjspr&8z}f$&^0NpYmJ)ErLa^74ZhMDR?%YHOIzaJ=ROVqNf4We4uC zPYyY7yDu#KBz!Wp^>PBvyu$51Q(QO8;DYZeu)>YtgTl1fGFq+v%XNu_Ee}Jx&VyRB zbQOEP#^rltt7y*fGX;EU)zh5Q3*VC3FKgXVBbj>QwH)MmeB8%4&XTD^kp{O9B2j8k zMh6@K8m?~(^In3isPvyJz?S{dpUm|e3U5N9FyLu}q^aFz7}ql>+YWREV9@p~HZFab zMa8ENqiGM8Y=8SSXnp+b-v&|JpyW_D9SW$KN%#EubESfbco6UdSq5cO{+V+>7OL6i zSlQEu-aC)1rr$h&&a<=wswllNHKl*?;)Nxl_@PwuVsoOZ)g(T^dH@dO$c1kVQt>q7 z-%1&}lcUVHNj#2b`j{m`j!$1R#1bR^60GGTv}Gv2zWx3 zNVsf1$qiVpL#eWD;Z||>Omx^_7Mw(CGg{PqId}$6N9_|eC{dRt9)gLGEEb0hiP~HG zt{>s$ucmDCa>{~mBIgD%&7B>e_-<>Jnm;ZX#lMp<(Lp3a=ax{0jW2imt6R;=&!L~C z8qD9&u>#|&iM3qNgE6<}_0VsxD3`fs+#xO1!R6q_K)B8w5+tp6$T1O?9Y*R+3VbNn zpiFj|>yh4oyFi>+j#|OfXV3gVCAW~%8LN^KwSshT22A_^)Oiz3T$&=e7sNi!=h^E8 zfk^n9_L6rrRqy+#Q7TK_BIC{7lnrjKn-y@IV=E(7R>Qg;zW6xC6E;4OXF`M zR)GLmVX`5(z5GFT%S-(Cu+jC}S5tl>uK;YgSguaA+%>g?1hMtJ7tx0~Nj;=wAHAZI zhE+#)lcEo6ev5}K0ge1UGE!Pchr%1SLA>}$<?k+imf|An2`0~$lA;DR#`*91NcwwGc>eBJ) zHv*r;fY&aCY6lf8JK&d%SH1~9SpKo^Y0Nw~|mR$O@+Xp3&VW9H3`B35I%@0XCIBP%oH>Q{o-iPmV4l7Y?7C5z| zj^x7oUH%D{3NRBfIe91$lWTx$D^k_W3L0Jv%g)VxJlsGlAxnJRW@@$rQM3Ms04U}f0~=&x@Nwbm+B9*SiJO?Z2sY8*_z99rar{djV7a}J4(IS zz58W}>Py31U;eBIImtOVa1u#3X3L=B`9vcKyOa?v+~vvyok@Mk`;1x-Q|v4YtyBS@ z<&(Bl!>itR4-98C55>v-sD&+mcNj{585(O*T*SW4DXG1l!aA2)UQ7Su;*0|MRA2Yv z_(W+O%bFR!ObYjx%GA8~moiT3&=;WAqDghsJ24}jUS2jRCzW@FybFN|A;c-Eh z_5nj2x|B}88FxRo)R>MCjHs#&fZMO-!0;26WX?j6j2>GNZ zSCq4J<@Wh4_4e2SJx*#<)&lxwKRr#UzRCMM?i)Rf}{pY#{aHBSxgGd85MswxRE zn6_Fj5??g2T}4bqH+U*#UP=h_qBk;Mh^)K}o-IL~(a9w(#0TnKCg05}nG1K@j<9;Ral`7t=UHP~ zIW#zgIK|oYc6dsxJ$zNA(5;jW+>)`im%5_WA>>%o9Y&+!M(F`)wK!KKM8C(ZPM}%*fO6x(931xsLhltzS7JmvU z1+Y(uH_)cY4#$)mMDJouVrPKDlB4kzekp9X&)A)JKkd)ge&lQw-Z>H?X!O7qC)Q^8 z1$8G^61V2Nd^k1#b&6Tl*ep!O$4a@Dvrzt3@|V|AbXZsIyk~E8s=&uK`P46)a^F8+ z4{vO)B}I*}kQI<=xFWqSi8V@-#>LvEO|uhY(0N@P6cf% zc%ofj9DnnVTC;xVcr#<%UbfoWAv>M7BaI|8Rzn4TF8M=tQzlk(J(YLiWfdW@j{g~Ix`algK+e!|9&dp6A9eM8u z8k;zuv%1rqLXm1Jq($u1Z@liG^B^Q5YHMwMqjlZs9h=0F&4J`oz2tox(e1$GMJIed z7@i9T#DFi=U{gncx%s6 zk+;Z17gJ@{)@fcGLSWr2+1TEKBT)DUq zKpKt?1M^N^?s=q8RvB~2{9T{yQ;?7P1PX9rE{EwK%)V=Nagh8WT({hlCu?77 zdlK$>MB=jc9poA4%34~EjgC42&sBbOO0S*A^Qky9uNczh$=xLfRNZsi(Tqeze7^Qc zg@KlPm))1%Le9@zbn7#2Zk%^C-uOg^Ctfet)E|EEV7h<0CQ-AuWT}%W9nmsGIcI1! zMHmP(qod8(q;sWI7d1$W!qAmL|Dvo*N?w9 zG+B!0^ruE8lu6xcq_&)}PD3;E`Y!^X-2;MbsDjSL;Fq$jXGB#gCu_dKhco(+>8b_Wi+(cT(y1WwjCE8{oc!GVPU}z_O*Jos#?Od zQDcVM?Xo+SG%9g-FJ9C*=NwJLJ6S8VY*s~IVSQh~ue!SWQ)JJ%%|V?^g3MxdyNN5U ztbzhB#~VmXR~4h7e}47zoa<1hj_Y#0hQi|51ToY1OiWAwa?_Hs!@gKDcUf9_31AYl z5&-`9yK#4i)<;wEdew@3;}|&|xTL5?}rmT213N*9)`Zr@!5K zt(uIBH13U}Q%T}6t#O}P>@%$FkxOD3070#^XR>(6#IvCYyi;3O3K!a+ zeP)ban({)#AJF1;Jxp?tm7pie+Ph4KMV0Gu$(5XM9L{K`P+M4Trzg*rCU0Z}weDt& zxZSH!Y7va%784jz#`QfXV{c?Mta#jeebwkSY`r&TAvI>H7@!O0BT;KQy|{JGZAH*Q;nVvyg~5AggsXF{KoE z3OA%(^Nl`T8@^c-1qEE~?d>1SF!0*UW*JlBJ#H`c>!IN)sfogU7*rd*eZj+{Y8je? z@;F~DE%QGt@Jzs;A&(IKnK`>sI0weCBx<~_DK<8?q^&Kh^?{rn%nU3aP=9jtz-)r| zdEw!&#$o|4$L^Ch$s>A`7c(1M>+7H8S$&}ZA+QPvXzt!V`Njlycco6dPKwB-?M&4* zP31DfiJ%mkT<^jMa;Ce?xI1eOx4=eXPHSo2O=E$DNep;N{psoO?3(YZY(bKd%96hL zK$w*~gPvXky@-e(VhW&=}% zs<_sARjZ4(n!%NnJP(C)i2pR;uaD|zj%L1!?ShG)%y_W|N?^xuwrGLCi&qJY0F8EZ zc5t35E{90WqTcsu?1z43Ig4d6;=zVLm5JJd=tcIhcsrg+#iT7l$Wu)r{ z3zi|w;=J){3vs#rIFbf^)jP8@bXl#TTE@-59AbS?mr*hW`GuvUUxH9txfg;Kg!-Oo zeZsW!YeB#cm#GYNf8)l-95H7&zE@sf!QA{6==)K3tL*+C!;;_@mCIk%^qu-yv|VD1 zj2|9(nmX4bTZeWu7ssH(g?eM)Qc(#GxRuujxo3|5fGGaJM^7(>uPddZ5(Q$kXa`aH zz44LX;IZUNqPjh{DG5zsV_{b*<~NH=myV?H1;-_Iqy{&Io64GYGgDR&%lr~r0fB_j zrl`zr@76~%;ZU%P%F57hT8Bd95>w*s+b_LJPcGyC^RqHLAAi<#gF9D_Ldp{pOxCnA zEJLtK3OG}~Yg$@#5#xEa;QDyvG$nAUfr&q`xmthJ)DC{E5{Q$zjHf~OGZ$dVM|e0G z|G*sK(Vumc@A>o@*Sl1DTPX*Jzq>36(Kpr{1Y>5AY@{;TYi=*547UmbSq%h_{?D>?8D+^?^bOKuhwD8AL#8P{Y36!vm?rJ}uHePhDIjuF& z2Gdnt-jC+n?N7A{$Yb|_zm7(QP%9q{uztYbs<#go`+rU&kEGKe$vs{Grt+(v|GAp- z31`cH-S;lo?|*rzmJ=fU!u z^}0;R>2jQ{urRd~@_4v&=WIphTbyoGc_kVjdQiY8b5vFuSRU|ut+8ygw{w2URjzr< z&CY`QYhj?b(`Gk)YW-=lrM%PNN!MYF->=A&-X;@&xb`oSo?%T`JcA*o8OB>Z9G^hf z?204PVk8AS0gKb$>v_219`H)leNwx9Jx0i?8N`R)@px(mGY~GXQDk*kMsyQf{Cjlm z<}ado-qKGD+*Eq&xykW8?&{QFZ}Ap4X07v(tV+uXhPK{cXz78Xkb!s(Z3rZ@j0nO# zruvME)kEBBj}_w6(Gj2)nc0aNpRjbcH7t7@ZK{EJW-%1N)SY$7AKP3H>I_?{5^4|< zPwelpYCU6eDtASOG@MN)-%2gbYiMy&vHVEoYB_4~3N!S(Ev=nCTM@*<9ygp;`D(4- zs7zdCA8Y?2=SeOOdi?2Z!7G6>DuKy4Rce17v3$#y$)5WLE4ts4YH?l-=Sdaba}?i% z)s35>K)&UZVZ{CO@C?BUppW!9l|@jTCXQJDr_WCLP!nzaUE|gm0!dn?)ag=+yD4nh zcZDAk^KOuGH{OuW23O zziU%2Cn)Ae<^DCzM{G@^>JXo^iP-DWLE;M&6t}}o?7P%JLS|i&6DJGao9PK8h=*6H z-o=+!7eWFeG$L2hFuVDS4Qsa*RRqZ2Iu{GawRII_hXXEz?)N%9Z&b~Hx# zx9@50>oA01FJuS#)|2A%vQXO70K!VAoxyFwJuhL3keL?4QWH6X9 zsGN}W!lY=Eul{cDfE3kmMa%7u9QF2!77-ush|(wj50u7mnoH;07j^AywgBRj&M^6S zMNaU|+V$TN5~@MzF$$6Hua5`u4jEK&Q7k_xZZPMAzpuR(cuIfFF7X!0+3j<8N$K&W zw7UY2j)Y|S$}_D<+1`ox!-L2qA#ap}EbUFRa?&;f2l97=S zsGQlgGG`aMyuCfY?%ueF6cI55W(T|FI6ol3F)b6{WH)7Ia=m`dDm%=@H6W`Wp?Bm9 z?m>W@o+keUa|Hom4ZI{5u=;yFHAwXKZXaoG#)T|zrE0@Hit-U+lk_2Ou#LFv)C7c$ zLEt8PN6Nc#~+qUM`<*81ZK^6fZlJ zmt@C2e2f%(F4DZG505Npa$trerr_$4YM_oO57nx=T3J|Iwm(eQ;U-}w^CN>riWMpP z1QG>9>5v^ET8zmjN6dk8O}&}j618THD%11uBa|2_pS`&%**WuNUm?-JIc&(yv!d^xt1y z-u+QtD+O}euR-pO&HZLr&FqZ>m?|jJ(q-AV-@g$BjAlf!_pw%7 z6qG62Hf`GTC=!}${a7U+u4{TN_h(`vsM;7E+cZ!4D=NwlM5zRbc+Y;uswUf8I3Ch= zbm}z2gnWy;V=B?>ijj@uFyDV=Q4eIrYj9kd{{$j_GJ`k~X5e^J|8N1%3eRn-En`2k zvi%QN#iq~N6<#34y2ZkmO2{V-yg%H@b^~MjnTmT*>^KUTBHzDl>bo9 zjt!3aVbg{^{RmMfP8daedEshErlOCd<;hNL7n`&8@iUk-+@s)AzsJ{b z$5Px?NhPEg{XzdS_`wf+GzwD)76UiXT+>?m1X}SE?oAZJn_>f zovvXqY6*~32=u|@(Rq7bPk;ZFngn^*_~wFaK6Fr zRn;p?6OSn!TIZu#_s-&g$+Qi5GKLfuX_0>#+PTIIwogJ=}7`LRy z!*-L1&P5VACOPguCsDWO0LBgQ{@&94{So`hY-@EhLf;T*YP05e|1oU^BQQRYcStIp z$1fpvHGlS6UwUnGJJnW z!Ae=tk;p(?z{a|E?{AeICX@+Qe6pt;aZsM5dqn&N_8_Tm(ev((n>`(&Xa;J@lQ(GR zg@R8QsLSXzygh+JNRwdnySwNJ)LXRoLy{@g%NJ^%Q3_>(>alnQ2|oaJqU?7ueY+1- zJd!wT7HpcT@OO@Yo{UAZV`z(vM%qcg@2|)k4`?(Tm6oc7dZYP6Pf$L ztHT7e+=@fPZ0N|qPX8X1R5SUUl*@F0D6C8Cm!N(X2`i03!{>oioq;1UpJ_TcW@yS@ z+SJ$gi6E|yfJ#&zRHm-_H>zczdIRZhFiv+z<=>>V(I)91oCq)IqED(_bK7C+wl7$7 z3(p1~0eMHqp|wZAr4m#Ex=u!+FfME;f|!@a`vh&Y%o=*qs>Aqp+Ze09z^+}!>+%MY zB}aT)4X%u!uKAPSluWUAPzS(Nso6CDOZOu*NFLTYfSnI^<8X^a1k(g1-lGqTw`Gr? z20vsZssZ7P$TioA=6IqK;-BU0Ib&{(o!4<%N=tlS<^L%_f&T-er=W2o8XgGLJ z?y?}SWZW1m6oSdwb?LoH@mROr;Xd+glLqD z62ytg1RaR@NQ*g_{7|IyQ6GbArdkkM#Gczbz>X^{?3tYk5N`qIin8j|H*cfx1w zjqa0ib=!uE`@1071)_nK?QJZ8Z`S$YiZS?5ipD#=ao@4G#&oM zk}hv{b^P+X%i-xdRX}d|vVCaHi5h%3*!;Yr#Yyx*mWyT4amZ4yvu-rJ?h%}ebcaHn zs1>}+zVL`rK)y*8p44Qz>PF^|o3Z>$q@6re21r+f$BQn#mv$NPOFFgv=z481{Nx41 zJPHAoIqCE5^ov&6UfR;l56%^Rjvdw>0FI8IJkELv4n&38=8Oi*my1g$Onr`0@f9l` z##b`F_lpak4U@*u8cv#q-$7b#ZShTJ^qns@rjd{S5wa!ILBivRr>}F`sYw}85}gpr zFc#A>wfSX_anGZ>XyA`you+c9S#=e8x|C&$22E*H;*25XfxZutT@2YDG_gXt{ObBE zFy`-|X0PeRM$ZLY@N2rk!A;n%<}xrSNKEKZy9z(wDYJI93c>lpR;B}eAF)kc7_lCq zLnD>Ad@Vn{th!<;XH2ZOvN=mxS-;cD${4aKB3pE9M#V1wIV>gH*sbb?@lD~G@3Y25 z|AMC4s3&TEEi%swi|UspEExB{o{=D=4G+JobSD0#g66J!Ueq;9QN-DjkdUA<^A^N1 zfUqurUc%yCnUA;3K7IjK7qjNyEFQKQOO3eT5?8FwU<`2(84ZaK3neaC&2TE;VkXE5 z2;_6O9lo@AKiyJIH;`ZRY9WKJtSz4LW1_I@=V7WrA&z-VAl<}V7ahHUS#sDeWjq|* zo#j<_+08z#jRr&=n8Mxc8%D)+mU{t#638ar~8Pq`oYq>iQ?{K5}nfBY)90a5Q z&O_4bPCRkBy-_Dxz&KvVnaV~k0kB$ni5Ww68)r(}+=}Po;32N%c?pahrNr>CM6pj3 zX7|vf0!NekZ>ja}NY{pQx_e9~^?I0a{bod(MEISuqU`X7kVx9hiyH7g^JDwkBfQz$ zV#{_{xlP`1bGy#?^NM^7H}?fmE9CSap?kbHKVkpZi_xL&Fbu;={7I4QKhsmz&eJVZPB$e+DT5vk{a;hIIgKA z%{UT0!C6Q#>}h;exro@&e+mvbz79$F=02~F5&inRy6N;{Fg%#yl$BtUbIEe(jrrgB z9qq}|{Q2EBLS|Slw$#HsCM-KObG43ewFyR{XM1nIzb~nw+l(kapd#{j%{X0n>+tW- z&2uvwWK_>FNdh9aW7tx?Xh3s{Pc6;(UG6Ew`E-hS+vNXrs_bRgeFHER7*5&wKQ%I=V&#u1j zzg(d3UZQq~%hsgNeeqjH(M2Wz_drb%62=*FPfCM@!pXtkk`~cK% z>LEUddbu;87RgW#nCO5rw&i5YeFgGXUT%|brB%ZNFn4|NgFEJibNCIu&6Qv;pxu4R z>r<)R&lKn&JYE!kyQCYW0iU+#;|>37ANFk?1Dg`!Fyh$YF*CIZ$dvDK5>-6&7~#Y6 z($S@h?Hd9UrN_nZ%ums+^;x`Yr<*)7S)HzATInjD^^~oT;%esUH)N;v7M1Esh}7;# zn|U)wZ+(*8)Q$*rrOR-Tk~vF9QAu$$7?X4@WYOauKL{Myl|wkm!6p5>^_z9DtNC7v z*UA6*lkDm5^dh3xlkJ;-6xJ(*Ogu`g9hSE6`-~+DDdVD?I){`^IeRN}XQsd+?dm6+ z-nL8?RElju6Lq$i5lXfVgC)-z&Py~)M zf+~BWxGS3a`w~FTIgx*^D)R#TgyWc54_DYD`*v)eSMiSSe_{bdCRL{8rPtS#wf!#) zO;b?UDFsNFF$d&cM~eQF)AwG(fW@WB_QnGKql?J14;C?Wr=elL{P`E`pWmu~EqI&t zAs6$~n^`oT$xC$No$a|smGW=rbsJ>6sTCh}G-N3+O<$)izO=Htbe5lyE05Y*FLaq? zuF5NiYwBz4)N1)}IK-iachObM>Zla<&xopGJZj9bq54CrCXCKL2oR6Ed`3U^xYn$2Oat6^ zkbVqZg)cCn#KuHtb{^QrkTI|I3VuG`e%I2p%xwyl=cy`L{DUb^^}JKcyIZvKB72Ay z+i}=v2rGZ~W+Z_c6F^0d^$kd`=i`{Omy@dUsQfy_m3h1?6i{*r4yFNYblQ(b1mI5# zZU)6?qqJGPjh!4kAhE@FT>oSz_wl1Qg_7I+^;-qC$uD_J)<#Bt5zb;i zrqa8*SjSHC+ik48a{9f01N@8!aP+I!eY~W&cI#U@pQ2eV?s@pSV(q1E{>}QI#AG(G zaI#I?xUmsz#DAtX8`gYPN-lBCZE91*CSB~lA(N0pdK`dV;B41WE3rM&PAEPGTkb3h zlU#G$HTz9c-Cw2U78 zEW^ojx=pifA^vUlL-yyfE28?h6mNf{sL4|Q@PhR}wG&A$`_zCiP_+3LbKTL~qyNKo zw;P}|vd<;Y&trd~w=WDLjG%L^XvI=h5CEB7&WEmynO$Z%WPXzGYh!gUM2V}Y%ky{9 zH5y^^@0P9Xh>@HKnp?&eL=hPaw{2fw)yV%*Ng}lSXKfvtc?GGA)yCD+*EuAAtxZb7 zWig0TpV=^=iqlTY6u>WbnLKeh)-ZRAEC_EZrmR zlFTil?!tqg#l8;w-jW1_1jRyicj3c`*H=2z&S9t zI+>dhY5@Pe=rFn-ge-i%QQ0k{!SXluBA(BY(w=eVS%VC2qW>T)`?G9u7xZ>FTrg)M zN=qH~W#4sT)NBK7PTg+2?1~JsBhp*3exgK6zt00Wc*dC23MbJDae-K%TPHcrhSx+a z&en$LP3?w=_ndge4nJx4A)B_?q1Ykm>8nAEHRY3-J?bf~b*^rS@g#JeEG#ToM6X>a ziDH>GGkU38dC8^ua1AdphvOUPMFC!Uz7m?!Qkj9{SR0<=*maV5eC0BB-oWJ`ivnNC z9MKUT57Nbng)6J-8S%P?X$dzSOSYn}>V8}2NrT9Rxl&r5luV>LCgD1U?$5r){4=4U zg|AL^lPqMLX8?x!>r|ImDZ#f}Lv;GRVE zF|CtnYtO}i7}zYJKz_u>r}f@_ykmS|Sr~qsy2>VTLY#j6cuW8n8kx$@&aT{U0Sdg; z;FX`=5rThu&*#5p1Mw`S_a2RCM#gb@qEBVK#F|$|9Rah`s-4<8MCg;H{wW&Nl+!P+ z`w!Qb(+dDm``%me|NWbxKC8pOGeIjy6W7&$kY50o011yJ1*BzUL^IJo2($zEK}ZYW z4)F*HSt^_$t{F#Ld=vmwWDf$aP~A%aG%giR77Wx!dn$7A_hq6LamGM zuYdhZ1|)TP#mRUaK4_a?P>`054Gm<~{rOXa1yR8RO;yq*wJe@H*zi(;UpcYlNdT96 z_1Ho)dS~jY;z{oH(%wn44K};u3?RT&d~&H3I;S{S03CL+Gi?B@gPwlJSielv&GW&= z5sfE0HeLcUx-dFC$nhC@1R%m%`B=jHO};(8V>=fBj9Sp$v!0?Zw`!$3^2d>hiTv;9 z0WSNc&=b2a*z8QALw$lcU=-XqufMuo9E9GbCYK3~eV83CAkob$38;Q}^v`6LO|DmJ z9)xCQ^6vmvZZQ!`dLMkSd5X{@>#pwRYW6%j@zf*v_}Ib^n5`35zKI=6Ze)7DN@$mM z$y|<7fgi>^}NiFohcayP+u5U~1$B~GT6&%{JFvJA=` zb#K3kc|8c7Z^5VDKqYDwA;}J0+h=T{orAest7Fo^3-DC<7H~9ey9yt8ug&bnj;1IlD19Pre3wdU z(GNcS9q&}U&;bREjW6T<7eV&@-x1KzxwKB8xXbK_AwOK&s8u%-(1!%DTW}yXwb0t8 z+6pn6oEG=pB-w)U3ZZ%eBe47|819}5hIFI*wEfxuM9vGZGh<`(UX3FnlRGwzSsDR5 z2u_S(CKD%u(p?dt7W}fY_ua7|Ezk(;z{-o}Imx>*g=^#MS|j8*s#ZnpZlybz_e1yA zQTx=v`dO;!44SHY3Z9M!sW>4dq#1NimgeP~SCI&iSHhd9R(t&iFCKgYElR6}{bkje zj`17*s}-73c5M3%W5jM^=!C5(oLENor?n7XFtbOdRXfL((Vg}L+H`w6F>vS^4Wjvc zgebJ)0DIWTy#&+fb@R}B)w|>aR%#BL$5V4d%@0<2(_SPuWvx*} zEqXyzM+{jp7Z()I=uu44^U3bv`m8 z-qBYZc7lY$7A}$y?s{q$Z7{9M$}_AtEZ^z%4A1BcVjlJ55kNow=c&LG{nztI+uRdf zAw1&Av<5iWt!8a%w~0^HBp)A@8bPzooS7gm)#9uJ$YZuZY^gq!E|xvvqr~mh4*+-D z9oF1Rg7}|T4=;eIgF1Fsy519!8~jK2q5IWPn>%CtS40BxoB9492=xD@6$J@C|94Qs zHyjkw|Gqlo?VJBmo7+nNzhA1c*vmHfzef+0KK24(_qfsjMMJiDQ9Lq$j$3o{-c&ch zO<86>!W1qA|jyc~bD~}+KsqB^t7!IGsqh&XxF4^zY z78b587Y%R!Inl3k%3D4>jM(3|E{A^J8cbri21!U+S;!z`H9ztV*lpAYBUHaUzZ84Q&m;9F%_J4o7RBXlPi7=g&&71T)*1p7*M<=>i!y2 z{o$_ByYgMgMu`m>{Kw6k9_mlSA`d=!CqKv|(xmAzJ-VsnFAD}kZSez_80uQ<3W|EY z8yB%9-C^6wdLhHIW3}BzpsIlcb%{3!QGjjXoo>O~R{4m`Z>ThC>Gj^jZpeGOPug+C z>?x5t_1C>aparrtpgY3IcyK_;FMsf~K&1l2gX^D;4!S~Kr*@W|wuk$XHD5E7`WCzi zPy_@5G_kxBxDDuYBnUtbxi`YE9+~ybjMcvtFc|h$K3gtr7Zik*Nr1|4AS8ErZ*T4; zQvZOWloTo`3RLE_qoTUyyJKc%)(*-uf|3BG)zxtWcA(a_r>9BY6!YAKAuEZ zPA;q%bX>V&q=c?6C8!32;;3n%H;}}q_`gy1-cd~kU%Ti_7ePQ!x`2wH(n0AMiijvp zQ9wEZ(gYMiIzbVTjv!sSfJhVRH6TqyrS}qg?}V0+ym#X7`@VbDJ!{={&L5CT-j>YX zv-h+2%sl&jc=);1)m2d(=4vOVt+jPIQAw9c64nYXMvD``e+Nbw$bxh0apcy$SDL>| z;&(s-j?q~*vblQK)R7r}xzMnkJICsQx9_}3@VE72zJm%5?A>a1T6|i+EcpPstvg$B zm3dv})u>DbrYL5%SEk{db3iELiNkL%acQf>h*>$}TygY+C#P64J{LDlbW zfA+zjx%8~D@X5*LXN`iyce9L)nZtD!b3=~c%K5X!~ZQ}!?HUHhz!gSXZ?~+?ss=}jh9Tr zy2w5~Apx}Dcd8tQg#{(vfzBd3I5%b&+R+g43 zfj-wl$Z`{9P+I!ow+ua)dbijejtB|qRb7iEfr^WZzZ4YAJ*)pX2VMgJH37t9m`=M; zJ;0>~WV3m%PrY#a)9E~w;Xm!@l^!?nCR9M3zotFi+TZNOcJn~Ult*(j75E-8GDFu1 znd!d=8%(w@9E>hhJUKZWU6|Q;yTyR*G%ntur=ekrdF@MqM40(J)Oo{kmZoQ)8UZN| z^Pjx9{FLO@wJ-jtbP;ey4sns&{UEQV>({shNYn0seNC>Vr6f?{DGzo%^_`;*TW&$v zTu6%P99WiBI8jXjWTSFNPZDZEceA{t4w0XCQa4t zQQhn~s`>?S(5mt!sey#Yv$x-6{Ajx9PBSJRU%UP*UKj@!JMjTA?SLuR=!AsJcAAJ! z*OQ9t>p3+*!)|F|0j#i~SEq~!_R|~M;o}hTmAN2B2nS0HSF-jyU%0ucf)N3fJVywS zPJ+IDKg4g@pQ~vsOaVyf)e}B^AOU<%Bje*O?d_CPb^6WV1#}(pIxuvk@QdcpCeUbZ zKp^#OEq3tfRJ|v0gq`5=SLRC2i=0T@JAB>j{u5LGOp=h4HoOhqc+8|fFrFhCrluxE zp9e_+^YEu;mN*$etw4@r%(W)Upu&^*eRqWk5- znAx4sylkt};lmD(BraN5Sp3+fA0maOd>u-y-p14U&?;shKM@}w>tb#U@@w!`N96@I zewwl&Kf)bfx-7tP#oGF+y8OE*B7v40-dztq>ietS&#p$27?$6-clDP*)7W9W<`Fl(e?uBJ$GS2ZEHetUT7U74y;ks_!U+ zB)Q?QR`pGuwCi}O>I@ELe)`s7G#pg6nMDBGv!x4C`p(XxfpIA@yCtYV_?$sn(pU-= zNS1s&Xu!6U78)@{VK*E~U#>~=ZeUMKq;`m-zjn&s_U)9H`xUIoEm|`F zL&G{}I(B_K2X6aaT4!6`#6svzP#YR!5{>sW2rlK_t@FvW8ZAy8JZ+p#<6u__=n zg%yfGIFDT?Ksx&R!DLi)ccVssa6r<4dSghHHf=BfJm?Ls#F1W2*XMYZFu1TJ zkj^sov*P!kn&d0cZr4gt2+A;FW}(E=((>|(jhAUlhZ*;s+@+i9W?V=vYo1@j)=M}Y zH{_o=82pbF``MAJck*O%L1U>D^vPZEix43Gj^gW(AQSKREWEy-sDV^%>gQvJUTpqQ z9T*x^+FB=9ym2Qyhm3pfA-y33jt{7RPLUtZ@TM6d@(a3g$V!8v)cNbd7=VOCdoco~ z)P4RdtW~k6K8?hs&${(MAjVKhaYpQ^&V`F3c^7X4S81MJ)-TQq1JJ`x@EKF89{O9M-=NC#ruq6#j4QZiI1(a)CTlCJMB85|=*t-+A7-%f`P&h_ z@G`Ip0W`JhJ5j)M4j6>DV@9(?poj6u7fMp^OgY{)Q%v%pyO}@l7=|xxZVKB~*VaA- zhXmIV)Zj8ZW@JrnK|#R{#OCJa*YrKCnyN%><)OF9R{x#)*_HQh4zoE+j&eqplk7W; z9^k{z8+cQjxN}kaQIQK-Xk7VOsHenTq&3xE@URx}Dyo`w3Zz9Ez{>{mPWsN`?J1qd zz!XepUCX;#0!hX0X&xvz=@Tz*1E+mmOA13>?7cw2V{Ox4~k-Ac&1DY zb?Or*SCz^?dUicav=t-c1G9n)dQ_`3Gc;iO1O!x|PKEwhF1J=-uR)g(?)tDzMai#- z3W_<^`*YoOl+{9WX8QWWtsb44JX^HiPGU+TBF+GF&G!URbf1(JF=o?*MyD6BS%V(= z0n9J>;KeYhxyuuzv8M>rTw8k!?I^$$&ydV>-5#7DAMkyc+Xeg@H>H;IQ{f?m zEHh}ah@eQnOw}`@b2oK0QMEHJa$PQNrKQaiNbdFmXTc`$D(R`^=zAso+#~bcJ%f`1 z!@{(Q_T4+f-5Ez@?kq6#Fa#LFmks{p zxuj3LZ}mL(A5LzP7U9lN>M%x_D*k5JU8U$6b8dUWozULgetuet6Qrg*e@gaB<@Hba zRV**>pv&!Ig~i1m9`!bs(f}9ol!Jrg}ai>|JV%WZLVl$jKRr*WlK7{pCxUtBVU?66j?flbi`!&s-${ zpT_6rpre8Yg}df{d0Utz*&coU`W09a{z$ch)Pll7jRE(^+GZgqzTH!}q~c+n_-1#p zWMfoeA#HJ5@wa^Y6V6>xRAJtlt`a>dw5zY$Ow;uHJ;m~MxkxtulgAI5=C@K#(vq

    #h1{YQ_=LBcRAYgU}N(r3NE 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%0APQ1RL7>ui%hMOE_1Yd>NY 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 literal 95948 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 L<%O3J9Nhn+GvchX<;K`WL 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 KwQ5z{$o~K$El)TA literal 23456 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 diff --git a/icons/mob/inhands/clothing/suits_righthand.dmi b/icons/mob/inhands/clothing/suits_righthand.dmi index da837fdd8570e19fb003cb91511c23b71897b29b..7dd047b7345d7b14ffa799729995ab7ac4e6e937 100644 GIT binary patch literal 48819 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≧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 w;M#-$$IM-~8qO0)@6iIRF3v literal 47677 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 Gum1rz(0tVZ literal 3103 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 IuUkL^J&PIbwW5%Cd=4oroPG& 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 O7Cl`foic5^i2ndY=1VF7 diff --git a/icons/mob/inhands/weapons/hammers_lefthand.dmi b/icons/mob/inhands/weapons/hammers_lefthand.dmi index 7f6985e1de5ec520d9ac973c8f84f2700861d99e..5856bd8b0f83488af3d66a7d34ac27a9dcfbea03 100644 GIT binary patch delta 6058 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 delta 5758 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 Bbm#y8 literal 12153 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 BGLQfO literal 19135 zcmcG#1yGw&xHgDOaVc5|&=yLOpoLTe`oIQ&c8FsnauezC;3it-uHQ*=Xt+4UI@qK}G`&4P6rT zWWvKi&GdXOIzvOl!1dPBbCt39YVKm=tdbVTp$@bPT46b?nA4n=@w= zN+nHl%s~^?qfo+b6ZaVxa;Ky+js< zH@Cf_S?Cq62k&cb5Ik}Hm8AVtK|Gm!IFU5R z+N-mKk3o`=5uvR0DygJ)X&0S5^uz9AW&+ja98b0_;sm<+b$(Z`PeET_@%6|^i!-pD z6w{ub8+_IqJalxNGs&Ybj2(HYsw5Q~si{TsGG&0BaBxY4-j`dFuc+LSdL$DszTEN7 z|8)TO<;Ut5xkr10=lgDwCGu{8Lr4vGDNDb&$+!JDJ<8Ag50y5Bd3D(Zu@zXErk@70 zUv;WxW@-wo%N6|DzUpQV*9ls{!`3^MGvrhx-toAo4Qcu82uYr^Yp1>QE2||ct4*rM zV0G7TlR9&6)sg$f_r8LVcCL?_XYej#pNuRW9 zF}Am93nQ!xD@Vhu3%f&B!e0kR9WD9cOS{8wo6M7vlku>mNNdAeYCQaz@H+M5(8;mP zs{Y$ihHWzoL6CbrXCJq1k=*ApDZ~(M;U39^CrIx~SU0Le&5QXedkqfK=BG?N- zJkAP3jt;!;aHS?@p6yK(QyYr;P{};32o@`>$qYB*hVSg2o{~U)AAY)bG&5^zVcaJG zI>Zt^)WOcMkj>wIu)@spAYq6jG%q*ukly!kM&jWP;Hfak(Z5UGloU&{z55qN3D=9c z%yFb+mG{3MO9RTvx$hndt%=Y#%Hv3S>oX!N%*BDq%F1CRvt{Z>3GH!+e)Zb~J(c_3 zJ#!^NiLZ_pNMJDV#=%T+b6Iuudoqgdgtk9_;>(-r>-{0rGRFDc ziUqZhEo_=^#mRk<<*luZJEMrCnHUr6Pt)0I>So{FO&SARv#!_Fx9}pVN;U3pV4Jb0 zqNJ+nVmM<*qE}oTBHYC%ZC`HM6@MG!Qyk#krlc4!3tU`LUCOqw-?9<~{`mRRpGQ&v zgf*hJ9TX&8ef$Fr=;XYyyZzY?=qdH#Lq!ak9{JH~aVhkN)-84up2^nXx4wGB!qU=L zhMHIa*;3Een1Y(4PV8T${WVc=Xsu6nVk`3g5!MG{HP_cP=sKL1fB;ND4%}obK6E90 zE+u{LO5apzi z%{L|`Q|*@%h>AnQF7(qs1i{_E-aBBNcc3c=r0PtLeO7+2?e_HU4CbGDKv(<>#3JMu zbo-O&R>|xo_~Bve3FO8U%Q||?l1wh{Onhz0^H4`BcQ~KpFii}P?;d!qWNd8g zyD~GQVqmPUK039z`Dy+JVHL54)u(0#mZAO-opxq>P~|XhKJE#4U9>BnQ0j%8f7+uk zJTA*U2wJ+aNt#S*do;_^WHo@_U{9T7Fw0&?gnYG1*cciaJap3rClHd3kc<#bB`$`0 zzkE-s1`%t}r^BbDZnK{Id9ff{A7kWOg<2EC?A>jF8_Yl&u;xcaG+LP`kws{^f~m#V z$&Vw*w(L%M-y7*zTXXSO?~bJ|w3P>Bw@)!>dLb^E`&-0ZU8IN^99SVf{P5b)AkJ*D zRzk`Zhmv11kSRQd_@0qTiu4Tu?f1Wg2(GtEdpUq6%1*C?)Q->3 zDd#qrGJ5G{%W>N!M-+Cms=n-cHt{3*6XTF*cI!vAkfz6guos{vvaEH%FdizC^GMou!@Eu0-7N=07EZ%+$~V^@ zT`k#B;Yu(^NBFTM*F;aNbFRhLw_YO8TEYt(k*=|pli#TVg+RAYHqb3{bNve?w|Q6U zVH7>9Xp?Pf2dh;iZF@cW8FhYfZ=jG3!hH`|8))A^XKfFUv}fy%I9QV{wuApJ20RoI zGgNd3q?d3apEVbKxf&dk2~BBu`cB%>QN69w7`7$fozEB_Pl(*qJ-n|=Z1sFJnEdx@ z25z!Pzt~!E`sG%RJ~Or)KpnfcN};pzgU4ng_S+%|ZKv|tVP!hGD;Bu<=HI!`ja^$B zqP7Ir7A|1>-(~jRIjVqt{S2m1iwR*R7GFLXXadH*N*8$D8)&TUNyW{aHrt2Mk14dZ z!;gY}lsHj`3Kd6KkJ0z(OJmvIx+Bg$S;^k_1bT7yc~7!|b1!-j<)B?+xUI2Y;i4m?jVlG6Z_ZJ(62yK%P>pajxvpPtT!s)4h=J8If#n6kGy zYPYj1@u7~$|GKd%gWx?WR+d^P(s^ac zHld!Cz2*77CYA!JOp}cOl-ZuEH~B~E?Pq^1scM201XDmMXLyfFh4}3>Hfy+Qe;_u2 zDp6n)=fc3bvCcsx3W6h7pb$_6g@9)nFj7jW+DhLuR^oF?sksnDyK~ft&ZTu-SK2&dy;0%=ay( z7lIi)E(L6a;dXjFrza=aE!mNCk_1NTW)Pe2-wl4JKwRHp$f%{w{uupLIO0dc=)en3 zcrFPO$iv+ko?bjc1r&u@ZxKo<*QdbEl;`j)4upy zLtri0_50xK5#nUerBbo-H>kjtyVRsR|4r+Xfl14JSvVH`lQ?_fg__-Q-*5{5(g_{k zn=kX@CvdWnzL^?!=yU#{#Dc=%iLxP+NXwheA}3E*V*ZZ0sJSHbD2S0gt#vZNTam?} zw6vhw=IRo1;tbb-LmZ4Fq|votCvu*=z}dyt2`I-qHB~Q^;*jzlKs28H8w1Cv8IM{V zhj!Y-tv2cBTup)FAN0Hz(7C*gEOZgCntD`t%{gvk41TN0rgYf)K+GE3B6quf?_uAI z^(f+zv3;~zqN$_(5gP>qb$(t;a@|*&i=T9A#hXT?Gd%0MH0!#3b~xujSpY_MB6q|e zgt2gNXul++rD58c_(a#$1mo+cR&yM+Exs?_r%tSRJb;0KT}0iYJ4aZm!yQJ=sh#yj zlePurWr4RvuUBe6weXr~YmX&8N%7Owo(XtPfKT*qZ&6V=c|kBo-1{;x(rU~WZtK6Z zyGxDdoW;0~3h8lw#1e}w0>4_W0gGJySZs@P@*}A zmB{(AlZZ)(jYMm9cjtN|Ow_n*cnAp2sclU>JZ)Yoc+=Fnxa`1n( z8`)8ZqBXU1S_kp>_9|SuwU?HcupfLaD-F2Z9hE9<5hr{mK=Z;6q%Z*VXGE9J8g=8l zLELt%f>!_9OW$&bo}aTE+cBiKWR)?lPk;13DAMQbJUKOchW%#0W6zo|MD`_Vd-qvr zc4mDA>G_lMj=m*|9|Fu~5Co!OoCf`!ITqe;LmLXp9gq7<^BN1Qg)o0Q*7;NfzA99y z*7HU1j>mU5q2(1ZeF1>-p^%)Prqg|Uz*N=k^)TsXt*{B`FMcZx&&7PT zsM@1Wgn)zpj-0>9^~UE+M0bV1ITH2LZcX4uJME5vq@RcaCa^Bq2gR|z9V#2F05vax zJA$rK97W>oOF%je%_-(GJ_Tuh^2MNh54leBX*etR8z0uHDmT0rH@)@3+?D!)jDrx|Mj;9Y5a8OnMMe8&Iu5y(bMUgoFq z6b#gQRIxa@klH-mfnEYr{Gh3t+5cUK1o&)V0T|}u+Ul0%Z z!$uguvvu_pAaa?ao9#AC!rMp?wUh9lnO(@5?~k`4K1KW?sOogSu4J#ir1A031|}PO zVQl!`SR7(tsbJ!1Z{%aDUD?JVE(zloON`s)uVdnqc`9j~wI)i3kGFRF)WcXNRdyRs zZ5ctS)Ol&im3UJeoUZ~Wvdgy)eXfphi6Zrac_ZfVy7+sLag*ILE42hv3N+vv3kY6q zM=cFDot{CZ*#x5zU9Q-1Tq1d zu|8ejB?{3c;7OY+amEx;*VFj)NhA`(*)6;z`l<%|=mrA=Gb`DCX;t!KZW2Zh?;>Dz z3!oN5hHL4?jg81j?2_!_P(7t~f`3GnED^Gxf~{jfH?ASoL-I}OD-$=(&KK%s(}vw) z0El9vWw-GBpA(`p5+bxHtiS8`ZN({GPJO?6oSYoVo8hBy%hRx|Nb0F1iTfjLP9K}A z5^BPh6T~F|e!gq9d>80Rw4)*jjmd$groLDaFvI($IO4w=gwsXhm)MqBE%DpYxD)L@ zW#4FIOmH5X$}Rk*e88ILu^>M1V5P|eE+%JwD;G@N%G1JY-g}1J>;u&GOVAYiy{che zkBE)6B6C51R)0RsF!CnP3gU9n*r{*au#?Iq(c0>CFwLGZMk6-=sn2opRRxdGQOw}b z1oB7gb!cV-b`RlCr){BHwMRu^HZnF-Ht1X8e12tSw!d+kcceluh*hBukRXJu8Dn`B zmc3E)<~t!v(R3q_s88S4J~clAk0%vMcN-3w4h;=u4aeDCqd~mA6LjlyGQx*b_+GDg z@W2tfh}${G<_@5Hd9PwuPfw3ndZVXv(1S9tBTg!a&{09^{$s4l#2l!kEq(Sk-^UjP zT@P`j!oC-;h7B8k>}qm)A}ztxG$X3M&#{OUh~N~N1AlYSVnmdMuSw;h3Gwlib3k^^ zzu%2Ku~L_996WD5?|NZx=4)H@&LKutvuaAOLn_UsaS5AF9u_z;YIeBylTGdHIZHWM z(guc~#pGLA16{%1GP2T-CuGZLgl++I-055+KF%!zcUEPstqWNal83j}fg>06ZSdl5 zSlYcg-tS^W`>&K8hu=oN4G2wb;5ZSK%W?0?N>fgcBjyVLsL)Yf1o!IKPkg|6r{lq<%AI$61x zesmbt^xW)0I5Ii&p({I0Tv^+UZ|l?C-qS*F^gQ&E?@+M~G$d_>HK}cKK&wQ76Eb?I z50nhVY-Sm>)1GAGjBUxv{}a~KAidX)PAcN^BAD3vy(10D#$0Sz|Hkw6=Zb-q=6!)% zb!+EgFUOL3F+Zg{pgFGbB>Sk*aDuDNI^4eZiAb~Bu-`lN=_ZE)UPPS-+0?z^tmi)0 zqo!4_$F51nuPwfd+7X&wq7UUZdLq3$`nRx^`L*J37eUSkATa$JZ)ke5&pi5bA7C^_ z^cMptFFMrpsH>c-tbFn=wl6WP@AX_SSRH<H*cI2LKi(Qh*~b?@v(}JyIM|4Rmw83N`4(K>nG-Wyx|<)(=%{dfxFXm2SLwffQ?c zRwT8FwyJPaIPfca6XSx0wti`2D~gjmxaH9Cm(w&C1b6b$WZ?Ekk&KM>49PaFW9y>3 zf6y_R+w8S{{k1ysnLrn{F1naV-+YVhIIf5M@nrl%PqWkq^{o!V@g&;MDelf+r>v81 z7e6U1lkm9k_$N?+J~#KxpD4sJg^xxTk;p1Fbv_i2d}#>SlhM+a7Q72CFD|n!DlX(* z)+rI%Nl!oSSm?>1HA$#TN}Q20;*vDOADZ6sGqwZ-F@=Yuy%khBq%9Sy6CSM*bmJ9_P ztq2TsmDk2$TPBw8zI3$@+oH`}{=HOU@H6~!L{$d;MYy3ePMwM1YKeQYbkfX_=Ubzl z_UUa(rp?<<^5joMT~m^p|1LEhOP=9`DPIc_5uw5@+Y*K8-<;Q;D0*QJBFk%lMq1^O!^W zZEkj7L6PI}R-GUiJ=O5@XODWw+?dmsMXgeFV&u8qyxTpNg0ix%7`gAwMp*9nx~aVc zzbO5x*Diy0w8!CGTJHKfsk_mf2_NYn}zoc)r&Ckz%0k+kL4wm7f zkb!r(V!^Zj{Nd{d_FFN?>%QXTu>h9i~XCDt>-uVS(vw2D0_mJ)mC9Qnx)l zi^xsAdrR=Kxj&RaSTbOgcdw;;Z%=JJwe@8z^g^-i<=~)F_2DD+a%R8|+t^`U)r;Rt zJ}{)0u;&?*NgpNr-1{Yr9f2K+W$Yhp{FaBCF6m1>vj|1r>f5f9t3r>oFRhDsA0%kd zy}!rX)j5crD@*tVfQPrGd)GUdK+_^Stv6xRP;XC+_593S(xuMhtw1k?V(4v|;95u4 zbZ9&8D;`FcPD7@{h>h?uEjYj2+G3yDt&y(DC^aUIw7WZ%rCq9Xq3!;{W;?W{mtUG0jI5Z#Fi3|VkVD` z*#C*7=3;F}GLT=QP%#yH(NqSJN5d5z-#%&FWeksvt?Tm1_JqQx3pFRH)84?m1?xR| ziC9${=E}Ca4JH?%&cXaSpL%pDe-Zm26QRzO zXigb^JUnAfq-dM`C2}XMF#LuN9$%mvv37OzBO+4S^yX|s51*uz(H92n@1!8&^i`(=x4@b`19uLkzaPyD;zrVeG3b;c2k{E#-$hp2`X}pe zl2{R=sL0xq@>upfOJ$sSV|@V>@hAfP9M~(R7VbN@j*MJ}deiryTw@GRC_Fs;92ZyZ z42F;H;o(efEob^D+6zPDhwCSbB?dmw@G{&~69q}}>FI`d zmO9+RZ#SPy8f6ycC4!<_Lvw3tYSug7lScEt=*A7i04IOE<^Sp$Vi$^4|8x7a*iI$e z=o$?OdZ?y6Ie2n*{V{lj{X3w^FRS zC_Hs!>$+}29!>N5DbhXd^=a2V3E2F@V~~fVrXfJ(bkQ#KUE7VGu=DFoUX`7{W8#;= zuls<6*Prz1F2bX>Evimh?%Q~#k>@t71*56u*4Ud8=0>( zA#S))rl>wHB!PEu_!94!cI*&|yl)>GVcf*Q?r0C_;5qKiXfFPu2sZPbVqxis1>df- zkb0F+$XP4eV?~$p)RPwBl3*sSqx+JDi_MzR=f39=5{=BKfeny(sh3mU;vnT9UH(vg zoG-^DXm*F$17_XVCrzgZKg=12xGVyPkwsy|Ph3VCgeAi*wqR$1!?WTW=fy~f8cI4f%)x8lRIZ_dtBHrXaI<&|1VdNip9^U)s+5=Vvv zPC7*FW!}~X9AP2_m0Z77E`??8-#ed?nv4yMOeJ#Q({UQ_6-4jsQc_{SuReEtYI|qj zLU-HovHab%KT9p(tC`HWrqcsTl@^r~1dBl$@QW_dfAl`|{vKM=XnA>dUNCiYCQiS>Z!d_Q0J$Z~Vz zEx85}4{!q;wBWpd(+>9WP!`76`n!YH*GIfL_@i1_#B7 zHSzIt3fq$1<0PN#*>hA~>97R3MIyAht~Jp@yNO1mTR z%Lk+}6WuXRnDH{QsQfeRBANp&dy1I-<-+?%eoOc3P6tn(jpq&!XgY27Ag=$o{P;!a zn><@E8nfrx>8ycc$U>Esd3PU53~RtH9BGd48IkE~Y?=`iT#Oj!ac9Ud1GKiKTc{g% z-Gnkko}Za0I@3<;EJ>SY0)Oz1ox$POn*H0j*=&zDfx%`LbsvBQ2^F|pFi5pen>-g} za?3S|W#=t(Kp82;29CMhUB^{At<$*{Hl?nB%u;~FXqY)ai(K6Zg;O&`*#pW z``Qxr!~4;I4dGYYy{{IZjg8dI|GV^;cO|QFPtEDv z;ovsnRfUda)bD5mrAAp?*@uVNz8teTV_eZ%$C*TIoUlC^hC0<&24Z9-;NfoPkP1XS zuBU!DcCyv+b>7qg0=|M^SjjE-sZ?yYlhMSrCY&aa<8WSJ7r@8TCO2jPO+k2XY3^ONeib`p9+F zJP+l?6vGBI!^Ly*Eu=nLU<1e!lNmgH>buUI=Q{iY)SVtap&LSZNS_(`=)J*sUwTBM zuC5;E8WXZ2%$&w9+H}``1K9yoFgv~QkO2V{R5@@!b>0fCdW37o_Tk9pWrmKGni%@i z6?4oDxY65o@8&PM2WF?=$m=}|30Z>DH_iq=omnuttyNdJyM^)ome!9$ zPMq)6INKv>6q0dU*eCKzA!D)j)jP$J_%MoL{*1CxfX2cVIzE3HVJfv2^KS1!H*w6m zNcV{uBnwvpyB*t%x@m2$9IlNldHgz0=n$y1KLkSKX%nUgp~cuPg_EGYl&m7Sb_s!M z0Ie_k2u}z=3^tQ(l^$wW^6VNi02SirEexXWd&wEgSh8RreB!vwve$TWQQv}En$&{I z>ylJkB8xc)=@~JTfPZ;_PGOz#)z*F^>>vttxnnIWEoT6F?~DSI4LgYb=Yqkt^!~y@=|Th z5@L((KXyN&0C-r~J68UN8}y)?z;HJdFn=i(1Qk7n1l{VDZR562Y(8N;9=IG!N<7>% z7q8WPaiG846nEiJ7clgRVttD8&)5vCTQ%zOD zpHY26KYPlgf_SOl|9^HgR)5EQ3O|MUv;~b!LU}x0CYB0~gk1fJSdV zblntwjjQp}UA?A=CzdKP=uTVR-+8PR zo>4wcY|mJWZJ$f?L*YLXhrp`SHcXx7`&Yg<149)~FtM`>*MP}*7GVe<3GyDCS@Z&I zf!YAju5!eqQKUytN38x9rgO91zU6;Ze5;O{E~UuD-fK9PJ6P>u7>#gU7R z4E1wVu!3TY4wDM5AAKP1!u1I2vQkZTTXWp%jgI%YeUn_jt$A!`)K^J7>+G+2+Drf= z0d+^0WoDv9)PlPXTk@B2T3cJ!dnLYA5NU|p;RuOUG9bJSZvWaG+5s{ZJVn#l6aKL;Qk0_RJ-$tUAK>;F9-e&WvhK|B1A19)J**fs5yiTzUnC= z&5+-cHEKX7`QQY&h+TXLX?QEb3rvt9?t@5&60UO!$QKNd?f z!c|<_?WiBHTM|5DCRBDXJRM8T{t5$~!5Vdjdfa&gdy(6CUGemD&0cU<*V!_oCEJF1 zV#g^}ctW;gV0ipaemNHl5T-&XNLc^;Aks0gpb+?;G`}m{G0@aj5k>k}!YFKp3qIfx z?h!vi5aLePPPm1w#1E~XiTRuO7_l85Hkl63btF#<(E10515yw49sGI0NYnoQ{XzQ7 zRL+lL%D0wNpYRSYNlF_wo^=QwdYril3{XQG2_znz2&(Ir?8=-!K6x2cTx_a>d7^L| z)NELDjhvpAr99FSUcqGh#9g-2;oNL)-gdMlf^lko z_6*+?WuE%u^$)P)7I1_aM1?=Zsb2c{`#l@=Pw;6AG43E<{PW`?kNuUV++A1coL2iG z$Kg_`1=kiu9IPfPm0EOPNFKk6KRBsQ^t06*Dl_xXi+Y{|-klM&H?%!nM!KI$5N9yP zd@$@%vMn;}KND41EmyVhr@7o%ZnxU$IkVwnA+${Y&>h9qq+={H&L*?4hKq+ zG6elPDjv`G0PTU8p2TbNnW=3uQ=#MVVq(>MGE+Fc(YJBNM_xXr2whid(lP~RH_ji+ z!hJ4JF*6OIPB(iYW@i_J(q}h=37;WY6S8!?J+y=8n}0?Nj@W z?Iv}-F zK$(Hc8r@xh{&~;x@wo0rxazmCqcEO0jh}vmU5mFV&Xsl-5v!V-AR^P~WwB25j9$u- zSM0p%F!012E`KbPMe_Glzz+ZanNxSOxK9qFR>(3oCKYi)3yyh)pM{BY##eIz(|f)E z3#-~9w(5)BxA521dn%E_K1X-E)A~q>PM#kB9~3v@iAi~>TlL%f*U`^~sd>uHl(lVY z4sK^9AjsNcCNM!2ljNIc5(BR|R@^zag?RxQ}m)KHX16P_zq`kb}YU%0*6&G^|zkM5!p3cDO^Osi-K5FUkdIQ`T?&okf zWuxGnHMdLA9)aZccFDcI-)R6pB++XQ4zKO7ov;-t5D4TDh(I8gY5Wit0GaEkPh@7f zzwd%~blfAZwz8LDAH4D-m7G%WZoASeiPdS<5bq#XAJRE&g~ znc1}5dEH1-UjDDcfSCt1?N!q78-4vmAHBJ`F6L+cTtazO#!}uA!0WP}J4Xkntt{XE z+VUWa)u&W*S6BFGYCw>JqQtaqQ}TS)2aR7OvLRknQ&iABcB`>-3VQf0HAcpbUil;4 zB-{P$9wm6=eZ&L>a7PL2=lLi_Z zz0^lLi%Uz=UJW>9h68_t05oK?vpOArhunMx>ho~e@ZJh6jV6_^?D8DL)DDJMNO*6| z@Q|1_I*#}fv9V!yW0WxQ2e9A(We=B)ZZ2!FjHjXl$kz>vLQThxDoU=#f` zJYs)87bme#|GSGQ@aSekCF~NYI^$eUCRIacWhKx%Z@a&dRn9-cgmXh_aKYy4ehDR~QZy@(9o6SfdC#1vP_mVMe|8ZICdV#}3bouVW(!uZ=#504Q4f;iRyj`;KJ)^3MAAs%d z?(+9}S3T%Z;#SVi70TT-gnmjf>J335;qvGHnr20Vuf1fBDCqD`G8jMTXbj>?oQb#Z z(d<5XZRW2ghA5imF9H|}`vtBM$YeZT^JTPNO!JHN?5S0MghBn>2L|?J<~lhs4dDoh z{p(Ymu4GA-Z-HNqFM2I(oc{3V2@@&!pZ=U&dn!lK zeR2#C_4BvuTPsN?j84durF91nAj3xk2XH)@YP1@C5u9K2E`g+E>%$>q?>s$$G_y-V zsz`3)RHm3SIzGu}U4~?F2xVOA>7X`r%{rm4s zc)#JM8d$<_FGy&d9}T#CZ%M*h0AhoUa{Qc?Ca8{<2=jRK-w46vXL~eRS$zL2<}m|n zSY)ia4{&%qgjR}F#;WtEyt6^Y^V|Darf^l2u)EjKq)3DRn+BL}KTM+5 zDv6lXv()SdzPl&Tum{^6;o1&R3%W(KA0G6N$ghP@&(`%qG827yJw#b${iEgj{IE{= z+BtqVZ)8Pf9^^ZrY`Y?$fgkm(iZkC9(prNA&yi~u$T*wms67W2M8(YxPq4vTD1b@~*MaEZd9Ra*(N07b46uNA87n;g*mf#;}Dl zW2(u`WG<1klmex`>;hdeMMv3(WrRAHj-Hpn@ z8eVPqy*!-Y$qsdk`-G5;!31?7y0nJ&+VYmrU9r>K{}95v=IrbkMpoW8-Lx1B)lkh& z)?L92G*N<6%x9y@40rj-x><G9Sa zBlPFm<2A^>WmV_0JUSAbD`k>`PWv)u%^I^iy6@rudyDP8e^w+_2XhlEQPe}||1r1j zg8~hq13^ZB74Ln*_Q9V7r~vbTruf=UYn*y--A{e`}K{+xz-|<&dQ>VfGcJ zxy)dc_A^;m-KviB>Y3o*qmSW{k^J?~^+Mg|R9Lox1#*v!6WZb$n<~3`046v0Dfm`v)ArryxwD-U!+h<`TjUSyV*phpt!=4(tgKj`wzx$N`;SyZ38XPeZ<_LUr$`p>(T zJuS>49G1}-*$5&ULQ+aXCXHxa4Dc;^5z4e{uwP)*kHq`R>qGkDFv3BJ)HWbb=&`uG z`uc8m*(-nh#1QN4>@xdr&3ACLZ>s34YXmN}j+PL-ouQ)U(i%G%w$MBjKih;q(sW1i zl64XIKpRWj7w5BAIP{02sGk z#JJ& z3yXAnkVRI&ojf6)G7?~yR`N#krQ<8xKxBL;x z$^>;HNxv82r$UR14XXIQz8^2}@n`uX4L7K^CId=$B>?eIq6fl`b7V>l#C7>eE=pNP zhYGd$53?5X#_(liv&B$AuS?CzyDS*t-W;YAtxzK<+)X;KU|Ztih^+gPS6iB%h&Y;9 zg@hUlZkr5XX>77~_fTo3{WaUxp*cKs_!BF;H8wq+_uR*CYG=f$D}>-Qo9s7x5xShu zZC;p{SCXD0VG1D7;#NJ2mqr{fa01HHHrxJYUI(9w+wfILXlN&jGOw}d#3Dm6cVF`R zi6s*d17xfPZ(1cXL<;rs;D@VRG=UhHo<+6zoAD+~ak_ANCcyUb-(HWgzz`>}3gbUT zN-1c?FbBl|J^cK6+3x>v?-hX%pu$E$R#GDqY14*D*7e2`1yGtst*FCC}D040o%6Srt(y#%1|9GxY*b>CRMgGMci&Csxp2G zlNno!E?$%cI=Xsgu{Z@(v$uov#NNvQ9*l_9))Y5qD%+v2YY_Aks1c!RiLv4tBf$M@ zQbR+>W+b)OM-;vmqbJ80tH|84|9OJWf*zn^CTZ;OUH=bNA1W}B89j-t7@y}UcMP`n zW&hJZ9Iu|qQ;EyyDe2K<0uND654amh;;78*2>mv5phu5zMiE2B%$*}2sK;wIOJSZs; z)gI9<6mfk$j>pR)9T6Gn^%_S)&%mZXQ>xct(RzG(9Lt#@TMSD@tz-+LrK3}131O*8 z#Ao^T?HlODix924>6w$49yvf+J-OQWwCn3lHf|7W2DJ9`K{fP zmGt=d3lVAig2s=W1W@uV{cMG-3cTwM>;jkO0Zf6=l+HOQ=j7pb1IvpCEcBhPFn`Fq zhx0yfzAdk$bfKWci7K#x%*x65SwoT?1*D>I+H|D>O-dA--k(L zJM8?Ww%@v=sWTSU^T{~A*$O`}!PK@JjC|HSmXu;y-xT?mYXwkES&I56yXCE73fPi% z|6=D-QVo(y=yKpq&Cug1uSTdi{@NtZ)@97rEq`I}2K;#f*}R(AcDkS*AsOQ7L3Km@ zJppD+2_MTkph9P*;qkz@ZPmr&8`u{7!eyGB+Dm;crNVq7sOCCgFIcQ*TYYxLX;iTYy2a5El4p3{RvV&@U4Dxt3>7YL7)ow5APxa#4%A z#LmV)=jAI56h@dDUzC(LxW*%rB15$kriaerhzuiMKl?}1q(AxUchgRK;e%>#n&0 zJ#P%!kb(5u$5SW2O$eCres`JaVAbz$#Wqx~@Z0GW_lEXTGt5x%O#u})1yN9yA;jG+ zU}AcauND#%wix1mYD2vSG^Qsb$C7fz8vci#&!l9`DSGMd=>$4gTYRK+Up~fg`XfoaOS7>`oRIln!}P3D=KZz{L5-UQQX#BBtbz@5#PRB44r(v>qB6}AFQo@ zvMx1ddNEHPqBms0_$cd#{Np^(=9ysg-Rr?Oj(R}su+WaZ!@hS$Mhu@#27;@r*e4%a z?hF_xJMR1vSXVI`yc#}eSR)g*SC;?eoSi{3CxpB9r;?VM+qX75a~Bt1*ZU%{ek6sx z`h;g^HM)T_9mZuvH?(7~mtT*-+e#Dj`qOcHyi^DG=6e^&6GKIG*8N>NzAB9)C)cXI z0dAro{QK^Bhe+czna1g>N6?>1K0JIPbRbae#%!rhj2yXk{&aFJQOqn1^LZ!X#Eo1O z4RHdiO7M>#TJx|Oor3amA=_PF@KBDwKjiH06!6Y;{d3dxs*jrYSqH9H(VET=^VGB^ zBf7We<#9<#tWPQH4Wm@Dy6QYA`MXdtR1tomaO;Y;qFxVp9=uB z<<$WlVJukzm-O?1MmK_8#EK7OcmF4WRaSjH#?kR{md`a_e_JX^N)j+ANL*5@T%kTy z7mt`zgCO#tV`)xD>z%U{^F{apK6_!|2Yo|~SngVrHE3KHe$=M49sK} zS=pZTXn5iNriWb7d{6W8g^MREdnS3w)k9f0hMKwI&ET#VxkAk2$ zIG*BY8>L``Nyy#UnxpL%GjiL{PwV(TBY~$R<)N_~ll5@vR(B&+*8g_LBgD;_ADAPh zqCzCx*yyjNJJ{4pJ(|9I`2b-&n~iArprcMC3K7P^jWG^T-USAxzmSr(c&Wg-Sd5K- z#PIArA1J4`md?~DTBNe^iOrvBd2`)ts<7*qOFTKGc(%jyQd^(%*;GC=cVgAJ2-7Gj{~X+ zsIv-~0IP;Im{i>Lw4I%S>*urJ^{p**?lOmxVvY_9AgACRiH63e-R>cMM`I-|kG(z? z@?y$PY>?x%H~lilN@i^VmB1?9D|5^G4B0?~I*FnGE%*ip`P(@;IkV_7g1^3fZ%-4? zu;?$kaUIQ0-1|EtYZKkrZkY=A1LY=2=BFNLeld{}{F(F~Jo%TVa?Ef3t)AB_X@Y2e z3+r3}4qt$1x2DHKrtCTe=c`M3J(-~KG@AyKFm4Qw`Y>`kb1E4;y*y#+^t)l~jpLz) zMRJFa{t1amyLo+3NHDm1c*5}$>G1c(AHqlLf8mkdo6Bdxol}QHWOPr1qNaQ+q^71P znjl}_e#8&*OSZsmvmS(Ex9za-)Bo`l^H`4c2)4)9ne~pefiOHV0MbXVTnPdL19_KL zzq^9Qr*D4P2HWCm2xW*IJQrTtP{ULCvS!6RRrGfb=?RN-bK%^We%i(1`gk4%5~iUO z0ph?%KtKQ=q&RWxI4|>OCU@$@DY(SC!AQ5BkvtWXUo;vGH^EZY6?JxTVTS1iA8z;^ zP9|T0+{|no8P*ZRK@p5HO##hp&9>8$i*pt%c^%-w_AlTWW^V;KkHItEPq6%5uw>~9 zmd}DU+cfahTxHD9P#5=1D|MD4m!0f*4-m}_7rbvJQbb;cU|TdnLK#l){Rkev%aNyY zmT#(p8RJ|O*B{TKzwzt?E^YS-NU3d#VZLJ#U{r{w;`&_)9Roaf{sN!@$~k%Xs7}79 zpn#{9cYCZuHfzG3r@~X;N|NLd0E-8Z+|k>R8;{^p%Kv@eibe{Its2GHWcuy zai;F*Q*&>%`}apXq~(wGgo1}3gJu620k>aDgZGNQfSf1y!g7|M^=KY%XX>_%0lT+o za+S}eLI3%SVB?yV(D&s?ILY$US^gx;yRdw8TN`R8IJ%1?!niJv2ytCr*HyveYiWeL zwK_}k>SyJ!`ag4auOCRK}t? zjQG&(UVQU)?FsedLw}Qk!^7aF$rG3K8$5IcmM#6qW74_PXP{e;NT{u;1xF_*K1z&c z=613GXSMDI|>--R#sL@h9Y3Ke%y4? z9d2-X-zL8P=9i`Lk7*vVTIFxQy&;SKFzVy^va*I~(2s8anL@LBfM<>#=TYC{=byEc zn;+uBx~?Ju6kwY-*1l(l?E_hNxu&`Xsw%4>E8{X8J#ZLSz5ZX=mG~=o`3Kpx*ZeTL z!znHkZkhs*Jo1Qk!912L75&M%l`VVN`_QNH{wAiFzg0m^oX#RH^0rJ)bcMU>6c`s5 z7k*qgClUvNa1rw(MV-<_4!lFVy!Fy7p1!uJh^K0R_W0>yqxC=(`Ysdj7HW{ zV>COA_}J<=wye;vzkL286y#myMp;)|2kxF8;O^mJ@!tbn`rHz$T-?|N7K0vn`2{+u zs8Dq>>WJdzh4!=-|zJ0@j&Y$zM5x^uijylD@>2A z;|GFj+KXP>YlqWa9+>C{?9Z)5t%=awx688%OrV*Ym`bo6gwvCId{g_AXczle)l*=RGLRdt||Bee**w`YR|Z zf}*SW+EL%Gh^?4hYY3wg12Ub__y__q=?777zI_tZR9D9ts>At%9&T<>Tv!Ar8z)f{ zT^k&TpjOhcO?2!iNvwAcm4?*-%cb{oxai6Qg5eDS<=Xx|^) z{FL2If*=UX(_#eJ_^l1e$-x1R9zMEUeD&?r(Ib+#k2hS&xD3O_jIj&v5vAJB5(Gh5 zl2*IG_$x4D#*Klz+*~;L+a3vj8mp|d6jDx}hN<_>ps0@^h)zwb28hq~ShaiwAK>WT zy*o^q{ugd~!$zyIYXm_M%F^Z_$igL0P^3o?M3?0M10tl6TbcvyO#lD@07*qoM6N<$ Ef*y6cPyhe` diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 5ff4e25df8636b7724c78c3e443447dc22b235ff..4fb7248dbd8334ff39995f42f00cb84f7ece2492 100644 GIT binary patch literal 34336 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÷X^1prNB6J515F+Tk1 z>H={5vK4%_@M^yE#Yo7|j*^}p!?MWJCpV0n+gn;zRy0ylQb4sQ;#WsTMyfmTWN2a; z|H?t&l{X|k8W_H9I-eOtNEQ9pF@i#|%y)Y<8Ki`?9^Z<5V9AF;I?>;Zm4a6luohc5`Ulo`|x z7y~$lG!3e&gAwTKJ(;e*uTBP+IYZSBmP707xzbzr&u@Nw{_$@$4(J0`sep#o2%0

    i^ka=4Gq5)n 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 z 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 BA7ual literal 32312 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 diff --git a/icons/obj/machines/computer.dmi b/icons/obj/machines/computer.dmi index f8fb31c9ba080b0860a09c6072fa52cb89072693..9fcc46bf9b4e89980e0bfceb7d917df20ba76b1c 100644 GIT binary patch delta 27532 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%0D69XdT;l}qL4}jgU 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 diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 4e26f75aa99d169d8c2971836690e82c8302eec3..2c2aae54de3c2f1855dd7e210fea35938dfbc6c0 100644 GIT binary patch delta 11246 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 delta 11342 zcmYMa1yodD)INM+kfEfzhEhOEq#PP0MY@p`L`pg(?nrkjAt0%Qq#%;gC5^OzAT=}$ zIlut_`MvM@-fz~dnRCwFbLYAH?6c3a_dcUxxYgmf)#V1@;@-`i$VWBRjD@FyiUc2k zkSOvNwwQmEB`4vY$J%`3=hN9|zl$ zJAAs`1j7AdYfttWBDg$X9KZsmM{<7U$ON2Oba5SC1SKhtm$Y} zoqR{#MQW`6_v;Z?j79LBBVSbn-WsQu?rp&Bz=SYFd;l@s!;T2|ro$lhG4o-Zhb z;|c`gPcD?wh?(xZJ&vtV&HMKRDZ{lt7Tg#rVscN&en0(L6 z14tvE!V_m|pFGPX1{XY@%-szsHu{iWC{{@8IZ#EgcjKnic9hx%YGptIo&HMu>m$Pm zdnd+R$PJfC5671y2VBUVes>ySW~6BU0doG9fA1Dt_z6AA=6yUj6(0wR@-)k4?}FP2 zrh<;t_5zMNZfe4s=b{C9EyjP{tu^6{j!rt-7W~D@>$ocK(u9mZe-^8&<7xX$A|}&X zy$DN~nJ&QehCgO_K(`KvMB<(==|>Lbx36Vg%Fb`y{sGUS-u@ffHlzH(NlA*~-eba}%orZ6%=}q|&cR~-9M17y7gvs5YZjIlPCBWn=@eB_z?OBpjhxfGvL%ze<_MrA+ zvU|{s*=vCCy*rl@7{W%7Jmy0I$=ITy;SZRt4!&S{J<={~O8~HqE#5taV|!trt~y$S zP8g{06zs{5Hy*bJvL9bHC#O8ZLls3jEma2|n^#-mK-RAJoyD2B)It_r`bzbR0pQiE zSBGzZTE%rBkMoO*p&eG_vbkgd=lgZcZ7nTkb7b)ceSKh6XxI4;F&^&W)%8G8xwp4> z(W+KeiPem#C|i$9q#XIfPy4)rKe$4ct~+ds&O@&*w1Vv~u8Yxhz8LJEWG39A`e1s2 zF;%hqX+Kv7>1x`ftyQ{in#Pn9QC}b7UOLfwT?bC{l^k!qKd~~qI_Qn?4vs207)BKFn7-^~ zacklM`bI{pWBE^?`Pa~xwQF{~sBB)I^x=Axpm(|1&+n+t(c^{Euc@B!+dqoga9M{*I z$&g`GgA?pp&kqK_mu=^R7W4HbuM;c3Q9^w{sj4x&ybOmRmJaImEf=3VV10g+%;??l zVVAzRt(hk&T(i#N3)*n1)LOo8J3r5@>*uX&=hr9gLN!vXYUjfjFu$J+XBg^IxV?kq zE%^1tF;rj-%)}*!u1j4XNaSEA=jeQ4 zg|GAf8#BT9vEDN2=#y{Upy36}xKQ~<)Q5HC1F&9NoPFpT<*7)af%!h5_%{&#XQkNu zzAonRc(+#B^UrAag6LdB6OO;P_AA8(w25dOVLWXgL}c;`bI9;%y_Lh1&cb!7jUTwa z?DhGx9cK?*QEh77l_e`S;yUu*xo?*LPa@6Y3EiMF(lM8MNCgfiD3z)?mw|)$#ikZf zqg2)~e)Dj|`BDI^d1*gCQr}FRQQq=> zi9M=oO6n@wa`tp_fkSRqN@N>uXbj2}w&bEq{asKr0Qm-~Qc802f4_<2Nns)K1q*r( zG9#7GsN}@zrSF5{j=nsUGAKyFQXuE3NNf%oC+b0PL2KmO6)4+Rbo3?bb~KFq`Z`g1 zl>dK+7_M0vJrE0Xb-B*%bG671tNr@sf}J=y(hg?7>Z+D9foCZo-rAh|bz)$Ke=eOA zY|qng{>PiHg$sk(n|+_%*&mSFjiJuFwR~NQV~$iM41MRscGCBSs9NdlW zgV}GZohw-sa>=OSsN8}sQlk<5VB9F?Uq-; zeFZ8%bKwpS#lXlTAuZm&p?*8FW-U#x@oD4d7e{fF(_-BaSP!1IEyYZ#eu@KBe7$LD zl&aoK7k6H4qB;Kh)e535) zsV?9QKrGf|<$zgZ5lC$Bn|AD?0T6czf2^d2dUg$@3;y6-ADwn-H@w3oCN`xTlr

    8?0FS0S36e7VPSei|NiFIYf8f!c%#{8Ei| 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 D&+)8A literal 1523 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 diff --git a/icons/obj/weapons/hammer.dmi b/icons/obj/weapons/hammer.dmi index 965fd0b37efc8a86dff15969f7d559861b672530..751e626779890000394a8c8c1a0d37ed408ad206 100644 GIT binary patch literal 12264 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 oBKF#x3<;3i_sq(Q_Ae1I4G?rpK1DL0ALKWt<8 literal 9995 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�W^zxzDD_7#$N+efsD!IWWyR)gJ5Yo zteJWoSfthwSrD|~bVICJfs|9iYUgN6GX4v}Uv%wEH9@fiGHXBe3LBvTWgm9>w+B;g z$jTq9r(Pc*Db3d8v<%W7g1KUf_~2i9c-C+Ui^yT%Y49_@qfrBSvfxueo_Y)}`1vby zZIoCLi7P}Am|_u_g2bkjEQIfkYfe<^AOQ-$mSebNyv+fCQsxmjZwee1ck{HIzQaWaWRG@s(Sr2V(_p_hN^aIJhQITy zjBCG6|9oi5HOPFAR;OcIs5>K-gZ2=yyCC8F{dj*Y9uGiiR}`O$FaIp09$mc{M2bLg z(PfHf3vx&Ov9Cq6;@v}~@K5FVjGj+^K#M)Lf4WYIONeWsWS>Tr{Hh((=a9JVdJd6R zD%~nAjLuzTwk5ood3vI0j5Uc2$f%ns+ZYR$M~=#2?$HgC4CG$%e?c;QBsQ9bU8BJj zZ?>(k-U%V4YgUrrN1jl4(yhARr>7Ib5FmJXm}&;)gF&^_kWeJOvc#a2-Cw=!b_G$G z%iD@{T(E4|IeqxpF!xEMxt!2}9S`UcPPW}77P;2*p6c2L5qRpUl32!^0@2R?R zXB*$ss7lw%Eh{j~04Pna$-Spik9_J%Ny>IM2hh6yw=Kp6*nL3h~CVvM{@D zFDh|H{pkXnpyZSk0uc6WyBZ8~8qVv4Tw%LeXI>tIb9+?@C*E%OaPKP#KnFXm0YNWe z2Xn8swze00xGEBM5x6s3PXPj6Nq=!36egjfqN}9zxvCyHa3}GRsPK6IE zf4tOr`jitiqG!r;0{+$BF6_VaY+`Ck_M-Kr)T1JimX@L@+3^0g^!&C+sFaqu@?8+Zb$|6Y(682eB2iDE;@F979 zeSKrtWpIPOekbtOO25TPn>$D1gScC2cNDcq0acA74Z&1uUS=xd=*PIFc3SMc@}0;! z-XFne_Kqm(?AiR?0sT5~o3inNJd$R1LyQ|xN@AD{XTxmiM;=|!Fw?&wjwhn2`BR_G z-QU~GuCG5;SXyRS((WwI0VLbn`m2SgJ0VQ%sL=ffJld5!Tx&$yT0pY|!%#x;SUdjb z-?Z)#o}}xRd;{3q#G4Z$h@Q|V%|u<5(0E@8|O-KGZ!>W|(i@x7QkM8BM~ z`sRM`o{SGyS0YQiU3cP4CY7EDL{D~Q$~n>aVn*Ewb2tI0Aka|dguTcqAgZN0P&;#T z#(QDoFwV!6r4mu|^LYB#b0w*VK8AEaMFR{?LnAx)Njrg8StrNb&QAQ9y^_^{6NVdr z5&Q0v4W_%U9{QH9U;em0<64~kHd7h8X$ZZ3H5EjQ1Zr63%EiTnOUo8TOd6L-<;4ye znLe8N@fOI&dWEaHje>8U2*kJaTPg!2jhR%NPjT)oWmn;ZE1joltJipRz))P6EWMHx zZZnltJw+V>86a4ky+ql}teX{Do(vjS{>;RgR^X69abAVj-X1 zvHO`J7gjldCPP~d!@N^0+Xf#oM8tn2Jm_=1u2!Nj~ zYgreYb-Nz6chRkJ|Dr}a+Ofn4?8Z=apU<>FD$P4CM8%iDThyNQ>?RlnPr383kv za_&Ekx}HH{T}(EG@lru17KeBjz{6e&XS)#0eGJf>z|lr42Aq2ur1p=^ysS&|OU&WF z0Vm#USlfvkOLMX8tneEbzO?*)$k{sy7R{D2w-YL#KCh?Dj1rx_h}%*?a(Uo18Q oPPs`XPSB@-;(vY0oLP~qd2{@vFPH&--3HQ7(NV5?Y#s5x0CLM4!~g&Q diff --git a/icons/turf/composite.dmi b/icons/turf/composite.dmi index 7bb2d4717887c4fb4dea445bf92da482fa6c5352..a40c4121d252d2fd716ea0bc82c5eda01fe31e8b 100644 GIT binary patch delta 3329 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 B5XJxi diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 89b4876c0cec2329dc7ca3558ef197a484b5f06f..03dd1bcbfc30356535fc03aedcd377abca78fc41 100644 GIT binary patch literal 372760 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

    NE@_BPO5`jrZc$V?eLe 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̲VT)UevEtQ)V75bFG0+It(LE zPt%s+Q6B@K*e>PEhSto$?fpJ!g~E{>r~-Y!?=v-qbrs0i63(drLFYiRBHYDB8H7k)leS`Cfv2A}H8 zoPc_}%WSRcJ;558Jyc6iR^sXZbuR$L8TKddBT=vzN@YnJZJ1A> z!g2PQL#sHJ<`6NYKHUf~rgjoCfADnNc)9nu*ehagu;l17gQ717b%Cm`Dt2o$!? zrv;2IuHcSj!mea~K3N4*LZaSDB!(Rme_7>uw73fIZKFQU%iM^|RW-A}`K3Q=K$7o= zyhXEP`OZ=BF-ABcb#LB9Bkzx<`K6B41@K;>uM&)~nn=FG-r=IymmBe*e8u`F()>@U z3k4VYk~n#iZBdlVM0a)PeV=WgMG@>r=>l;wjfOa+mv1%x$Mj6S#4-YrdL?l+1Qx2( z6ZqE}w8H0Q6j{<@w|KDCDT=@4#_l@y-!8`r|wBu&!NtqjLX1k0|Mi%X{e7O8TTn#h`ra_yW+RFF2v6{fxG>Rslu^ zC5;rh%Y!XT9yz3zdV*S4p^C8$#W_b=;D6gXqahU7CB#>Y(IDivF)(bA{V6bD@UU+pk7 zz<}tbP)bYD;3)Ya4|f!p7=i&Zt%$_LP!lLeYTZP{&-3SIoiu404y^&qNS7aq1lp?wQGng9>z zO^vJH;Jt~!zy48cp>sNoW~1hoC_=d>H4`Z#e}n8X#)4uT{?!b!=SwaA(;K)O z_TM&#L&tHHvH8}fg?s81b`zlfvuE~JZRv!q@ecu$<8yMyl7k4EyQFck-1I-F=Y{Rw z%pL0A8dZ~{uGdjdCU>Taw*E(j{Mu-OzPk&zf5%@^T3TFDvE6IX?0JK@;Yv{gdOT{l zc@z|qTEKyr+fHlmt#Lc+MH{YsSLXM>e}7W%aElrTw1E7l1-2)w-t2kkjl(-LENu$E zqezuwQ8bD3)}!B{h2mGI*TW3v$0tr5)1x9lYOM5uZn3tdO$VuWBf!s!9WrN-FP7Up zhgaKNk)}p%Rnc4GF~0jQBreG1{^N$7>uli6;111d2|-8^7CVxQr`SX zdGkqIL1t5L2F!K@Iy$#`Fk4X~*%s|u=(KeCoy{uXh-92R&y>`#sE8GqQhRRafxFdq z9EMUn7JWy=!tm}Bj!{*9n(gVi6uZHT z#PFQ$g`tmg6`kcg7-VkL4EcUCjUv(2#gq?Ng72G(emM*8HkKso8GceiMxNZ{e$Zg9hkK)gkQvMtbcfrEKUEPA<*vFzaJYEm20$r<|e z?o-3t6I#Rm#=zrun0J>$#rpMkU!aJ&6_%{7nwF9DWcuGQF9rT-wKco8rv_$|Tl`E` zFMKX8()P46{pZoNrS<;jNBVRHFf}u2pr7m-7ln$7n>L2nnwfg~es{~FZy~&H8fnt` zw=&KC*$Noh$^gb;VowZnwRQS)8#WD{1iCMb(X%c+>f4y1{RIB<9zgI{lcvl|SA zEPJg~iq76GKyOgU_sFNH9lV6T=h_MI(D)jS6NE`igr0PMu1`~QTmT{M*=dg9&HH_I zC;&A6x=*M?|JsCMtYc`k&9E|9>xDFa68%d2R$38ZKlZddcC&Htpw684HWI9dU7S z{!0$MYhOVQ<(j1hMw69$uuEGwu%AW+8Ca@`I@b96b&;JQ84kwc@$M^>BiS}y5z4Pi z-)Qg=N3x)ibfNMjafgh$__YG$v|OZ zVzr$ytib+>dx-hFp(Nt_x$|Yj`7|>Xbn#IAuf_xNXdIO>-A2NV-a#@>hj^HK*4ChNkJgRNbdY9di<%r1CqQe) z=eBWnumC~rPD3E1wnhIj2NwLU!fj22@nc(#;U*MDcINr?U;FK*iT5Vfy98?e9O~BB zVsXIR>FgP#UfE)q;y}pO@X>I}X6Mh(I9tb+TDqY_djzS8b5wXumIZh5j?Ic)rc)-o zw;y-PUCp@PLp10^2M|~I$M<})cZ4Pt71wbY_64x2kKEpZ4+BJmI3^12?)54AHpM4F z=z(e+xlAicpW9NRsPXbo_HFR*F=F1j-+x9aOQcH_yPVP&je`eRgSM{U7<~GX@n|NWvJ{3WPfX3N(CuH|GVm0FA%I+6`R1O zLd%slzsuvLW&)#-K!d%uU8N3-zuqKe|T<%%T?NY z)&%X^@X01iwnk&%}<5Bhg;~yn0Q*LP9 zH#t6*P3HrLKb1xg)ps*fVqSZP)#@mys;oPCJ$?SgwkVbj&8*11m!-0&gF8#kW8FB5 z)U$_)3fc0PSV^V>8O_7(^C$M!oZ)Wv>t~Bw*_RA~?dn=-4I4Mv3Cw>mVvVd#A2o|7FPa}RdqA%%-HGPrYBJ62X+3H>l#9pL$!1%)~ACK%frIy^ru!c-JE zxZJHKd)jUMIs)kLS9#?6G>Ra?ITW1|rIqRD%s>tQgfCJV^8E?s3X*eqR1uf=B8rq) z@Mm(9;dM@_L}`E1B1GR3?#}p{U_W=#S$_T`d+@*uWN7m{#Y)r~D#xtu(_+Ed)TCm- zc~j0&tNmv1gP9qWqH53+CJ*~`ugsaxfhzXa+WtYT?8E;AK!p< zVN(-DWOt6}EidB#thxjNTmo^a9)eFZa=O;JH(g4a<$M0Dv9a-J`&NXMIL=TbhyvI? z1>$tm;p*Fxm6auadifG(PI=jiJRqfCH3W3^4H69E15zmrT!z||%`O?1k`j3p9IEk* z^j~B(h83*h-Wpy)RCvJUpQFxczzev4{P0C@5wplv?>s*D*tu4~97lUWC)2o}mR^7s zZMZ8KhHZjM1Gi;Q1aj0e%@xve06@_;cXnz`Ix+C5 zgo7scHpjB1?PjY25cfB7Wk_HrsPDzFz(<;=PoI_1fQnQnA&u1-@9z3IM%9k>N8wun=hGr;>&U$<{bx1_^hLs6t} zo_H?Y36ngk?(Ae#+Pr8ye#=<7_?qel%0TJV)Ix?U+}-TUcDrLvkGx3&_a%MCPsSAw zK_i*2d2-{oy0+A4iKCo(AyoMkpFr{G%SRi|l_tB>;Gcsh)1P4dajnY%+yPnn$P99K z!{YU)9x=ihxw*avHIj6_YoaS_eT}*dr!Es9{KUh}-9N7qNf(jnkvZ~GQcr|4VgR;h zT&HVoXZPmayZ90oqnc-RiO_hL zI5gt=#YSzuLZn8%XU||ppFd~&di3}A563|B^3YoiM*+muo5}(LvzJ%n1lZa6ymI@& z7QRpkdVi)psMEX!vaz)dkGvRth><;Whleo0HReSXh)d9J-CsV}PlY7f+E zDgQ7;BID`hex~F1zM)|yUzhS~V;vm$drhBk^C?bj-P)iD-5$n(uKxmEx`jRxl|9R;(K^;b@JQ641`}3l@NZ(qy&BNt!o>4?TVG7^w+5|1e^3oy0I75|F zQ@CK{&v$2abC!gGf?Lw@C+MZ^U9=b+yNp#xQc68roU%oV`Qc2XZQ4^_M%{e3nS`B= zah7VGuMaOfao=?BH~0o5cjVAZx!a6Q%+46b>5n(=( zUKiq-4Fj(FeXUqi{NA3Rrk3GnN=mk7BWqYx!R;6$EoIT}Co+lrKpVhO0VNW%KMDFr2EwQf0Jj!Y{V0IhR?s2dqo zP8ITPecS_f`F}#B2{>xP0rdDZGxJC>0xf_d_GtthUIAZzK==gM!VLHUIk$Njq4#1^ zFAbi}I*iZ@8^Q?DXY}!=5B`sF37*{od{6%4#|T{&hLv8H6~X{K%#=S6;(BU4#zg-# zC58`~@4hQCD0Quo%w27`Q#UG&wj?_6Z$(D!a-7a6GgNqWbPFMHq7FE#u73Bq94w|U ziNM|Fknq`Vn%)$$1v%p@_xMdR$ukykwch5q0HyZ5wu{g^tX@9yJTZ(b)bYLA4?tJj zTEbDbLPM`2Pa}HiAGh|vEIu%nZ`JhhJtUQUd}+u6`>@41FkD8@^V|>SJnPqR7koMG zV1)i&u(FNE_?EiTyhR&cju|RP0T?4XH{nw@leXumVUYcw;)NW}-1o2OjSij9%;Fs% zFb7)}uPo8f)&m(ev4_H_hv=!+|-g-44<9j+z2Y5Z;HLtxq20 zhLxmx>h3ak(B6#>JAV2II)HHncB~4}#wWz~CE(WyNMExRF_L8fN7Ec!tvfd|v9d~6 z!tVP+CbKH%p)XbofoyTjiD^?Bv;uK7g1Q51C&2+<*uRC9>+S5!4Gj-}!J0ms;7m9H zw!3Z#+S=MCzT@TPHRh!l-*W|_KX_6j^Ar+1cQQQWm6YDRefzZ4Fcx<3g>BFQLRkqL z1pWu0;j>}@-lWb}Z}z7Z#|<_L-8?v-_X8$_gM&Zml_@!*=fwh1b-?CbWcf2qTb!zT^`OQ45tZfINu!~zF$<6=Yn=B7FHq||COlQ!1qI?3ahjh+05 z*bd{xgWNd+v$OK(k;h@Nfgg&bDSiB$`{C>evcgg$9fH$gTKy;Og65g|IYWYI9VS0l zknpd=YN^SUdN^M?*<$N4PZDY+S~J9M?GLT=t=EAj9EWOvCT;$KQGO}w3H;6@jQ`20 zMqCqXK+5}mW}d%baJ` z(b8qD+GJ%sSz?Jl@x~OrZ)DwF_Ck4k#bExOVPj1(dRYEXR9f$TC*f%cM*Pp&)#ELX z?Nl$nz|f&LRCo|#ZlmefH4c!zS@EiMcb?G-qQ<*dQr<<7m*|Wu0a&DJV3>%C5(cxm z;raZ%!jmdc?B!m_O3E)mrk3WGj%QjDJF8oicCHa;r}F~Y3zk-C3P)d_-%5?^=?*Ua zNEZF!wq8>)K<(X68O=%DnqRjV5I&Qht8#;FhCjpLl;N2SyZD_9Uctr1?dtAk&SY(m z-5tnkHRQ};Vwp3s;FPknW6KbB1MC$DsS3)<`9(!om9PU+DICJjSc^T<<bcL#pf(vtJ@69WJe1!RxP&BLRY4=s;1T2i^T8=yYxPhg}WMf_u|GS$`9 z1dxUDOY7P>U}pEgW-VW@W3_fsX(_hP!#R9tYDyzm6cZGR5f}h)r0!WlC9sAR0sV?~&_~oW#=d($Z)E)b$=cK(66DX~Ub_+blAA%5Brj!gr}c z2W7RVo}zCU87F6F<$+MXx3@=duu^4$Cgy$l8@Pw$L0KCc7B@FHz@eCXUs6&=4qF1y z?F?`Ona^*;#WR5~!NSVgKRB4%)|UB*xc|ohKg3c;FC1-0@rIQ5WQ1&M-k z$NRR2(|}*g0{Mve7}N=b{ykXbih>BzurfJUE_R~X!|~8v#LLUe+}!*H4Nc`P{)hIM z!bc)6#MbsUx9_c!MD9v|8ToyVSC=CL!e{6$|1GyuSN6TcrlL*AY4xiOA0(Mgo5Ag*bWu_= zoNX@=VSA-G@y>rv@vsG48XKqVwcIhVF#J#@=6RogkjD75(WCK_%jlbrld08IAS=3+ z9=tqMgcA!?q6HjMXA(79=dBvd_b% z9KC^kR`2q+f^5q6y<}ZGIOCpaPA1twVu*@(s+mmano3r8MyY*?9 zUfT-5x{MhNpLx>n%XHG%!mmg59dB5{rD)SGz_vNS(soeVtH%N`@y~jCk^Sa>fjKgD zx{1$1THXTdtp3*%09gWb)WXT)H+kXF(ZHA)7NVCKDsnnHDeKm_LEh)NGg(<#m2oF! zWo#I@6q`Ho+VyrRbcLDd1}?*VpsZMGv5zJu*@Vl$#FNm;m6_g?EAPAg(#pTy{K=d~ zBMsj+VsxM_bsqt50)j>JQboGNsYRHZ;Hz?BP~qg<`WcO&)BEDlkr4;?$0Y{=j^s#~ zp-*&aWt(u`qxED#d`3pOC*xEvctmLD&;Gqptz|TzH-F24B9khhKw1HK8KMV$SlVLC z))E1~^5=Zh>asKPc`u9Cns6|QUA=x;$orB>M@Q$QMvzjF1!vYnV_u%j8A&FP;T$fv zrX4LnfZKpEjpLvIQH8p$uI~A_XKoK^{PuK0LOSv6%*@#USLPWJlpY6jkAUs%*$tXp zKcAEIZR#o4=+PM;-94gB)cs6JQE+hJFzbmDDu&12oMA@Ff92dUI+Dc2@e(IFu`c54 z1F}t8v4+&ggi0uVZn<=OC+#0>cHayfqA@i*2fni;q5@P_6D*h4Oe+;9n%2%msUN=_!llFcoDC`p;d^)WFC zK0|%NK}J$Dz)GP>{402EWEu7L{cuiGQBLDR5IW*#e12>z$`{_8q)Op&q;?68k%Ni zNpSc9m8#{l+p=|2f%K!Dzj`(LJ|QuqXb``l(QZh=?X`7X*7h`1;4aIhOw`6-@kHq& z*9Bp5k+CG&J-5i?ujrt95qKgg;1+oT!ua&yV)(I2qZvJdCjpiufjT(j7h zHWzS&VvH-zpk>|S$xzc**n{}6)$-cl)>)c=&ofM~xj&6H0?lf_8a>&gT-FpwO}6u& z{|PrkcBqT*G^cX8R4Z?~pNJz~h(PqkV_c3;A2EoC%z`>iL=Lq_m|uFf8nzfZN+Q() zxT?%YQ+qeE3k!R%*WKOR-o1N=s-5kZgB4w1T@QP|doo)cSgr?g-pvjr#0zaasA!Jh zl^rR@x`_Ocn>T5F+;qUv3@gEUCwjM;ppdV29eqBLuQ<3b;ElLCwNsImAc-Wv3q3ko zXW&lgH%?^;F_~T4nXZ7AmJW_IzM`fssI5)N&Zb@X=7vwj+gMlQqJYvgPC&HQX^H0 zBb_hsfm*RIGFS~Xx2T#$?k59@`bi56;X*ZF-iOm)v1^G*O!DSS-;w_fFmsh)J%K@Y~L=lY$oU}1hz&y}Z0B@H@S z#58stjN~!%$F97Yth8)A71?U7WzZa{E9iLO0<5(|n@!sG6XRx}W5zaZ!Zg=qu}?=W zgYV(2uhG6a%OGq;uVGW>L#Lw#_^_Mm_+`~f3tL~7VN_#GWBkx2^416$_Ia$?x8$K0 zd3HW05?NVW(V?|+uz~GSC|^)WD*H($1!*v{@+F`6Nnt!2q=D@6 zk+1AkP$_2XuJ*n9Cx6`MoxK*Z5Ia$9dc9>1Ly>65>ez+qzpQ^{r@tEc9PyEG=*zPt z{@uACi0wV%GOUEzuIyq5DsL`5xgIWjCB^O_-o9VV;!_;l!FZYFb1Z}>@!&-5xr$md z#}+Riq{Lw6Lx9s+<+!~wnx)E+KuZx#vY8&EsEQSg3O?^=yl6+mukyV+uYpG!g2hDB zCdV-czh;iW^>lSTucoz*7W=i?LV7otxi&N4q14_?0J54b)Z16UkX=Non|p;>6(7OI z#=qN}S=5K&7JeNuR3g99)7ju+D6a1AGe; zR_5kG?_V3+0yf7)T!URHW0H@Di0zb6HpaoDax7ty61!wW2wL5UIm%!riYg=$%dG;{i$E zz}5WKsQ*bB&%`5b!_JXmK5jTmA`1W*Ugg}nXRv9K`<~p^){JCB?{HY_vD^E$ z64p;Y^;lo5mBiuWx?y({!BxfY-u#o)AMZ~fr5p8s{)|mbNHGzc8XNnM=o`sES5yUG zjTm|KuM%SX-Q6u}J+cB0R*>z4jiqmO-3`t z+y$G97!J=o!+JNK1}~<=0TauGK$5lDG@TMyo|8t$#*W@zc~qoib-s=X~Q*Uy?DYRA^>6op}_rUzWW(t`llwk&X&;1ECYL^miuF~7Y|TJ#q3Dka7_D-Uw`9nfXTuUvO*ziA^RH{wsc0JYE92V* zxy!L}8myHSwq8ag{jqAi9-5CB>Thu)U-XI3s{Yj<9V>-&>cLACa4q$l|5_$)cIwtvTGk`18 zFIHlMLIrQuuO%aRc3?O_iXOVLg;Q1~O3`orBPIr~*|DY}0PqZBE_u3moTJ~?*(C|h5D-LAn2!w@&xs($$Sh@o+ zslWQLK7b@TjN_hSlg!?&KQW04?KDxE1QG{y<;kzs*58InfrGkXgS9%PkFGG9=np_e z5d8`2kN!8=pRi(krMbx1$eo!F9Or8C<&AldqMy)>NMI5JmO1Zo`1jMI;gz+N~ofT#d6 z-TI1SU|~O(UENSkk25TK0XX_BS413zjc-M3?cD&7K`Gpj7Q-2=1~Q_iblgUCb3_Xd)W7; z5828TY}cL$Cx0F-Vue>b3r%&``3P;iq*SQgG*<2AF6u!O`$Ca_a&d1RE<;BBicRNz zIbnP~|MxYn>hNbhZwu9hl$|`=OW(CA9>Hd2dPpTa$SLbBZ_iunUZP)+laIM_4gTD( zprkM?ckP2}(3d-&J7Pvm79v>Ul*mYlmY zs2w2sPLNk8-)**ucbr8^Qx+tkEsdM6s$=yyJcTnDNFwL%92Ei6b7Y#>bCtY*Nl-!> z*^Lz}^>l5ySR>;7Yrs(IA*>1gv$8hk^Yim$WMu6pHwh|*UWe7af>%@OjQ}7&!w3Y7 zX?|g$-?El1F5)AbPEFpb;Ks&AeX?lc$Fq6c%JIobY2ge@W8?PgABXdGk$|>S3qp81 zG#~NLR2mumUfI1Ggil`Csb~T4L~1`Ml^tgws)~1(ZjJD+1Xx?7Ikz?C`np(Rzq#k# zR`O95%=-Wc+T_)sDpAjzD=i-%kr0zH7)(x2FOBLcAr8i~(9XlT+EDp7Qf~;WSqD_F z;MlPq+$n5*{iNM9nU#{JGUMGUgE-Cx-pXs$}wO@fpgZ4M5NQP*{r&LbLESewJjZaud zbvBK`1{5NJ>#yttlzKe^e6_?9whAq!B~s*PGaVcKQ|-c%_g_}*&|z;OI})Qj8^11G zcS!yrT6W7Jw@&jWIy)OD07gx&HPj)yLRBOJvmBLNHt5xXSyo4jeJ5@1=EJ1lCbx%M zuHvL^(ha;G3yvC}Z=@z#`Hijr<#9_xLeVIU8bnYTeAhiWk{oX#aO3ynZC>PJy&?# zGI|V7b7%?=#wPtC|HiIUPebE)Z?E_t(P`&zr*$kk2FwOfv=deyuOY8|4y&I6zBC3NmGq5sXAQ$u@Eh5~{y)AKt(!ik;-e|2<(IPSym?{#V| zmHQ1Rb6!&r-{iTsx$mCSP$ce!=P-5-Yfl1z0=~9bG*sa~9U{vwsE6fp5BJ#$n)J1Nk-;@}0i=FlmIy>jLZYfFfLA$q}lE3cFR3##JQlMhJ z--Fe`XsCzFbqUhT4M!YDcH(!yiM*EC5z8--EMNK zQHfNe9x5MX(HLW;N0X`)>yZebV$|M|twOb9!*72awsg8<{Ziwz2L-&Pe=4Yxp`& z2f+RFYnOisUE(EuJeGJ?CClix(k}3P_&29>8*b;XmwuAPPn_~EgRMm3<;TXy0ZN+# zg=Sq}ySEtf9q$SM?_L1T$~HL5{Sm|{9s~x1C5>!%ym;a86J>bL)+~XXHZlqUk^o2s zkdOiCS3wzP4sE-)#G=QFU%J!ZXUfgMdefXYF0Lcv!eqWFB8z2>TtkXp@_|n>SJ-G* zzef%XHPYTJNoNz-n35+_B%$gp%FL}lVe71YKCvR5;)nwWdn6UNe9Y5VnqaJ5LqRO?=lR1*)pO$?)V^`$+zsgy$P+ zr_X1TQUdt5t)yQjEgWs&`Lp7NU$u8iQ%Ju-1L}sA{pzOKMUnx}ZRH|&AM#PCLPY!I?ho_BISHHvQd<`J{7pvah zUH~}Vv5c*(7>S68WO6?*NDI7sX95AImbB@A<0XlVAGS>S^=lO$d>d#`r#k~=nx)gE zYa@R*j;2zr0q+BI>?O0HKrDwT?p+RM_@7mYt?s#|0v`cH2YWw)rh_Su1KXv(D*-qh zCT$dBh-x#DtWMC*GSJ|8W(oq_C-Evspc8&$>Bofk);%O!TKs7d3F3o~@$^H_h{W|T z!Y_%X?>*ZKd7zq6i^*K#7QE+~YbnnOR$y1bn4&2>=^18;+rrFWaF>XzZLNI&G}&a= zx3}D-gO3~S=37#XkmdF1N74&MtB55d43KoY*}Tb|N~UlBrpQg<`&t%9nlXd9PvH8M z&2yuI_8`UOy^V53Tj6fM5L-~znt-YnGStR(B9EO{WVm}N%CwJEhbVC*!_ZNHvthFK zh{XH&vY?r~JC3s^N#BL5rKPd&;K-MKdvIY%YBVGBOonc4euem)Iu!5=kvuienZ?Ju zzRbG*eud^>GGnl6;UvIwbai#PlqYAvgL=zquC?@;9Iz739jZt^hn2PrplnaF2e^Rx z^vUk->kO3z+U|IHb4`HYKeozByujk(;xd+VSNZ}5Du7)Z-$bt7ldW_ZJAIhpq;{{X zuRkV&K{fsEI(nH4)4AFGOv1uL8Pp9VHhsoL#44RXcC@)7(j<`vC*Gt`;KZ|t`p7sJ zNr1rtoDhJ=`+)a#aQ_SmoVu;ok!F4O!eEkyt=Fso-G+T+&ve{*sDvW2_I7uTOU^oL zFk3b8A7ItaW3*XTelIn#8Yp*+0Yw3)OniZRXD4P&2CZU*N}50JY4nT-9nQA1eb>NR zS&893nR>-{>PyUq!wK+?DyK!m;Y@$3=n9RlJ7?k5;y_RG`NAScUn`ieac%A4B3gBs z0>bK)Y&yw*yFPm1(&p*$eYqP{;pv!PJMqimTXo5=H7OTWhiR`Mvj ziDM-0-SvmM{n)6ev85%0DI$1PCtfYK7Vjk7cAT^|-AWpKbG+2DhU}2=Q+;c2m59e*PV;1q5X34BBAN#Pdu!xZ5^g!_!Ngy{F zggzk2$OfJ7IBl^JzjmnJ=0(>YhwFtMEp{Oa8&618KO6gEi+kAu!vz26aUQZGo+&-N z&GODu%C-A)*<@;oty>}XSkoZ@dbt5rIU8@Ty6${D@z>M{Xw^Jk`nCP@%iTbJ@?xgt zx6qEzSdOKTa?M4l&O!2-{P`dKy$P}OqlvNXZOy?U$vkC)b!36(-LOrw$djBWWnVcr zW+t_w0=`&lZq@+q!7U^dZbG)(b|gl{ZWhgAZ!RyV z$~Z%_ArMHdEsO&Y3Mamo#1H>@w1jzJf6i0{)DO%<%G;zQ5+KC@SDE({evp$>ctdE; zO%6ErY@6u2k_@=b3n?Y9f724A;g=s+kTdUJz$O-UmAomvVD?B^O`+NXs@3`+J z33~W!XN<`{7{H7Uc2xiDfA?+XXwvdy}fYw-8%MB)*T& z`}Xtxj^pP)jw81`*LB_3IM4Hb?%2tar0tc6N7-{a_{LZtuX$b*jjcFvS;U;KllDLj zVRt@*)dtO1w`u|FJ)Ic{TdOk}s&!%~!Q;&%cb@ArBZ7itjt|S%?_*pRvM2@aeG`>j z3)OVAH2-dGfbY5Neg1WBcUuwOm*$L_@ra0lH$WWR<+sa3{EFEo7v;E;el(v{WqsY; z!N(5vS(<&!E#x=CwckT&`y_RokTXUmnz^WAF)*%{1L=n{hnRc0M)Au(3U1gJ5x+HR7s4EVHXgyN4ozIjs_sE zb~A#X4!JkZ=lCzQo+bC^$qNZJ<7P2(vv{=Ul&leOQURDxrcMNMfzf2_pN)DkO*hRA z#_{WKv9$TD1CcO~MMx{de8=p#n{T(Gw@B(yOh~Z~!DtE3~h0UFp z1mJD83Uyk-=y|t78Kgb7GP1LS0S%C2y7xK1LCt41?k50t49wq6bMp3nOqM^($5)S6 zsvwn}yul-mh43t?uL4GumW$%hfHCw8Rb<3CfA!VShrc^m$_r@AaJ8@Z)0nL0K3;v@@yLbu1n(U^2B-Ktq&qxT<1E4D)^X< z-WOlF_wcsd_aQI1siL(hwqn#X6Za>Bo0-TTLddWzP8@Old>8J7IrQgpXgE*0X9V4uZ9WT^hwK{d z@T0eN`FU?O_pA^@vGqrKjBQiZ)ssp!UBsSus{{>`#7oHr7VX~6a2e2;d-@F82c4|+ zS6vryX-@sP{WeO!t5(Jlvr&83U4y$`=2`J>9k6k6mS1`~8yt=4p8|v&N32T#5hpf7 z>PvK{_3e6(?O%<=!&Vi~&x0ADcUWj#`-D4*#z82(Lm;W!aFn{E{^Vbj+>On8@BDV> zoPs8xchShB+wm=ZFoq`*=!I5)3w5BacUpxwEDZK9fonC=hfikV$`; zty60J7%|315zOOHu+T7qHkE5P>bvg_535T<8ov^NqSI;;%Gv?o!4fC)LCO1gZHV7b zyO=loNj*ygeg(oOG5)4UYa%W*SfBaw_<+bGuJqP9R$RBK=Tcgbz|NB0AD-w)&6FTH z`c3O?2}IvoWifxQ zxNaLppHC<-N!gw5iteU4bt&ylpk3SF{$n#gU2U#2dKJn$mdreU?=5wyBtUN9b&f1MQ5dhB|1}`)M*rqaaIngpLPcHz#-WWq#fLdX5 z(G=%?7i2)%d>}M<9~ki30Ht|U+bA30kp5iag^1Bnlvzd}Nvh@|3k_<&0s#LlIybwLOqg1ls)POkjLkh@>*Fj5U9V$z2g{MvneeNj0(PhP(ltn^nud^t2X=V&W= zGY(ZFMmTLc$g7A?w`O=VcuK#QKoCAUmsUt>vaN3OHS7dEaRS^dDmA21Rb09)`j-4wV)sO?1kvGohvl_Pa z%WxcVs%EjO(^#M-!CGswX3C)!?Ox1)O7#8bIVyw$*;YiM^Ip*dxVzql(I{6G zW`ER3wWzeK;=uuWFezA_gblAA_G)g!{JeP4Z$>}NojuL9cEv}UH&uEn#=T@55pr4o z)oNHTuC9`fd6mi6sM^5MGTYTM`PXt%kgn6g>et%EeK_Frra7a-7`fP&7ffPgu07Py>fjJ z5X((sTdjbx>8CY*k@HEhlF`mlr~*64|HR~iXYxg-zw-1H4>2iqT~lqYON8&haR8_w zv)6Xh!} zQ8-*qJKE`i->FVk*TnZ|xtHME*#!j!560vT{hTnRJ>=6sLg~33~-*(KQCnD!4eH#R!FiK_F* z1fJDCy>#2J7fk-0oDFXBbxKaF?j1|>^^!4(HO6$?VX4HGRB}8A(^vQB<2B2va*Q5q z$ae(+j+4VAxghkyqW+DFP_Qa=rF|!mu)xPVweMQx2pL~kWCm3bhT}FjwzZ5^Eauw< zv{~bGc!Ow%CMe{IZXBYfodcGc?4(!AV4JX^Yb4b9*%bo zn27+$)l?__DezJeO#OEL$x#gf0LIqwTx*d7%UE8+fXClw103?M9gP6tQz_fIeIQt3 zBsSiTa=`+J-v9u$Q>>v~STS=5>W;U370{m~3QUz^4%1hbBi8^PF*HrPKrpO7aCBi| z{d=^)kWB}0g{YB|!0pW+(+N{>hu29Zhs*^f34TwmG+a?32o?OM^38zj`**XvW^VdA1|&GfvUE^r+wS# zF~m?AWoc}dXIXl+K(Iv2H z;M@E{cVs}c-DV>+M|@Jb3nnl*Hs9l|vc}Iq>Oz8n*z({N8b-Vsnw^ExY2^csn46gB z1{7kSI+p-o=Y7kae;8lr@``oH5iK?K1w;=74+4R>P(qMlgMxxC;uUC%7u&-rT{M&T zusgO`7oH~^V@-f)_`yc+j{9)5k7EO&JX5fW&HrSfN}cHn>6Q>G51`5o2~FSt!dVXV z-0g7YXS>=>*G-el6$Rt4yDqBn1-OMl7ZwcrS88g`2?3zlA zv2iAsj6OLg?316=EkTH;sVDQCHo_d8dNjpF(s%@h4qA4&YBmhy?V~bX*q4Z!yrudL zrMYU)uQ8^APiN*-fWgqB;>rEP8?4+PIp@crk$V!bv(Af-BZTW$%GnHfg9?TtsSM6c zuk1hs5M*B5%P4aLMRY2wHi~s)1`nN2Tq1F<>H}jkF>iHq2dY{cMsZs--?kCf=$dBB zbc_z)t9w7=k3L*(C=H13$lkf;TWj=0Jcy9B)X0L#IV0p;B~fRS_vdq9UM`69)tScrX_w|1X!x|VdNZ|? zD11g{?WyFXjOLI)Um^+mSZ_J1x1&CJ&v3w1z$wHn{H|sePhpNVnXIaxoKXwFQy3G5 zhOQaYFI{K<6k-z7xA7VqiDUzTst~y=4Z4P7$qx7nUbt$?pC>IN6PzI}z z!=3K)lJYk)rE;UbxI+djLKeLxvqY+ZUMWf_Tb6YvW? zayNLoG{xiaRaqA`?0zy4EQdaG&F?xvZw%EgRwzWLC6`gt(Hrx|j`7Q^x89lCHMUhR z_~lZ=H1$ZGxJtu&rZq@_YM)HpQNZSn7KLQt)M>eamC|x`7*9-#@wMnqL|faFZsywy z{p)CSm7_(E7VuWryO-b9Dsx(jkZJ_4?*>S(38 z^&j1)gZk%JLb$@lPVf(l0v<^#fmLgzT2@f*6#K)KlT&dsl`lN|Gl6R#k>M`atZtt) zNX5@42F#reO2V^Z-m@ZfAcjxqZ0-p3MR0y>giHgoJ?haKq~oM{hPu zdiS-OlZhfjU6I6!gX!g543M<|RoD~>>3D~ZNTL}Gmf|J_%+TDs2~vpIr9Fv@sjFWF z;Q#hTxbdq)44_oN&@v#$%_Ditv}+->F^PmmBBPLSF+Bm2gysu^xbA{{cxkl3iw8~# z^URLwJs9oO+YpBu35(}xXNu;o8F&qbDk%XRa0M=+Hw5;W{!r}|fi^D3x?#4xVZhuBBDZYO3pE~YnfbYo*d0|useWR0gLAqd@f zAkf}|^FHkn95MSf9y`)P!3z1Ia%omUQ6TNl6)y@l?t2gQ)E$q86X?y=qNdJMmfNaN zHmn}h>t9vY$O+W$^$t>W8ss{=fFKwOk6i3ZIvPr~=tQky63;CKV(usRXQ6!5!xI6;MX4{wVPperXlS@KU0ZIZ?=K{l$aWMikBX?kS7aI=?Bui|I^sfe^E zx&nE}CUwpVU+WLhkBDmnxk|V*|4C_SCMH0$uwwAx8!au(Bw(P%EBc~Vjm|QQ~8*`U%Pc?m}^geI?qF4BWO^{_pK^>6mLoCnR^LuJ){<;jy_B6 zbXt8?zY&kvmU+2RZ(XZi1cwp!z3-7%m)e};D5*9zK)Ww5xL{ATAQcWx?|ae`WXZtz zJ6mQx78@9!yfbaYc-$>|`5;@~{_dCObgu#S+18!o#;17<4j7qA(+Tk$iORPQhnW?_8Wk*mCpw$so!tj%%I`ve~rckC6Xa#8#Cw$8sR=)9kX!U(p(e z)L4#umaoX(AtRUG7~Q#MYBeU{3!7~XCOa_i2nn%D)gJ$4>$Ii{8ZW)N4T$7QYTG7b zwV~a>J1+9{atlsXgwE62K8X$rJ|ZQLxdI-_ZVt3_NWVV_OQdENtASX#Xcg(1pEpz& zXEF_ei~gis4pzui@WG0MkpyZKSDeE7^e750ZJy*0ZKK{=tu?ca+#p9lgY^(}M#AhZ&B*N^*&GkU7 zkI^O-RbQhZF|30Tk(rn8nk_9cwrGib;tpvFwu4{l_Twh+Ob8P z@{$ENWbBcEIjnc7|LuptHY|qI@9#5aF{zV#-Bh!sZwd?ytn0fhbW=UTiE?6GBI$Yy z`1>PXCeGnTlfJ$ErHK=Xx;d@@G?ktA<^!57)Y54r^M+yV*MQ#b1OE6j$jiD0HtL!Y^DV#T ziDp?#-8Vz!d(OY~DD_}0F13?hlXv7oZqa;;eAXM4yL6LLk23L)v95&Vp>W`8b(Jka z$l~oKNShCJ@cmO%aPr>Tv>Z~&n1gx<5G@R2|Lbsyr{&+NoRT<5r>Tu1P2WF?U3+`- z&WjQRxh2E@`I4d|dr&OWK8e$6rIR{<@hhj#o%e~t!+z{wDwYrdz5f^LV9A^K|+I8$}rA}Y_bq~#9T|T z82UG6lM*Ez--TaulHVmMRNJ17<*ntbR&lF>E8nhX(cxrO+&Yl7PA|E{bSH3>97kcj zbvRvBo^1*vT{o=#^=K|x`dFI<5GDV~AU1N};y6S$Te6rc7Vbgb7@MOiDz|SUA|lUx z@#OLA|HsNAYt*|hy)u7VRz5t_|ISGJnP2!%1UAu(Zib-;gBnn3u_Aj&QSllCd9p3H zkZ>xukSJULk=PSfE|goSa97>9{ab+}vhm{S?YG4AjQ;K|E2X4XB1boxDqRyJ%T7Ma z6VLk`W0Gjtj1^w_22}v#OyAd|P~w{^ZEDBoB8+qTtxWz16d9ubZ;XW{W-XAPU{S?O7JMb>NV-*H zoXeD7bJGh`c~WS4^8Y7H;;1$pXz@U}!5F$g>pqNg{TYrYdR@kEt=NC%taOXD>|6Oh zeie^#f@DK#vi4%~$BX~Te;2#Uf`%3>M{3|Cr&U(^%Ha4M>afMx{JDyf1RVb6Ns;Hu zOSp>jm$GnIQ#NNNO>C@dbN`cytkC*Nxdqao`^C-EKh!%)gj!?wivF(HN0Vl8m6*Zc zwZ#B+?GA_{Qtf8%&)&-(vv z_P50gr@wRM-W)9RmNb0b7$~9Vz}%03Fhw?4dgUmzVMOuDSsFB6-n5<;Sy;J+4+>UF zIdTktGX?NS$2W3fNuc3tQb zG>ek5%(KjMZd3-2TI#Q!O$(=3HILSsc9H+e7{>Z!(D&YRs2pgw>i?uuBFf`clRLu2 z@+i4`>$EX^VxLr6c8cfh->jWrcpLhmC{bp2?5p7KV>Y^5^0*rCF>+eWQUVj2?FV0A z#KnOT}w6eb+%fg$im=+oNxU_$h z#KFUu^Vj|2_ix3nDK#ZuFIGVOFG?Oe9$r-r{SSv|5Io%`;@=*Rq%?#8%CzJW1DsdT zo0XIp-*iXs>D^G_F5iYq19Z&{m&~=t56iV^yeN+Mt7oB+$Yw3_>c8d_mgeUDNe+-w z53N58{`BXGf0gzz%eSR3f@C>AMKR>Xt`=zU9_QA!u1a-h{}$)DUgzi$W*Hu27_V+Js&9P>)nMEkN?f8bgog7JH(D)&vZ`^4nXzTH>dr?iQ)}C5?L?ph*h;; zAZidkakLnx!hB^y$SSfcB7SEn^@XxyLk6vv<+U66)QNw+keQ%=QSZP~q_e+8hbqGS z8giutFvNp7;6Af#BA>stT_JP4T8(|(SNO;d5%*#>KZz@AJwfZprR!)fjo>9FMh=a% z>zFJ)jk)}9jH>nV1HTdLNKV!z-bc}ra3=kEOYhwad;nc@>*Kq15-3N3R#AS9;hTM} ze@)gOw*PL>xuWoDHxJee;%R^;K_g$&yZ!q$gxAzSyOL3Pw(nj@j1a%eAtM@UJSa@D zUk!wCFkj6u&9Y`Mu#w7&IE6h=y4LN-WyQ*cB4$gNlon2plGIfUe}PVy?@RSv`0 zP|nqgSj^064h>`2%ue6O)a!k^eg6IZ^ZTQ0&t1>w<8)p3>wX=cF{kaV)~?>X8Ulf= zwXr^a76Os%2mfkUtpr!f;uLKmkd@4^a~E$Pzj4bw$SdHsmp>c=3C*s_I&&+_P`(M9 z3QP8K%Sm+4w^t&}mwM@S1 zTKQ5V*W>O16T-cbQ&Z-LzFP)L)~95~m%E?ezuRVy^4^Zv?^nJiyf2S0dx5vl>}GC$ zg^;^k&j ztC7{204L-1S>(ifTI@sBNA%i4sz)sM`#$7akJm28Y2K`ODsrKi=cL4j$!Cq`-hW+{ z@408KeP~h=Rr0xK;(EDD?#Y!yx$8cKZTg(iwD5U=G(8pb`Lg8a8P3~pRbP*;QJIOk zXBl>_Ze8w8-|OtZ9Xd6(Ro*GvW_jm<>PIfL_eww-ph*Bd{s{a8|}-|J$y?tZKJ z*o-^+=)EegX?vy1IJa|Y4?453S5>#IHcI~6r(k$)U+ejuk>AsgO}_u}$?PYM=9Afe z=Glp(6Rt0=MBTZaebB_m_fc%n@Mr&u)5d-Z2vzgYecY(do^wYiopaCIiuiw(YnPhq zS2*0+nECoeR-e~}<2O%U^746#g>=TQ-4Xjtl3k-*XugBWlCE=OwGhu zZg2TGJ~TV=ipotC?j=dvse`^=>ckE`eHRIPbJ?O5ryu*xZN09K zZ#uW**7-cE(>wGm@;08|o%{VJ)m!#+vefpB#KAf3jI(Nis_$x$)xM{s4R4W3GzZRy zYj4=?7wJSk+;Y<3mZnR^vbT-fQLodCGb_udUU@iGD@siErBQ2@^`p0I9^d0)bJXoq zy3qSWb!JColeK_!cE!ttZ+FhOB;J1h?u6e?x40`U zUJ{;cnwR9ElyZgCJKCl3-|CFkzS=})T+0}YIwYYi_e%P&P<1);2FX#>Ig@}#Rt=I` z!Qg`u_~7Yx(nRmw+hYxPrPsG!(Ym-xG3Uzj_@L94?)BAoR_9)FYSXhV2=nlY5P6^5 ziInLWc&cUD@wWV;dE3<$jj#9lWZ>Uvy@-T{1ljkQ=F)G~CG5NP+S}=io~`pC4`s(NR#@tpJSp$GDLQp;{7tBZ;r>le0{%LFkS=jRo}qcJ^-0k47oQ%> zq-}V8Sv~aXNhu%f2KAapF!h?)9mdOpK2BCF^7OEQ2+m~p+bhZuTS`2w7?19l9S)Oc z>B)7l*_wU=-kkK~d!bLvyY}4ZW4^GC^vN?lA52d=ms@$Yv3L1(tL9w2)FU1Cn0-ezkNV8Y z3u*|f%N~Dvz|Fc^Sqh%WmN|W5{QFp z(O8v-X@geV+r0!4=e}YL85J%r+%+o;Qw34m=<7!p&lf5;P3zCBbPg%JlUG#nJhdq$ zZ7eRN^1@u;f%UPO-&9VMJROMd9+J!(4z`DsT{@!P&^P-~#T_QI>FkFbCApV5kF4#E z+}LB0{VF2x0j)!I(xwM%Y7>4dN7?36+(p*W7{lq;m)dq-?yTiKzj$Ww@`U>LV-M<^ zmftBim1lo%7}>!2t5`LM7pza`rMZeF{DX9jh+C^HbSz+Zq|7 zhfp}h;OI_?76dZa_N?p-P_{S-Sq6dF96x$4v}Zzqtk!J0v~x9dU1nMKTciB9UkP(T zReA6-O`p0CogZ|ZKNQbMNXCD8a-){LqH(3l{sjlQTbNr+gZq^nJjXL(QFi0XkD-y+ zb(?GNzL)ZikAAPY_Z{_YL1*Cwge~>gREH-t_}AWG@0R!lVRPOG_Kt!*jN62yh;yB3 z+z}Q3Y zD_*RrGCO?u9#j-3iV9~|sw9~Tm!lW+&F*ly+}D#q+O&ej`JY2D_0*P90l!lF){}0% zA!j6RI$U^0NIJSAs{ht07|h+<`|XZQE*F^u zfIsEad|&ufBMr*;L-h-oezC{#Y0MjflRHz3R)uOR1g8*SY|SWf0Y{ zG3{@M3U5?esUl1Bc<0YIg!j$bw+2W=nXAh$E?1l;((3T%llb?n+apAi}`D=%w$u)g< z4F{J0eo(Y*z1@#T zaU!RvEW^H>3fF|=h&^8sdaTLD@u_oyxZ@f+ZJq}=T|Y>%meoS-X0FdUMRcsVz{0LF zjOt%kOva@C za!Hz98#`+^<|bD1u&~WZCahic16SIH@#ixOb=LYL+njv|nfi(O8LXU*s7VhVZ(HIo zxUPtrjUnF=po=iBAJdrtb zs&DP$HbKrK&Suwc=6XR2W*F$*mW?-qj>O;UMj9X7>UBH>x#e_m2aJoucMvJ>DUj;Y#l{Lof(0lxErMHq?GwOv%7)^^yNEDG4(MZmu_KC>e2_UKw!RBUm_~N z@2=QN_O%>L_F3AH5CdsZEsy3Ld<0n%NT8(sSp$Z!>TPUcVOPvtS9;e6)!%z3fYm!E z%uf9Q}2#+Bq}_os!Se;_Vi_;qy9#t}Y10m4)k` zCj0NSM;J^RBiLd?QCWVCBAmKc9WF8AC!VAlTEeQdV%0LU!X`5ebPb~6-bs^vNmmyf}{w}q2ZJH zi&k`87X6KYg;*3#%L#2MtfnNjrU(vo^ta>L3Ptx)_Fsp4npLNB@B%bR1ZQvt!!#A@ zdeaKnwTXN8>Bb zfsn;@kV_Y9qS$bvzS(|L1!@ob9%tBJlQ`?Lk7mc~HN*b-bxB?2jbi_027j)D=bBG% zm1c%y|KqA8#ABIHn@Tg!|L-*&X=d=huMIfe_gwV7%o;0 z-6U1*BpAOgR$xj($7HaeZcpbrzZHZqO`c}LDuooVVb+1-ok(g}!32(ox znV-uG49W0favRhjkdT#zP|UA(72L{#e(54wJdoR#d8*u%?J+7>o5rs!88wLzh2VkW zJrFAgG96v~Tl3`9j2_O+%#^omfTVCv3kkd_pK#P-|6RGkmuiBWODc)TL3e(EP}UZu z8CFk@xVz`)Y;qym zVENR-%usGC{vLUp8C^{d$U?(7kxaH>wbFwpEK(bPym8(hP=)hiPjJFmk104OqQ0gv z*}NM5U;LMZ^n8w%4U?EOTfCLzsYR#OGv*wG2_4&fmn;Bb^c7J8;QhA>)tAYN-TiY$ zAR$KV(|=zU!?^~{6!=BWKM)-yW?bs>+^I9!{u=)fljTs0yuIr3)mnA*vGZG|0WT@i za*KP2k8yXc&KDTI|7Q@fAq{M{cxm`^N!vGSe|qAKbeDJ`n8SZ@Gq`&3pJBz!qki8V za$qfft9V;=4&ku95&u@c=NV#Ga18rmLtt$}Y5Dp(lR6f8A1&dR)yoWDVqU8`+{}&S24J2j;gnFUSoq<9wAY zIy=8zewFJ0FzE9z_p;`zxMG}2W5enLU4C54ajE{+KWHypj;yVjjZ_rRE4Pke*#F-o zA6Qa9EE|eZCA(oF+OX&h1W)>#!foIH^2bg9%WLB9%V55afMb6LI0HQ^khNZN0MgY% z@BA0~N5et5(6M_AJn$P%v-&qB6hlFnG%GSyN^IkcDbbug_Tqb&_Qd>Ody)*s`5huf znUAe#mYkZ|J@!Ra{fEtG5{YBCYYUOWJRv+XiO^;$8>Iamyll2PUs%!Tc{?Cg@+Lo`MPN*qas+T z*vGEf_Zj-Kx)76v{<}pcwsK|*>gnm}{hmB(v-8#Xo))5IU_8P?$fcrje{qC|RYrRz z=iv{yK`Nv8GmBMeVy93t>S}c`)Av%}FFvFq1&SJbmd~WYaoAR7@LS9|bZ#Ea2U)zN zY*_kv1Ibgku?L2wz=+%Uw`>DK!l};=%vFFp%j{jBwO1jWRcP zNHv@<%^y(XZ-6mGb91EybF^?0l~4{afLvq(F<~z#=CUz>;sAeA+(s*`rp$HlhFk>P z2Dil<govnSnPEc)|Y-^~C>z`lbjS7*lK^2$pM-o6$Dd?TnF|CzJvY^-;2^{vwOWh$fasEo3w$ZuL2$l%+hX66wSB_VVc@IQ^x?M9KbEAW@V_ ze_u<%IRP*u$D2x0cnX=aR?_|6##`EQwdWV9BmVfSzQ0Xo0{%#<*LZ0@b$X#&rGR!4 zR9f&k)d5+=->!roGdoHeT4WUab31&HIIQ3bROcwLn1~qHPs;#JVFq#0U)6s5F!H`; zN&9ed0925r zOd~OxWArc6&;_QE1Ut&nP@UlOQ8w8<)SXNOPmn7*C&K$+bc-FgfA88&pUl3{_ZDT) zTAUlP9;oepF`Np|?V%$D^9TR&6GWaE#v_Mq(Bu}xHGa1oy99=2r2;AxkaPEA$XvM2 ze>}Lj2rup4wdzZ=0q_!8>>N{$QA*48w(?6kqyY;l(?TM=L#~$mn+(V;hVhRw<*aju z5joY)b8&(R1I(GPMz0+h7zH8Q<3p=D98foKoK`&^};<++Q0KO zm=EG0g>zPfAk11*ST#@7nVw7ep?M1-zDIH@WaJvI4Zorr#!lr=eZdsZTWOqeYs258 z%_gz16XH+Q7GI<5rA&wDJK@6%~Uf1r_=BsfWAKZec9@^LmR zD^DB_sK+g_{+E0$u&`E)?mT8l#m&cASSO`+TiNA0m@AlCu^J0&(yuPJ3ryQV2$0Xj zToc9xOAtI3)%<{|{*22-EsY7n^glx3ufQFBVON?Zt^Nr1jcJJ;gCJWpyi5vdzBFqf zGrUX#+4_6en0aVct?S%yDvQSBi-ms+(Y6bKd+3t1P&ND`$gzYXYg;6zM#WOik|&oY zA|6}51x!zH9ZClaNtI&1(84|z^^GnG{}xgm*OIHiscvM|p7||EG+1nrv{wy)ilvUK zo?bdW@z{~pxql8M{0-LR?+vEhSA33{NG$wYh+_@zsF|;QB$fC_u;x2VjQ_kNKuVSs znIfLZ(%8pY|0Eb~1;bG_V=Y>AB8R&qyd*@l0+X03l)7&c@JEoDfEL?PFNs?$QTyY^ zxwiV**;(tnvye4OU&Wr8m47dUt|NeV&=P^FS_m&q;{~q6SjyrkhvSb%_sy~pJg;pE zF{QqkovBB6mL!0a2Grnt%N+B1$bR`vH@O|h@GSC4VR#w_-beIlLF=-T`k)+kxQh@D zr6yv5^`W$BF*At#c2Q$P+)t=6WogXfdwfq0fmd@7gbillH)L~}HKSAIiUVDe;=CvX z())_&f+UwKv4U_&Hsb0onM-0nxs)o}?^W`iXPp~^>AMYL-x)I_eynOj`$PWK;L>9WZKUjE) zg~nlUWN7gO^BkAiwK&AS6&ScFD=W*7QtTrkDS4GNERH=8C(YznLCo8*-8t{HxjuRP znpUW7ACt{wFOH@O1nolP4I+g!VZUCq=q5TxVH4RsJ{6PY6q8gjf2Hl_9HH0O@2(Tc34yh*;pw{fNG|4L|tdqH!K*|X3(7^4+A_H{d#vK*!#Fb3E= zQ|oW9KA2N~itQkv6mntnv>E}Pt8^Rp%%OQ)={76!u1Ta=wbTA6_c`IxH;nEiFq{@% z8DDH9<^Ytit+egD7Rg+7bbl2o4Ysq%40iZZ=|3C^|3@;8`PPnmJVm4v=%YCAhr>l5l-|Wh>kl`Te>`p zKi6%CESwShg?~NKT?7&U@-fFL8*6Vcw@TiJ+Gy>ahL^sQMtM4AHVC;BC5wM(0bBE4ACNOdH^O=abz_m(rD#; zNsi#Y50?Tr9P|?MT!cS=I#F0|uIUR;PL)B0E<=VPn%~*8#@mXkylQ*DZV5dw`wa%7 zrQM>ME@Ie>gnkD@r%kp|@yU}z=~Lp(_;)FYSthjBbQ)X>U-5GL_J@`lKfhk@Nk>TH zv~k%i+gX{0z`7sTKVl@!tM9U897iXasT~e$MN}`O?yTsRqJtstjawa7G$QH?7SMQo zoWHB8V%50GYVYYe#9(J)#{~;QgoK%qk;GmcthUK=uqc-%jgiJ0BEuMYZ1H1#v z{^ryB?`OWhX89q#^76u^qu(y)C&X=dj|nNK!(?1r@Pav`C65jr10+-&+d)f99#Cvv zP+M_-{yJKC`_;Uu_8B1z2fP?Cl{1}FzWKCkGt%LF^+J72`VI7mC;A0*E6lkV72d$B$ZtfmE>0zm0E7suX7f1WWI)*X3S8?t$MpczTQ zZrr8na;&3Wf=T?)%O%w?Q{w)_`!_e&FB#{ zSC_R_=jHtTp~yj3Z^o?%(}d$1ee*_xWkR2|fTV%FG3jsi^?d5R-*EY>sv zUP?{DklzYiNA+qj!lDhw2{9-GnbCu@VZ`9O{KSN$E`CY#OxatJ6NvtQAC$&-YlpR# zg*-k;_ft<2$v-E#L}wP$sf@-zz2=Z;^LLsJCYSlIv`?y-ugR<#$k8Cq%j&79s5P+K zPdb`>cV!S?OIMHspX9%O9R^?E^GyKj`33^ZWQ;wJ+8TZXliyA&swUHEF^2tF9UH`#!t-?j5iNb3eBz=L%(98V%GL2GzsS5dkQ#`ER&86D=?uU$AGo`A@*| z$hN=!R(t=U>X#GR!{fu`jMbjBpu=dJyt5ady48Mp;9vXm%5E?3Ii`cB+leYkF`fic z2DU#jyc|~Zoe0Y|?O2D5hdmy4E34=d&1;heQlT^JdBzYFORMiJi;Bd~qP4^<-`TN@ zr9CWT*RUq3;l_!_?D^PuaU$?oT8-7{z#jx)q6%=8t zb88lV6?~ws90rvClNEIFOhvMrlT$q)StJ!$9Eu7E)^t1CKwNb&@KB;OL)*|GEjxmx zO(No?)KKymzNcubVrn6xKTf7WdQ}R?UI>7`uyEP*6_Y43$?a1e!;_MZVZ~^fmJk(( z8yNg>LG{r)d|wf~5QD~us>_LriiX8l;=}H7ulU4Lvq(gWzX9vbxz#P#Kg>%%IyWB0R`ADe>#zu$5!I@WRMueY%xmc!BB;HGyq)zv+Sd=6z1H#?gl z((s4+dysC&?DOQ-pjb+W> zV>GY~L!tWnw6X7!NrNp~xpU|KtB46A#v)}g6=pn0lZ5~JTGlSCXlOE9lzC{`04c0=AsGLQMG%Q8SJh3o?lK$xKF$_Cx@F5c9enaCQ`{;qaVWsaf1Ybw3DH4F99@xXR=#;<+oS4jvXy>I^}w+P+o z5Nv_$+=?j<++v(^vv|5mVS)AGQ&ZDLDr3Ig(Gio%ig+*8t9>z-M6HtQo@|Y>FEsgC zIG^vp#ZfqsI7Z#yCR(n|OF8#f)u0UBO7mHuqM=>TV#epPZ^GLW->sKZGTE}vRJLvc zT>r$*5^8z1O6d@{Xb0`9>Qtx{oznf0YQqittDK4NW)`Nq)tGjDdC{fUnvub|CoE&n z1KE8@k)_pX-DNos#aaq-5J(zUVv56;8dG9X(Xn{)Gly>otE!^Tj-qj;0DlU!eriR- zGJn<1!N?2@LJWa38P=cPSC`(oxHr~(e!{3YG)jI~;*oT|t{w z1I!k|+dbua*ZwGN>v+`#82+_GZH=F36<$p#_MH-fdLXVYVkNS-`ue+|fJS~f0Xolb zNTKOu;`ht&8@dzIU>fU+Relvv@{_^~mmo@va^kA>Qo3e1YcNuBp~aolFIt$e;j3Xy zF9j_)nVQV=PdJZgC7E_8E4+LAwuThui&A>~mL1OzD-=D|>>rNW!KFR{@iH@B@Y~To zL^*5;ki>9nb1Ft%ss}l&1sa%}^U=>tb#~ya+5Lo@AE8?75Uq-f8&Y|VdxVh3pSb%(lCjSldz(8{1H?Y?AJ4v^RJx`{ z2|A~k)I)=cuvw%gCaJKWhmqxvLfs@TzVNC%MmQaKHuSLO1I1m#GJb7y1!&!A`i+<~ zZyfoA4;srhKCf?l@>d0+y3tqzaDe}OwmkQ>X+Pv^Nwk2IR^Ze?!w?@AF5(@EE&+=M z-XlHZ!qY`(H<0-3NCIsVP1jdLOHqVDru)Hr^v*+xTW$J>+}{l{e{2NQ0 z0{G*;foG&i_Qg9Q0IPVzds;{0e}nb6`(h!SXv->X#WZ1C;w+o3u{WHs#l#q zpT!<457Ui0eTD{MK~nfrpFxm;X#6Mtyh6u9s_(Y#tSa@~o_p61+9*HxrVkj=@9_^( zGGA|wcjC;S?9-{Xhqi#|M(|j4PAIqmP4?HI;izG^Y%u`ZZe)5d^l=Cehyn_6(&h*T zer+{WkR>ACCkD&Zlm?UK16Z{weE6S{ArFslw>!MCY>JWg-#nk!hSs2!0%LtwRCMk7 z^;cR|U(vrD0}MC&EKtg>FyN7^Ar20Oj?Ey3*sG%>W`dxmf_Ld-@HydJM62-2oDq96 z%kPq~JumL!>H)@kqrT}11kIV zFNR$?_Y#9O;_YeQ`pB)qD2XDgR`+S3osl4n7@WvVY<5T0ckrbm#c4Xz4$)6Fp{lB$ z>XkNUqTReX@rKVEzO@RwcynMylR`-Ej>g_; zGF>bA1dH{5&dn_<2@qYVYZ4`F4DALB3?%QLT%wC+Aqw+#JYH5%S{Zt6`IshXB^-l6334!)Lt4v0?Bf&1PbL4dI$pF)w~GIeoVfG1ZhA7h_iP!}n_kK!*fq zjd&yo-s2PoXQ!yZ-iZH|`IyhsPTqzZE>uzG?0_>}K*~Tkzrl7= zq(+iOx(dAyv-sQRA=4;ER8Ut{8&VCQst{(kwe%a-g0gTG{<1aw$ zwN`u#y%>=|KM*tXsjWgJ;H>9Te zCi}gn;1zZ*{H5qMfA*rY-Bkrz$al)&`}6!P%UI2KPla$yI)j|Cz7Dj3=!^XJu7H0E z9Y`xeIg!YA2m5rzJ31!}FM#H>Xt=ujEZW4$^E)=P9%ZEYc4Q^bMZ2fA7Lf4x)F;NKVGwg84&8O49S!0mg z2FxV+q;d)z(;Op_3jlnY>mNK z)ZZV3dr>b(Ij*9r;z?4G?gB+PaRQqm%2a?|*PX}8_6<~`Yp0JpYgRfgHpvwKR1GMe znvw4_s(%~nLC$z zw!bm=m+R`@o6N(U9&x>l#Kb^LiR-&ZTGiKgWY`wv>0QbSATQQDMeWQfVHVtHjWzy367s&c0s^= zz~)pr!;hE$9bc*Kxc@LpaWMJsff@abWQt~kW~X^z402~q!5(IHeln^=s;KNPdMB+c zeV3aIn9iZ_ekWWTO`BJ<4}+dK_m-a82sLXAn0Wj?yRi^udeN#3Hl^ajCGCbDK74jY zN+~IpDWz~(D5Yd^;)F(WEc9hN9G?yinYh?7+->tBX{)ivW1=m0F`+%=%b)tQ>o%~z zEs|!8Sr&A#5?yRs3o)6AbhLfo$mW#`lcly4=b%>1&Pq5IWI?-(c(5DGC71IsuB zfsU{4HuM4KQ;Jz75PG5t_Z_2Uspzle!>&|v%4)<^TaIeF>XVu~Lo9X2yjw>fq zzgHf77!V|%nf7HhH;8ox9dw)f=0}&;kI4z{q$A4(?p#SN%uSq3k9PL*AGtjpcH=B* z%1Ikiy$_>10nD^h>g&6qD9+aU`aJsUdpkJ^1G6OE0l@L3z6Ln5Y6Ga@AXqtU5wq28 zsKWo^kF|&IUxjpDi;`1exxUQhRAd@ODXAW^Fu zq`hI?L(O%vO7x+1K60TE+-}JSP8u&0tS8_*Xk-a#|8$hTq;4C{mIt7pPq-Qd4YR;y z_!(H_ipJJbHA#`q+_0NUp51<1{BbO*zjc+G7T=hLTn-+uU-LslAqI59ozL0`TEt%q z68bOX_OAyv2ogiPT=8P zJDHa^?d@h#tqIxherO#2ve&9_au}aX#ovI1>V=S3f9%qwgXz`m#mGX$Yx-4&|gREg7!!z0z;p; zF*JUvYk`9riitX9@s3r(IAZ9=!RCctv7-tl_ESWC+Vs;n+o;m=S*)~;pZY#yiH zbqA396G8QrK2v0r8~b4YI+}Bkp|goXVU5*-|e!mTbgsim6h zDD>E{s3bZ~M!e#(JI9B@`1Qi~;03xbDV_j(nKlc=g$-);pL54kVrhGkz?n>|C@gI` z=?>@&Q4IhE-Ht`8@LE6S;nSBx-~xRpwy{#iQ~vBp({8JzJ`b9wJhRpF(s0dFezG%s zSF->8PlxauaFk(6CgFkVVr+rphpeNORQq!sH0hj9)`w)rGF7hcJrlOOn9;aqK#Nbl z*qS>5a;0GVIhwuWE$}oG0K*H?;*&S&-w@#{1l3f~UP4*4Qk@<&@9pLJC12Cx$~GwW zd#gSVl{jJ=w}DiB=4h^SGK{4AV?L3ru}{#y4t~$@u#e;R@T#M4@rQSRFFbusa9No1 zH?4r>=#xA~D%PBtIWS^aSdA>*5V0U+OMv#i+diz> z9f9SP%+8jj&f9ZoxFYgNx9x($W>C?;@Nho^^!?kQv;i!+$y`{ZKBf)l?y|J9a!z-< zbm=`KUj=!?S4nuHp1eHXq`zdTlLAyi!Jev4_qe|ZZQe(7r^d~=;)aK@?=LU9xRf<{hI{OsJn$q~lvcUI zaflXlkyJJZdT+L;b~n-@7|Cy0^zo2u-rlY02(yyhQ%9r=4il!z1>3i82X`OFzIQo` zo^LJK@|8ugqtn(d=||UEwbb1x*T{~;(OUx z$tibGC$kT%JsMaW;VjxE8ya{}{m9rVwC^+ibij0Eya`om3;gI{9zx1U{8>i{?Mos?D(*|>p)tF$G< z$Tv|Qb*vO8+k0x^{1^p6;g)YV25j9HQ)A~0vgANiVnCS7gVurYV^4dh46ks`c`@rm zB_FOMf_IA{s(`(ca#x zIUvJf=j#T%_3utTBmnaAh@5E3V&~*yx9B3LY`#>A|AN$pWk*Vah#ohe1U~$QaYEXY zG%{SR>`6VM-2EAO2A~;eI@_u#xuZnc_8VoJTh2ze;Io9BjvB_e{|HiW9a9pJ9tftn zPh|g-d4gNe*?g;#yZ{al>n6W|aM&Jf3IZYNzIqK(68|IOBpN3ah@+j~m(dpg$37>9 zYOX0-b8IY2IS`-J8zk92D+4(2uIpznYVY6DZE%(5nG@D$tqPGyz9iPgvD$T~>>5-Q zI3BB7EaV~@X7x+IkN3jmwlRihtD-!P-3+#cK_6obCc*4xEr%e7>)$THVdef!A&_{ETpn9-ayG8d9ildn_1XKl;JSMrUo5*_Kq`WCruHn%IaC}RK8 zf=fLvnYJ|Q65R%LP)6K+0lK%$3c;%H~sYokcFS%t`f~0H0J4#@6lQ+Zl(xnxR7wxt}A`SF;ca}T$ zkSh&o^TU8bU*KrYIBAA?c}at&RICrzDeZ^dmf1nQr%8I&(-P8d&LHi0X{k93bnSQv zw#ym18go~#?_lim)m>&7Z(Ti>Q{H^Yapk%s-#glOt^M{QvR#nm}vZs*$40eqos*zu!{Pe;=&PTuDt# zwI9>(itsa?Tt*z5WdU9ZnOp{f$d{)5@{2p!E(URL-c)Qo`?=B$zy96bAA7kGWSa`8!%a-_v-5FiwZb3D0YA-{sd zUWG>m$yI=!!EzxII$I=w`A>ypH-V0dW{K-(Kt zPBq{Ls$Nm9;-J}?6xrg5KS>D-p7CL2tEDu`#+JGRr#^9dW(XabzIOg0nyU53QN=p` z>!#kkF@!@u(00=2s|V7hP&g*2B-K`6K*w?}Lm^|faphK3j*A%*2FKi- z_S%4`8H6@yw21dyVCVUP{ru*eFYUJ;1EBiqVt7|i%dJeb@3Pb0?jgSxU9&n7$@~+rd1uuC;xC-ZenKaUw(uHQGKFh^t6H@QhU%5^AzB0?jo^HinnC6_* z4%(L<|8+9}n4IE{W6(Qdl9JxHceG|5FJN^Jq73fn$%dBQV16|mEECh}l`DImCU`65 zR|PJHgI3i|TyM=D(D?opyc^YuFcx`V1$dhp{$k_St$vq8t*x;x#NK9Y_m?+vKHyRz zAPbo)>>Ip2E!%sDRXx+)P*c}6+m>OP!C*GzE4D5yzYS>{^1px4snjAmc(EglP{yxz z6YJ5qfOCO(f?)g5%Ov`dLU{})cl_hUQ^nhH<&oyE4iz4wy$ij+!~ZI6KD8p$W9_yb z@nsTsXBP$l&vqxpzu(;7+I!4l=&BDYZHs-yW~g%*jr$eRLniR3%pRigK(!|tO_*9> z=VN|tUzkD=owpe%A55oWTj;*r?av?G+VA8@$Q5FRZ<2nF>ox)QJ~?`kWQJg8Gx$E| z`&!9h7|J-v5%B7SYKE6h;*U^J&1+`pR{oxN(VMWJl3RqVY#Q1`nMhhoSR_nRq7QsTYbA z-Z%QIl;ts;6*D{8D73uVe0DU~FVqPgEa8&f8@OGRq&1Q-x6(7bYrr{|c{WE{X()&@ zsCb@0-uTR1Z{_CGlguun57mwF^a%OVbG_^*$3r5Xdt&W#x;U=SpMDJpUEe*?kQ-qX z>_iLqz$oVod|G#%Oq!eMcvIpw$0-sf3(>np^Y@6HIf0v7XzLK0bLyioe|8re%EaK! zO%yDz-`+f%;i_B7_}t>SE>>&*mPg{;V}0HU-*-A!Lax=z9!a+u-G5lQSQ~n{VV!LJ z0QhORo$+LI0)<5~6}&B&DIS1qL#6b*-tJ z6=Swt4jnp}GIMe;=VX516_M+^V*ei~v^I+t(F7}}#uMhh>*8(@^+dv97$KSzF?H)n zW@cRuqAw;hlZ_>>S-*b$^l&Qd8XPW5oOdR!fGqTmnmtexd{=9@MKYCYd=gRoxLtTl z2#?4(o6h&3GOF`?1Xf9^4P>GaG)7@(DoGKtYKz|KnY2%vZ*=25eXrARp|&WW ziyX-WuW8PHHTDyrA8ere4>)5)IQ)sxlL0(vnOu8AfpcQDc_c8{Qj^% zUp1#EPA>@~Q({mpee|pRp!wC?auD^1`Jj83(K83{DCQBrK)D=4eiXJ&2iGeBsW5^* zp#RwXETA{E)5FeKtQ1Smk3Y^JI(4$GYyj3xgXl8?eGowL7zDYG)i7_60nSfH()9cu1mpC|*1+T^MUg{2b zf@`i8B6| z8=cYp`qk{khFAuij`zdpaE+POinzWo?N^WGkC~s8K5?e@h}3BBPF(h_Roi^)8JdJ+ zt5$)mdwQ_KmBx*Yjg9JgpB#ycohhXOU+Xq%SCVaN3q3Cx6*BD4Z67XMg-?xCxFV;3 z<@crTkZiOcY+;(l;QK;0Y;+GDxVK^PK5B7OmwG8U?YKye;@h%yXS zsQXaDxJAa4_1>bjb3udeow&}!$m_S2N=i!XpbYM4uJ*P*L^WNLA?7EgE zd+pRZ{yk)}=A`#Gf#n(bl7+@h;UZrMbH-0MHPm11#<t;msG#x(Nnj3P3Iz1_WWBl_Wnh!Wns^!?8c_9tY@h z(2%34O`^VU&R9v(rR)PW@AoX8hZ!-q_Wbwao05{79al#Q4n7upcP|A%l`~F}GDO=U zKL5-`9&0(p9}S-Jg#7(r#T)Ls9ejg6bJuO@f-Fij4Xdy63ieDXhRIx$t}U^&h@3OK zfZxTi7}WqgIHa#que*vpTpOVMX*ca~74nw8$FVrRHOV+$Yazud^LF+1XNB|6$Hak0 zwj1Z-eX@Zv+f|r3lP*hqf zdf7v`WSRBCdr6^oLibNnaWCy~v$EM&y4${}Iit_7CKp`Kk}3&+>+p1=_}aB^(y#dM zamU)XJoa5iV~?C5AN|a?dB19yKasr_}Jw5RKcW3*rZS8GMu-4yd zYaX)!+qKGLkIRf7qK$mww;>Yyo9y!71YmbRPTiw}5@)@mjRMyY2N6G~vQ0Tr`H$j> z>;(@OznUN(F^3lzN8Cy&P2DCtXyE3}YLB@UH+)kPxqY6b5IsD|8~2;6yI6>`_4(zA z!nt`=bd1^cUsl~j-DmxGFQ+94ybU=li^sO|p*QlLD)p^8Zcj;3P`@{Ec7_0CHXHW- zeM#1Kj0dQo!0h#Fk{m1y5(nmc3!2o||0j-HI+ZNy?pYLakcx;0UQSk!oGu41Vm3(1 z=g;N?NhW`c{TY?_jX(Pvh^L*Zj_u#pGwF-w2+|z`qc}NHC=m2pl)oq$9~=pSQZc}Y zBA~Ypk{hnseO3k)-q)M+Uqf)A3a2lZifh@-TW-WEA*a$((!t;VeX;JmJ)%Zie>g12 zNFi0td%sB)0z-{1z3UD?&7ZC@fs0)yO!+f}&t}48WgZ*`O9&@jjwD|8T#4@jK?Xlh z?j?C=XDn4r)!NdyoBzoh(zbh72|EScZ$@7EUaQWBYtMYJ3VdV0T zPW46U<%OeDQ{ldQ1p%O-L*D`va|eUz_D8B!@gIJx+WD!iRWwji(#a3`_oEy<2h*_o z%SmzS_xw<^z_l3@gMs-+ZwUzs{#Zz4DN@EzqF(Ts2xYXt8qr&>&3rg6y(taGJn7~7 zA{(gU0(yCXmb24VV$;Cb{s{a_{kkF7N>Dm_II1lf|^ZCcO?E0=yA1CtjMIeLTCZN*! zD#gsl3$`>^-CsA1s+o}pEd~b$qO?LA&0OlaxATU297y5{qjgGf@%;uNE`ukZWU7DF z>UfICtcG&zh?(n-O2rOONfH z{qhko2>9~(SzQ>|*)H6_*vYFgjP}vbdLmiBP_DU^xoo*cvc8}E9?+Y_GQBS!L=O03KwKqCeoT_T7 z0;<2hW=)-b|Galhm^qSp^6}G#OQ-N8xrAgzB7FE3$o?@pNZE9)CdPyh#stGK-KFZ9 zG%#$ROWrdaf5>U|dzExyZXO*{q1~Yt-|x!CB^!eV*?#Bxf?aBA`uL|tLb{B4VbcZ% zpX;X#bzJzmN)vOxq@fgi+qHGkQH2zWmQV<-mJlY=;xg{vojREPg^{Gtd4?7h^&gu< zL7O?#rCph2{!(eJyS9cd^t)0vVPI)8G6*FuRyO?CHc!D~!TIv8B(#(qWv_FA=i5+K-b zJ#weoO*irqxMFB39+67$-t=~@=gIi)Qtc;F1i>5o9Tj`O8f}KmH{_r6Ha(Ln)DO-&zJSWC%&j#zN%+%P-7**$l!!_OPIr5z@}5*V(dXfS9sa| zKZRFDPnKAw2Pw!DfXz{_<_(lm3l|;guZL2GhldMJUd^U)u8Y+9G68oEWCSIOAzJ#3 z9uE2ho?DxLiS2#HM;9x!v?s1`stkh$gi!?1XiAOzVF}|6$>w9t!39_kjdf*=i&Bw3 z;-UPosp7UxWY6BQNGTP9D^h+&r_!uw(Os&^M@OU@rP(D|_VVYUCtst#k0eFTx8u_X zlQTigY{Vg|I8B&LHLHuEnwdBKx>%Y+)jHII+;hpvbLlP{d^IeD%S5`w&rPAKxwPaz z7&Lr-{!6DY3DEgtUFZ2}xj&E1^rD#Fn+qj0Ke-pFE*JqcKM)8_P&22kt-a!3W(&o@ zPv5GJ+SB5C=+OuY&SKEq3cpb<&Y48Z$=t32aVz6>?8vc!jgPhP*-Df$8rlodgm7Zp zV3WK|coL9(?CX4F-wK2OYWI9P1F+%leZXfk#l(t-m|zq!<$rX&Ng_q-B*H5GQ?L4n zAnKrZu~xzfu$q^7m%7YrIlh;wsUxn}+27(B$e381j;UiTfuF4BWeKO`Z?|(=mnSw$ zQ9C)a6Rq;>4O97-ZI8OvFCnV-5B0>B#haE}$GnV+i;@tB%p$KUi%-0szAAr^Z0}8e z-gaZ){aR8>$+xIWo$co%^~!gtzr9#CF1*UC_*%K^MSWWEAhjzgWHc~MZa%S6&de+5 zU}J;+L_`rr0hliBE%a1Qh57j&lT3MBfrDB&qc(_=iiFMjPWgoMDg{`TZO`EQ^L$UX zh#gg?RUR@a^U*1xE2&Z*DDv>e8NS5D()wdSTBCDQU-O)BR$3ivv`P|Tl|yih<&7F$ zjJ-9oX^J6P7w?6IjfwJ|whwoOZ7`)*pE4f?K<__`MY1;cj@%20Z^8AKR@6W_{R2sh zl)aoGlPPRiC`Aw{cDvj;IXSu2?H1%dd~>>yqX~;-Nz*r>t@60OORUVP!669(whXtj z-s}`ckfCL{>xJX>RAI-a1rAjv*BO&I0tT-HzuJo#b33FI z1o-=lf^WNE;N~(CRwkA!3AV0uD^TzF8`yR<;(1O1ML{#o^8{L=ZCQ_=&Wv2d^+zv)J#;Q+gyaAR>^lAV87|)_fneYJ*=C@^R}$6> z=nmdLiUq*K=m|fCM#4zv*jBdT`24)-7p>bWp9Ts-za(VgX8tx{SH;tp(nLc5h5Hdd z@f6oQ!$5`nix)3!KD^mDiHnOXAg-tXRw_ADRfEg1rsKK;!jCna#GTYZY&JHkO0-f} z?#JQv7hlRczF||i;O0=VH39WyNeAZdIo64~(?fDl_Ep;;VL!q$+%UCsLUoC1<&1}@ zCdNQGRMLuXjp%%WXv~BbqF-pD6gY>uCmS@Mp%VplMuQKVjmS zpWn){&5Mn^C7R7NzfwfLV*9g;sl|jRq`Uo=N)B$SmnvW$kvNi=10@3C0z;`x&CMZ$ z7sqCvZ%AHok{0m+j@!t?b7?0Trm4LZ8MK5uJuSw<1eBu*^R~3ih6W;;nA#IYh37WE zCdILGDDu%YzXxCpG#b%d?7JeaH>9E3_0Wi}#l~>I0gVfX@7sx*c1FEhY@gYa#Xm=r zp>qR7slYfgvfFoXjVfEU%H}B1p6+6F$`M|2UlM6451Lw57M(< z#P*P{HM^uLrCKulx;EsTv+r~lS;U=?XZl@xvdVe=XXS|Ra{R^S{*hHr_lc1V8|hR; zqyCeqAAL@J-jzisd?x-GA4KAJ&hII2{5D9WrCvC1Wq7R+*SFx}Q4Q zvNUs5h27SPdc30;MP_>&?)LMgtmg_5-F?LzO$zs$0j6~yDd$a0m>di;e&s;QJhqo# z><*EOnDV56xB^dqF+R~5)<(3OPRi7%fbRd&qI6#Y`tn4T#ETlL{j%4Bhs^*3LDSBHwdoyPnmQ-C(JZ-oIZK)GfMF@a$Hez25INNSjR8YAkYAG=iDXrlw<_d5Ysz@;~_*Qq|cyjr#seKP| z-Zs+EQfWgSik-^lXuFlE(q#jkho3(u#P4PkwGz>S6S#{XICFR|*D1b$Rq5~716~IA z8s&X+R;<;8klgSsaE2){zrx3p3JnKtlFrDTb(k{mUx4SZsC=3UQIIlF+n zp!9tYnR&?KDbx&Pwj_xdw`bOS$2p~|&cKF`BV`_Vh^yaHR`s~fp zFoMYSFo^ertE?d;in;Wu5OuJU=1&$qvi4F&CWBsZHI}Gl;@)pYLh-ji7-Y;SQ_aN| zj${sjqEcs@-Ox~-x3FL(b#DLC4EibBPIHqLkkiISa*`?bE+~UcP(*|~GmM*+$`mb4 z#7UwhAP`1Dfs&F8N=VRA&*3gB4_sJ5wR!dT?$l=rKSEmjZRQC`#PooQOs!0BQ}G$SQ2o~di%9qd@KZQ?$mb63 zWAtylk*%$Z=zhWg*=wKg)^bk5&aLRvcmcrCLVwTAH441xmz)QIOn+-)d~$GlrfhKH zpWSnYi|4o8Dk^dUfoso{x11=!c}XY4G^JUKk8H^)xjPRV*M`M0=26+dXVC1h+G_@s zL9U)O;~91ukNZpr4Oi_d7!;1hp^j#?FDta4L=rdEpFIzH{(RHIU9EO<+|MfA@RvhvW~F$yU$QdrQ?s zgvb*hEctZy_4BIfatCnQQpGPLBk0DTK>@j@Xrz**73sJwRSS1Z6?UF0pp>u5EY}$e zD_{maCkY?m`69gA&f+jvGyZbQWAU;2kFP*87X0Ig?s$7VQbjUAfH461o);}8AF?;_ z%s`Jc8=|omTZ4<04l>c?d3=<5%r)ZecUkbjY(Y(|x-%QMrSCHUA|hIr~h z5eJacOYc~pVcmZ4*byHYT?QtQ0CRJOAmWoj-H2;9LaKtgDc_3(qLW>5k+ zUXa{^$wHE%sGwt+yy_eCMI(9I8=j?_(mH(!Sv;c!#SJk??fsYf80#^fc`Z_MC}QHJ zS|Y^U-)_k@u%F+OE$X|W;wvH&!H9P#wy%+cst@%~-#gD1V5rk08}p-myFLHr&2qVEFq= znDCZ33b>Jl;$9R^8vV<-nxCJi6{(2FjOu?d^6hz0(UtX*dbz9D=ACZc^b z1hcU!_mX0tnT@fkqf+$M_$6WYpCP6nm~u-7wXb?H=J~W3)#qnA5sZ;V(E3N2E-slMq z>L-k?YOnIdZ(c-=D;uEx@kQc>A^%g#0Pah|$Hs$A20+NQ zfICr}-VT+UJJRf0q@+tql_?(Op6{7ETptvg9Ei~dSFJv(1&oWy_xxnb&IKBumaRVL?iI zHPY{&zoksghrF#+bkOfV{Xe)!5@fjC5gnFjmbp_vOaTQ|aS~tl6<_Myx-yMGFufMhxDS;QT;r(*7afJEohv}xA++G%1%)w#@G*4<6PtHzI%Ef>7x?W^Kyz%fr??2f02L_a8OM0C4 zzGuxGm!d(!Caj-?ceDIXPWDoa&(8{Ys$BYwKUQ{B-p2={!z)2N60-A3L{kwvJ%1Hy zK7^J<++5QYbX*yGR@A%sCI~M4o zUe5#sLmM!P9V-?oYp;_C9GUbquc|_&P zNLf;ZzUPfL!HM+s)2jAz)9^^_O2Ug+qeq;zrT$GSM5Q@2-{N3UGiAP|GN4IGPES>` zKn27Nh;|#+M@R^#|Jrh|BjGBZ-)TIPn1lbal0S+}mOK@vprkYrFM|L;pDE%)ptyg) zM_fM*WoT)6LR&H6cb+YEm9{)HnYoNPYs{|#!7mX((Hl?Bv@!!D8g=Jgu==Jw{1q9} z_DzpFEsQ(buUlJj z#Q}FqHlWRzUEY2{^kn&|BR<^2n~}86Q1ZmZz4^kfsXD2aJ-w@UGS1P=&5dDWW8=8d zT~aMa6J(B`cApAaeUjOp%Z?eFS23+-n>=8nVtnBYVD}izeI(q)@KCo2`V z6kSu7Ri7zgjOW&^TiCsY`*aK<+=y^Rb9j}vpukK|C<3_f zP==j48Q)vPUK8@e4OSAvGi{1C{WuvU`MD+Qb zGm1K1$u#j~6BC)#fpq3$yLWGpcjmyrlpt+l>4X(%y75|3&k4xGb%3Tl#UIc=(36wkW8e|fy)JFs%Ig4BS4K(XEOO8)a>BGuC> zCtag9-nDZ?1z^T)zBM+i?okgJ{S7z~u7Hl>ls4=`pOJz4#LQZDwY}laFwRz@6%6!$ zBA1z?K~cXO6@CNBokqTRngl=hNrJBc!PiHvCfs)xV$={?JLBtse+Lr-xwgC)5*F6I zIhFS`tH>Mf^|@v2-o1O-1qE^=F{H?Q6%~7H+I?nyhdg5I6d-Pj6n2=oT4Ic&r#v|g z1%SWX?pT2D65oH8P4`pM*_ABaS%YojJjmEe^*-m*Afcn`jcWOm{Xo4JVN#%&{gTQc0jc0Y2k_c` z=KJUFila{LAKZY}aI_j11WynJ@q2(YnMkRL@gLdHWKkTFz_$6jTIz0acO+Hc;1|zg zx$JxoYo~53Yaz45_UrCa;tYSs4O9gc&8{lXl;;oTx)_M>RZif$0mQ{!;J)~7J4)0W zHL|s_?75Qu4I3h|v2x^#Y5cd|q$XEBRR8|W+domO9_9CI%m~;X-7g-#z7V1?RQPoH z-@X@5ok0=9y8SWn;Va^rOK+(OGDBTz=g2PgCmNg|C)<6bAv#@(u$ST#DX@^HgO@>p zV2dHdr~XpPHpyp(46$l32ZQRjA>I63A~@V4F94TMPhjMKa3VR{G4|wVKj~P@1 z4U)P`MfcOgQ2^(`I>vhsds`xiJm(oIsio@-9Mnt({82z#-tzf&H&+;~{tFRveSqs_ zX<8r5b9BAtZyo?|PM0y-6bj4{AvIb>@7xIjA^?%Btjz!!?6yD#yS>-`RiY&G6#&cM z5cfVYb>@!lz|g(Fyqe`s>I1|fV|vCdJ(V*NLtf0)K49P(CI?GoOHAl$cjmtOQ&uP) zy@?_w4n`T2^R^kwP&j2$3nnv!sXqpY1kek5bHBUhb5Y#c-%S1>yQqUccPxWB9|shI zqMUJ#SZoj}G3B%DGA{c34#|FM__>RSRz{=W?k;UjJ zVpJTq1@c1Su(q&?c4ieXdYL^M6tVS&z*yK#(QhpCoiohiO;n?tAMIey4qn1Zfkhi( zs}h{I~O||0yRfQ{l$45mvYmNES9VOK);O ztJLzDd+fIbf*qzjNaFUB3B($1K_nx?L;>WsF%WUbYkMpnk%v*Lh{}oj_xyMaYcI93 zgwA7;Nvp+Xrk?CIx!m6iVALwH8Wh}x1)2e143PmPj+74FiRaW{7627tz7ZLa;qt-i zxA9eGwk5hcXv>v17?S71dSZRiH`m(zkS2DYDf#E3l>e4UM2LT6kFxZrf24(c?)O?~)*VagU+W9cE>{*Bw-?aorBt*$|+te3b*TGpCFzy=|S&o&EqE zhp=B^l1*d6rwy}Nr{{oT9#lt@Fxd+oF$E=!-fP+)(ZXHv3daPDr7`k zN&Xw?C_PbJ6Vh$pvjYQa@`veazftF;SpeJG+L{Suw4YBfU$>F^!u(EtG(xm>(05G` z7CI!Wa1;}gPTiEqjYj8#mEr^ADQig>n=@}W| zI~raJ(*NwRaL3cKraw@J1vX50Z@9**Ffs|6Pwm<&gKgPcbG~uH3?bRd56iAhSfe2P zbS>|DC6O=iDeyO~B4y)P6s;RwxgLp&l9Q^YG&ZZ_P z_t9F-fl1{;yHj~QFs_JpCQRjoi^@a6wbwTaX!{ufb?NqS-R5+SJ&oC_@43?gKwe%c z)fK$kNz8o3j%@VAT%7+OP7vxHY=q&!Xeo&ntJiQ^?{S7dQXv^@u-4zQ7Ccm$TRIxsv+sL`?>q-71GhUHZ_>|$@na(-hZuycEUszb8J&xN zVUmdXcCy$idANqr-=qZXDTxhkm2a!yVx#E!R8^syF@N=ld zL6+p1GSUNP5Ek8TrzFUkLyo+*yxnCMAsWB@>a|6O<4sVzPD_~(`2Jd~Qs7e42kj1~ z7a+rAmGP<39!fI@A(hb1_pYY4$dZn#$M{0PI!${l^myi3f6!hY`5IBbtNGK~y93|c zB78<=e0~^({d~Lj?`i}C*PPpaOG@wlJ7xgS1NuaT?3rs_;IQr62Y|ol*S>;;SHOwt z1I5T4nzQZ#Qf||ohIjW&-9Bu-3aa&aUv462e&~owtSK@71SAP`r;^$W?s$XHVMGfeK{WHF>g z4NVsgd@4xXDQc$5gQlive(4eK?nouueg1N)R^l({q@_ou9u-2u0>OJ$?-)~?f`oDf zBE@j?XsbVxa~kUQ>7Rt7UvFxFv=|Wp%XF+HvHW|%IjzG+nyxn+3*{RLUuj=(pM-3m z3bS?V<99vu^9nYUQd=icb6RwsA0}?^Pg9V&%dh@lcH`^9%UYn~$dlnwXa~E?cS(Qy zkzVJ1P~!|OyNo5?Xs|aX1+39!MgcbTbflLPB80aU&scZ=#^?M40WNYb0fet1@!@!@ z6mw*PAXBkwde=$VDA(L@rm5WIADym)8S1=jeePl4Tb0H6`7R$V$apU*PJL^L$kUu^ z|3=z;kBm`?tHg~xX$egWF=dr5;eZ#)m(pc^rwC?+2cyf&q9T1dLDy0)Y05YUE?P!4=12PXHdAJ6D!K)s_c$9lXeav6%o$MPgE}WcCPiTNgTD zUCKv|TmJ0B1Lna7skH&+ZS)whk(4u3=>|~Swyf=3oL9)=46VU2&2*pk&}z!uZ?MVnX>_l@xJ^|>0IHI; zBGq+*M>urdcJlSc{E^O0Dm(40y z{DdNhzEn8U@gX-gYFW3Cb^x@i-#eX1xIRC0bsmXP~x{KBmWJvhra)!*`>2 zXpu}TE$ynz08Q93)Xi?;!WK)Ea^z~@v3!SXKoK(vOh?FmL{{_-NCwt>Y1s6{jT8{_ z6)@v9Wn*xkOx`(@2X=DW=1G+JxYB4}90Thbj-x}uNzl^it;6Y{c-%*6izlHStDGc| zDkE7(13r*M{ivIVDP^pxhgc2^=>nNy;1Dq?NOas}59R!(dI;X{0;ZaVky_EZw@0H* zH6AX`Nwh!fcbVkwMT#@jl!;vr&e7eA#HH1-zETwbiwpEGwC`}|#Q^LR@xYEF{>Mh| z!I!;B$37@2cXYB5m22 z{X?JU>Y)OLk3-zmR${pD?>BIJv)e zd->gu;r7ev*(*ci)khK&1l^(&c%oYEE05AwK{ZUDw(9aOQ+lzlJqIBU^Zx^u_s3}5 z{hp_#&J+KSOBaOejdvy)%tA}5OT*(-h&owf%=XLu@KiWt65ls?x=h_p^$|>W@J+hs z7S}x&K7bz@n-@Qo%&gxsIK;>Wj)DMSdvkQu(MSbMSEBZ4J|N0pob4OA(vS`2~t*eTrhG;$)2kew%uD(1~P8N1LF+3Z0$DBxE8Z z8AX)B?lk8Bv?|e`eAl|O<4L>@{i?AXxv;+;U(je`BKCM$yJLGYK$j2m*R!SZ2Pm~$ zc@V4<7u&3N-d9bWt=vVv_ODKcc!Lbt=}JFUr*N*ZAh!CssaX^(^JWY zqaP0AyaSJJi%Lk04sS33@PWL7!YpHEid*8FntA}9ok8XQ*oYb3E~=ak&dc=qUA8Ym zn&5Zx%x)nXKmthtzw9i7_`o_ORuW7vuiFnT)33Aei~i2$%4NsR?hi=q6}GMpFl>v+Ut@H>{FZ zcdy=+UTfI#1z%`r5}gmM{m;qSi(c;fYO?z}ajfhiLwCRYd9$=HW$R!E3^YP9kePeF zrU#^a=YQa;sv&WGHe-Ot5{UB=Di5hEGUtu=Z6TH0a#ie+^&ftI{qQmN-|A z9N&Jg*#lw8gO8_g!^YLPA1LD6J`n zGu`LxH3b!A!uRK8*qg7vxLP<(G&E3>6u>WA%6LJ1?fz4#A)SDj<|_oGhQ1dxuQ#x0 zw_c)&-e{etzT}}wT9>u(We1gryMwie;E?CNSd+I5#upQ#yNMiEZ&+)5zEt4CrV65xldiW0cqrsl6%09 z&nfi#_aE~u3TMTR*PAcvHVk)~ecrNd6m|jKE?QDDZ1jmjbU0+^j+vb}*&1$+NSaR1 zwDU{3pAo;MtbNF`L}oi7X{%KTe2wZ@?7_TC7mlsH%Fo3;~&vp<8U z|HzwvHoWkJ;Db}fSpq|*@1UGy?W(GIW7Rv&)OybPJC_Dbw~GhTq|Way&T`0JNzS-z zKlm=+8*)?&`Dd7W-XoxE|yWyjiy| zhTumVj_*D#hFph3d`Bm@`I#(2NtFK5n38GR(+xlXwA%uKiszzfRLfGx)uRJ zN^}08)#l!H!_|eTR4w(!xF8*fC0OvwN4=N&%Cg27G+nca4`Q&Ta;{q-Z||=_@myRe z2lPu!N=p6M%uMqW;mBgYt>RLv9p5^SeV(FREtAxc=3@q7qpC0wpS`~S$FGvWiHM|= zsc<%PEBTB4k@HPV$V7m3|HtG7h|c|UY2G7S6$JG{?r(2Q71*);5Wbl>bIJ}-vJ|2BC>$%Gfc5bzWz%*RYLgj z-j^vZZ!)QJ4p^Iimf+N^kv{jtr4*~&emAljWi`)i9rr$R z8hBfMBJiL-k*sR=cOy{a8?DBTUiD?ldGo8MuqcgE9dA!s#bbHXb6O|f6~%|?&kF5R zehgtbNDcD#Pii=DHv#=&e6py-8B|Ht5MU*t!wOqMeQ9M$-OFU9T1J7>yMnQjA6v!^ zI_5;Ij8%2xO^VZrS8;CVJTA`3jlHC{at<-{nh4s|SU%X?rNFAAVeEYAuWOo46`}*@ zq}`{4L%x+Fqu|^(Ch5uoblKO7-0k6WH6cw+$o~x30V|taf)XIeRrWhnGtn~hwjqZ= zApLjP0BFGD`fP_=N|quAaH}|bY_I2`0RY!8;IU82{0%o`Q+7 zqhjh~qm6+4!N4hBsR5e4&u|9C@j6tKD8N80BHa6@U4}wC1XnI1jVUeL9sBC#L>u=W z>i?Z!@W1mG-VxD*jHEqj31Ga!^bw8i)RB3Jgf1NnHrg3aj*kbQkyG8y(SVf^eyyO{ND%^{=27%?_gBK}1gac44+_+UHJuNIl$ znsbFX@0KBB11CKH_aB+ygmW;O3VHw%&z;+Fesr|ec*W$*VR*FAE#n_PgtRD`9_mZ3Lg^g3b!Q!&x`0K3GgagCDVy6&4TN6TC z!bwV@B5`UyDCX~rHgB^bIrXxuc~&`rpf`)|zXOOR?hgCE zoP7DauM=xjMpd+wz9=($M&-M4xSo3cZ}ta(yL?PvGuZ0y@_OUgEFJd2nMy}zZ&}2z zI@k9v;Tz$=`(o$hny`>IGdjF?l40!7Pw}69Qm)GR8 zsMcSU%d}{>B1RTbtFPkx2740b8Fk{|KNO3WMgFVpD2sV+0u{B~-rc%GGspFuuY{yk z0@)4o#dg#CTB&J&BU#2G$>vm_yIEnqZ)@gEr`(S6cP7~xdoZ7qPpvylAarK7de{z) z)y*dQ{-SlN)r=5JcdnCQz$fHiz3WMTV#^PmV@|GpD5&2R)?A%Gm5bO57rh`>T0w%P?mD7j z>KAPw5cuVXbf*gdtL=4MncbPoQOLI^^#3weaq($g^O@{7*1dYf4+=FUG!vLwlpBqw zud~kb)kLM93HlB7_u-=srF;_}Pc%OJb!~il8VStwTu=60DalGXZu}Z^b@p{q^q%NI z)m8rWxlV;b%t@9bU~4H3k`D~cy>2MDw!Y?54Oq+=H2!*}PjM|Hdq-#dTF!aZ%F+4Q zt+oAD_i^9%L6D?*Po3}0qtd#ocnaW>A3r!~KWjBxWE&Lu%4xH{ zny%b)odrB9qO+!O5w8&LZC^*@eY{ypU7dd)_rsYlz466`d-ZqM+_t?O&bp;BsQEe} z|D=v|adFXbn6UTWkM&pMaXI{Ii13WC3d9iXT=`ws03SgXe0ze`FX=Tdo=)8I*pK6q zg59fBm9V;Znsx3+I3`?W&qiKaRZclYvWCyVj<=};sbjeAAnw~rTEaShzHF5iH%%Z7 zcnM9G*dR)?d9(C$5@sMDcp1K9>bgM>!mA&uUK$*`M%`9aX`yK~4_{#Etukl$ajfCf zc5V5ldqGqUQe9CUvz5V?98Ro*wQE93-eZ8 zn|=f_)z7R0>abFiZkSe|;oniVbEeptnbu8B zHQEpRn~{uZe2wdJFvp}TT9%Dnvqj8=U5#_7K4)sdNJgj&8rjahEQOTF#NXPV{pQrGDg|$EMuDIR9GO>&MBGF4G!E6Tl z`Yphir-&Cuo+JQ>RRJ8e;aT{O4p>M?NUS;!YhaHVaj5R$3z-Yrzw4Lno*aQLE4Zpk@MIB>?%I2brNHK*(-4vJ` z*(V|S{$;J}Fi^kRKCekV#C|P_XdHN@BkOOA-Oj0-mkPO?eKXe-w?3I8kuWY=3RB6q zt@kVA!0ept5i~JXJhXMkf! zG`D^-haa?Q_TDCt%HY}Bu9i(jj35t2-(eLeVn*A$G({HdXn$Nz_}|Bh|@ ztu^mxjpC<pfL@H`Tl>QpU&7?ahZpp*P|#Z;;c>irK_#p@?!j{}e|v&d^S8I%1-ui8-GW zix*LtR<|>!fH|jtTR~pFQ|Y049wjIXggkFQ=p$BNzWf%t`Qe>@=lpiS6B4Q$HSO*6 zL`uw#GSNihdD=7YwBRMy~RQmO~DlVKuXc(1WMz30VC=i2 zq2uf+!1P1IUxl<^snH?PN?19uOYj!~wQ>kO1qk~@bF>3{LdDdg2G#qSO@5pAg?s*t zr8FcWGUuL?ya=6#q-MKtfk?6=avo(eP~vYj8M6*m(|@+hC)cUM?u&&LI;*bG=}M7Z zr{a9WlbbB^l~0Ax)lVViqEHQCu{OH;1tD;UT{^&wmOhGAF%3=Fq1kTj3l4xcBKx6ut=?B9oBIEbd zkt#8+%ctcqov`~iqn8Sup(|9vnq>O;wnT!>#;rJ>{FE{Nm47wVG2=@y+z&P;gjVZj3Rw*g@O-wMR?yK$RY#b2C~x248-S%<~Sw zv*yW&(8G^^&+|=;2p+&>I>TE+g~|IVY;}lJsJ}o6EL0pi6;7m036ROEG2ZYK;+}!Z z#46}ro%&q8em`SI67h%#S?RiJ!Zq^WpFO-jVaN^Ap`ssL^K<%9s~YHrvJ`vOu{yJ| zHYR!7=2OJGzSv7rFnL&VSzc2<+6^Abu-UCY*mQ%xQS>jA>b;X#*rwIE z2M}loW|W=soK#EMVx-AWo+xmR#`o9;*Z%M;dvkT`cFGL@wc5h@3t=$1SZ6G0{+-j8 zd(}5VYSmhs{o%isesffcp^R6N#m>pkY(hf*sRyM?Qy3c;2*v7$XWi%=H4qjcRzCe+ zDQp8>5rITOqEj_Mnc{t-3~)<`AOdD&7k54@0|jq4|DcI%#XU1=-ncg(__Ya<6c^c!A=}7Gr4y zn8bDvqAXUF364{haR`$^&8Hj?nz7Ti+CVKc-U5-!3@s!l$%=@gDVXdrrAC_Iy_7A- zJ}?tM|4FtrbUNRaTnkzGN3yb9&^n;Q`ZY+i_}-cbiEd3LX{85JXbVAJ_kzK~ddv*0 zq{axg4j2_UOE-ag^)o-yGR%ktnKEnFxPivZkciI2!7yPu@?zpK#IdS<^PzDtLaZbF zZ1FJMO66srQ-p8 zRS6$S=AfoA#IIO$ns)ulxC|`;az)WQLZ~VXBOI<+o_D5>5jwI0IL&u^u4Y>lA@Z407U30>v)-bh@9(V$B63(z=k>!J*3Uj=1v0l}N^8AjZ#f7bCK^Y|zGW5E%*h ze?kGesw->aHGfLW~T@IEb zPz!k>CP&4=LxJ?7xSJLBM=mDRD!yQPW6{xxZUD?@)cVV&uYh+$XisLo;nZ8Ytu^+?AlcR(bB{X8i3T2OB zH9yW?mZaX5icIAv5d%dD8)mo!AZ{?>2S|6lVw1M;;Zg5{d)k4007vJ!2G!t*aN+D;M4Q7lYyJ_8CNBSo&CrcT0|I@V% z1Chb~cQ(Yi8u41>Z(i(~WFbEjCQ}y- zj;C|TFL<$1h`%VE-fOWaTIy2fp3qlm-w^fNsl_BWMVJ+rMcx*UD*3`So<0!~D|AOPOFg;Ty&pak`5nF}bP94ERzTVLh zBROp4og1IXN(!Q$kht;uSigO7eM=G+ZTT2E!TXr#`W*Icr!iF2{T|gz!T<30(<=i! zQZ}P#9w28UV_jMGGxk1#TkvH**naMc75-9jzb zkT3i_-nE>Q8yagE$FmzQ^8o$0{k|DC`d|)pkxPIX+g1!&3jgh-Fm{sU zo1VFxU7R~jZg&61y7cfrG63y8Q1go&ArfCh*2w#GgA_!2?)$#hA)hZo$hpD3XD_2j z$k#0urGyNb5HH3r(gV6R$(U26$$~&Z84Ah`C{d+TssIR z%*rs}s3|rpg1CPTevYK`!nA$QO4L4u313Hk$SW@}`234lx_VlnfGnS+rT}06G)4+S z$vFLLCkWi0QLb$Zp>F<^Jbkk(ZF+9b)BWco;jAgxlMb#u@&I)-$5|!k#sBu>|AoA9 z99K0oV()F^0NP>ld0+xzK(jk;#WS&OeG|wG!mDxrw-X-_(8q@{lo!?4+bM+Pk^eq> z*D+WxTAjVt_i>9|b_@NPt8ff;vDElhYZF1@kbT>6?L`BJj>#?#;<%m{L`A27*6Z)0 zHNA&F@md4Z`Uz@2qjW5hdC~-VJn#wjb+ngo)SXOX{{PVeE|~3 zpU!TkP{;AVZd?fPwSu?(UL+>KUX}{#_Xw)A~e1}cd@-g5|$~bCS zI$1rqHM%$yWotqbaO~PutcG3P*9K*LrTV&VD^OCI*uGLHMeQ0HaLD+vGiok5Ob_G} zje}FS&tCF)nUEE*(PhPV#UDC~w^quNI&D!xSo__TC_EU|K@$nrlN*^^6H1>SA5k{!n*xc$#6O%J%&zHaDHtV zowKl0e!qB^?8F5n1TDz9gl+>N^F%Ki?$J{|)k7e%=j{dF|ilJ<@h~WR^V2B5dxAlNqhdkfC_+VNscTxWWYmP1Doz z^3YSrfLFS4#wit_#G>TxQdmf*jS9#94pKIdao0x5(f6l*5py&?F|CE^YW4q-Oa*ny z1qVHy-!c&8I79T{B4?Q~cXLLRe0O*CTD)Dv6$q7GkB=|SpF%g*scVYrH;wm9E7RX| zJw9(HDa)96m~iHmHbTM$7;(e@?UV8FmfXe1IwMIuBzTNEe|@r3%AEH6v9x?=tmhF1JtPBiEjIff~hBvw_JTs$U^=YTtz!)sZI$w}t-yhqMMkRNPi zGrXUFoT4r+>+7ara)0?urU-*~@go?LjA|%rpINtqLZtq7z-X`UigEcj#t{dmq0W=ubyL3`~+U- zhWiz_+P+0V#r>B_cI*RJkKmHWum;D-oH!Rn-;sCH!9FB)vt2CpEKbI%uAQB`Uc&Y< z`Gd>FG!#1t((b-b7)^f3Z%BSAO=6?u?dO#p;H~@^U|{ka#eMnvA180CRbhKNV`A55 zS;ws^TV37Vfb4tScC`Xh_o}5-?l@0se|6(9sI7H8>+CVRX+BI4x%_1^IK?>iM?~E= zjkiw?wsz+0AUP>q4LZ9)dEhm5|}*0R9WHguLN&)aT;7xPq;3KX0=HCV!DB z7BlZe{@$z%H7Q2_Q|;u`L;BI2eSBb&t$mN@N~H>|lrS7?8Tlgi_K$q@izgdczMT)m zp?Mi97jNv5VjPN!syb@lVRH{V6x)QX+TY@N>Sxa6%_Ly}Z+qwzojP|lva+83`^#!% z1nG5CNHD^r4ZW~g{2$B)8vn}yTh$4Tnp z)`UW8{qv*c(Tp11PkT&vr|u*kjTTmsDL$zd&w4KjXWlh}RM;Uz@r{C7!V+M+HXDhC zUP7#^`)Q|u46r717;pL$zVwd&psl#63?}9KrCRaW1C{9WyaAR*wj%9Y*S>A4eEdqC z<(CLitH#p*Ir6Yf(P3H1Y)vn-U9k2UJgXY^=psG%rpqi!*$Mh-23NKVY$b8e5Cd_M^7v0g-cHU6FlE3yu%ZC zy8t|%ojnZDHwbJepnCpS$k_$1G?Atkp4TuoA$n9_Wwv_*OBGqxoT$o2$f%sjw3}e} z3%J5g=B8ZUuGy0^@0%HI{DG-{*6OAkUuYx@(FyTT9g1AW-H@%6m2Frk`t6o0wiC!> zt*CplQwQPu{mqZ36tw=w^*#PeY^b$3SbAkc7u>Foue9?o^P}br;BI(k2`=Q}n-*eh zXE{r!4~dQVP^Voy5_%(w=hJioevLF~`B_Ju$gM)2?yfqRe`n~HnYJ^%dXO=mx(D z++oz8aJ%Nw_j8~1hR1i@znhCiq?)td_bg3`HE3cy!Y%x_*Hmu;BS)Koz`*tioHy~m zN^<~!X1`P$f_t=s?tPY2&+gidYZb6t>otxT8qiI%ni)1U`}yso4W(G55{9X7g*%FE z)-u2U#A1G=+AQ3WZ!qGcdEgED`RGvRei?)`l`w^(n=q+aA14Gt*`s)tuBgKA{Q5_q z(_!C%NpkCT2it7HjXAi3*kcp_d<3ElJ>=@KZTsbU0BsIQy$y}d6>G#YA^R@AAEcp? zPVxovn`H{Q3&|1}$oHYnWP8k7>397FRsDp*u!h3vmct9N`O3Z~G*#9!RlSE{zWgs- zkSX1&MGd7B%=4_ND(qb8NWW|?7siL>o72B=O((QQdB)e%_S1GZiXLMMkNJt6H|s{| z53!CT6CLWOXEcoy1h0*|vaWpmq8uPdPDdF`L4vlba?4pDJ55%NzkHT#W_V2GbZ49! zVMdQM|I>ZZ-mom0o4sQe<~lGgOZjz;RB8nkxb}Kr$5UZIoE2%)=sWJ6me!z9XMyx( z^lxYR_4h{Kq^@3oLl}|&Bex}EvF98Vy(*N}ee&EmF0tXPd3Jm`6?_Zl^ z*e+l;d-p`-|ISQWf%6wcyLHrK2Lg{IGR55^!7Fk@3>w*G8U9S3*4Tn%k=twVY${JF z9bzoj?#n&;%-^TH02Tm|R89fgmtf|M5XL7jBj`6^D#soljq}1@b5lHfL-oE43DNIR zq;hthOJY;8ekyR_y4j@s*M|LHKjN?Sz^f&&Rbr2(VHqr7lTADzXq2PIhH!ir&)slp zdc`+4682^d_895q*VN4$*x&&_EM-4lWiehY^Z%)VM zRQ(ZQoOhz>etJ3ndrR42$#u&y(YS^u1TVT`edS2pneNuN25|_lvxC zjdLPX>}^FZdwN*61&N@2YXm%`$y{0#+JFSsM@Cx^2vKQZB zPUB1D$;GC6jdDyMNXGo8c6VU2gr5xG;cr~`@)}O6o5^aLC8?{B1SU?`vr|clVAei? z5 zPuSms{z>W@Iep0MdC0pO8;u9HTkO?}?|O2NQ?ET^jrS6mdQbQ4vk|B61V?8BN%EXf z@uWpWx1wZDRQ+D{HGb&cCUnzU>cro^}2;beg5Ml4%A(X>xnjH~GK|K}--U*rHekV0> zBx6|_QRJGxr{+bJ7_$3KYZXM2Dfu?PQ_hXwzQkBMeaU+xRBzyu?3J3RIIx|Yd}k<+ zy))v$Rn;f2r5d8MhrQUvhi60|qXP2`1w@k-w3&ij__)g9?Am>kp3tvNY4-Hqf2*N1 zoC7YgS$mB2=?HJLVdya97oYENa_XOUTRYW%#fyF?%YDw6rr|ErCq@AAo|U3pkh4N} z(HR%zJvN?j@$1n0VYiS&`uGt`aK+J=hu^h-+5AX3Apvvizc6nQN=MDC-gmKZl2U z0{8{sr7IDK8cdx;D%3L<@++ChJp>#jH3LrIY%JOf3IA8XKWGS*JkEQ`VdZ&GVY)n> zFV=;}aC}JCaLXGvV#(Xt!sa~x8=RI+78mU+E7>gma?ZQ!~mjOG4JdD zH09V+w1R#37+Ss)z^(DL?qWdt3jHHA2EV>Ipq@g>-Dbm>S*8`R$!>r7axNmuW|Pf# zk<#)N@)$%$)Q#UD@>c49C)OK)`#a6O`960CZaw<$VE$ORYe|*9v9#V8-=9{n9IoQw zK~`3TZlU|6M3GD9zK-;rOV7CQWaw2~S(Mu~)jh+du0!W)(23T=%}VhVe_%eKPh#%D zcJI@_^iA{ieg2j$GhiuYG9Lf9zKDo3pYN-<2FY8nY9-C=@l||72Z27wLHs(x-M0cF zmlxwR+`mndnME9Z3AIiOTX%YseU z+Dsxf;?0jaeXWbzi1KoQ%d-EvP^kZPp)&D&7ANpgb*7PpPcL5M_D=u5K=W-rx&pUh zV!LM1CNaziMX03gk}vgHt+CmX4{&~r1wVQ;G4;jYm*3D;GXJ#@y=Yov3*VFG89Ji{ zPQ~t;nz}9y1xo5fIl7{=;qeh1P=DT}S@+8Etq>u2YOb}_vG}2~r_95cTen`;-X1o) zuVKSQ!C(EZ55dzp5f#QR$Q$D0rp;Q7;;NXGP=&n?bLVfW@0nPS<6*>-2NpEE^U zSi0Fp!0fqZV?$O+AAYcNy`3szSS(*9CzoI7XhVh_FD zkbBw&HPd6lqWnbwKi^9^lSenmVCg(e%D>-8u70QQ{M?pYy);pssOelzUSwwx#xi)P z>_O`ky+(ud?R*Eq{ZH)ITp9x7)ZcfXyl7SiRzW7)m`!CJP-Yj@IAxpSXYV$jHQ0u9 zQ}_z{eV`D+TzQK8!7zYc-hOmZVqu$Ts3JV^a6;@2PG6N^bRio1)o1)2D~~j3V5Ydn zeXD!dqO_zE+ruo9LSRXzMx@{WfX>hg4?3#PWv~YgQ}g)gd3X-)U?2WRbftO+|4_!I zVB)G;ACGJW(ys_m3aon-+<}dezKAX5o4Og~*J9-7cagOu6TI4Yc;Y4`Np?$aG?o?B72cpF*_D!9+{3Yk!h^o)4h7)&H;(cE<;MgOaFxLqVSeOQ~U^PN{`X zld50oC|LeROYlqmib175_PbOWTyiZxGI)55NV!sXF8_o1TNn*P-pjU zIBgQrIPLUbXGhbW&J?SDZ8FXasoEv6IAvAL8?=ae{Gdfk{>=&Fu)jF zJP4H?gg&DGp_Pct*ulPR`O50|O8T4~{Bl(98rg;F0J_9GwLXdOZcGxVI&J=atC=C4 ztXO){n2kk)GQnVq(A10$Loq3v^{3BQ0FweW?Nt^-)`^bI5 zOaBYx?m2RNpYU|@DEE(@;`Gh&`e*{nkNC zjG+Y11Mv|g%u`cgkC|V(b6w+3bza?fdTPC`Ol~i|pu=iSb&cHff+KaIVJ1Gr4SVKS zJ{|ctg+S#?;BrxZdun0Ycfz7&9%cF5tE8*uj3Ru9?@us~^KYkLv$m1eOa@|>NQDM8 z%r*3uTxbKA4H^6rEjA2OBK+2Gr}1e$yVF`Kuk(AXu%u)(?=h9`&V>E9K!1|Zv|G~| zeWuFA{4NyDdg_uSW_>vWvRfVo8MUBtKV*+ae2(a%5rKrj{}77$ZK`y4sItb_R)

    6PnO1jX$2C;j~!_=}?$nzn_p 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%0DLvqLP(hm#-A+Jbyxnfeeb$he}V-pW#zvv?c#O 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�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�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

    9>d^aTu;+l1RRG8)nkv`s2?x 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

    94iQ=8`BIYdoyrSqT?te&UKuNYJ3#>`@S; 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 OrS?c$sY<~j;{OAK)rax` diff --git a/icons/ui_icons/arcade/fireplace.png b/icons/ui_icons/arcade/fireplace.png new file mode 100644 index 0000000000000000000000000000000000000000..080cadbebf022749444640076eec6df37470cae5 GIT binary patch literal 600 zcmV-e0;m0nP)9f?^Y|8xPTDHL-_7`-?i+fp<+C>w%q zp=|&F00DGTPE!Ct=GbNc003}$R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+DL*eQvnVw_KQA6c zD{*nAWEK?zWemAE(~1&vQz2|+1y?^8umu2)03I>An8bMi00C47su zgoVI?oW|O`|I2n4Vyvw*{wt1SWIvY6K|cxhtYR^DS(bK^8s+Q`Ma21W{widousU!Vr0!8!1>NKLqHFJ m<@@Ck2l0q!xjQ|@J^u}7ybLPKi9?3~0000Px(heVyS}SrKArwjfGMq zr4_3$Qo#qo2aAYe^+`pMD)mMq779|)7b)U}n6x6fkY#1l+JI?NrPbx%dXyvGzrs(h;!;V&sm(F~u0Bj%q5rD>y zO#r-mZVG@Wc5DRT&95f_I2dWw*Zw*>4nXsk4ggwr4!Ba$e8;e(Ih;NxSPIsz1)xm5 zoKM~(m|j$K_psXkE3u%j4OQ0waA|D9Nt3c58U8OgG5E0paQf6~06K3GYR7{O0PH|8 zIdgFufcoZJ0XRFesOt!+IlSkMkL0bTlW_EEelYln0#Ls?3_#+GlK^ac_&!_t??3-a zZ&y9o55NOEdnLn8!qF=I+Of9)ICA(g0ABf49Q;VtZ6ePp>keW}}_M2PQ0U3t%PbgL@3;MJoWNK%c~U$Pwb63ceJ`0gB*4tpKaVXs3v>~%D+gF!~aYMfGvLXzl9T3uM^V z1hs|6b}r(xX^?Fd~po rpcrTWPcV{b_09HJTB(j&VdvXF?dO~W2K!3600000NkvXXu0mjf%*Ic~ literal 0 HcmV?d00001 diff --git a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm b/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm index 78ffdffd034..ebcbf017b3b 100644 --- a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm +++ b/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm @@ -27,7 +27,6 @@ return INITIALIZE_HINT_LATELOAD /obj/docking_port/mobile/arrivals_skyrat/LateInitialize() - . = ..() console = get_control_console() /obj/docking_port/mobile/arrivals_skyrat/check() diff --git a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm b/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm index bdf0001cf17..61df62cf143 100644 --- a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm +++ b/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm @@ -6,7 +6,7 @@ playsound(src, 'modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1) #ifndef UNIT_TESTS -/obj/machinery/light_switch/LateInitialize() +/obj/machinery/light_switch/post_machine_initialize() . = ..() if(prob(50) && area.lightswitch) //50% chance for area to start with lights off. turn_off() diff --git a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm b/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm index 1258addd90f..1d34585dad9 100644 --- a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm +++ b/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm @@ -1,13 +1,13 @@ /obj/machinery/status_display icon = 'modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi' -/obj/machinery/status_display/LateInitialize() +/obj/machinery/status_display/post_machine_initialize() . = ..() set_picture("default") /obj/machinery/status_display/syndie name = "syndicate status display" -/obj/machinery/status_display/syndie/LateInitialize() +/obj/machinery/status_display/syndie/post_machine_initialize() . = ..() set_picture("synd") diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dmi b/modular_skyrat/modules/aesthetics/storage/storage.dmi index febe4b01547de55b99eb77ddfb82c65015c265b4..8a7e15587e63d7e543385e0aae7ee321f82023a2 100644 GIT binary patch delta 10494 zcmYj%by!qi)b61Xq@?=?s9=y%QUgdMAX3sG4HD8doKaFGL_nlFhm`IPr8|f2p}V=q z?|#p7@BA}+_CB-MI%}`B_j=#8BlRZqzCXkeFMaeB6CAzSNQ>5k^&K~eHZY?kT*9SUrG% zmQ^Jai_BPr^huU<{P!d2xV=5(1O3MS9NW%LIpUd;xT&EJzJB0r(abL6-iRAq&}g8m zZMm@s9B}glcW2;Dr!_@aPEUAwdH-Ymk@j<&m~<%V8-|R`Fb^U`fex3HOtB4MWwo(2 z061@MVN0q-Y7b{VchI*dW96vaa=xo?$)Au7BS_7fzmvztaf_zH{Ea66Q)zO5OGY|~ z(IR#B^wAv-wktw_MYAhjHI!bcXjb}Ytxux>oMP7EdVfuU#B{v1VxC;RGwUC%&>jQr zI*;7*n#`NUkXt1BFZ#JoGFs&cfpb*W7hN>$C;T2T$nE^ea0_IhvK+es*&lauohZZZ z!kNSaVxFlxq_B1}^HnAsU6%YGMgCb~*7Wsm{!(~HLSdEyjS>5+$BK+XVe0E?$ zZWxR$bGa>q1|~a6C+(75MA_zhwKy1eG&m?){vVB?D`;y|b5uu=60+#Wv)Qpe5=^um_H2#%< znbYWqt9_9?96yPFyukh|yQ-`tm|%C#=UZMP5FkNJNY1u3*0%W>b9-xIpuk>4R(5gD z`(*#)yI;^SYo{6+cRdegFbT8Fyo7k)v}IeTH8!>@5BfsK6zID?hcC`m$0_Rj`iens z8xAAB`-Fu@{OdU(0YU3NSsSmztnlLcy4COJY)4{`8;+7?N!r{0q(p;??~Ld1O5S(y zonK14**(nfz1&wRyZW!r&r57pd|`LdXj6oCleRKCcQ$#bI&_&M07z}7l~9ny#YSNA z%aSDrklSJ@jAYhtUpYF!?RUi&4CZMa!cb2Q*PYia!t$}~;qfg)L#4xRMTT`jL{!^l zt$?%R?0uFb>HVE0$04x7PUpi+B@qz1NKQdv{@d@5f?M~Zs6*Hf?FtBim z$&9%Tw6fu++j09RaNyp(uKm-QsJ|%pk!on`e zb7wz0PLR(c7GQ6D%{XnxoF)Cyl7-U^L-%Vq9O_r0sb31QQI%9)lZ3?I<K=HyU17Q@5fYx#T6w4XmK3oqWo>YO?JiG1)N zTuY?b?I!J>xKc0U3#6Zllk+^eQ!tETR+3eY!DyJ*Fru;PhhJ`;qBWc6>&T*3MBT#Fv6ErO^N{!wU6!QxHEjJvQBMm zXd+_*M{sb?M|$n&RF&Hrbameuyh*j0-%cB@T6A%7QCUm59dxojod0vvqmQzL?8R(j zlV{P|{5H#feY!&05RKKm_0GhE<9WVu%rO}1nrWrLU|7&6uTu=?2*T=L;vilo$xP+7 zZMlcxNigArTM<=3zw@W@?l*dUb)AJ9rlxn3@nwCdaX<+xSIQrEwLjLODp&v+`{bXa z{u2lOq~p+Z!`EskSFWSb7R%;CF-F^;6T> zl7c`=!qFEY$Gx`XpTzhM`T>vbo$hpf;y#=72&Q_PEUaaF^C>|{r{Mu&gl=rUgm-%P zir)_V_&6B-T6%qxWP(LVXkwR*MF3l=GDa*jUqQN+ciEH}NEH5PV0)wJbz(t_YO zx9M5qje>$gKymRvpLbQZ<4FtXT2otCIDE*pgyxLhm%k-u5IN!i7MeEE2jyL5kI^w7 zG$vGf>a1OEz7gw`?3mo=vM`nvRSmx&vF(|F^bLM1c zkYFj%Prk;b3+F;-X>WLpp|LQ>ORg%qwLk;E*F=VCXi(ejyrY$2)ZF#AKP?!o#on19DnzP6roB1J?stVI?A}KO_#;@zX+)31jM#`WgSJE`#3fY0o>Do`>DU2LIn}QUhK%L~^!-wWsN!AR{f(bXp*-L$2npuY##CQs(V(PVge6S zUI#@)MEv;mivwux>XJXYbXo7G3`5aj0esw6?^^@z{hh6G!2w?X;*mPKw4IDj)?Tk5 zPWzFArIbQP!{?egC=&2CIP3u^N{N#ch*YoG&MD4(XWi-!2Dl1^gPS* z^0G#@irs2pC{xQTTTMKF(KGr%QoXGkNRj0w7C%%Q_T$=2lkUE>E`Dnwp&|@TsXm>OM5LUbzC${H(Y> z{W;VU77u#QFiN2Mm%Z)XT@x;akIJ>5cgaefJ{ong z`8;g@^EyNvt6MrJ`J49dvNGBC?H?sK5$)~E=Py2HadG=K^P7*_P~%aHD`D{v(b9f$ z$vq>@I!@F1V*%<-{9Ed*bPtOYVZ41wSh z70#PGuhXW7Wsk0}_hR)@az%z-c$U9)0}LDPn;Xj{UAs~s=~r_ysvCnh!pPlfU&XPAgSH`e|W?F=HmAW5|ikobshU>WdRcdA#U!8wM&^yM&tm-*vUokAK!z; zFhP&b2V6w-@x3oTgxE46F>|XM@xGGZSxvvQmC1bMmibCXfWC=H?SCOp8CM^}I9T8Y z>nhzPtV_%Si{}4BZrzbqnsk)9Snr$(R43 zMuas|K+tjSx%cr#+SQRmqP%qtj7*GMT>Gz`$zg#CCLobGiR^5^Exc6J7VzDw;peTS zeD~4RTmK(E0oqRTP70Kr?dR%sf#!0X5gz!Zt63eBDStnkra`!o`YvBpGWQmhwCx6f z&^dnyNII{)?t2AVcV@rF063+Y1Z-ecK6rqMZE+{nSd}+6HbCgJEkCmm{HuP@(wyx!>eFJ(sx#Dyw_SI02Jx7^~CiwoPH(o1)E;95f$hEkgt5vY2#- zdDlZ<5Jh!f%gHmvn>QR8DIP=2+{{BaWOl5fH~+?J8D=-dkNHE2DB%Z7rqy}$c3ZF9 zZgYpez4wIL{OyzBDllLFrp!uhd3$PP^2+J~mw-$2+>xU2`5+k91ABLqJ#NSmYqY45 zl$(YH{E@$7U%eg(niNYoQ_mQ{$Wvnax$ispaz{-ZFEgK*J^e%sgYzo$C{!gbUA8;p zF2_re7foBR0xW9)OP5@t*`7jDM)PRjKO`!WiYdy3Q8=oJ7RneJ1$|vz z%lD6u`TKKnax!vr@n61tS?#*{fR&YXHv}0a@qog-o^Pe5oIf)&bHlyKDvX95NHu+f z2T1mR^8Z!snYiq03@-9w^U9(Z%M2JmVG8KglYQlQfS+qMkgQ~D`xG#du8ZZd8-EQ93it*EM^LTa zjAXbgt`848adE2b{RV(y`aqhCX{P{JUm7DJg0QsASfP1ejYP(yr*n*#&*yxPR1EEq zi!b&!)D7xA$*>}rWP5&c4rR!b7+#XmO-llj8CNs2wm#+o4iQp5RUi*41^vi=zR~dd z#6x7)VGc8v+qg21yOQy<_#(!2yu%3Bb1mJ$4O(fuF0p{)Nc-;+zlq)_J8GQZ(w(pM zIF|a%`#q_6p>s!`kff@Vx3jqT>4jDQukxgqF1SogOtqsCVSQTDb%9?d8@|O14&q8D zjc2&$dYsU>33zYV$fSVzVYQ0-p&2Z8?|kubfgH7zAb)><7T@H3$^LEzJM_$ljSwBO z(IF=eXOnp;6gtJzi&?BJPS)3^!hpiJ5ux{@jP-d&GUlaLs?`JU>rH<#{pwAOh6X?A@) zqE>rmwwA8IyBXtz+6wXx{xbRSBG@GBpO=(7&NDeUI9y_rl0_Dtzl>_8RfaZWcCa(w zt_`VOsQ2jY+qe7U`ag}M=d|m<^XZktc9wyLr#H?OuYy7!K%N*q91(J$ferNDZDVal zv?aaYUueMuesUXgt@6g|!WKKIA(+m=CASeTpgmC~g3vB9cv9YPU=wCX@xZ;?zhxHG z+IACr8Y?R+sV$=zo&OE{n=RbXtly9V3klr=q`ZC%K=VAxF!nNOLL#W&j`y`!rWLI%2y08Q=OZtb#w1rISq&ycH#K!$+s}*TS4ijzL<+u@Uiw;Z7CLR zNIkvKU@qux4@hd@;qiMoOG6rd*EjfZaQi_7TmMMg7-)7GDEw_9q+RFJkB_o55_M%j zn64bX+c)bx?YfCK)B1XP;vsP-iqL0Eox4%R1k&AYjrFyz+6gcK(9%Fk`AiM~JU&p- zdYn|75#M3@5y+HT_6_b|du`BP;r5&Dwn`3wrwX$9yA=r{B1@i97{GtcQ?xoo##P?N zf;fYSm-HW|W*>vH4WHa!jML=U*FUp#xnIxR#Hk=P@*3u9$Mm&2^!|BWote>a3dB*s zGXg)>7VS}9Q;c1%&GH&6Hq{x_Aal3?k3tCk{R_!l0*$RkOSnS%w?-km0B!AqVXLd@ezpNy=K z3?@-YRuTRWLrcQ?Ad>$+MBoNRy`$2Bj+Fc0_ItFBne3PyS={jY=Pf#QZnbC2!{se4 zEswdY#eGg^OLf-n+c#*7@$*x&&k3*(SZ?hJ!otxkWyp zxwyNp+PC)^x6NFNqN5tO(6&{7ayHtm)OHN}ps&TBW-9Gfla&A3tx2E6bK+Dt^!OL> z{M^%KB10S6PE?N36C~>D>cY+|A)fm!cy4GlC#RChAMm!!LLaA+?_|vJ(e_w$vOY6(i!V6w1|4s>u#3mjumVHfm!>f|qDmJPUV&2}wC(;}FJY=FAol9M) zbO2&Q@qleq9ks5m?&Rf#ypx-othP4Qg9i`3$HWA7e53wG#wKTdYyO;rgA_XHWS}vL z+jFxt4}3#Cnr~o;dK3V#-E|L@@gp8^w=V>Be|-Vx-I9_!ccniHeCz6Rx#6gGZ(H|s zdKajD%n<0+feP+Z4+OMRyFv|sW)BS=0Puyw%by#jrAOXjs^*~ek6$wl4o^7|0vJ05 z(_yk0{7_zK0pT{*XU_;DBO?ibfZ*V7-Q5bZ4Hfwywf5h?e?KFU$mB<1s^uPUOL(+_ z=8{v@T9o4nj^&{=c4{Nd$%cRE{u7nLXBphwBz|N-2`ksuTD>WDeisW3z+aa`s|`OW z`*@3*NEyj;ptU^*nirc8c+ckpACQxqRo!mnrKU>OAN7kurs>F3jBPnHts(>=1fDjVq;EY1mArY2sV}^BL44(d~sC6TCOUbrHA)lmBWuTGU_9h z1Qa)qK(nD3^)I_JW}Tr=&ZH4q7hA~UZRdvHDR@mEv~F^Kf>yDYWXn14v_Pn8p{biP zfy0*H{)^X4#y6uMzup@#GBUEXk4j7oedXrA;9-%|$8vnM5Zhs=vfG)~>q^mkF<4-~ z)gVCoDNKBSHH$yt6$exUIXGOP=4{+{g}5y60Ch;I6+|j8De&evJM8^J^LnZGiC%Pl zUte8z52f_{yBc|eL)-Ajf1Yr7)jdCFQbDI&Sd{33U-Ttv45IvmCp_ekw1vF2P_*n!hDJtV;e#5OA!6csUq^UjwQi&yct&ts;p%3mVZ`jhQ_-@f*|vPW@8 zKC5fIkA)`@K`h1MB$jj4%{<->94kB6t0Rx|~*usv?hH#{AZ#zkchog*o4!$i# zJR}Q_5;C@b)YkP@8)p#DMSJ#AIn$HX?4Zqwxs=((YJkc+Kysx%uJf`eTyk~-zIeBV zYq&Kq8T|ypCI${+e}7JmY>nA1Zma}YD94(0zoBtF8GiT@M{!bTjjH7g+;|I4JA<#8 z>#=~6i%Fi$oE-YtF{F-KtOTT<8G5{MvexaH#ND+E^b`HoBew~L>wy=YN=%AJjLGvF zoI{mtN7>H^APXVdX(4mT*iz3>qI8+fa&Ke_xHRb}I4Bl^z3Ar-fqm=TW0nz*wB0N! zc<|CO`&X4K70|p1Za1kr@iO7*+#rgJUT(Z)27YE`MaPN#3U=h?<#! zV@F52F}jRjEEV2@|FQK9{!B>tR$ni+vc8T5&VtOYCyoud^=IzX%Y-GHeKYsUVCqUt#5Rw7XCJP{vCD(exyu9#d~*|der`@V;RwF6 zuj=pKh4dD@H`7n;Iy)DyBH0=*MB3~OS300<>$T*iikogl>h%&l(x>&5mzVxIR&`=n zDNiV(@!gNGRUe`r$g}v7g-q}B)<2C#Mu-%0kpy(EBj!?W6l;QMy_5VS4ew?h;Bq3A zH5&4gpjFh@H;}+GMcKzYg(XF!@eTYt@&n1@Dyq`Ra*2C|P%$sT)QE^#{8wT?5kf&1%Ll~opAyT-ny$TG_%EAo zIx-+P_n`?&v#lH_*dID=Uog~;KL~z1+pB+}r`+5x9{>e4BJQYHzos-8{%xM3;=rnI zFA76O^GjkPgJeyJ$i?QH0kMi+iGUy?`k%Ucq00XOG!uP){*)>+6I*2KH2jbw0RMlk zo&@;y8mYvsQ&mWS71B*Wf+zlgugU&OP-QEzDL&ZHEvax$`xy(P%3c%1X}<@^;#zWy zs1g|n@4wjHJ%6^#9ksf5`5yWdv}}e*dV8EUzfH(5LBRV z<-!ah!^*8&kiG^1>ypwO;Y82R=L043=hk8WYRLNxQU8%jf=%~SWMbmQ?4kg~HsMvT z-h7sgJkT6W?qhT2Z(isj!J_JZtMx=&B{PQIn9gpT#O3DjhB{u1`s#GYPWy(4UT{{h zIPm|H4T{1L!y$)5tbe)c%rTazODeKZNt&Mp@Ka2lB0VVz*adEOSH%b z%|Nx!VA9vmewNqwA5J-phkSf|M?y|LFtYlwc;_8Sj{9xEW{Uj#%~}-zk#^%_I*nem z9;*>5GJZB#?gwR;p(6(e2LJ$r!OUhZj@AVVxub&X@MgtlpBZ*J*d5aT60H^f8OfTA2tUU###j|qW)hb^7wP!EqvfoO+Iw{m?Meg~T-)8}7Yu$Ig zLJ1i(vytBU=sh1fK=Na6#IP~>_-_$JVlwJ;>j^4s#7e@oL_epu)UMAUDpE2BgWUB( z&68vACC2echGyV{C~h|1scX~S9VMbPo%tJx_=c=vlaT_gPsn!Kz<&Y)l;<042fKB9 zrz)IbvU(5|UARd)?*s+*iYE zF+&JqK*3D(1i|3pBD=~ot4@LJ%GZk8QSJ*aov6nuu6eqKnO2!>;%ul;fxZYzq`c(4 zt_b=RMAeag#8}v(VbOvGm- zE(|gJMDMnpxF$d;bQ=al|HSJ$8Mb6*iP^@F2)EZ641@-m7uOcU(F2RCwJA71ZjMnPS z-ON~pTwt=SPKVQ(Q*dydd=~oOvh-wg#W@%4g=!b-Yc;%oshT9Fb)sac#3-nQ?fxO) z;tDJq(#6*lgj-K?nC_9rNB&m!oW~33b!mppNcf*6hvqwZch1)ZG`!+?>RZ0?99!aC zUVrqY;j>VaN}iJl)K}txpLc>c7Tye3BWaaSc=a@KJYB-XldD$19qF3X6L;DqR!Jwu zWMt&z>|W&5&{{9{-%DLUfIY;Mxck2CIr!^Yi5Xj&yz<(cwl0IYvpAR@U-0FUkd75g zFH_+=y(YuO``Fh@+MDI#=%$%M773dJLd%L-^HaexJ%?6yPQR8q)Q2YXQ@E~fYg-Q? z=X3>(@$ck;1GdUuqVc)Lhp~_m9S)_D>#m zPbC*fIbN1_sFIQ@#eQ&n9jcU5;o7uEA?$uX&s9%362tUdygOsqhI7Yv#mg+|YxX^= z;GfU$|M$WZS~Z4gj}BqbRZTT(B>2>@6#Zo*uTS)eA~+vkobNY0e=1Iff^Pi$)~Knd z%ir45q^L{A|7mEPy-i5%iUL&~>-o###A2Uo5);usDj9H+zUD7VO}F8k!%3K~kK$Y2 zGh7m%w+RYr`t&us!jrndcm?wjWcSIM{E9RwjHmJAOC8+ETX}t#@AHk+UynXnl{Re= z0k6eI(BpL`e&Z9WeboXG4KdhUpsr$S#6;lY5(!`YZ0e(2=}N-BY#WV)K(PXfTk_$z~ctvY|km zskUiy8Z5A;25<=TRSME^vsBj}efj$h(oZuNa&wg3gBUBce@c8+x>w4CfbtO)=XdAb zL>se5!8*44(RHAqfTjhIq&(0S-Za4Sgp>Ztg&C@}{lC~J5jrPtewnB|ATR$+B*viU zUa%VewkE~4gJyB>VQA?6>bg3eDO`X>hX6qyu28gNE~~bosv{~yw6sJ!+7sGV(HTV2 zA!6B?mb%*XdK~Go2J2kis;zJt*&YsF!nNTxD|pkDvhMDchFe=LTNzp3 z!$}f)*&jZfo~2bTKXSDCpR~mgJ(5)D(DRnas=W9@a;DOHW9jYUVIm!c*i$5C_rwHV z-PsQJNH(>HhsQPLnNFM_tGI#PHVFe~jBuF!)!#Q3wGqrDz$7KD?rLpPYg_4R892a? z{?>3{$dhjS{KK&|gI>+BFte~VDKW(VmC7UdavkGHguiOh7kK+4Qm|O_*F*w?Gc-J_ z74;WVr6`Mv!+({h-rsu0P%PTK7Z|&E*4pD#zYBDsiQnL!P@0;WQh|rHe;wPfnuENG z34rs1H$}Rl@W+Guf~NByjrDIT!Oa4)Wo&?fv$x!x8bDO4hG78EaZ<-A@k{QK{(4ak z**IL{>&%>x>=Lf1C@qeGdLqV9$I3<~@^}9m#TJJGBN+}cUBF}@VHg^xaUWA#H96F7 zZq6N?TdzOWi|fi*j5U4=kWx`Se*gY`Z;{P7%P+cz@IDlhk%uR@wnP9__&_G;%@1Yd zcEj1Ysj2aq%a ztof&-JTKjktz+2R?4B#_=h8^Z2*{`qQoHQCNdE8naRC<8J9yqQaP|YxM^RQ)rbyc4 G^Zx;4EsLfA delta 10454 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 Op{(#izWmwicmEGE)qe>9 diff --git a/modular_skyrat/modules/cryosleep/code/cryopod.dm b/modular_skyrat/modules/cryosleep/code/cryopod.dm index 812b83574dd..e237a9dd6f3 100644 --- a/modular_skyrat/modules/cryosleep/code/cryopod.dm +++ b/modular_skyrat/modules/cryosleep/code/cryopod.dm @@ -179,7 +179,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 32) GLOB.valid_cryopods += src return INITIALIZE_HINT_LATELOAD //Gotta populate the cryopod computer GLOB first -/obj/machinery/cryopod/LateInitialize() +/obj/machinery/cryopod/post_machine_initialize() + . = ..() update_icon() find_control_computer() diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm index 44f5dc23227..98bda575348 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm @@ -137,9 +137,7 @@ GLOBAL_LIST_EMPTY(customizable_races) if(eye_organ) eye_organ.refresh(call_update = FALSE) - for(var/mutable_appearance/eye_overlay in eye_organ.generate_body_overlay(species_human)) - eye_overlay.pixel_y += height_offset - standing += eye_overlay + standing += eye_organ.generate_body_overlay(species_human) //Underwear, Undershirts & Socks if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) diff --git a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm index c83856bfb1c..2d5481b2747 100644 --- a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm +++ b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm @@ -63,7 +63,7 @@ return INITIALIZE_HINT_LATELOAD -/obj/machinery/atmospherics/components/unary/delam_scram/LateInitialize() +/obj/machinery/atmospherics/components/unary/delam_scram/post_machine_initialize() . = ..() if(isnull(id_tag)) id_tag = "SCRAM" @@ -387,7 +387,7 @@ else if(machine_stat & (NOPOWER|BROKEN)) icon_state += "-nopower" -/obj/machinery/power/emitter/LateInitialize(mapload) +/obj/machinery/power/emitter/post_machine_initialize() . = ..() RegisterSignal(SSdcs, COMSIG_MAIN_SM_DELAMINATING, PROC_REF(emergency_stop)) diff --git a/modular_skyrat/modules/tarkon/code/misc-fluff/fluff.dm b/modular_skyrat/modules/tarkon/code/misc-fluff/fluff.dm index f72fc0a99d3..cf7c4bd7005 100644 --- a/modular_skyrat/modules/tarkon/code/misc-fluff/fluff.dm +++ b/modular_skyrat/modules/tarkon/code/misc-fluff/fluff.dm @@ -123,6 +123,6 @@ name = "paper - 'Command Safe Note'" default_raw_text = "Heh... I couldn't handle letting those older papers go, something about them reminded me about why I jumped on this job. The \"Safety of the future\" spiels... Now? Any dingbat can buy their own little constructor in a box... Fancy that we got one ourself, Thing has some handy designs..

    Well- That asside, we did get some new updated circuit boards. Industry standard gave us two sets of research constructor boards for redundancy, So we set the spare set in the special safe within the comms room." -/obj/item/areaeditor/blueprints/tarkon +/obj/item/blueprints/tarkon desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it." name = "Tarkon Design Prints" diff --git a/modular_skyrat/modules/time_clock/code/console_tgui.dm b/modular_skyrat/modules/time_clock/code/console_tgui.dm index 64b576828d0..4101ea05932 100644 --- a/modular_skyrat/modules/time_clock/code/console_tgui.dm +++ b/modular_skyrat/modules/time_clock/code/console_tgui.dm @@ -20,7 +20,7 @@ /obj/item/circuitboard/machine/techfab/department/medical, \ /obj/item/circuitboard/machine/techfab/department/cargo, \ /obj/item/circuitboard/machine/techfab/department/science, \ - /obj/item/areaeditor/blueprints, \ + /obj/item/blueprints, \ /obj/item/pipe_dispenser/bluespace, \ /obj/item/mod/control/pre_equipped/advanced, \ /obj/item/clothing/shoes/magboots/advance, \ diff --git a/modular_skyrat/modules/turretid/code/turret_id_system.dm b/modular_skyrat/modules/turretid/code/turret_id_system.dm index bae950e5b08..4b7c5ffd170 100644 --- a/modular_skyrat/modules/turretid/code/turret_id_system.dm +++ b/modular_skyrat/modules/turretid/code/turret_id_system.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(turret_id_refs) /obj/machinery/turretid var/system_id //The ID system for turrets, will get any turrets with the same ID and put them in controlled turrets -/obj/machinery/turretid/LateInitialize() +/obj/machinery/turretid/post_machine_initialize() . = ..() if(system_id && GLOB.turret_id_refs[system_id]) for(var/i in GLOB.turret_id_refs[system_id]) diff --git a/sound/attributions.txt b/sound/attributions.txt index c81aa3e664b..39f206e982a 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -140,3 +140,6 @@ https://freesound.org/people/steaq/sounds/560124/ refinery.ogg, smelter.ogg, and wooping_teleport.ogg are all original works by ArcaneMusic, with smelter.ogg using samples from rock_break alongside original sound effects from a warrior electric drill, where refinery and wooping_teleport are modifications of that same electric drill recording. + +paper_flip.ogg is made by gynation from Freesound.org, CC0 +https://freesound.org/people/gynation/sounds/82378/ diff --git a/sound/items/paper_flip.ogg b/sound/items/paper_flip.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9e6aca596756cef2581a06b46e3bc602a3a4b74e GIT binary patch literal 15804 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 Xss#UDRD;`;(}FpsF~x=cpWOcdr+{9y literal 0 HcmV?d00001 diff --git a/strings/antagonist_flavor/spy_objective.json b/strings/antagonist_flavor/spy_objective.json index aa696baad6f..908a8da2b82 100644 --- a/strings/antagonist_flavor/spy_objective.json +++ b/strings/antagonist_flavor/spy_objective.json @@ -8,73 +8,190 @@ "Ensure @pick(location) is @pick(affected) by the end of the shift.", "Ensure no heads of staff @pick(escape) the station.", "Ensure no members of @pick(department) @pick(escape) the station.", - "Ensure no rival @pick(rivals) @pick(escape) the station.", + "Ensure no @pick(rivals) @pick(escape) the station.", + "Ensure no @pick(rivals) succeed in their objectives.", + "Ensure all @pick(rivals) @pick(escape) the station.", + "Ensure all @pick(rivals) succeed in their objectives.", + "Ensure at least some @pick(rivals) leave the shift @pick(affected).", + "Ensure at least some @pick(rivals) do not leave the shift @pick(affected).", + "Ensure at least some @pick(rivals) @pick(escape) the station @pick(affected).", + "Ensure no @pick(rivals) @pick(escape) the station @pick(affected).", + "Ensure the station's @pick(happenings) turn out @pick(affected).", "Frame a crewmember for a crime.", "Free the station's AI from its laws.", "Halt the station's @pick(happenings).", + "Help the station succeed in its @pick(happenings).", "Invoke a mutiny against the heads of staff.", - "Make it difficult, but not impossible to @pick(escape) the station.", + "Invoke a mutiny in @pick(department).", + "Keep everyone out of @pick(location).", + "Make it difficult but not impossible to @pick(escape) the station.", + "Protect the station's @pick(happenings).", "Sabotage the station's power grid or engine.", + "Steal all the @pick(stealables) from @pick(department).", + "Steal all the @pick(stealables) from @pick(location).", "Steal as many @pick(stealables) as you can.", "Take control of the station as the new Captain.", - "Take hostages of high value crewmembers and demand a ransom." + "Take hostages of high value crewmembers and demand a ransom.", + "Terrorize @pick(department) enough to be attacked on sight.", + "Terrorize @pick(rivals) enough to be branded a hero." ], "department": [ - "Security", + "Command", "Engineering", "Medical", "Science", + "Security", + "Service", "Supply" ], "location": [ + "atmospherics", + "departures", "engineering", "genetics", "hydroponics", "medbay", + "the armory", "the bar", "the bridge", "the brig", "the cargo bay", + "the Central Primary hallway", + "the courtroom", "the chapel", + "the garden", + "the holodeck", "the kitchen", "the library", + "the mining outpost", + "the vault", + "virology", "xenobiology" ], "happenings": [ - "research", + "breakfasts", "cargo operations", "communications", + "efforts to figure something out", + "efforts to make an important decision", + "efforts to solve a crime", + "efforts to solve a murder", + "efforts to start a project", + "efforts to stop a disaster", + "lunches", + "dinners", "genetic research", - "mining operation" + "mech constructions", + "mining operations", + "optional surgeries", + "public gatherings", + "public services", + "research efforts", + "social events", + "xenobiological experiments" ], "affected": [ + "a disaster", "ablaze", + "alive", + "a failure", + "a success", + "better than expected", + "blasted", + "bored", + "boring", "burning", + "busy", + "clean", + "confused", + "confusing", "covered in blood", + "cursed", + "dead", + "dirty", + "disrupted", + "disabled", "demolished", "destroyed", + "devastated", "engulfed in flames", + "exploded", + "exploding", + "free", + "frustrated", + "functional", + "hazardous", + "horrified", + "horrifying", + "in chaos", + "inspired", + "inspiring", + "intact", + "locked down", + "non-functional", "obliterated", + "offended", "on fire", + "optimized", + "peaceful", + "powerful", + "quiet", "ruined", "sabotaged", + "safe", + "scary", + "scandalized", + "serene", + "shattered", + "terrible", + "tranquil", + "unrecognizable", + "vandalized", "wrecked" ], "rivals": [ "agents", + "aliens", + "cowards", + "criminals", + "entertainers", + "extradimensional horrors", + "fanatics", + "foreigners", + "hooligans", + "litterers", + "magic-users", "moles", "operatives", + "rude people", + "sentient non-humanoids", "spies", - "traitors" + "subversives", + "thieves", + "traitors", + "tyrants" ], "stealables": [ + "appliances", + "cargo orders", + "critical pieces of infrastructure", + "decorations", + "floor tiles", + "foods", "items", + "materials", + "medicines", "objects", + "pets", + "public supplies", + "quiet moments", "things", "tools", + "vending machines", "weapons" ], "escape": [ + "abscond from", "depart", "escape", "evacuate", diff --git a/strings/arcade.json b/strings/arcade.json index 584cbc6decd..a97a3d75549 100644 --- a/strings/arcade.json +++ b/strings/arcade.json @@ -79,64 +79,6 @@ "Yuletide" ], - "rpg_action": [ - "Annihilate", - "Ban", - "Defeat", - "Destroy", - "Mutilate", - "Nuke", - "Own", - "Perma", - "Pwn", - "Pulverize", - "Robust", - "Save", - "Stop", - "Strike", - "Valid", - "Yeet" - ], - - "rpg_action_valentines": [ - "Bewitch", - "Crush", - "Cuddle", - "Divorce", - "ERP", - "Romance", - "Seduce", - "Smooch", - "Titillate" - ], - - "rpg_action_halloween": [ - "Amputate", - "Behead", - "Beware", - "Butcher", - "Dismember", - "Exorcise", - "Frighten", - "Horrify", - "Scare", - "Scythe", - "Slay", - "Spook", - "Vanquish" - ], - - "rpg_action_xmas": [ - "Freeze", - "Jingle", - "Nutcrack", - "Re-gift", - "Snowplow", - "Stuff", - "Unwrap", - "Wassail" - ], - "rpg_enemy": [ "Administrator", "Bloopers", @@ -217,66 +159,6 @@ "Stalking Stocking", "Yeti", "Yuki-Onna" - ], - - "rpg_weapon": [ - "baseball bat", - "bike horn", - "broken bottle", - "chef's knife", - "circular saw", - "claymore", - "cleaver", - "crowbar", - "curator's whip", - "fire axe", - "fire extinguisher", - "full oxygen tank", - "glass shard", - "liz o' nine tails", - "null rod", - "potted plant", - "rolling pin", - "scalpel", - "screwdriver", - "stunprod", - "toolbox", - "welder" - ], - - "rpg_weapon_valentines": [ - "bouquet of deathnettles", - "candy-heart shotgun", - "cupid's arrow", - "declaration of anguished feelings", - "razor-sharp breakup letter", - "still-beating heart", - "thorny rose", - "toolbox of chocolates" - ], - - "rpg_weapon_halloween": [ - "chainsaw", - "heavy gravestone", - "lit jack-o-lantern", - "machete", - "silver dagger", - "skeleton femur", - "spectral blade", - "wooden stake" - ], - - "rpg_weapon_xmas": [ - "bike horn playing carols", - "blunt fruitcake", - "box cutter", - "Christmas-light garrotte", - "festivus polearm", - "rejected present", - "sharpened icicle", - "sprig of mistletoe", - "thrown snowball", - "whole Christmas tree" ] } diff --git a/tgstation.dme b/tgstation.dme index 94072e83ff5..66ff53e1746 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -41,7 +41,7 @@ #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\apc_defines.dm" #include "code\__DEFINES\appearance.dm" -#include "code\__DEFINES\area_editor.dm" +#include "code\__DEFINES\arcades.dm" #include "code\__DEFINES\art.dm" #include "code\__DEFINES\assemblies.dm" #include "code\__DEFINES\assert.dm" @@ -601,6 +601,7 @@ #include "code\__HELPERS\~skyrat_helpers\unsorted.dm" #include "code\_globalvars\_regexes.dm" #include "code\_globalvars\admin.dm" +#include "code\_globalvars\arcade.dm" #include "code\_globalvars\bitfields.dm" #include "code\_globalvars\colorvars.dm" #include "code\_globalvars\configuration.dm" @@ -1746,6 +1747,7 @@ #include "code\datums\quirks\negative_quirks\addict.dm" #include "code\datums\quirks\negative_quirks\all_nighter.dm" #include "code\datums\quirks\negative_quirks\allergic.dm" +#include "code\datums\quirks\negative_quirks\anosmia.dm" #include "code\datums\quirks\negative_quirks\bad_back.dm" #include "code\datums\quirks\negative_quirks\bad_touch.dm" #include "code\datums\quirks\negative_quirks\big_hands.dm" @@ -2136,7 +2138,10 @@ #include "code\game\machinery\computer\telescreen.dm" #include "code\game\machinery\computer\terminal.dm" #include "code\game\machinery\computer\warrant.dm" -#include "code\game\machinery\computer\arcade\arcade.dm" +#include "code\game\machinery\computer\arcade\_arcade.dm" +#include "code\game\machinery\computer\arcade\amputation.dm" +#include "code\game\machinery\computer\arcade\battle.dm" +#include "code\game\machinery\computer\arcade\battle_gear.dm" #include "code\game\machinery\computer\arcade\orion.dm" #include "code\game\machinery\computer\arcade\orion_event.dm" #include "code\game\machinery\computer\atmos_computers\__identifiers.dm" @@ -4449,6 +4454,7 @@ #include "code\modules\library\skill_learning\skillchip.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" +#include "code\modules\library\skill_learning\job_skillchips\clown.dm" #include "code\modules\library\skill_learning\job_skillchips\janitor.dm" #include "code\modules\library\skill_learning\job_skillchips\miner.dm" #include "code\modules\library\skill_learning\job_skillchips\psychologist.dm" diff --git a/tgui/packages/tgui/interfaces/BattleArcade.tsx b/tgui/packages/tgui/interfaces/BattleArcade.tsx new file mode 100644 index 00000000000..a400628575f --- /dev/null +++ b/tgui/packages/tgui/interfaces/BattleArcade.tsx @@ -0,0 +1,243 @@ +import { resolveAsset } from '../assets'; +import { useBackend } from '../backend'; +import { Box, Button, Image, Section } from '../components'; +import { Window } from '../layouts'; + +type Data = { + all_worlds: string[]; + attack_types: AttackTypeData[]; + max_hp: number; + max_mp: number; + ui_panel: string; + feedback_message: string; + player_current_world: string; + unlocked_world_modifier: number; + latest_unlocked_world_position: number; + player_gold: number; + player_current_hp: number; + player_current_mp: number; + enemy_icon_id: string; + enemy_name: string; + enemy_max_hp: number; + enemy_hp: number; + enemy_mp: number; + cost_of_items: number; + equipped_gear: EquippedGear[]; + shop_items: string[]; +}; + +type AttackTypeData = { + name: string; + tooltip: string; +}; + +type EquippedGear = { + name: string; + slot: string; +}; + +export const BattleArcade = (props) => { + const { act, data } = useBackend(); + const { + ui_panel, + player_current_hp, + player_current_mp, + max_hp, + max_mp, + player_gold, + equipped_gear = [], + } = data; + return ( + + +

    + Player stats
    HP:{' '} + + {player_current_hp}/{max_hp} + {' '} + | MP:{' '} + + {player_current_mp}/{max_mp} + {' '} + | {player_gold || 0}G
    + {!equipped_gear.length && 'No gear equipped!'} + {equipped_gear.map((gear, index) => ( + <> + {gear.slot}: {gear.name}
    + + ))} +
    + {ui_panel === 'Shop' ? ( + + ) : ui_panel === 'World Map' ? ( + + ) : ui_panel === 'Battle' ? ( + + ) : ui_panel === 'Between Battle' ? ( + + ) : ( + + )} + + + ); +}; + +const ShopPanel = (props) => { + const { act, data } = useBackend(); + const { shop_items, cost_of_items, unlocked_world_modifier } = data; + return ( +
    + Welcome to the Inn! + + + Feel free to browse our wares, or take a nap. I'll be here to + ensure you'll get a good night's rest without worry of + ambushing or robbery. + + {shop_items.map((item, index) => ( + + ))} + + +
    + ); +}; + +const WorldMapPanel = (props) => { + const { act, data } = useBackend(); + const { all_worlds, latest_unlocked_world_position } = data; + return ( +
    + + + {all_worlds.map((world, index) => ( + + ))} +
    + ); +}; + +const BattlePanel = (props) => { + const { act, data } = useBackend(); + const { + attack_types, + enemy_icon_id, + enemy_name, + enemy_max_hp, + enemy_hp, + enemy_mp, + feedback_message, + } = data; + return ( +
    + {feedback_message && {feedback_message}} + + {enemy_name}'s HP: {enemy_hp}/{enemy_max_hp} + + + {enemy_name}'s MP: {enemy_mp} + + + {attack_types.map((attack, index) => ( + + ))} + act('flee')} + > + Flee (Lose half your Gold) + +
    + ); +}; + +const BetweenBattlePanel = (props) => { + const { act, data } = useBackend(); + return ( +
    + + + As night sets, you can choose to rest. This will restore your health and + mana to full before the next battle, but you may also be ambushed, + forcing you into the next fight without any additional healing. + + + + +
    + ); +}; + +const GameOverPanel = (props) => { + const { act, data } = useBackend(); + return ( +
    + + Game Over + + + + +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/Blueprints.tsx b/tgui/packages/tgui/interfaces/Blueprints.tsx new file mode 100644 index 00000000000..644412a9a77 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Blueprints.tsx @@ -0,0 +1,186 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; +import { Box, Button, Divider, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +type Data = { + area_notice: string; + area_name: string; + wire_data: WireData[]; + legend: string; + legend_viewing_list: string; + legend_off: string; + fluff_notice: string; + station_name: string; + wires_name: string; + wire_devices: WireDevices[]; + viewing: BooleanLike; +}; + +type WireDevices = { + name: string; + ref: string; +}; + +type WireData = { + color: string; + message: string; +}; + +export const Blueprints = () => { + const { act, data } = useBackend(); + const { legend, legend_viewing_list, legend_off } = data; + + return ( + + + {legend === legend_viewing_list ? ( + + ) : legend === legend_off ? ( + + ) : ( + + )} + + + ); +}; + +const WireList = () => { + const { act, data } = useBackend(); + const { wire_devices = [] } = data; + + return ( +
    + + + {wire_devices.map((wire) => ( + + ))} + +
    + ); +}; + +const WireArea = () => { + const { act, data } = useBackend(); + const { wires_name, wire_data = [] } = data; + + return ( +
    + + {wires_name} wires: + {wire_data.map((wire) => ( + + {wire.color}:{' '} + {wire.message} + + ))} +
    + ); +}; + +const MainMenu = () => { + const { act, data } = useBackend(); + const { area_notice, area_name, fluff_notice, station_name, viewing } = data; + + return ( +
    + + {fluff_notice} + + + + {area_notice} + + + + + + + + + + + + {viewing ? ( + <> + + + + + + + + ) : ( + + + + )} + +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx index 37b5db33f90..c23ca29f8d9 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.tsx +++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx @@ -18,32 +18,22 @@ import { Tooltip, } from '../components'; import { Window } from '../layouts'; +import { Beaker, BeakerReagent } from './common/BeakerDisplay'; -type Data = { - reagentAnalysisMode: BooleanLike; - analysisData: Analysis; - isPrinting: BooleanLike; - printingProgress: number; - printingTotal: number; - transferMode: BooleanLike; - hasBeaker: BooleanLike; - beakerCurrentVolume: number; - beakerMaxVolume: number; - beakerContents: Reagent[]; - bufferContents: Reagent[]; - bufferCurrentVolume: number; - bufferMaxVolume: number; - categories: Category[]; - selectedContainerRef: string; - selectedContainerVolume: number; - hasContainerSuggestion: BooleanLike; - doSuggestContainer: BooleanLike; - suggestedContainer: string; +type Container = { + icon: string; + ref: string; + name: string; + volume: number; }; -type Analysis = { +type Category = { name: string; - state: string; + containers: Container[]; +}; + +type AnalyzableReagent = BeakerReagent & { + ref: string; pH: number; color: string; description: string; @@ -53,144 +43,162 @@ type Analysis = { addictionTypes: string[]; }; -type Category = { - name: string; - containers: Container[]; -}; +type AnalyzableBeaker = { + contents: AnalyzableReagent[]; +} & Beaker; -type Reagent = { - ref: string; - name: string; - volume: number; -}; - -type Container = { - icon: string; - ref: string; - name: string; - volume: number; +type Data = { + categories: Category[]; + isPrinting: BooleanLike; + printingProgress: number; + printingTotal: number; + maxPrintable: number; + beaker: AnalyzableBeaker; + buffer: AnalyzableBeaker; + isTransfering: BooleanLike; + suggestedContainerRef: string; + selectedContainerRef: string; + selectedContainerVolume: number; }; export const ChemMaster = (props) => { - const { data } = useBackend(); - const { reagentAnalysisMode } = data; + const [analyzedReagent, setAnalyzedReagent] = useState(); + return ( - + - {reagentAnalysisMode ? : } + {analyzedReagent ? ( + setAnalyzedReagent(undefined)} + /> + ) : ( + + setAnalyzedReagent(chemical) + } + /> + )} ); }; -const ChemMasterContent = (props) => { +const ChemMasterContent = (props: { + analyze: (chemical: AnalyzableReagent) => void; +}) => { const { act, data } = useBackend(); const { isPrinting, printingProgress, printingTotal, - transferMode, - hasBeaker, - beakerCurrentVolume, - beakerMaxVolume, - beakerContents, - bufferContents, - bufferCurrentVolume, - bufferMaxVolume, + maxPrintable, + isTransfering, + beaker, + buffer, categories, selectedContainerVolume, - hasContainerSuggestion, - doSuggestContainer, - suggestedContainer, } = data; - const [itemCount, setItemCount] = useState(1); + const [itemCount, setItemCount] = useState(1); + const [showPreferredContainer, setShowPreferredContainer] = + useState(false); + const buffer_contents = buffer.contents; return (
    - - {` / ${beakerMaxVolume} units`} + + {` / ${beaker.maxVolume} units`} - ) } > - {!hasBeaker && ( + {!beaker ? ( No beaker loaded. - )} - {!!hasBeaker && beakerCurrentVolume === 0 && ( + ) : beaker.currentVolume === 0 ? ( Beaker is empty. + ) : ( + + {beaker.contents.map((chemical) => ( + + ))} +
    )} - - {beakerContents.map((chemical) => ( - - ))} -
    - - {` / ${bufferMaxVolume} units`} + + {` / ${buffer.maxVolume} units`} } > - {bufferContents.length === 0 && ( + {buffer_contents.length === 0 ? ( Buffer is empty. + ) : ( + + {buffer_contents.map((chemical) => ( + + ))} +
    )} - - {bufferContents.map((chemical) => ( - - ))} -
    {!isPrinting && (
    + + setShowPreferredContainer((currentValue) => !currentValue) + } + > + Suggest + { setItemCount(value); }} @@ -200,51 +208,36 @@ const ChemMasterContent = (props) => { Math.round( Math.min( selectedContainerVolume, - bufferCurrentVolume / itemCount, + buffer.currentVolume / itemCount, ) * 100, ) / 100 } u. each`} - ) : ( -
    @@ -256,9 +249,10 @@ const ChemMasterContent = (props) => { } > { ); }; -const ReagentEntry = (props) => { +type ReagentProps = { + chemical: AnalyzableReagent; + transferTo: string; + analyze: (chemical: AnalyzableReagent) => void; +}; + +const ReagentEntry = (props: ReagentProps) => { const { data, act } = useBackend(); - const { chemical, transferTo } = props; + const { chemical, transferTo, analyze } = props; const { isPrinting } = data; return ( @@ -295,7 +295,6 @@ const ReagentEntry = (props) => { } > @@ -438,7 +454,6 @@ const AnalysisResults = (props) => {
    {pH} - {state} {color} diff --git a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx index 6c2d3649325..3483c3ceede 100644 --- a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx +++ b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx @@ -8,7 +8,7 @@ import { Section, } from '../../components'; -type BeakerReagent = { +export type BeakerReagent = { name: string; volume: number; }; diff --git a/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt b/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt index 6b5a0e4c5e6..2111d891fc3 100644 --- a/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt +++ b/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt @@ -1,7 +1,7 @@ # removes advanced design, and moves bepis tech disks to its new type /obj/item/disk/design_disk/adv : /obj/item/disk/design_disk{@OLD} -/obj/item/disk/design_disk/adv/@SUBTPYES : /obj/item/disk/design_disk/@SUBTYPES{@OLD} +/obj/item/disk/design_disk/adv/@SUBTYPES : /obj/item/disk/design_disk/@SUBTYPES{@OLD} /obj/item/disk/tech_disk/major : /obj/item/disk/design_disk/bepis/remove_tech /obj/item/disk/tech_disk/spaceloot : /obj/item/disk/design_disk/bepis diff --git a/tools/UpdatePaths/Scripts/82565_blueprints_repath.txt b/tools/UpdatePaths/Scripts/82565_blueprints_repath.txt new file mode 100644 index 00000000000..08ff26217cf --- /dev/null +++ b/tools/UpdatePaths/Scripts/82565_blueprints_repath.txt @@ -0,0 +1 @@ +/obj/item/areaeditor/@SUBTYPES{@OLD} : /obj/item/blueprints/@SUBTYPES{@OLD} diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 8763cca749e..5a3606d71ed 100644 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -152,6 +152,16 @@ if $grep -i '(add_traits|remove_traits)\(.+,\s*src\)' $code_files; then st=1 fi; +part "ensure proper lowertext usage" +# lowertext() is a BYOND-level proc, so it can be used in any sort of code... including the TGS DMAPI which we don't manage in this repository. +# basically, we filter out any results with "tgs" in it to account for this edgecase without having to enforce this rule in that separate codebase. +# grepping the grep results is a bit of a sad solution to this but it's pretty much the only option in our existing linter framework +if $grep -i 'lowertext\(.+\)' $code_files | $grep -v 'UNLINT\(.+\)' | $grep -v '\/modules\/tgs\/'; then + echo + echo -e "${RED}ERROR: Found a lowertext() proc call. Please use the LOWER_TEXT() macro instead. If you know what you are doing, wrap your text (ensure it is a string) in UNLINT().${NC}" + st=1 +fi; + part "balloon_alert sanity" if $grep 'balloon_alert\(".*"\)' $code_files; then echo From 987d1dc5e613692b1835126de731069942a9fb94 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 26 Apr 2024 01:22:25 +0200 Subject: [PATCH 26/60] Automatic changelog for PR #27468 [ci skip] --- html/changelogs/AutoChangeLog-pr-27468.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27468.yml diff --git a/html/changelogs/AutoChangeLog-pr-27468.yml b/html/changelogs/AutoChangeLog-pr-27468.yml new file mode 100644 index 00000000000..d383a32ffc2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27468.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "The plasma flower modsuit core now actually contains a reasonable quantity of power." \ No newline at end of file From 1020a12661deca2344c1f2d82bf056de7fcb9cb4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 26 Apr 2024 00:34:16 +0000 Subject: [PATCH 27/60] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-27296.yml | 6 ----- html/changelogs/AutoChangeLog-pr-27443.yml | 5 ---- html/changelogs/AutoChangeLog-pr-27448.yml | 4 --- html/changelogs/AutoChangeLog-pr-27452.yml | 5 ---- html/changelogs/AutoChangeLog-pr-27467.yml | 4 --- html/changelogs/AutoChangeLog-pr-27468.yml | 4 --- html/changelogs/AutoChangeLog-pr-27470.yml | 5 ---- html/changelogs/AutoChangeLog-pr-27471.yml | 6 ----- html/changelogs/archive/2024-04.yml | 29 ++++++++++++++++++++++ 9 files changed, 29 insertions(+), 39 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-27296.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27443.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27448.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27452.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27467.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27468.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27470.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27471.yml diff --git a/html/changelogs/AutoChangeLog-pr-27296.yml b/html/changelogs/AutoChangeLog-pr-27296.yml deleted file mode 100644 index 18b01e75911..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27296.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion." - - bugfix: "AI controllers with no clients around for 14 tiles will move into idle mode and stop planning or acting." - - bugfix: "AI controllers will now record how much time was spent on planning or un-idling AI controllers." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27443.yml b/html/changelogs/AutoChangeLog-pr-27443.yml deleted file mode 100644 index 40e254abde1..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27443.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Jacquerel and Melbert" -delete-after: True -changes: - - rscadd: "A new achievement for moving a boulder from one place to another, at great effort." - - balance: "Hauling a boulder around makes you move slower, as it does when dragging it." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27448.yml b/html/changelogs/AutoChangeLog-pr-27448.yml deleted file mode 100644 index 830d4101527..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27448.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - bugfix: "Playing Cards memory now reads better" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27452.yml b/html/changelogs/AutoChangeLog-pr-27452.yml deleted file mode 100644 index 3d4583acf35..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27452.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - balance: "Longfall modules no logner stun you when they activate." - - balance: "Falling from a height greater than one z-level while using the longfall module will still stagger you." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27467.yml b/html/changelogs/AutoChangeLog-pr-27467.yml deleted file mode 100644 index 51086863a31..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27467.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "The rebar crossbows now properly loosen their bowstring upon firing." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27468.yml b/html/changelogs/AutoChangeLog-pr-27468.yml deleted file mode 100644 index d383a32ffc2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27468.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "The plasma flower modsuit core now actually contains a reasonable quantity of power." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27470.yml b/html/changelogs/AutoChangeLog-pr-27470.yml deleted file mode 100644 index 29fc0191a4f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27470.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Majkl-J" -delete-after: True -changes: - - qol: "slimes will stay active without needing any one to watch over" - - code_imp: "The way mobs idle has been refactored, please report any issues with non-reactive mobs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27471.yml b/html/changelogs/AutoChangeLog-pr-27471.yml deleted file mode 100644 index 34fd03bf394..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27471.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Majkl-J" -delete-after: True -changes: - - bugfix: "Medicells now correctly use power" - - bugfix: "MCRs now correctly use power" - - bugfix: "Infinite powercells now have infinite power that's useful and not 2500 Joules" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 5ae75201413..355b93dbcfd 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -440,3 +440,32 @@ - qol: 'Charlie pods now have pref and loadout spawning. :cl:' +2024-04-26: + Jacquerel and Melbert: + - rscadd: A new achievement for moving a boulder from one place to another, at great + effort. + - balance: Hauling a boulder around makes you move slower, as it does when dragging + it. + Majkl-J: + - bugfix: Medicells now correctly use power + - bugfix: MCRs now correctly use power + - bugfix: Infinite powercells now have infinite power that's useful and not 2500 + Joules + - qol: slimes will stay active without needing any one to watch over + - code_imp: The way mobs idle has been refactored, please report any issues with + non-reactive mobs + Melbert: + - bugfix: Playing Cards memory now reads better + SkyratBot: + - bugfix: Fixes AI lag by re-adding idle mode to all AI that was lost with the simple + mob to basic mob conversion. + - bugfix: AI controllers with no clients around for 14 tiles will move into idle + mode and stop planning or acting. + - bugfix: AI controllers will now record how much time was spent on planning or + un-idling AI controllers. + - bugfix: The rebar crossbows now properly loosen their bowstring upon firing. + - balance: Longfall modules no logner stun you when they activate. + - balance: Falling from a height greater than one z-level while using the longfall + module will still stagger you. + - bugfix: The plasma flower modsuit core now actually contains a reasonable quantity + of power. From 457108458866b9bfd78837928c438383ae373166 Mon Sep 17 00:00:00 2001 From: aKromatopzia <94389683+aKromatopzia@users.noreply.github.com> Date: Fri, 26 Apr 2024 22:53:26 +0800 Subject: [PATCH 28/60] one (1) alt title for chaplain (#27476) Update alt_job_titles.dm --- .../modules/alternative_job_titles/code/alt_job_titles.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm index 5917558c519..c6ae2743a91 100644 --- a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm +++ b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm @@ -139,6 +139,7 @@ "Pontifex", "Rabbi", "Reverend", + "Cleric", ) /datum/job/chemist From 60f33237afc2753cbe7c0a8bb071b8ba87a0a533 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:53:51 +0200 Subject: [PATCH 29/60] Automatic changelog for PR #27476 [ci skip] --- html/changelogs/AutoChangeLog-pr-27476.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27476.yml diff --git a/html/changelogs/AutoChangeLog-pr-27476.yml b/html/changelogs/AutoChangeLog-pr-27476.yml new file mode 100644 index 00000000000..fbd15690c3e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27476.yml @@ -0,0 +1,4 @@ +author: "aKromatopzia" +delete-after: True +changes: + - rscadd: "Chaplains can be \"Clerics\"" \ No newline at end of file From b54660d65a716b6fdd45cfd52a7850f34793c1a5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 27 Apr 2024 00:34:49 +0000 Subject: [PATCH 30/60] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-27476.yml | 4 ---- html/changelogs/archive/2024-04.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-27476.yml diff --git a/html/changelogs/AutoChangeLog-pr-27476.yml b/html/changelogs/AutoChangeLog-pr-27476.yml deleted file mode 100644 index fbd15690c3e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27476.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "aKromatopzia" -delete-after: True -changes: - - rscadd: "Chaplains can be \"Clerics\"" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 355b93dbcfd..ec9dc315d02 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -469,3 +469,6 @@ module will still stagger you. - bugfix: The plasma flower modsuit core now actually contains a reasonable quantity of power. +2024-04-27: + aKromatopzia: + - rscadd: Chaplains can be "Clerics" From e9e42205d0ad235530af8832a088880799d75510 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:38:17 +0200 Subject: [PATCH 31/60] [MIRROR] Medical borg fix (#27480) * Medical borg fix (#82853) ## About The Pull Request Closes https://github.com/tgstation/tgstation/issues/82709 ## Why It's Good For The Game bug fix ## Changelog :cl: grungussuss fix: fixed being able to install multiple of the same upgrade to medical cyborgs /:cl: * Medical borg fix --------- Co-authored-by: Sadboysuss <96586172+Sadboysuss@users.noreply.github.com> --- code/game/objects/items/robot/robot_upgrades.dm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 56804d0c550..3d1696cc303 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -398,6 +398,10 @@ /obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr) . = ..() + var/obj/item/borg/upgrade/hypospray/U = locate() in R + if(U) + to_chat(user, span_warning("This unit is already equipped with an expanded hypospray synthesiser!")) //check to see if we already have this module + return FALSE if(.) for(var/obj/item/reagent_containers/borghypo/medical/H in R.model.modules) H.upgrade_hypo() @@ -428,6 +432,7 @@ found_hypo = TRUE if(!found_hypo) + to_chat(user, span_warning("This unit is already equipped with a piercing hypospray upgrade!")) //check to see if we already have this module return FALSE /obj/item/borg/upgrade/piercing_hypospray/deactivate(mob/living/silicon/robot/R, user = usr) @@ -448,6 +453,10 @@ /obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) + var/obj/item/borg/upgrade/defib/U = locate() in R + if(U) + to_chat(user, span_warning("This unit is already equipped with a defibrillator module!")) //check to see if we already have this module + return FALSE var/obj/item/borg/upgrade/defib/backpack/BP = locate() in R //If a full defib unit was used to upgrade prior, we can just pop it out now and replace if(BP) BP.deactivate(R, user) @@ -504,6 +513,10 @@ /obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr) . = ..() if(.) + var/obj/item/borg/upgrade/processor/U = locate() in R + if(U) + to_chat(user, span_warning("This unit is already equipped with a surgical processor module!")) //check to see if we already have this module + return FALSE var/obj/item/surgical_processor/SP = new(R.model) R.model.basic_modules += SP R.model.add_module(SP, FALSE, TRUE) From 5505aa5d157f46faf2bd4447f3b5d9d3781a75e6 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:38:43 +0200 Subject: [PATCH 32/60] Automatic changelog for PR #27480 [ci skip] --- html/changelogs/AutoChangeLog-pr-27480.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27480.yml diff --git a/html/changelogs/AutoChangeLog-pr-27480.yml b/html/changelogs/AutoChangeLog-pr-27480.yml new file mode 100644 index 00000000000..35d1ab11e7f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27480.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "fixed being able to install multiple of the same upgrade to medical cyborgs" \ No newline at end of file From fe3d2aae10e1475d67885bd70fc47ca7b222314e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:40:23 +0200 Subject: [PATCH 33/60] [MIRROR] fixes bots having all access (#27337) * fixes bots having all access (#82678) ## About The Pull Request a recent change to silicon access meant all bots, simple and basic had all access from roundstart ## Why It's Good For The Game fixes bots having all access Fixes https://github.com/tgstation/tgstation/issues/82671 ## Changelog :cl: fix: basic bots no longer start with all access /:cl: * fixes bots having all access --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> --- code/modules/mob/living/basic/bots/_bots.dm | 12 ++++++++---- code/modules/mob/living/basic/bots/bot_ai.dm | 7 +++++++ code/modules/mob/living/basic/bots/medbot/medbot.dm | 3 +-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index 206ba88b317..c86160db025 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -6,6 +6,8 @@ GLOBAL_LIST_INIT(command_strings, list( "home" = "RETURN HOME", )) +#define SENTIENT_BOT_RESET_TIMER 45 SECONDS + /mob/living/basic/bot icon = 'icons/mob/silicon/aibots.dmi' layer = MOB_LAYER @@ -101,7 +103,7 @@ GLOBAL_LIST_INIT(command_strings, list( AddElement(/datum/element/relay_attackers) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) - RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) + RegisterSignal(src, COMSIG_OBJ_ALLOWED, PROC_REF(attempt_access)) ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) GLOB.bots_list += src @@ -758,9 +760,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/attempt_access(mob/bot, obj/door_attempt) SIGNAL_HANDLER - if(door_attempt.check_access(access_card)) - return ACCESS_ALLOWED - return ACCESS_DISALLOWED + return (door_attempt.check_access(access_card) ? COMPONENT_OBJ_ALLOW : COMPONENT_OBJ_DISALLOW) /mob/living/basic/bot/proc/generate_speak_list() return null @@ -783,6 +783,8 @@ GLOBAL_LIST_INIT(command_strings, list( access_card.set_access(access_to_grant) speak("Responding.", radio_channel) update_bot_mode(new_mode = BOT_SUMMON) + if(client) //if we're sentient, we reset ourselves after a short period + addtimer(CALLBACK(src, PROC_REF(bot_reset)), SENTIENT_BOT_RESET_TIMER) return TRUE /mob/living/basic/bot/proc/set_ai_caller(mob/living/caller) @@ -809,3 +811,5 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced) return + +#undef SENTIENT_BOT_RESET_TIMER diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index 36600f244e7..16ca5200308 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -34,6 +34,13 @@ if(. & AI_CONTROLLER_INCOMPATIBLE) return RegisterSignal(new_pawn, COMSIG_BOT_RESET, PROC_REF(reset_bot)) + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_BOT_SUMMON_TARGET), PROC_REF(clear_summon)) + +/datum/ai_controller/basic_controller/bot/proc/clear_summon() + SIGNAL_HANDLER + + var/mob/living/basic/bot/bot_pawn = pawn + bot_pawn.bot_reset() /datum/ai_controller/basic_controller/bot/able_to_run() var/mob/living/basic/bot/bot_pawn = pawn diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index ab6d2e2d443..e76e723e197 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -7,14 +7,13 @@ icon_state = "medibot0" base_icon_state = "medibot" density = FALSE - anchored = FALSE health = 20 maxHealth = 20 speed = 2 light_power = 0.8 light_color = "#99ccff" pass_flags = PASSMOB | PASSFLAPS - status_flags = CANSTUN + status_flags = (CANPUSH | CANSTUN) ai_controller = /datum/ai_controller/basic_controller/bot/medbot req_one_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL) From c7822065b33fad990bc6631d7e871c8559c06169 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:40:44 +0200 Subject: [PATCH 34/60] [MIRROR] grappling gun (#27354) * grappling gun (#82209) ## About The Pull Request adds a new weapon to mining, the grapple gun. this weapon is a new fun way to traverse lavaland, it lets u grapple onto things and ziplines u towards them. https://github.com/tgstation/tgstation/assets/138636438/5e935776-1482-4994-bcc7-e1ca7fcf33dc while its less practical than things like the spinning mining modsuit module, or xenobio wings, its still very fun to use. u can also use this as a weapon against mobs! (like batman) the zipline will launch u towards the mob, doing some damage to them and launching them back https://github.com/tgstation/tgstation/assets/138636438/3bf77fe5-4ed1-4153-8673-a0786ecee98f ## Why It's Good For The Game adds a new fun harmless way to travel through mining biomes ## Changelog :cl: add: miners can now purchase grapple guns /:cl: * grappling gun --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> --- code/datums/beam.dm | 20 +- code/datums/looping_sounds/item_sounds.dm | 4 + .../orders/order_items/mining/order_mining.dm | 4 + code/modules/mining/equipment/grapple_gun.dm | 183 ++++++++++++++++++ icons/effects/beam.dmi | Bin 130364 -> 130509 bytes icons/obj/mining.dmi | Bin 65300 -> 64069 bytes icons/obj/weapons/guns/projectiles.dmi | Bin 132962 -> 137257 bytes sound/weapons/zipline_fire.ogg | Bin 0 -> 65488 bytes sound/weapons/zipline_hit.ogg | Bin 0 -> 30485 bytes sound/weapons/zipline_mid.ogg | Bin 0 -> 63198 bytes tgstation.dme | 1 + 11 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 code/modules/mining/equipment/grapple_gun.dm create mode 100644 sound/weapons/zipline_fire.ogg create mode 100644 sound/weapons/zipline_hit.ogg create mode 100644 sound/weapons/zipline_mid.ogg diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 52b649990d7..fe34b0c7edd 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -40,6 +40,8 @@ var/override_target_pixel_x = null /// If set will be used instead of targets's pixel_y in offset calculations var/override_target_pixel_y = null + ///the layer of our beam + var/beam_layer /datum/beam/New( origin, @@ -55,6 +57,7 @@ override_origin_pixel_y = null, override_target_pixel_x = null, override_target_pixel_y = null, + beam_layer = ABOVE_ALL_MOB_LAYER ) src.origin = origin src.target = target @@ -68,6 +71,7 @@ src.override_origin_pixel_y = override_origin_pixel_y src.override_target_pixel_x = override_target_pixel_x src.override_target_pixel_y = override_target_pixel_y + src.beam_layer = beam_layer if(time < INFINITY) QDEL_IN(src, time) @@ -81,6 +85,7 @@ visuals.color = beam_color visuals.vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_LAYER visuals.emissive = emissive + visuals.layer = beam_layer visuals.update_appearance() Draw() RegisterSignal(origin, COMSIG_MOVABLE_MOVED, PROC_REF(redrawing)) @@ -278,7 +283,18 @@ * maxdistance: how far the beam will go before stopping itself. Used mainly for two things: preventing lag if the beam may go in that direction and setting a range to abilities that use beams. * beam_type: The type of your custom beam. This is for adding other wacky stuff for your beam only. Most likely, you won't (and shouldn't) change it. */ -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=INFINITY,maxdistance=INFINITY,beam_type=/obj/effect/ebeam, beam_color = null, emissive = TRUE, override_origin_pixel_x = null, override_origin_pixel_y = null, override_target_pixel_x = null, override_target_pixel_y = null) - var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type, beam_color, emissive, override_origin_pixel_x, override_origin_pixel_y, override_target_pixel_x, override_target_pixel_y ) +/atom/proc/Beam(atom/BeamTarget, + icon_state="b_beam", + icon='icons/effects/beam.dmi', + time=INFINITY,maxdistance=INFINITY, + beam_type=/obj/effect/ebeam, + beam_color = null, emissive = TRUE, + override_origin_pixel_x = null, + override_origin_pixel_y = null, + override_target_pixel_x = null, + override_target_pixel_y = null, + layer = ABOVE_ALL_MOB_LAYER +) + var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type, beam_color, emissive, override_origin_pixel_x, override_origin_pixel_y, override_target_pixel_x, override_target_pixel_y, layer) INVOKE_ASYNC(newbeam, TYPE_PROC_REF(/datum/beam/, Start)) return newbeam diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index f8ed5d89b20..00fd3063e43 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -44,3 +44,7 @@ /datum/looping_sound/beesmoke mid_sounds = list('sound/weapons/beesmoke.ogg' = 1) volume = 5 + +/datum/looping_sound/zipline + mid_sounds = list('sound/weapons/zipline_mid.ogg' = 1) + volume = 5 diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm index 686f8312671..0882c9ce99a 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm @@ -111,3 +111,7 @@ item_path = /obj/item/boulder_beacon desc = "A Bouldertech brand all-in-one boulder processing beacon. Each use will teleport in a component of a full boulder processing assembly line. Good for when you need to process additional boulders." cost_per_order = 875 + +/datum/orderable_item/mining/grapple_gun + item_path = /obj/item/grapple_gun + cost_per_order = 3000 diff --git a/code/modules/mining/equipment/grapple_gun.dm b/code/modules/mining/equipment/grapple_gun.dm new file mode 100644 index 00000000000..c7c91ede73e --- /dev/null +++ b/code/modules/mining/equipment/grapple_gun.dm @@ -0,0 +1,183 @@ +#define DAMAGE_ON_IMPACT 20 + +/obj/item/grapple_gun + name = "grapple gun" + desc = "A handy tool for traversing the land-scape of lava-land!" + icon = 'icons/obj/mining.dmi' + icon_state = "grapple_gun" + lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + inhand_icon_state = "gun" + item_flags = NOBLUDGEON + ///overlay when the hook is retracted + var/static/mutable_appearance/hook_overlay = new(icon = 'icons/obj/mining.dmi', icon_state = "grapple_gun_hooked") + ///is the hook retracted + var/hooked = TRUE + ///addtimer id for launching the user + var/grapple_timer_id + ///traits we apply to the user when being launched + var/static/list/traits_on_zipline = list( + TRAIT_IMMOBILIZED, + TRAIT_MOVE_FLOATING, + TRAIT_FORCED_STANDING, + ) + ///the beam we draw + var/datum/beam/zipline + ///our user currently ziplining + var/datum/weakref/zipliner + ///ziplining sound + var/datum/looping_sound/zipline/zipline_sound + ///our initial matrix + var/matrix/initial_matrix + +/obj/item/grapple_gun/Initialize(mapload) + . = ..() + zipline_sound = new(src) + update_appearance() + +/obj/item/grapple_gun/afterattack(atom/target, mob/living/user, proximity) + . = ..() + + if(isgroundlessturf(target)) + return + + if(!lavaland_equipment_pressure_check(get_turf(user))) + user.balloon_alert(user, "gun mechanism wont work here!") + return + + if(target == user || !hooked) + return + + if(get_dist(user, target) > 9) + user.balloon_alert(user, "too far away!") + return + + var/turf/attacked_atom = get_turf(target) + if(isnull(attacked_atom)) + return + + var/list/turf_list = (get_line(user, attacked_atom) - get_turf(src)) + for(var/turf/singular_turf as anything in turf_list) + if(ischasm(singular_turf)) + continue + if(!singular_turf.is_blocked_turf()) + continue + attacked_atom = singular_turf + break + + if(user.CanReach(attacked_atom)) + return + + . |= AFTERATTACK_PROCESSED_ITEM + + var/atom/bullet = fire_projectile(/obj/projectile/grapple_hook, attacked_atom, 'sound/weapons/zipline_fire.ogg') + zipline = user.Beam(bullet, icon_state = "zipline_hook", maxdistance = 9, layer = BELOW_MOB_LAYER) + hooked = FALSE + RegisterSignal(bullet, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_grapple_hit)) + RegisterSignal(bullet, COMSIG_PREQDELETED, PROC_REF(on_grapple_fail)) + zipliner = WEAKREF(user) + update_appearance() + +/obj/item/grapple_gun/proc/on_grapple_hit(datum/source, atom/movable/firer, atom/target, Angle) + SIGNAL_HANDLER + + UnregisterSignal(source, list(COMSIG_PROJECTILE_ON_HIT, COMSIG_PREQDELETED)) + QDEL_NULL(zipline) + var/mob/living/user = zipliner?.resolve() + if(isnull(user) || isnull(target)) + cancel_hook() + return + + zipline = user.Beam(target, icon_state = "zipline_hook", maxdistance = 9, layer = BELOW_MOB_LAYER) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(determine_distance)) + RegisterSignal(user, COMSIG_MOVABLE_PRE_THROW, PROC_REF(apply_throw_traits)) + grapple_timer_id = addtimer(CALLBACK(src, PROC_REF(launch_user), target), 1.5 SECONDS, TIMER_STOPPABLE) + +/obj/item/grapple_gun/proc/on_grapple_fail(datum/source) + SIGNAL_HANDLER + cancel_hook() + +/obj/item/grapple_gun/proc/determine_distance(atom/movable/source) + SIGNAL_HANDLER + + if(isnull(zipline)) + return + var/atom/target = zipline.target + if(isnull(target)) + return + if(get_dist(source, target) > zipline.max_distance) + cancel_hook() + +/obj/item/grapple_gun/proc/apply_throw_traits(mob/living/source, list/arguements) + SIGNAL_HANDLER + var/atom/target_atom = arguements[1] + if(isnull(target_atom)) + return + var/dir_to_turn = get_angle(source, target_atom) + if(dir_to_turn > 175 && dir_to_turn < 190) + dir_to_turn = 0 + source.add_traits(traits_on_zipline, LEAPING_TRAIT) + initial_matrix = source.transform + animate(source, transform = matrix().Turn(dir_to_turn), time = 0.1 SECONDS) + +/obj/item/grapple_gun/proc/launch_user(atom/target_atom) + var/mob/living/my_user = zipliner?.resolve() + if(isnull(my_user) || isnull(target_atom) || my_user.buckled) + cancel_hook() + return + zipline_sound.start() + new /obj/effect/temp_visual/mook_dust(drop_location()) + RegisterSignal(my_user, COMSIG_MOVABLE_IMPACT, PROC_REF(strike_target)) + my_user.throw_at(target = target_atom, range = 9, speed = 1, spin = FALSE, gentle = TRUE, callback = CALLBACK(src, PROC_REF(post_land))) + +/obj/item/grapple_gun/proc/strike_target(mob/living/source, mob/living/victim, datum/thrownthing/throwingdatum) + SIGNAL_HANDLER + + if(!istype(victim)) + return + + victim.apply_damage(DAMAGE_ON_IMPACT) + playsound(victim, 'sound/effects/hit_kick.ogg', 50) + var/turf/target_turf = get_ranged_target_turf(victim, source.dir, 3) + if(isnull(target_turf)) + return + victim.throw_at(target = target_turf, speed = 1, spin = TRUE, range = 3) + + +/obj/item/grapple_gun/proc/post_land() + var/mob/living/my_user = zipliner?.resolve() + if(!isnull(my_user)) + my_user.transform = initial_matrix + my_user.remove_traits(traits_on_zipline, LEAPING_TRAIT) + new /obj/effect/temp_visual/mook_dust(drop_location()) + cancel_hook() + +/obj/item/grapple_gun/proc/cancel_hook() + var/atom/my_zipliner = zipliner?.resolve() + if(!isnull(my_zipliner)) + UnregisterSignal(my_zipliner, list(COMSIG_MOVABLE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_PRE_THROW)) + QDEL_NULL(zipline) + zipliner = null + if(grapple_timer_id) + deltimer(grapple_timer_id) + grapple_timer_id = null + hooked = TRUE + zipline_sound.stop() + initial_matrix = null + update_appearance() + +/obj/item/grapple_gun/update_overlays() + . = ..() + if(hooked) + . += hook_overlay + +/obj/projectile/grapple_hook + name = "grapple hook" + icon_state = "grapple_hook" + damage = 0 + range = 9 + speed = 0.1 + can_hit_turfs = TRUE + hitsound = 'sound/weapons/zipline_hit.ogg' + +#undef DAMAGE_ON_IMPACT diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 12e3ce9f7d59462203cda9a18059375e6cffa277..fd7bee8ed607523046f9cbd1e1c30e0689ef0958 100644 GIT binary patch delta 10954 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 diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index d81a6d966c397022ec03242207d440f931aa5220..1f6393a8c51bab7f00ee7e40cdb1905020435b96 100644 GIT binary patch literal 64069 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 K4+|eyzWHB7_gz8& literal 65300 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 E1=m(DZU6uP diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 11b9af13a2c35560483d56a8de839fe213f19bc5..b2579d58bf2dfd72ab178c7cf6bdc745d2dc83ac 100644 GIT binary patch literal 137257 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%0Ap31&;S4c literal 132962 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 O%J|Y&DcaG|@&5sO9)P3( literal 0 HcmV?d00001 diff --git a/sound/weapons/zipline_hit.ogg b/sound/weapons/zipline_hit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cf17cbc84d15b8ef461a82075e652ae73a496fae GIT binary patch literal 30485 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�@`C6_L-TAZEHm1E(2*gg{H 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 literal 0 HcmV?d00001 diff --git a/sound/weapons/zipline_mid.ogg b/sound/weapons/zipline_mid.ogg new file mode 100644 index 0000000000000000000000000000000000000000..22148f1c594be6774e6a79be6d1654cab24868be GIT binary patch literal 63198 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 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 66ff53e1746..8c515f5289c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4609,6 +4609,7 @@ #include "code\modules\mining\boulder_processing\brm.dm" #include "code\modules\mining\boulder_processing\refinery.dm" #include "code\modules\mining\equipment\explorer_gear.dm" +#include "code\modules\mining\equipment\grapple_gun.dm" #include "code\modules\mining\equipment\kheiral_cuffs.dm" #include "code\modules\mining\equipment\kinetic_crusher.dm" #include "code\modules\mining\equipment\lazarus_injector.dm" From a7478fe1d78a745a73158c57038c5d2aaac59c79 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:40:48 +0200 Subject: [PATCH 35/60] Automatic changelog for PR #27337 [ci skip] --- html/changelogs/AutoChangeLog-pr-27337.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27337.yml diff --git a/html/changelogs/AutoChangeLog-pr-27337.yml b/html/changelogs/AutoChangeLog-pr-27337.yml new file mode 100644 index 00000000000..4d6534b27d7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27337.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "basic bots no longer start with all access" \ No newline at end of file From 7de8048537457099eb0364b086d9446e219c205a Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:41:09 +0200 Subject: [PATCH 36/60] [MIRROR] Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less (#27449) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less (#82827) ## About The Pull Request - Tuberculosis makes you cough more, and is no longer restricted to stage two - Nicotine Addiction Withdrawal makes you cough less often - Medicine Addiction Withdrawal makes you cough less often but now carries across all stages ## Why It's Good For The Game Nicotine Addiction currently makes you cough 10x more often than Tuberculosis, the lung disease. Kinda nonsensical right? This makes smoking a single cigar (which instantly makes you addicted because lol) pretty insufferable to be around, and while this makes sense OOC it's a roleplaying game and being actively avoided in a roleplaying game is not fun So tweaking the values should make it a bit more sensible Initial values looked like `TB: 1% chance per second` vs `Nicotine: 10% chance per second` 🥴 ## Changelog :cl: Melbert qol: Tuberculosis makes you cough more qol: Nicotine Addiciton makes you cough less qol: Medicine Addiction maybe makes you cough more, maybe makes you cough less /:cl: * Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/datums/diseases/tuberculosis.dm | 7 ++++--- .../reagents/withdrawal/generic_addictions.dm | 16 +++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm index de87cab6f3f..2a77195e311 100644 --- a/code/datums/diseases/tuberculosis.dm +++ b/code/datums/diseases/tuberculosis.dm @@ -18,11 +18,12 @@ if(!.) return + if(SPT_PROB(stage * 2, seconds_per_tick)) + affected_mob.emote("cough") + to_chat(affected_mob, span_danger("Your chest hurts.")) + switch(stage) if(2) - if(SPT_PROB(1, seconds_per_tick)) - affected_mob.emote("cough") - to_chat(affected_mob, span_danger("Your chest hurts.")) if(SPT_PROB(1, seconds_per_tick)) to_chat(affected_mob, span_danger("Your stomach violently rumbles!")) if(SPT_PROB(2.5, seconds_per_tick)) diff --git a/code/modules/reagents/withdrawal/generic_addictions.dm b/code/modules/reagents/withdrawal/generic_addictions.dm index 4eabfa1095a..c7977435f4d 100644 --- a/code/modules/reagents/withdrawal/generic_addictions.dm +++ b/code/modules/reagents/withdrawal/generic_addictions.dm @@ -183,7 +183,7 @@ /datum/addiction/medicine/withdrawal_stage_1_process(mob/living/carbon/affected_carbon, seconds_per_tick) . = ..() - if(SPT_PROB(10, seconds_per_tick)) + if(SPT_PROB(1, seconds_per_tick)) affected_carbon.emote("cough") /datum/addiction/medicine/withdrawal_enters_stage_2(mob/living/carbon/affected_carbon) @@ -216,6 +216,9 @@ /datum/addiction/medicine/withdrawal_stage_2_process(mob/living/carbon/affected_carbon, seconds_per_tick) . = ..() + if(SPT_PROB(2, seconds_per_tick)) + affected_carbon.emote("cough") + var/datum/hallucination/fake_health_doll/hallucination = health_doll_ref?.resolve() if(QDELETED(hallucination)) health_doll_ref = null @@ -235,15 +238,14 @@ /datum/addiction/medicine/withdrawal_stage_3_process(mob/living/carbon/affected_carbon, seconds_per_tick) . = ..() + if(SPT_PROB(5, seconds_per_tick)) + affected_carbon.emote("cough") + var/datum/hallucination/fake_health_doll/hallucination = health_doll_ref?.resolve() if(!QDELETED(hallucination) && SPT_PROB(5, seconds_per_tick)) hallucination.increment_fake_damage() return - if(SPT_PROB(15, seconds_per_tick)) - affected_carbon.emote("cough") - return - if(SPT_PROB(65, seconds_per_tick)) return @@ -284,12 +286,12 @@ /datum/addiction/nicotine/withdrawal_stage_2_process(mob/living/carbon/affected_carbon, seconds_per_tick) . = ..() affected_carbon.set_jitter_if_lower(20 SECONDS * seconds_per_tick) - if(SPT_PROB(10, seconds_per_tick)) + if(SPT_PROB(2, seconds_per_tick)) affected_carbon.emote("cough") /datum/addiction/nicotine/withdrawal_stage_3_process(mob/living/carbon/affected_carbon, seconds_per_tick) . = ..() affected_carbon.set_jitter_if_lower(30 SECONDS * seconds_per_tick) - if(SPT_PROB(15, seconds_per_tick)) + if(SPT_PROB(5, seconds_per_tick)) affected_carbon.emote("cough") */ From 42672c3169a0a5f2f40d94e6c7f345d00886c5f6 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:41:24 +0200 Subject: [PATCH 37/60] Automatic changelog for PR #27354 [ci skip] --- html/changelogs/AutoChangeLog-pr-27354.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27354.yml diff --git a/html/changelogs/AutoChangeLog-pr-27354.yml b/html/changelogs/AutoChangeLog-pr-27354.yml new file mode 100644 index 00000000000..c2f24e996e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27354.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - rscadd: "miners can now purchase grapple guns" \ No newline at end of file From 9603a2a8893c65e00dc86191ed750a872f705e4c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:41:33 +0200 Subject: [PATCH 38/60] [MIRROR] Fixes some rando failures off the ignore list of projectiles (#27456) * Fixes some rando failures off the ignore list of projectiles (#82855) * Fixes some rando failures off the ignore list of projectiles --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/datums/components/mirv.dm | 2 +- code/datums/components/pellet_cloud.dm | 2 +- code/game/objects/items/hand_items.dm | 4 ++-- code/modules/clothing/shoes/gunboots.dm | 2 +- code/modules/fishing/fishing_rod.dm | 2 +- code/modules/projectiles/projectile.dm | 11 +++++------ 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/code/datums/components/mirv.dm b/code/datums/components/mirv.dm index 0f41df1d288..52b4053babb 100644 --- a/code/datums/components/mirv.dm +++ b/code/datums/components/mirv.dm @@ -39,5 +39,5 @@ P.range = override_projectile_range P.preparePixelProjectile(shootat_turf, target) P.firer = firer // don't hit ourself that would be really annoying - P.impacted = list(target = TRUE) // don't hit the target we hit already with the flak + P.impacted = list(WEAKREF(target) = TRUE) // don't hit the target we hit already with the flak P.fire() diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 52b0cc9c954..2b59305be14 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -281,7 +281,7 @@ P.original = target P.fired_from = parent P.firer = parent // don't hit ourself that would be really annoying - P.impacted = list(parent = TRUE) // don't hit the target we hit already with the flak + P.impacted = list(WEAKREF(parent) = TRUE) // don't hit the target we hit already with the flak P.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message P.preparePixelProjectile(target, parent) RegisterSignal(P, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(pellet_hit)) diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 57c240e4273..10a90b3dbdc 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -491,7 +491,7 @@ blown_kiss.original = target blown_kiss.fired_from = user blown_kiss.firer = user // don't hit ourself that would be really annoying - blown_kiss.impacted = list(user = TRUE) // just to make sure we don't hit the wearer + blown_kiss.impacted = list(WEAKREF(user) = TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(target, user) blown_kiss.fire() qdel(src) @@ -517,7 +517,7 @@ blown_kiss.original = taker blown_kiss.fired_from = offerer blown_kiss.firer = offerer // don't hit ourself that would be really annoying - blown_kiss.impacted = list(offerer = TRUE) // just to make sure we don't hit the wearer + blown_kiss.impacted = list(WEAKREF(offerer) = TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(taker, offerer) blown_kiss.suppressed = SUPPRESSED_VERY // this also means it's a direct offer blown_kiss.fire() diff --git a/code/modules/clothing/shoes/gunboots.dm b/code/modules/clothing/shoes/gunboots.dm index d8335b5fcb0..de74703d449 100644 --- a/code/modules/clothing/shoes/gunboots.dm +++ b/code/modules/clothing/shoes/gunboots.dm @@ -59,7 +59,7 @@ shot.original = target shot.fired_from = src shot.firer = wearer // don't hit ourself that would be really annoying - shot.impacted = list(wearer = TRUE) + shot.impacted = list(WEAKREF(wearer) = TRUE) shot.def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) // they're fired from boots after all shot.preparePixelProjectile(target, wearer) if(!shot.suppressed) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 0578ffb0789..a0fa77dc514 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -234,7 +234,7 @@ cast_projectile.original = target cast_projectile.fired_from = src cast_projectile.firer = user - cast_projectile.impacted = list(user = TRUE) + cast_projectile.impacted = list(WEAKREF(user) = TRUE) cast_projectile.preparePixelProjectile(target, user) cast_projectile.fire() COOLDOWN_START(src, casting_cd, 1 SECONDS) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 27e93653a77..7850dd59f46 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -475,7 +475,7 @@ if(!trajectory) qdel(src) return FALSE - if(impacted[A]) // NEVER doublehit + if(impacted[A.weak_reference]) // NEVER doublehit return FALSE var/datum/point/point_cache = trajectory.copy_to() var/turf/T = get_turf(A) @@ -528,7 +528,7 @@ if(QDELETED(src) || !T || !target) return // 2. - impacted[target] = TRUE //hash lookup > in for performance in hit-checking + impacted[WEAKREF(target)] = TRUE //hash lookup > in for performance in hit-checking // 3. var/mode = prehit_pierce(target) if(mode == PROJECTILE_DELETE_WITHOUT_HITTING) @@ -605,7 +605,7 @@ //Returns true if the target atom is on our current turf and above the right layer //If direct target is true it's the originally clicked target. /obj/projectile/proc/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE, cross_failed = FALSE) - if(QDELETED(target) || impacted[target]) + if(QDELETED(target) || impacted[target.weak_reference]) return FALSE if(!ignore_loc && (loc != target.loc) && !(can_hit_turfs && direct_target && loc == target)) return FALSE @@ -693,7 +693,7 @@ * Used to not even attempt to Bump() or fail to Cross() anything we already hit. */ /obj/projectile/CanPassThrough(atom/blocker, movement_dir, blocker_opinion) - return impacted[blocker] ? TRUE : ..() + return ..() || impacted[blocker.weak_reference] /** * Projectile moved: @@ -1206,8 +1206,7 @@ bullet.starting = startloc var/list/ignore = list() for (var/atom/thing as anything in ignore_targets) - ignore[thing] = TRUE - bullet.impacted += ignore + bullet.impacted[WEAKREF(thing)] = TRUE bullet.firer = firer || src bullet.fired_from = src bullet.yo = target.y - startloc.y From a3411c60fa83585822f14d360b5c5c1da7c37384 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:42:39 +0200 Subject: [PATCH 39/60] [MIRROR] brimbeams are a hidden do after (#27460) * brimbeams are a hidden do after (#82856) * brimbeams are a hidden do after --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> --- code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm index 21169ffd368..61f31f7044d 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm @@ -44,7 +44,7 @@ StartCooldown() return TRUE - do_after(owner, delay = beam_duration, target = owner) + do_after(owner, delay = beam_duration, target = owner, hidden = TRUE) extinguish_laser() StartCooldown() return TRUE From 67f53d57c58ead15048237cf232c4da1653985ae Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:43:58 +0200 Subject: [PATCH 40/60] [MIRROR] Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor (#27367) * Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor (#82703) ## About The Pull Request - If you sustain temporary deafness from a flashbang or explosion, and are not naturally deaf (quirk, genetics, earmuffs) your text is forced into shout mode. ![image](https://github.com/tgstation/tgstation/assets/51863163/9f6796c0-293c-4a82-a9d0-65a769457b4a) - Minor ear refactor. - Ear deafness no longer updates in life, now when taking ear damage - Damage multiplier no longer applies to both healing and damage, making this a felinid nerf I guess? ## Why It's Good For The Game I always found it a bit funny (funny bad) when someone's deaf from a bomb, and they calmly walk to medbay, and say `I'm deaf. Inacusiate please?` Now they will say `I'M DEAF! INACUSIATE PLEASE?!` which is funny (funny good) It also gives a visual (audible?) tell that someone's actually deaf. Which may be handy in diagnosing people in medbay at a glance. ## Changelog :cl: Melbert add: Being deafnened from a loud sound (flashbang, explosions) will now force people not naturally deaf to shout add: Ear damage multiplier now only applies to taking damage, not healing damage, meaning Felinids (who take 2x the ear damage) will no longer heal ear damage 2x faster. refactor: Ears have been refactored slightly, ear deafness should now update more snappily /:cl: --------- Co-authored-by: san7890 * Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: san7890 --- .../surgery/organs/internal/ears/_ears.dm | 105 +++++++++++++++--- 1 file changed, 87 insertions(+), 18 deletions(-) diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 8e9c7ae70a7..6bdf093dd47 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -15,17 +15,16 @@ now_fixed = "Noise slowly begins filling your ears once more." low_threshold_cleared = "The ringing in your ears has died down." - // `deaf` measures "ticks" of deafness. While > 0, the person is unable - // to hear anything. + /// `deaf` measures "ticks" of deafness. While > 0, the person is unable to hear anything. var/deaf = 0 // `damage` in this case measures long term damage to the ears, if too high, // the person will not have either `deaf` or `ear_damage` decrease // without external aid (earmuffs, drugs) - //Resistance against loud noises + /// Resistance against loud noises var/bang_protect = 0 - // Multiplier for both long term and short term ear damage + /// Multiplier for both long term and short term ear damage var/damage_multiplier = 1 /obj/item/organ/internal/ears/on_life(seconds_per_tick, times_fired) @@ -34,28 +33,98 @@ to_chat(owner, span_warning("The ringing in your ears grows louder, blocking out any external noises for a moment.")) . = ..() - // if we have non-damage related deafness like mutations, quirks or clothing (earmuffs), don't bother processing here. Ear healing from earmuffs or chems happen elsewhere + // if we have non-damage related deafness like mutations, quirks or clothing (earmuffs), don't bother processing here. + // Ear healing from earmuffs or chems happen elsewhere if(HAS_TRAIT_NOT_FROM(owner, TRAIT_DEAF, EAR_DAMAGE)) return + // no healing if failing + if(organ_flags & ORGAN_FAILING) + return + adjustEarDamage(0, -0.5 * seconds_per_tick) + if((damage > low_threshold) && SPT_PROB(damage / 60, seconds_per_tick)) + adjustEarDamage(0, 4) + SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg')) - if((organ_flags & ORGAN_FAILING)) - deaf = max(deaf, 1) // if we're failing we always have at least 1 deaf stack (and thus deafness) - else // only clear deaf stacks if we're not failing - deaf = max(deaf - (0.5 * seconds_per_tick), 0) - if((damage > low_threshold) && SPT_PROB(damage / 60, seconds_per_tick)) - adjustEarDamage(0, 4) - SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg')) +/obj/item/organ/internal/ears/apply_organ_damage(damage_amount, maximum, required_organ_flag) + . = ..() + update_temp_deafness() - if(deaf) - ADD_TRAIT(owner, TRAIT_DEAF, EAR_DAMAGE) +/obj/item/organ/internal/ears/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + update_temp_deafness() + +/obj/item/organ/internal/ears/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_MOB_SAY) + REMOVE_TRAIT(organ_owner, TRAIT_DEAF, EAR_DAMAGE) + +/** + * Snowflake proc to handle temporary deafness + * + * * ddmg: Handles normal organ damage + * * ddeaf: Handles temporary deafness, 1 ddeaf = 2 seconds of deafness, by default (with no multiplier) + */ +/obj/item/organ/internal/ears/proc/adjustEarDamage(ddmg = 0, ddeaf = 0) + if(owner.status_flags & GODMODE) + update_temp_deafness() + return + + var/mod_damage = ddmg > 0 ? (ddmg * damage_multiplier) : ddmg + if(mod_damage) + apply_organ_damage(mod_damage) + var/mod_deaf = ddeaf > 0 ? (ddeaf * damage_multiplier) : ddeaf + if(mod_deaf) + deaf = max(deaf + mod_deaf, 0) + update_temp_deafness() + +/// Updates status of deafness +/obj/item/organ/internal/ears/proc/update_temp_deafness() + // if we're failing we always have at least some deaf stacks (and thus deafness) + if(organ_flags & ORGAN_FAILING) + deaf = max(deaf, 1 * damage_multiplier) + + if(isnull(owner)) + return + + if(owner.status_flags & GODMODE) + deaf = 0 + + if(deaf > 0) + if(!HAS_TRAIT_FROM(owner, TRAIT_DEAF, EAR_DAMAGE)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(adjust_speech)) + ADD_TRAIT(owner, TRAIT_DEAF, EAR_DAMAGE) else REMOVE_TRAIT(owner, TRAIT_DEAF, EAR_DAMAGE) + UnregisterSignal(owner, COMSIG_MOB_SAY) -/obj/item/organ/internal/ears/proc/adjustEarDamage(ddmg, ddeaf) - if(owner.status_flags & GODMODE) +/// Being deafened by loud noises makes you shout +/obj/item/organ/internal/ears/proc/adjust_speech(datum/source, list/speech_args) + SIGNAL_HANDLER + + if(HAS_TRAIT_NOT_FROM(source, TRAIT_DEAF, EAR_DAMAGE)) return - set_organ_damage(clamp(damage + (ddmg * damage_multiplier), 0, maxHealth)) - deaf = max(deaf + (ddeaf * damage_multiplier), 0) + if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) + return + + var/message = speech_args[SPEECH_MESSAGE] + // Replace only end-of-sentence punctuation with exclamation marks (hence the empty space) + // We don't wanna mess with things like ellipses + message = replacetext(message, ". ", "! ") + message = replacetext(message, "? ", "?! ") + // Special case for the last character + switch(copytext_char(message, -1)) + if(".") + if(copytext_char(message, -2) != "..") // Once again ignoring ellipses, let people trail off + message = copytext_char(message, 1, -1) + "!" + if("?") + message = copytext_char(message, 1, -1) + "?!" + if("!") + pass() + else + message += "!" + + speech_args[SPEECH_MESSAGE] = message + return COMPONENT_UPPERCASE_SPEECH /obj/item/organ/internal/ears/invincible damage_multiplier = 0 From edafca7ae088795db39344ab1fb3a1aa556260fa Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:45:05 +0200 Subject: [PATCH 41/60] [MIRROR] Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes (#27378) * Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes (#82719) ## About The Pull Request Makes this upgrades available for ghostroles and such ![image](https://github.com/tgstation/tgstation/assets/8430839/01b4a947-1108-4c2f-86d6-df134e20c14c) ## Why It's Good For The Game Having ability to use RCD faster iskinda good ## Changelog :cl: fix: cooling and anti-disruption RCD upgrades can now be printed in ancient protolathes /:cl: * Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes --------- Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> --- code/modules/research/designs/tool_designs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm index ee1e09b1143..392921795b9 100644 --- a/code/modules/research/designs/tool_designs.dm +++ b/code/modules/research/designs/tool_designs.dm @@ -137,7 +137,7 @@ name = "RCD anti disruption designs upgrade" desc = "Prevents interruption of RCD construction and deconstruction." id = "rcd_upgrade_anti_interrupt" - build_type = PROTOLATHE + build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.25, @@ -154,7 +154,7 @@ name = "RCD cooling upgrade" desc = "Allows the RCD to more quickly perform multiple actions at once." id = "rcd_upgrade_cooling" - build_type = PROTOLATHE + build_type = PROTOLATHE | AWAY_LATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT, From 0733a4e1bbe912b6f8079fd21ac3a52c18c8f996 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:45:34 +0200 Subject: [PATCH 42/60] [MIRROR] Water tiles now put out burning atoms (#27380) * Water tiles now put out burning atoms (#82735) ## About The Pull Request This adds a new "watery tile" element, currently used for (you guessed it) water turfs. This makes a tile extinguish any atom that passes through it. It also makes mobs wet! ![fire test](https://github.com/tgstation/tgstation/assets/28870487/4a19c921-37f3-428d-bb94-0baef7589e1b) This required a minor amount of under-the-hood work regarding firestacks. Essentially, they now get put out when the atom-level `extinguish()` proc is called, as they are now receptive to the `COMSIG_ATOM_EXTINGUISH` signal. ## Why It's Good For The Game It makes sense to me! If I was playing another simulation game and dived into a pool of water on fire, only to remain on fire, I would be very confused and disturbed. Also, it's good for immersion. Get it? Like, because water tiles also have the immerse element? ## Changelog :cl: Rhials qol: Water tiles now extinguish fires on items and people. /:cl: * Water tiles now put out burning atoms --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> --- code/datums/elements/watery_tile.dm | 21 +++++++++++++++++++ .../status_effects/debuffs/fire_stacks.dm | 1 + code/game/turfs/open/water.dm | 1 + tgstation.dme | 1 + 4 files changed, 24 insertions(+) create mode 100644 code/datums/elements/watery_tile.dm diff --git a/code/datums/elements/watery_tile.dm b/code/datums/elements/watery_tile.dm new file mode 100644 index 00000000000..797eda39135 --- /dev/null +++ b/code/datums/elements/watery_tile.dm @@ -0,0 +1,21 @@ +/datum/element/watery_tile + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY + +/datum/element/watery_tile/Attach(turf/target) + . = ..() + if(!isturf(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ATOM_ENTERED, PROC_REF(extinguish_atom)) + +/datum/element/watery_tile/Detach(turf/source) + UnregisterSignal(source, COMSIG_ATOM_ENTERED) + return ..() + +/datum/element/watery_tile/proc/extinguish_atom(atom/source, atom/movable/entered) + SIGNAL_HANDLER + + entered.extinguish() + if(isliving(entered)) + var/mob/living/our_mob = entered + our_mob.adjust_wet_stacks(3) diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 5bf8269bbbf..62f8c9ca24e 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -261,6 +261,7 @@ /datum/status_effect/fire_handler/fire_stacks/on_apply() . = ..() RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(add_fire_overlay)) + RegisterSignal(owner, COMSIG_ATOM_EXTINGUISH, PROC_REF(extinguish)) owner.update_appearance(UPDATE_OVERLAYS) /datum/status_effect/fire_handler/fire_stacks/proc/add_fire_overlay(mob/living/source, list/overlays) diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index debf5c0f6b1..55ca23beead 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -23,6 +23,7 @@ /turf/open/water/Initialize(mapload) . = ..() AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color) + AddElement(/datum/element/watery_tile) /turf/open/water/jungle diff --git a/tgstation.dme b/tgstation.dme index 8c515f5289c..2d6844b2f66 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1601,6 +1601,7 @@ #include "code\datums\elements\wall_smasher.dm" #include "code\datums\elements\wall_tearer.dm" #include "code\datums\elements\wall_walker.dm" +#include "code\datums\elements\watery_tile.dm" #include "code\datums\elements\weapon_description.dm" #include "code\datums\elements\weather_listener.dm" #include "code\datums\elements\web_walker.dm" From 8e53457041f173adf61ea3e2478eddc6e2b68e79 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:47:58 +0200 Subject: [PATCH 43/60] [MIRROR] immortal heart attack fix (#27382) * immortal heart attack fix (#82738) ## About The Pull Request cybernetic hearts no longer permanently break when you die, as they would try to restart after you get revived but then the proc to stop the heart attack would get early returned because the heart is immune to heart attacks ## Why It's Good For The Game having to explode to revive because of surplus heart seems like a bug ## Changelog :cl: fix: being revived with a cyber-heart now properly restarts the cyber heart /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * immortal heart attack fix --------- Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> --- code/modules/mob/living/carbon/life.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index ebf86019242..6f6e2fa63ac 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -823,7 +823,7 @@ * Returns TRUE if heart status was changed (heart attack -> no heart attack, or visa versa) */ /mob/living/carbon/proc/set_heartattack(status) - if(!can_heartattack()) + if(status && !can_heartattack()) return FALSE var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART) From 0cdb0a70fcc94da92ee292e8344142dcafedc9a6 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:51:00 +0200 Subject: [PATCH 44/60] Automatic changelog for PR #27449 [ci skip] --- html/changelogs/AutoChangeLog-pr-27449.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27449.yml diff --git a/html/changelogs/AutoChangeLog-pr-27449.yml b/html/changelogs/AutoChangeLog-pr-27449.yml new file mode 100644 index 00000000000..8905c3ac90d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27449.yml @@ -0,0 +1,6 @@ +author: "Melbert" +delete-after: True +changes: + - qol: "Tuberculosis makes you cough more" + - qol: "Nicotine Addiciton makes you cough less" + - qol: "Medicine Addiction maybe makes you cough more, maybe makes you cough less" \ No newline at end of file From 0c0fd8d7303018f32995908c733edf181c1c3c3f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 02:57:55 +0200 Subject: [PATCH 45/60] [MIRROR] Cleans up some handcuffing code (#27383) * Cleans up some handcuffing code (#82712) ## About The Pull Request I was looking at handcuff code in response to some issue (linking it is irrelevant) and it was just disgusting. I decided to just clean it all up and add a lot of niceities to make it much easier on the eyes. Variable rearrangment, early returns. all those nice things ## Changelog :cl: qol: There's a bit more user feedback when it comes to attempting to handcuff someone. /:cl: * Cleans up some handcuffing code --------- Co-authored-by: san7890 --- code/game/objects/items/handcuffs.dm | 80 +++++++++++++++++----------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 8db6b3556a0..259d38119ac 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -46,11 +46,13 @@ throw_range = 5 custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 5) breakouttime = 1 MINUTES + armor_type = /datum/armor/restraints_handcuffs + custom_price = PAYCHECK_COMMAND * 0.35 + + ///How long it takes to handcuff someone var/handcuff_time = 4 SECONDS ///Multiplier for handcuff time var/handcuff_time_mod = 1 - armor_type = /datum/armor/restraints_handcuffs - custom_price = PAYCHECK_COMMAND * 0.35 ///Sound that plays when starting to put handcuffs on someone var/cuffsound = 'sound/weapons/handcuffs.ogg' ///If set, handcuffs will be destroyed on application and leave behind whatever this is set to. @@ -70,51 +72,68 @@ fire = 50 acid = 50 -/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/user) - if(!istype(C)) +/obj/item/restraints/handcuffs/attack(mob/living/target_mob, mob/living/user) + if(!iscarbon(target_mob)) return - if(SEND_SIGNAL(C, COMSIG_CARBON_CUFF_ATTEMPTED, user) & COMSIG_CARBON_CUFF_PREVENT) + attempt_to_cuff(target_mob, user) // avoid locking up the attack chain with sleeps + +/// Handles all of the checks and application in a typical situation where someone attacks a carbon victim with the handcuff item. +/obj/item/restraints/handcuffs/proc/attempt_to_cuff(mob/living/carbon/victim, mob/living/user) + if(SEND_SIGNAL(victim, COMSIG_CARBON_CUFF_ATTEMPTED, user) & COMSIG_CARBON_CUFF_PREVENT) + victim.balloon_alert(user, "can't be handcuffed!") return if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))) //Clumsy people have a 50% chance to handcuff themselves instead of their target. to_chat(user, span_warning("Uh... how do those things work?!")) - apply_cuffs(user,user) + apply_cuffs(user, user) return + if(!isnull(victim.handcuffed)) + victim.balloon_alert(user, "already handcuffed!") + return + + if(victim.canBeHandcuffed()) + victim.balloon_alert(user, "can't be handcuffed!") + to_chat(user, span_warning("[victim] doesn't have two hands...")) + return + + victim.visible_message( + span_danger("[user] is trying to put [src] on [victim]!"), + span_userdanger("[user] is trying to put [src] on you!"), + ) + + if(victim.is_blind()) + to_chat(victim, span_userdanger("As you feel someone grab your wrists, [src] start digging into your skin!")) + + playsound(loc, cuffsound, 30, TRUE, -2) + log_combat(user, victim, "attempted to handcuff") + if(HAS_TRAIT(user, TRAIT_FAST_CUFFING)) handcuff_time_mod = 0.75 else handcuff_time_mod = 1 - if(!C.handcuffed) - if(C.canBeHandcuffed()) - C.visible_message(span_danger("[user] is trying to put [src] on [C]!"), \ - span_userdanger("[user] is trying to put [src] on you!")) - if(C.is_blind()) - to_chat(C, span_userdanger("As you feel someone grab your wrists, [src] start digging into your skin!")) - playsound(loc, cuffsound, 30, TRUE, -2) - log_combat(user, C, "attempted to handcuff") - if(do_after(user, handcuff_time * handcuff_time_mod, C, timed_action_flags = IGNORE_SLOWDOWNS) && C.canBeHandcuffed()) - if(iscyborg(user)) - apply_cuffs(C, user, TRUE) - else - apply_cuffs(C, user) - C.visible_message(span_notice("[user] handcuffs [C]."), \ - span_userdanger("[user] handcuffs you.")) - SSblackbox.record_feedback("tally", "handcuffs", 1, type) + if(!do_after(user, handcuff_time * handcuff_time_mod, victim, timed_action_flags = IGNORE_SLOWDOWNS) || !victim.canBeHandcuffed()) + victim.balloon_alert(user, "failed to handcuff!") + to_chat(user, span_warning("You fail to handcuff [victim]!")) + log_combat(user, victim, "failed to handcuff") + return + + apply_cuffs(victim, user, dispense = iscyborg(user)) + + victim.visible_message( + span_notice("[user] handcuffs [victim]."), + span_userdanger("[user] handcuffs you."), + ) + + log_combat(user, victim, "successfully handcuffed") + SSblackbox.record_feedback("tally", "handcuffs", 1, type) - log_combat(user, C, "handcuffed") - else - to_chat(user, span_warning("You fail to handcuff [C]!")) - log_combat(user, C, "failed to handcuff") - else - to_chat(user, span_warning("[C] doesn't have two hands...")) /** - * This handles handcuffing people + * When called, this instantly puts handcuffs on someone (if actually possible) * - * When called, this instantly puts handcuffs on someone (if possible) * Arguments: * * mob/living/carbon/target - Who is being handcuffed * * mob/user - Who or what is doing the handcuffing @@ -137,7 +156,6 @@ if(trashtype && !dispense) qdel(src) - return /** * # Alien handcuffs From 05a101c74571815d7b7b8c8751f9b2b144913d41 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:01:37 +0200 Subject: [PATCH 46/60] Automatic changelog for PR #27460 [ci skip] --- html/changelogs/AutoChangeLog-pr-27460.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27460.yml diff --git a/html/changelogs/AutoChangeLog-pr-27460.yml b/html/changelogs/AutoChangeLog-pr-27460.yml new file mode 100644 index 00000000000..49ac837d909 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27460.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "brimbeams no longer make a cog appear above the mob" \ No newline at end of file From 3932eedd98bf12574bc92e8b79bdf4c6dde51b1e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:02:11 +0200 Subject: [PATCH 47/60] Automatic changelog for PR #27367 [ci skip] --- html/changelogs/AutoChangeLog-pr-27367.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27367.yml diff --git a/html/changelogs/AutoChangeLog-pr-27367.yml b/html/changelogs/AutoChangeLog-pr-27367.yml new file mode 100644 index 00000000000..086097bdb5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27367.yml @@ -0,0 +1,6 @@ +author: "Melbert" +delete-after: True +changes: + - rscadd: "Being deafnened from a loud sound (flashbang, explosions) will now force people not naturally deaf to shout" + - rscadd: "Ear damage multiplier now only applies to taking damage, not healing damage, meaning Felinids (who take 2x the ear damage) will no longer heal ear damage 2x faster." + - refactor: "Ears have been refactored slightly, ear deafness should now update more snappily" \ No newline at end of file From 115705b36bbbe185a2082f458ba459381185c19b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:02:41 +0200 Subject: [PATCH 48/60] Automatic changelog for PR #27378 [ci skip] --- html/changelogs/AutoChangeLog-pr-27378.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27378.yml diff --git a/html/changelogs/AutoChangeLog-pr-27378.yml b/html/changelogs/AutoChangeLog-pr-27378.yml new file mode 100644 index 00000000000..9f2107bc653 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27378.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "cooling and anti-disruption RCD upgrades can now be printed in ancient protolathes" \ No newline at end of file From d410dc83abaadea45aa95e83af33b542621519d1 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:03:46 +0200 Subject: [PATCH 49/60] Automatic changelog for PR #27380 [ci skip] --- html/changelogs/AutoChangeLog-pr-27380.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27380.yml diff --git a/html/changelogs/AutoChangeLog-pr-27380.yml b/html/changelogs/AutoChangeLog-pr-27380.yml new file mode 100644 index 00000000000..4a27c16428b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27380.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - qol: "Water tiles now extinguish fires on items and people." \ No newline at end of file From a9d8b6d6c34d38532baa6399ff7d73625300ad3c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:04:29 +0200 Subject: [PATCH 50/60] Automatic changelog for PR #27382 [ci skip] --- html/changelogs/AutoChangeLog-pr-27382.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27382.yml diff --git a/html/changelogs/AutoChangeLog-pr-27382.yml b/html/changelogs/AutoChangeLog-pr-27382.yml new file mode 100644 index 00000000000..a531f486c2f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27382.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "being revived with a cyber-heart now properly restarts the cyber heart" \ No newline at end of file From 91946bbab632138ee4774819203c2d7b75fe23d3 Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Sat, 27 Apr 2024 06:46:47 +0530 Subject: [PATCH 51/60] Cherry-pick of all NO DESTRUCTION (#27477) * [NO GBP] Patches & renaming for `NO_DECONSTRUCTION` flag (#82547) ## About The Pull Request 1. Renames `NO_DECONSTRUCTION` -> `NO_DEBRIS_AFTER_DECONSTRUCTION`. As the name suggests when the object is deconstructed it won't drop any items/debris. After my last refactor for this flag it now serves a new purpose so its name has been changed to match that 2. Fixes objects that are now using `NO_DECONSTRUCTION` incorrectly. Some of these changes include - Removing the flag in objects where there are no means to deconstruct them (e.g. jukebox, hydroponics soil, flora etc) - Replacing the flags old purpose by overriding its tool procs so that it regains its old behaviour(e.g. You once again cannot deconstruct ctf reinforced tables, survival pods, indestructible windows etc) ## Changelog :cl: code: renamed `NO_DECONSTRUCTION` to `NO_DEBRIS_AFTER_DECONSTRUCTION` so its name matches its intended purpose fix: fixes some items that incorrectly used `NO_DECONSTRUCTION` prior to its refactor, meaning makes some objects non deconstructable again /:cl: * NO DESTRUCTION * Linter fix * Fixes standard RPEDs not working on machines (#82528) ## About The Pull Request Previously, `exchange_parts(...)` would cancel if both the `NO_DECONSTRUCTION` flag was set and you couldn't use your part replacer from a distance. https://github.com/tgstation/tgstation/blob/1583cf0cc968cd9f5da2398035feb8d70d58bcf2/code/game/machinery/_machinery.dm#L958-L959 Our recent removal of `NO_DECONSTRUCTION`, however, has left this to _only_ be the latter. https://github.com/tgstation/tgstation/blob/f0ed4ba4ce6b114509c10ee2f36ab0af6d7c81d2/code/game/machinery/_machinery.dm#L956-L957 Buuuuut this makes it unconditionally cancel for normal RPEDs, instead of only blocking them if `NO_DECONSTRUCTION` was set. As `NO_DECONSTRUCTION` is very much no longer relevant for this purpose, we simply remove the ranged RPED check altogether. This fixes our issue. ## Why It's Good For The Game Fixes #82525. ## Changelog :cl: fix: Standard RPEDs work on machines again. /:cl: * Machinery Destroy() side effect clean up (#82659) ## About The Pull Request I have combed over implementations of `Destroy()` for `obj/machinery`, and noticed quite a few was spawning items or playing sounds. **Slot machines**: Moved payout to on_deconstruction() **Windoors**: Break sound moved to on_deconstruction(). I have also slightly cleaned up Destroy(), the windoor calls air_update_turf directly, as that proc already retrieves the turf it is on. **Atmospheric pipe**: Releases air and deconstructs meter objects on_deconstruction(). **Portable atmospheric devices**: Drop hyper noblium crystal on on_destruction(). **Pump, Scrubbers**: Releases air on_deconstruction(). **PACMAN power generator**: Spawns dropped fuel on_deconstruction(). **Runic vendor**: Moved vanishing effects to on_deconstruction(). I did not change Destroy side effects in the following instances: - side effects are critical for the round (e.g. doomsday device, nuke, blackbox recorder dropping the tape, gulag item reclaimer [less critical but still]) - might spawn messages and noises, but moving them to on_deconstruct would put linked items into an unusable state if deleted directly (e.g. express order console, cyborg lockdown console, tram paired sensors) - would potentially delete mobs we don't want deleted (e.g. disposals, slime camera console) Out of 220 Destroy defines, I found only 8 side effects that could not be moved to other procs, so `machinery\Destroy()` has almost always been used properly! I really hope `structure` will be as well made. Other changes: - Stasis beds had a completely empty destroy, removed - Mass drivers had two destroy procs, merged ## Why It's Good For The Game The Destroy() proc should only contain reference clean ups, barring edge cases that would harm playability. ## Changelog Nothing player facing. * Fix linter * icon fix * icon fix again --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: Profakos --- code/__DEFINES/obj_flags.dm | 2 +- code/_globalvars/bitfields.dm | 2 +- code/datums/elements/frozen.dm | 2 +- code/game/machinery/_machinery.dm | 5 +- code/game/machinery/dance_machine.dm | 1 - code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 8 +- code/game/machinery/hologram.dm | 7 +- code/game/machinery/mass_driver.dm | 5 +- code/game/machinery/recycler.dm | 8 +- code/game/machinery/slotmachine.dm | 3 +- code/game/machinery/stasis.dm | 3 - .../machinery/telecomms/machines/allinone.dm | 1 - code/game/objects/obj_defense.dm | 6 +- .../objects/structures/beds_chairs/chair.dm | 4 +- code/game/objects/structures/flora.dm | 1 - code/game/objects/structures/window.dm | 14 +- .../atmospherics/machinery/other/meter.dm | 13 +- .../atmospherics/machinery/pipes/pipes.dm | 15 +- .../portable/portable_atmospherics.dm | 9 +- .../atmospherics/machinery/portable/pump.dm | 2 +- .../machinery/portable/scrubber.dm | 6 +- .../awaymissions/mission_code/murderdome.dm | 19 ++- code/modules/capture_the_flag/ctf_game.dm | 7 +- .../food_and_drinks/machinery/food_cart.dm | 2 +- code/modules/holodeck/computer.dm | 4 +- code/modules/holodeck/holo_effect.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 1 - .../mapfluff/ruins/objects_and_mobs/museum.dm | 7 +- code/modules/mining/equipment/survival_pod.dm | 13 +- code/modules/power/port_gen.dm | 2 +- .../chemistry/machinery/chem_synthesizer.dm | 10 +- .../shuttle/spaceship_navigation_beacon.dm | 1 - code/modules/shuttle/special.dm | 14 +- code/modules/shuttle/syndicate.dm | 4 +- .../modules/transport/tram/tram_controller.dm | 6 +- code/modules/vending/_vending.dm | 2 - code/modules/vending/runic_vendor.dm | 11 +- .../items/stacks/sheets/sheet_types.dm | 8 +- .../game/objects/structures/towel_bins.dm | 6 +- .../aesthetics/flag/code/signs_flags.dm | 2 +- .../modules/aesthetics/rack/code/rack.dm | 2 +- .../ashwalkers/code/buildings/fuelwell.dm | 2 +- .../modules/cellguns/code/medigun_cells.dm | 5 +- .../code/appliances/wall_cell_charger.dm | 11 +- .../code/colony_fabricator.dm | 11 +- .../code/machines/arc_furnace.dm | 11 +- .../code/machines/power_storage_unit.dm | 8 +- .../colony_fabricator/code/machines/rtg.dm | 12 +- .../code/machines/solar_panels.dm | 24 ++- .../code/machines/solid_fuel_generator.dm | 11 +- .../modules/jukebox/code/dance_machine.dm | 4 +- .../modules/mapping/code/machinery.dm | 3 - .../modules/mapping/code/shuttles.dm | 11 +- .../code/lewd_machinery/milking_machine.dm | 59 ++++---- .../code/lewd_structures/bdsm_furniture.dm | 5 +- .../code/lewd_structures/construction.dm | 2 +- .../code/lewd_structures/shibari_stand.dm | 5 +- .../code/stone_oven.dm | 11 +- .../code/stone_stove.dm | 8 +- .../primitive_structures/code/fencing.dm | 6 +- .../code/storage_structures.dm | 143 ++++++------------ .../primitive_structures/code/windows.dm | 2 +- .../stasisrework/code/stasissleeper.dm | 2 +- .../wrestlingring/code/wrestlingring.dm | 2 - 65 files changed, 352 insertions(+), 248 deletions(-) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 469811c96dc..ea5b929651d 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -15,7 +15,7 @@ #define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles) #define INFINITE_RESKIN (1<<12) // We can reskin this item infinitely #define CONDUCTS_ELECTRICITY (1<<13) //! Can this object conduct electricity? -#define NO_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish +#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 87e093ea139..f210774ac81 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -294,7 +294,7 @@ DEFINE_BITFIELD(obj_flags, list( "EMAGGED" = EMAGGED, "IGNORE_DENSITY" = IGNORE_DENSITY, "IN_USE" = IN_USE, - "NO_DECONSTRUCTION" = NO_DECONSTRUCTION, + "NO_DEBRIS_AFTER_DECONSTRUCTION" = NO_DEBRIS_AFTER_DECONSTRUCTION, "UNIQUE_RENAME" = UNIQUE_RENAME, )) diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm index 434968dd4d5..d112ef31b5f 100644 --- a/code/datums/elements/frozen.dm +++ b/code/datums/elements/frozen.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 else log_combat(throwingdatum.thrower, target, "launched", addition = "shattering it due to being frozen.") obj_target.visible_message(span_danger("[obj_target] shatters into a million pieces!")) - obj_target.obj_flags |= NO_DECONSTRUCTION // disable item spawning + obj_target.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION // disable item spawning obj_target.deconstruct(FALSE) // call pre-deletion specialized code -- internals release gas etc /// signal handler for COMSIG_MOVABLE_MOVED that unfreezes our target if it moves onto an open turf thats hotter than diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 8fc5dcce870..fb8a4ce139f 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -828,7 +828,7 @@ /obj/machinery/handle_deconstruct(disassembled = TRUE) SHOULD_NOT_OVERRIDE(TRUE) - if(obj_flags & NO_DECONSTRUCTION) + if(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION) dump_inventory_contents() //drop stuff we consider important return //Just delete us, no need to call anything else. @@ -964,9 +964,6 @@ if(!istype(replacer_tool)) return FALSE - if(!replacer_tool.works_from_distance) - return FALSE - var/shouldplaysound = FALSE if(!component_parts) return FALSE diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 0a626459667..dea1972cea7 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -163,7 +163,6 @@ req_access = null anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/jukebox/disco/activate_music() . = ..() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 6a7a2d8929a..437acc60cdf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1512,7 +1512,7 @@ /obj/machinery/door/airlock/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if((damage_amount >= atom_integrity) && (damage_flag == BOMB)) - obj_flags |= NO_DECONSTRUCTION //If an explosive took us out, don't drop the assembly + obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION //If an explosive took us out, don't drop the assembly . = ..() if(atom_integrity < (0.75 * max_integrity)) update_appearance() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 0849a5ad8c5..c69c865f6d1 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -66,11 +66,8 @@ /obj/machinery/door/window/Destroy() set_density(FALSE) - if(atom_integrity == 0) - playsound(src, SFX_SHATTER, 70, TRUE) electronics = null - var/turf/floor = get_turf(src) - floor.air_update_turf(TRUE, FALSE) + air_update_turf(TRUE, FALSE) return ..() /obj/machinery/door/window/update_icon_state() @@ -300,11 +297,12 @@ if(BURN) playsound(src, 'sound/items/welder.ogg', 100, TRUE) - /obj/machinery/door/window/on_deconstruction(disassembled) if(disassembled) return + playsound(src, SFX_SHATTER, 70, TRUE) + for(var/i in 1 to shards) drop_debris(new /obj/item/shard(src)) if(rods) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 18ccc976f06..273538b834b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -127,7 +127,6 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION on_network = FALSE ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor @@ -143,6 +142,12 @@ Possible to do for anyone motivated enough: new_disk.forceMove(src) disk = new_disk +/obj/machinery/holopad/tutorial/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/holopad/tutorial/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/machinery/holopad/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() if(!loc) diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 6963b23afb0..5f534ec95b4 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -14,10 +14,6 @@ . = ..() wires = new /datum/wires/mass_driver(src) -/obj/machinery/mass_driver/Destroy() - QDEL_NULL(wires) - . = ..() - /obj/machinery/mass_driver/chapelgun name = "holy driver" id = MASSDRIVER_CHAPEL @@ -35,6 +31,7 @@ for(var/obj/machinery/computer/pod/control as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/pod)) if(control.id == id) control.connected = null + QDEL_NULL(wires) return ..() /obj/machinery/mass_driver/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9cbf787d58d..28aae488866 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -239,9 +239,15 @@ /obj/machinery/recycler/deathtrap name = "dangerous old crusher" - obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION + obj_flags = CAN_BE_HIT | EMAGGED crush_damage = 120 +/obj/machinery/recycler/deathtrap/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/recycler/deathtrap/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/item/paper/guides/recycler name = "paper - 'garbage duty instructions'" default_raw_text = "

    New Assignment

    You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect said trash.

    There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then, deliver these minerals to cargo or engineering. You are our last hope for a clean station. Do not screw this up!" diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 842f01ae754..51b0a5b6a5d 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -68,10 +68,9 @@ coinvalues["[cointype]"] = C.get_item_credit_value() qdel(C) //Sigh -/obj/machinery/computer/slot_machine/Destroy() +/obj/machinery/computer/slot_machine/on_deconstruction(disassembled) if(balance) give_payout(balance) - return ..() /obj/machinery/computer/slot_machine/process(seconds_per_tick) . = ..() //Sanity checks. diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index 177cd540040..a8d4d62544b 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -22,9 +22,6 @@ . = ..() AddElement(/datum/element/elevation, pixel_shift = 6) -/obj/machinery/stasis/Destroy() - . = ..() - /obj/machinery/stasis/examine(mob/user) . = ..() . += span_notice("Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine.") diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index f159339193e..9b32a4ac192 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -20,7 +20,6 @@ /obj/machinery/telecomms/allinone/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/telecomms/allinone/indestructible/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) return NONE diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 4f22a5e256b..f6fee49af7f 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -169,9 +169,9 @@ /** * The interminate proc between deconstruct() & atom_deconstruct(). By default this delegates deconstruction to - * atom_deconstruct if NO_DECONSTRUCTION is absent but subtypes can override this to handle NO_DECONSTRUCTION in their + * atom_deconstruct if NO_DEBRIS_AFTER_DECONSTRUCTION is absent but subtypes can override this to handle NO_DEBRIS_AFTER_DECONSTRUCTION in their * own unique way. Override this if for example you want to dump out important content like mobs from the - * atom before deconstruction regardless if NO_DECONSTRUCTION is present or not + * atom before deconstruction regardless if NO_DEBRIS_AFTER_DECONSTRUCTION is present or not * Arguments * * * disassembled - TRUE means we cleanly took this atom apart using tools. FALSE means this was destroyed in a violent way @@ -179,7 +179,7 @@ /obj/proc/handle_deconstruct(disassembled = TRUE) SHOULD_CALL_PARENT(FALSE) - if(!(obj_flags & NO_DECONSTRUCTION)) + if(!(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION)) atom_deconstruct(disassembled) /** diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 0808c306ddb..92c955977e7 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -484,11 +484,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) icon_state = null buildstacktype = null item_chair = null - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION alpha = 0 /obj/structure/chair/mime/wrench_act_secondary(mob/living/user, obj/item/weapon) - return ITEM_INTERACT_BLOCKING + return NONE /obj/structure/chair/mime/post_buckle_mob(mob/living/M) M.pixel_y += 5 diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 8749691c91d..2cfd490203c 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -449,7 +449,6 @@ icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //protected by the christmas spirit - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION var/gift_type = /obj/item/gift/anything var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a77f7a987f3..2acac966f23 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -792,10 +792,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw name = "hardened shuttle window" flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION -/obj/structure/window/reinforced/shuttle/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/window/reinforced/shuttle/indestructible/welder_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/structure/window/reinforced/plasma/plastitanium name = "plastitanium window" diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index ee1d052b7ed..97bff1ddaea 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -22,7 +22,9 @@ /obj/machinery/meter/Destroy() SSair.stop_processing_machine(src) - target = null + if(!isnull(target)) + UnregisterSignal(target, COMSIG_QDELETING) + target = null return ..() /obj/machinery/meter/Initialize(mapload, new_piping_layer) @@ -45,8 +47,14 @@ candidate = pipe if(candidate) target = candidate + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(drop_meter)) setAttachLayer(candidate.piping_layer) +///Called when the parent pipe is removed +/obj/machinery/meter/proc/drop_meter() + SIGNAL_HANDLER + deconstruct(FALSE) + /obj/machinery/meter/proc/setAttachLayer(new_layer) target_layer = new_layer PIPING_LAYER_DOUBLE_SHIFT(src, target_layer) @@ -135,7 +143,8 @@ return TRUE /obj/machinery/meter/on_deconstruction(disassembled) - new /obj/item/pipe_meter(loc) + var/obj/item/pipe_meter/meter_object = new /obj/item/pipe_meter(get_turf(src)) + transfer_fingerprints_to(meter_object) /obj/machinery/meter/interact(mob/user) if(machine_stat & (NOPOWER|BROKEN)) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index c0dc18c0e8e..574daa2af3a 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -34,18 +34,13 @@ if(hide) AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) //if changing this, change the subtypes RemoveElements too, because thats how bespoke works -/obj/machinery/atmospherics/pipe/Destroy() - QDEL_NULL(parent) - +/obj/machinery/atmospherics/pipe/on_deconstruction(disassembled) releaseAirToTurf() - var/turf/local_turf = loc - for(var/obj/machinery/meter/meter in local_turf) - if(meter.target != src) - continue - var/obj/item/pipe_meter/meter_object = new (local_turf) - meter.transfer_fingerprints_to(meter_object) - qdel(meter) + return ..() + +/obj/machinery/atmospherics/pipe/Destroy() + QDEL_NULL(parent) return ..() //----------------- diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 389de6e3701..3d4e2b02e1f 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -46,14 +46,17 @@ AddElement(/datum/element/climbable, climb_time = 3 SECONDS, climb_stun = 3 SECONDS) AddElement(/datum/element/elevation, pixel_shift = 8) +/obj/machinery/portable_atmospherics/on_deconstruction(disassembled) + if(nob_crystal_inserted) + new /obj/item/hypernoblium_crystal(src) + + return ..() + /obj/machinery/portable_atmospherics/Destroy() disconnect() air_contents = null SSair.stop_processing_machine(src) - if(nob_crystal_inserted) - new /obj/item/hypernoblium_crystal(src) - return ..() /obj/machinery/portable_atmospherics/examine(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index e7dfc229a39..7b0dbef314e 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -12,7 +12,7 @@ volume = 1000 -/obj/machinery/portable_atmospherics/pump/Destroy() +/obj/machinery/portable_atmospherics/pump/on_deconstruction(disassembled) var/turf/local_turf = get_turf(src) local_turf.assume_air(air_contents) return ..() diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 576dff39a8d..336cdc4829f 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -31,9 +31,9 @@ /datum/gas/halon, ) -/obj/machinery/portable_atmospherics/scrubber/Destroy() - var/turf/T = get_turf(src) - T.assume_air(air_contents) +/obj/machinery/portable_atmospherics/scrubber/on_deconstruction(disassembled) + var/turf/local_turf = get_turf(src) + local_turf.assume_air(air_contents) return ..() /obj/machinery/portable_atmospherics/scrubber/update_icon_state() diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index 520372e68ac..a59a491d492 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -1,20 +1,27 @@ /obj/structure/window/reinforced/fulltile/indestructible name = "robust window" - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/structure/window/reinforced/fulltile/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/window/reinforced/fulltile/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE +/obj/structure/window/reinforced/fulltile/indestructible/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/fulltile/indestructible/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/structure/grille/indestructible - obj_flags = CONDUCTS_ELECTRICITY | NO_DECONSTRUCTION + obj_flags = CONDUCTS_ELECTRICITY resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/structure/grille/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/grille/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/grille/indestructible/wirecutter_act(mob/living/user, obj/item/tool) + return NONE /obj/effect/spawner/structure/window/reinforced/indestructible spawn_list = list(/obj/structure/grille/indestructible, /obj/structure/window/reinforced/fulltile/indestructible) diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index aac487a83d6..38a7318b554 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -463,7 +463,12 @@ /obj/structure/table/reinforced/ctf resistance_flags = INDESTRUCTIBLE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/structure/table/reinforced/ctf/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/reinforced/ctf/screwdriver_act_secondary(mob/living/user, obj/item/tool) + return NONE #define CTF_LOADING_UNLOADED 0 #define CTF_LOADING_LOADING 1 diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index e068b7b8ce2..a14ea3593c5 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -8,7 +8,7 @@ anchored = FALSE use_power = NO_POWER_USE req_access = list(ACCESS_KITCHEN) - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION var/unpacked = FALSE var/obj/machinery/griddle/stand/cart_griddle var/obj/machinery/smartfridge/food/cart_smartfridge diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index db66578c5bd..1ff5bc47a55 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -292,12 +292,12 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf holo_object.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF if(isstructure(holo_object)) - holo_object.obj_flags |= NO_DECONSTRUCTION + holo_object.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION return if(ismachinery(holo_object)) var/obj/machinery/holo_machine = holo_object - holo_machine.obj_flags |= NO_DECONSTRUCTION + holo_machine.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION holo_machine.power_change() if(istype(holo_machine, /obj/machinery/button)) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index afd4c227038..caa5b425ca4 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -50,7 +50,7 @@ var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books) var/obj/item/book/manual/to_spawn = new newtype(loc) to_spawn.flags_1 |= HOLOGRAM_1 - to_spawn.obj_flags |= NO_DECONSTRUCTION + to_spawn.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION return to_spawn /obj/effect/holodeck_effect/mobspawner diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index ad12fa24e68..d32795e90c3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1159,7 +1159,6 @@ circuit = null density = FALSE use_power = NO_POWER_USE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION unwrenchable = FALSE self_sustaining_overlay_icon_state = null maxnutri = 15 diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm index 5c1b4323208..1c0a5392fb9 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -159,9 +159,14 @@ mask = /obj/item/clothing/mask/fakemoustache/italian /obj/machinery/vending/hotdog/museum - obj_flags = parent_type::obj_flags|NO_DECONSTRUCTION onstation_override = TRUE +/obj/machinery/vending/hotdog/museum/screwdriver_act(mob/living/user, obj/item/attack_item) + return NONE + +/obj/machinery/vending/hotdog/museum/crowbar_act(mob/living/user, obj/item/attack_item) + return NONE + #define CAFE_KEYCARD_TOILETS "museum_cafe_key_toilets" ///Do not place these beyond the cafeteria shutters, or you might lock people out of reaching it. diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index d40589dd3f8..b22603f52d9 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -249,7 +249,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/door/window/survival_pod/left, 0) light_color = COLOR_VERY_PALE_LIME_GREEN max_n_of_items = 10 pixel_y = -4 - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/smartfridge/survival_pod/welder_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/machinery/smartfridge/survival_pod/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 84542805d48..e4c1617c0f0 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -98,7 +98,7 @@ var/obj/S = sheet_path sheet_name = initial(S.name) -/obj/machinery/power/port_gen/pacman/Destroy() +/obj/machinery/power/port_gen/pacman/on_deconstruction(disassembled) DropFuel() return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index c0cb45dda2a..552bfe48650 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -6,14 +6,16 @@ base_icon_state = "dispenser" amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION use_power = NO_POWER_USE - var/static/list/shortcuts = list( - "meth" = /datum/reagent/drug/methamphetamine - ) ///The purity of the created reagent in % (purity uses 0-1 values) var/purity = 100 +/obj/machinery/chem_dispenser/chem_synthesizer/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/chem_dispenser/chem_synthesizer/crowbar_act(mob/living/user, obj/item/tool) + return NONE + /obj/machinery/chem_dispenser/chem_synthesizer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index eb613be54de..41b3f5e39ed 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -5,7 +5,6 @@ icon_state = "beacon_active" base_icon_state = "beacon" density = TRUE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /// Locked beacons cannot be jumped to by ships. var/locked = FALSE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 989ab4edc94..e5b4b0eb024 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -79,7 +79,6 @@ var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() @@ -89,6 +88,12 @@ STOP_PROCESSING(SSobj, src) . = ..() +/obj/structure/table/abductor/wabbajack/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/abductor/wabbajack/wrench_act(mob/living/user, obj/item/tool) + return NONE + /obj/structure/table/abductor/wabbajack/process() if(isnull(our_statue)) our_statue = locate() in orange(4, src) @@ -173,7 +178,6 @@ /obj/structure/table/wood/shuttle_bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION max_integrity = 1000 var/boot_dir = 1 @@ -184,6 +188,12 @@ ) AddElement(/datum/element/connect_loc, loc_connections) +/obj/structure/table/wood/shuttle_bar/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/wood/shuttle_bar/wrench_act(mob/living/user, obj/item/tool) + return NONE + /obj/structure/table/wood/shuttle_bar/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER var/mob/living/M = AM diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 402a87bf6d4..08e0b0d2699 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -11,7 +11,9 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/computer/shuttle/syndicate/screwdriver_act(mob/living/user, obj/item/I) + return NONE /obj/machinery/computer/shuttle/syndicate/launch_check(mob/user) . = ..() diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 7912588ab8a..51b8a32acaf 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -708,7 +708,9 @@ /obj/machinery/transport/tram_controller/hilbert configured_transport_id = HILBERT_LINE_1 - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/transport/tram_controller/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE /obj/machinery/transport/tram_controller/Initialize(mapload) . = ..() @@ -847,7 +849,7 @@ return playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) balloon_alert(user, "unsecured") - deconstruct() + deconstruct(TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/machinery/transport/tram_controller/screwdriver_act_secondary(mob/living/user, obj/item/tool) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 42f6ff2a436..29641441e67 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1157,8 +1157,6 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/replacer) if(!istype(replacer)) return FALSE - if(!replacer.works_from_distance) - return FALSE if(!component_parts || !refill_canister) return FALSE diff --git a/code/modules/vending/runic_vendor.dm b/code/modules/vending/runic_vendor.dm index 3edb5b27264..f338340c8b1 100644 --- a/code/modules/vending/runic_vendor.dm +++ b/code/modules/vending/runic_vendor.dm @@ -9,6 +9,7 @@ vend_reply = "Please, stand still near the vending machine for your special package!" resistance_flags = FIRE_PROOF light_mask = "RunicVendor-light-mask" + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION /// How long the vendor stays up before it decays. var/time_to_decay = 30 SECONDS /// Area around the vendor that will pushback nearby mobs. @@ -60,15 +61,16 @@ return . +/obj/machinery/vending/runic_vendor/handle_deconstruct(disassembled) + SHOULD_NOT_OVERRIDE(TRUE) -/obj/machinery/vending/runic_vendor/Destroy() visible_message(span_warning("[src] flickers and disappears!")) playsound(src,'sound/weapons/resonator_blast.ogg',25,TRUE) return ..() /obj/machinery/vending/runic_vendor/proc/runic_explosion() explosion(src, light_impact_range = 2) - qdel(src) + deconstruct(FALSE) /obj/machinery/vending/runic_vendor/proc/runic_pulse() var/pulse_locs = spiral_range_turfs(pulse_distance, get_turf(src)) @@ -82,10 +84,9 @@ mob_to_be_pulsed_back.throw_at(target, 4, 4) /obj/machinery/vending/runic_vendor/screwdriver_act(mob/living/user, obj/item/I) - explosion(src, light_impact_range = 2) - qdel(src) + runic_explosion() /obj/machinery/vending/runic_vendor/proc/decay() - qdel(src) + deconstruct(FALSE) #undef PULSE_DISTANCE_RANGE diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 93cd93f1a50..c399c7272d5 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -78,10 +78,10 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("large wooden mortar", /obj/structure/large_mortar, 10, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("wooden cutting board", /obj/item/cutting_board, 5, time = 2 SECONDS, check_density = FALSE, category = CAT_TOOLS), new/datum/stack_recipe("wooden shelf", /obj/structure/rack/wooden, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), - new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/seedshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/producebin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("produce display", /obj/machinery/smartfridge/producedisplay, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/rationshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/wooden/seed_shelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/wooden/produce_bin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce display", /obj/machinery/smartfridge/wooden/produce_display, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/wooden/ration_shelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("storage barrel", /obj/structure/closet/crate/wooden/storage_barrel, 4, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), new/datum/stack_recipe("worm barrel", /obj/structure/wormfarm, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("gutlunch trough", /obj/structure/ore_container/gutlunch_trough, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), diff --git a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm b/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm index adf8066b6e3..21996590ed4 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm +++ b/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm @@ -48,9 +48,6 @@ /obj/structure/towel_bin/screwdriver_act(mob/living/user, obj/item/tool) - if(obj_flags & NO_DECONSTRUCTION) - return FALSE - if(amount) to_chat(user, span_warning("[src] must be empty first!")) return ITEM_INTERACT_SUCCESS @@ -60,7 +57,8 @@ new /obj/item/stack/rods(loc, 2) qdel(src) return ITEM_INTERACT_SUCCESS - + if(!(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION)) + new /obj/item/stack/rods(loc, 2) /obj/structure/towel_bin/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm b/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm index 684ce00919b..db83853d657 100644 --- a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm +++ b/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm @@ -16,7 +16,7 @@ /obj/structure/sign/flag/MouseDrop(over_object, src_location, over_location) . = ..() if(over_object == usr && Adjacent(usr)) - if(!item_flag || src.obj_flags & NO_DECONSTRUCTION) + if(!item_flag || src.obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION) return if(!usr.can_perform_action(src, NEED_DEXTERITY)) return diff --git a/modular_skyrat/modules/aesthetics/rack/code/rack.dm b/modular_skyrat/modules/aesthetics/rack/code/rack.dm index 23b0beaba07..082e01bb40c 100644 --- a/modular_skyrat/modules/aesthetics/rack/code/rack.dm +++ b/modular_skyrat/modules/aesthetics/rack/code/rack.dm @@ -41,7 +41,7 @@ /obj/structure/rack/gunrack/attackby(obj/item/W, mob/living/user, params) var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) + if (W.tool_behaviour == TOOL_WRENCH && LAZYACCESS(modifiers, RIGHT_CLICK)) W.play_tool_sound(src) deconstruct(TRUE) return diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm b/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm index 862d311e16e..be8756b1cf6 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm @@ -21,7 +21,7 @@ /obj/structure/sink/fuel_well/attackby(obj/item/O, mob/living/user, params) flick("puddle-oil-splash",src) - if(O.tool_behaviour == TOOL_SHOVEL && !(obj_flags & NO_DECONSTRUCTION)) //attempt to deconstruct the puddle with a shovel + if(O.tool_behaviour == TOOL_SHOVEL) //attempt to deconstruct the puddle with a shovel //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the fuel well with soil.") O.play_tool_sound(src) deconstruct() diff --git a/modular_skyrat/modules/cellguns/code/medigun_cells.dm b/modular_skyrat/modules/cellguns/code/medigun_cells.dm index 274a523a7d4..4c58e129fb7 100644 --- a/modular_skyrat/modules/cellguns/code/medigun_cells.dm +++ b/modular_skyrat/modules/cellguns/code/medigun_cells.dm @@ -538,7 +538,6 @@ icon_state = "hardlight_down" base_icon_state = "hardlight" max_integrity = 1 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION //Made from nothing, can't deconstruct build_stack_type = null //It would not be good if people could use this to farm materials. var/deploy_time = 20 SECONDS //How long the roller beds lasts for without someone buckled to it. @@ -546,6 +545,10 @@ . = ..() addtimer(CALLBACK(src, PROC_REF(check_bed)), deploy_time) +// previously NO_DECONSTRUCTION +/obj/structure/bed/medical/medigun/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/bed/medical/medigun/proc/check_bed() //Checks to see if anyone is buckled to the bed, if not the bed will qdel itself. if(!has_buckled_mobs()) qdel(src) //Deletes the roller bed, mostly meant to prevent stockpiling and clutter diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm index 8434a730f1d..e126baca3d0 100644 --- a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm +++ b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm @@ -5,7 +5,6 @@ icon_state = "wall_charger" base_icon_state = "wall_charger" circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_batteries = 3 charge_rate = 900 KILO WATTS /// The item we turn into when repacked @@ -27,6 +26,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29) deconstruct(TRUE) return +// previously NO_DECONSTRUCTION +/obj/machinery/cell_charger_multi/wall_mounted/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/cell_charger_multi/wall_mounted/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/cell_charger_multi/wall_mounted/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/cell_charger_multi/wall_mounted/on_deconstruction(disassembled) if(disassembled) new repacked_type(drop_location()) diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm index f7d7eede0ac..1eb2a4627e1 100644 --- a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm +++ b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm @@ -9,7 +9,6 @@ production_animation = null circuit = null production_animation = "colony_lathe_n" - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 5 allowed_buildtypes = COLONY_FABRICATOR @@ -33,6 +32,16 @@ QDEL_NULL(soundloop) return ..() +// previously NO_DECONSTRUCTION +/obj/machinery/rnd/production/colony_lathe/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/rnd/production/colony_lathe/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/rnd/production/colony_lathe/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/rnd/production/colony_lathe/ui_act(action, list/params, datum/tgui/ui) . = ..() if (. && action == "build") diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm index acf3d2af90f..66e4e209dab 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -18,7 +18,6 @@ circuit = null light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 10 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // This baby consumes so much power /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/arc_furnace @@ -46,6 +45,16 @@ if(length(contents)) . += span_notice("It has [contents[1]] sitting in it.") +// previously NO_DECONSTRUCTION +/obj/machinery/arc_furnace/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/arc_furnace/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/arc_furnace/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/arc_furnace/on_deconstruction(disassembled) eject_contents() diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm index cd2da64f8e4..4d6fc605a79 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm @@ -9,7 +9,6 @@ input_level_max = 400 * 1000 output_level_max = 400 * 1000 circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/station_battery @@ -34,6 +33,13 @@ to_chat(user, span_notice("You close the maintenance hatch of [src].")) return TRUE +// previously NO_DECONSTRUCTION +/obj/machinery/power/smes/battery_pack/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/smes/battery_pack/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // We don't care about the parts updates because we don't want them to change /obj/machinery/power/smes/battery_pack/RefreshParts() return diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm index c01724200ac..5690e26884a 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm @@ -6,7 +6,6 @@ application." icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION power_gen = 7500 /// What we turn into when we are repacked var/repacked_type = /obj/item/flatpacked_machine/rtg @@ -19,8 +18,17 @@ if(!mapload) flick("rtg_deploy", src) -// Item for creating the arc furnace or carrying it around +// previously NO_DECONSTRUCTION +/obj/machinery/power/rtg/portable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE +/obj/machinery/power/rtg/portable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/rtg/portable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + +// Item for creating the arc furnace or carrying it around /obj/item/flatpacked_machine/rtg name = "flat-packed radioisotope thermoelectric generator" icon_state = "rtg_packed" diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm index c965d5ab169..9b8f02db090 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm @@ -2,7 +2,6 @@ /obj/machinery/power/solar/deployable icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar @@ -20,6 +19,16 @@ qdel(assembly) return ..() +// previously NO_DECONSTRUCTION +/obj/machinery/power/solar/deployable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/solar/deployable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/solar/deployable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // Solar panel deployable item /obj/item/flatpacked_machine/solar @@ -37,7 +46,6 @@ /obj/machinery/power/tracker/deployable icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar_tracker @@ -47,7 +55,17 @@ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) /obj/machinery/power/tracker/deployable/crowbar_act(mob/user, obj/item/item_acting) - return + return NONE + +// previously NO_DECONSTRUCTION +/obj/machinery/power/tracker/deployable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/tracker/deployable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/tracker/deployable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE /obj/machinery/power/tracker/deployable/on_deconstruction(disassembled) var/obj/item/solar_assembly/assembly = locate() in src diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm index a3ac75a0825..e082b8bea0a 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm @@ -11,7 +11,6 @@ icon_state = "fuel_generator_0" base_icon_state = "fuel_generator" circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION anchored = TRUE max_sheets = 25 time_per_sheet = 100 @@ -28,6 +27,16 @@ if(!mapload) flick("fuel_generator_deploy", src) +// previously NO_DECONSTRUCTION +/obj/machinery/power/port_gen/pacman/solid_fuel/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/port_gen/pacman/solid_fuel/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/port_gen/pacman/solid_fuel/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // We don't need to worry about the board, this machine doesn't have one! /obj/machinery/power/port_gen/pacman/solid_fuel/on_construction(mob/user) return diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_skyrat/modules/jukebox/code/dance_machine.dm index 09d335f4460..54c8e27ed89 100644 --- a/modular_skyrat/modules/jukebox/code/dance_machine.dm +++ b/modular_skyrat/modules/jukebox/code/dance_machine.dm @@ -37,8 +37,6 @@ desc = "Now redesigned with data gathered from the extensive disco and plasma research." anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION - /obj/machinery/jukebox/public req_access = list() falloff_dist_offset = 10 @@ -55,7 +53,7 @@ return ..() /obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(obj_flags & NO_DECONSTRUCTION)) + if(!active) if(O.tool_behaviour == TOOL_WRENCH) if(!anchored && !isinspace()) to_chat(user,span_notice("You secure [src] to the floor.")) diff --git a/modular_skyrat/modules/mapping/code/machinery.dm b/modular_skyrat/modules/mapping/code/machinery.dm index 53500a29628..04fc7cca5f2 100644 --- a/modular_skyrat/modules/mapping/code/machinery.dm +++ b/modular_skyrat/modules/mapping/code/machinery.dm @@ -13,9 +13,6 @@ /obj/item/gps/computer/space/wrench_act(mob/living/user, obj/item/I) . = ..() - if(obj_flags & NO_DECONSTRUCTION) - return TRUE - if(I.use_tool(src, user, 20, volume=50)) user.visible_message(span_warning("[user] disassembles [src]."), span_notice("You start to disassemble [src]..."), span_hear("You hear clanking and banging noises.")) diff --git a/modular_skyrat/modules/mapping/code/shuttles.dm b/modular_skyrat/modules/mapping/code/shuttles.dm index d50ae38bc5c..89d0aade9c7 100644 --- a/modular_skyrat/modules/mapping/code/shuttles.dm +++ b/modular_skyrat/modules/mapping/code/shuttles.dm @@ -69,7 +69,16 @@ shuttleId = "slaver_syndie" possible_destinations = "syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + +// previously NO_DECONSTRUCTION +/obj/machinery/computer/shuttle/slaver/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/computer/shuttle/slaver/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/computer/shuttle/slaver/default_pry_open(obj/item/crowbar, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE) + return NONE /datum/map_template/shuttle/slaver_ship port_id = "slaver ship" diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index 25dba7d3508..fb6f72e832e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -16,7 +16,6 @@ icon_state = "milking_pink_off" max_buckled_mobs = 1 item_chair = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_integrity = 75 var/static/list/milkingmachine_designs @@ -67,33 +66,6 @@ var/mutable_appearance/organ_overlay var/organ_overlay_new_icon_state = "" // Organ overlay update optimization -// Additional examine text -/obj/structure/chair/milking_machine/examine(mob/user) - . = ..() - . += span_notice("What are these metal mounts on the armrests for...?") - -/obj/structure/chair/milking_machine/Destroy() - if(current_mob) - if(current_mob.handcuffed) - current_mob.handcuffed.dropped(current_mob) - current_mob.set_handcuffed(null) - current_mob.update_abstract_handcuffed() - current_mob.layer = initial(current_mob.layer) - - if(beaker) - qdel(beaker) - beaker = null - - current_selected_organ = null - current_mob = null - current_breasts = null - current_testicles = null - current_vagina = null - - STOP_PROCESSING(SSobj, src) - unbuckle_all_mobs() - return ..() - // Object initialization /obj/structure/chair/milking_machine/Initialize(mapload) . = ..() @@ -124,6 +96,37 @@ populate_milkingmachine_designs() START_PROCESSING(SSobj, src) +// Additional examine text +/obj/structure/chair/milking_machine/examine(mob/user) + . = ..() + . += span_notice("What are these metal mounts on the armrests for...?") + +/obj/structure/chair/milking_machine/Destroy() + if(current_mob) + if(current_mob.handcuffed) + current_mob.handcuffed.dropped(current_mob) + current_mob.set_handcuffed(null) + current_mob.update_abstract_handcuffed() + current_mob.layer = initial(current_mob.layer) + + if(beaker) + qdel(beaker) + beaker = null + + current_selected_organ = null + current_mob = null + current_breasts = null + current_testicles = null + current_vagina = null + + STOP_PROCESSING(SSobj, src) + unbuckle_all_mobs() + return ..() + +// previously NO_DECONSTRUCTION +/obj/structure/chair/milking_machine/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /* * APPEARANCE MANAGEMENT */ diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm index 9e46e1d018d..b6baa6d42f2 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm @@ -7,7 +7,6 @@ icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' icon_state = "bdsm_bed" max_integrity = 50 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/item/bdsm_bed_kit name = "bdsm bed construction kit" @@ -41,6 +40,10 @@ . = ..() . += span_purple("[src] can be assembled by using Ctrl+Shift+Click while [src] is on the floor.") +// previously NO_DECONSTRUCTION +/obj/structure/bed/bdsm_bed/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/bed/bdsm_bed/post_buckle_mob(mob/living/affected_mob) density = TRUE //Push them up from the normal lying position diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm index cc3ed2cdce8..7d35be6c12f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm @@ -3,7 +3,7 @@ name = "construction kit" desc = "Used for constructing various things" w_class = WEIGHT_CLASS_BULKY - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + obj_flags = CAN_BE_HIT throwforce = 0 ///What is the path for the resulting structure generating by using this item? var/obj/structure/resulting_structure = /obj/structure/chair diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index 968b6a34925..9ceeaf04bc6 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -7,7 +7,6 @@ layer = 4 item_chair = null buildstacktype = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION ///Overlays for ropes var/static/mutable_appearance/shibari_rope_overlay var/static/mutable_appearance/shibari_rope_overlay_behind @@ -45,6 +44,10 @@ if(!has_buckled_mobs() && can_buckle) . += span_notice("They need to be wearing full-body shibari, and you need to be holding ropes!") +// previously NO_DECONSTRUCT +/obj/structure/chair/shibari_stand/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/chair/shibari_stand/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) var/mob/living/buckled = buckled_mob if(buckled) diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm index c4c21967a3c..8ccd6e5c668 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm @@ -6,7 +6,6 @@ icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' circuit = null use_power = FALSE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// A list of the different oven trays we can spawn with var/static/list/random_oven_tray_types = list( @@ -32,6 +31,16 @@ . += span_notice("It can be taken apart with a crowbar.") +// previously NO_DECONSTRUCTION +/obj/machinery/oven/stone/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/oven/stone/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/oven/stone/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/oven/stone/add_tray_to_oven(obj/item/plate/oven_tray, mob/baker) used_tray = oven_tray diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm index 0057e758571..cdfd64719e3 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm @@ -10,7 +10,6 @@ use_power = FALSE circuit = null resistance_flags = FIRE_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/machinery/primitive_stove/Initialize(mapload) . = ..() @@ -22,6 +21,13 @@ . += span_notice("It can be taken apart with a crowbar.") +// previously NO_DECONSTRUCTION +/obj/machinery/primitive_stove/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/primitive_stove/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/machinery/primitive_stove/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) diff --git a/modular_skyrat/modules/primitive_structures/code/fencing.dm b/modular_skyrat/modules/primitive_structures/code/fencing.dm index 0aeb5a71e20..20816e9ba55 100644 --- a/modular_skyrat/modules/primitive_structures/code/fencing.dm +++ b/modular_skyrat/modules/primitive_structures/code/fencing.dm @@ -7,7 +7,7 @@ icon_state = "fence" layer = BELOW_OBJ_LAYER // I think this is the default but lets be safe? resistance_flags = FLAMMABLE - flags_1 = NO_DECONSTRUCTION | ON_BORDER_1 + flags_1 = ON_BORDER_1 /// If we randomize our icon on spawning var/random_icons = TRUE @@ -22,6 +22,10 @@ ) update_appearance() +// previously NO_DECONSTRUCTION +/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) + return NONE + // Fence gates for the above mentioned fences /obj/structure/railing/wooden_fencing/gate diff --git a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm index 58c08df7941..d35bd9ce1c6 100644 --- a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm +++ b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm @@ -5,7 +5,6 @@ icon_state = "shelf_wood" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' resistance_flags = FLAMMABLE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/structure/rack/wooden/MouseDrop_T(obj/object, mob/user, params) . = ..() @@ -16,6 +15,9 @@ object.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size / 3), world.icon_size / 3) object.pixel_y = text2num(LAZYACCESS(modifiers, ICON_Y)) > 16 ? 10 : -4 +/obj/structure/rack/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE + /obj/structure/rack/wooden/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) @@ -37,28 +39,18 @@ base_icon_state = "barrel" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' resistance_flags = FLAMMABLE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + material_drop = /obj/item/stack/sheet/mineral/wood + material_drop_amount = 4 + cutting_tool = /obj/item/crowbar -/obj/structure/closet/crate/wooden/storage_barrel/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/structure/closet/crate/wooden/storage_barrel/atom_deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 4) - return ..() - -/obj/machinery/smartfridge/producebin - name = "Produce Bin" - desc = "A wooden hamper, used to hold plant products and try keep them safe from pests." - icon_state = "producebin" +/obj/machinery/smartfridge/wooden + name = "Debug Wooden Smartfridge" + desc = "You shouldn't be seeing this!" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' + icon_state = "producebin" resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/producebin - base_icon_state = "produce" + base_build_path = /obj/machinery/smartfridge/wooden + base_icon_state = "producebin" use_power = NO_POWER_USE light_power = 0 idle_power_usage = 0 @@ -67,14 +59,16 @@ can_atmos_pass = ATMOS_PASS_YES visible_contents = TRUE -/obj/machinery/smartfridge/producebin/accept_check(obj/item/weapon) - return (istype(weapon, /obj/item/food/grown)) +/obj/machinery/smartfridge/wooden/Initialize(mapload) + . = ..() + if(type == /obj/machinery/smartfridge/wooden) // don't even let these prototypes exist + return INITIALIZE_HINT_QDEL -/obj/machinery/smartfridge/producebin/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") +// previously NO_DECONSTRUCTION +/obj/machinery/smartfridge/wooden/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE - -/obj/machinery/smartfridge/producebin/crowbar_act(mob/living/user, obj/item/tool) +/obj/machinery/smartfridge/wooden/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return @@ -82,92 +76,51 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/machinery/smartfridge/seedshelf +/obj/machinery/smartfridge/wooden/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/wooden/produce_bin + name = "produce bin" + desc = "A wooden hamper, used to hold plant products and try to keep them safe from pests." + icon_state = "producebin" + base_build_path = /obj/machinery/smartfridge/wooden/produce_bin + base_icon_state = "producebin" + +/obj/machinery/smartfridge/wooden/produce_bin/accept_check(obj/item/item_to_check) + var/static/list/accepted_items = list( + /obj/item/food/grown, + /obj/item/grown, + /obj/item/graft, + ) + + return is_type_in_list(item_to_check, accepted_items) + +/obj/machinery/smartfridge/wooden/seed_shelf name = "Seedshelf" desc = "A wooden shelf, used to hold seeds preventing them from germinating early." icon_state = "seedshelf" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/seedshelf + base_build_path = /obj/machinery/smartfridge/wooden/seed_shelf base_icon_state = "seed" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/seedshelf/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/seedshelf/wooden/accept_check(obj/item/weapon) return istype(weapon, /obj/item/seeds) -/obj/machinery/smartfridge/seedshelf/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/seedshelf/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/smartfridge/rationshelf +/obj/machinery/smartfridge/wooden/ration_shelf name = "Ration shelf" desc = "A wooden shelf, used to store food... preferably preserved." icon_state = "rationshelf" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/rationshelf + base_build_path = /obj/machinery/smartfridge/wooden/ration_shelf base_icon_state = "ration" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/rationshelf/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/rationshelf/wooden/accept_check(obj/item/weapon) return (IS_EDIBLE(weapon) || (istype(weapon,/obj/item/reagent_containers/cup/bowl) && length(weapon.reagents?.reagent_list))) -/obj/machinery/smartfridge/rationshelf/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/rationshelf/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/smartfridge/producedisplay +/obj/machinery/smartfridge/wooden/produce_display name = "Produce display" desc = "A wooden table with awning, used to display produce items." icon_state = "producedisplay" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/producedisplay + base_build_path = /obj/machinery/smartfridge/wooden/produce_display base_icon_state = "nonfood" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/producedisplay/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/producedisplay/accept_check(obj/item/weapon) return (istype(weapon, /obj/item/grown) || istype(weapon, /obj/item/bouquet) || istype(weapon, /obj/item/clothing/head/costume/garland)) - -/obj/machinery/smartfridge/producedisplay/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/producedisplay/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS diff --git a/modular_skyrat/modules/primitive_structures/code/windows.dm b/modular_skyrat/modules/primitive_structures/code/windows.dm index ec861bb2d12..c2c27c62306 100644 --- a/modular_skyrat/modules/primitive_structures/code/windows.dm +++ b/modular_skyrat/modules/primitive_structures/code/windows.dm @@ -4,7 +4,7 @@ icon = 'modular_skyrat/modules/primitive_structures/icons/windows.dmi' icon_state = "green_glass" flags_1 = NONE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION can_be_unanchored = FALSE fulltile = TRUE flags_1 = PREVENT_CLICK_UNDER_1 diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm index be21887eed6..3a909a7d87a 100644 --- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm +++ b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm @@ -141,7 +141,7 @@ /obj/machinery/stasissleeper/default_pry_open(obj/item/used_item) if(occupant) thaw_them(occupant) - . = !(state_open || panel_open || (obj_flags & NO_DECONSTRUCTION)) && used_item.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open) && used_item.tool_behaviour == TOOL_CROWBAR if(.) used_item.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open [src]."), span_notice("You pry open [src].")) diff --git a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm b/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm index d865fc0653f..384921be62a 100644 --- a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm +++ b/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm @@ -121,8 +121,6 @@ ///Implements behaviour that makes it possible to unanchor the railing. /obj/structure/wrestling_corner/wrench_act(mob/living/user, obj/item/tool) . = ..() - if(obj_flags & NO_DECONSTRUCTION) - return to_chat(user, span_notice("You begin to [anchored ? "unfasten the turnbuckle from":"fasten the turnbuckle to"] the floor...")) if(tool.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored))) set_anchored(!anchored) From 088a90ce2d26d3adaaf797b9e9869b36b025c627 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 03:18:24 +0200 Subject: [PATCH 52/60] Automatic changelog for PR #27383 [ci skip] --- html/changelogs/AutoChangeLog-pr-27383.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27383.yml diff --git a/html/changelogs/AutoChangeLog-pr-27383.yml b/html/changelogs/AutoChangeLog-pr-27383.yml new file mode 100644 index 00000000000..d8543b69677 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27383.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - qol: "There's a bit more user feedback when it comes to attempting to handcuff someone." \ No newline at end of file From 83f3b7fe9582445e08d20d351acf76a162d1e065 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 19:37:46 +0200 Subject: [PATCH 53/60] [MIRROR] Fixes escape menu spacing (#27484) * Fixes escape menu spacing (#82875) ## About The Pull Request Long station names clip into the start menu buttons ![Screenshot 2024-04-24 193230](https://github.com/tgstation/tgstation/assets/42397676/a62c3f27-ffa8-471b-9ad5-526003fc33cd) This fixes it ![Screenshot 2024-04-24 193818](https://github.com/tgstation/tgstation/assets/42397676/728c4edb-ad53-4263-a40b-9a598ad7203f) ## Why It's Good For The Game UI bug ## Changelog :cl: fix: Fixes clipping in the ESC menu between buttons and long station names. /:cl: * Fixes escape menu spacing --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- code/modules/escape_menu/home_page.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm index 6d48285ae77..45180d98688 100644 --- a/code/modules/escape_menu/home_page.dm +++ b/code/modules/escape_menu/home_page.dm @@ -5,7 +5,7 @@ /* hud_owner = */ src, src, "Resume", - /* offset = */ 0, + /* offset = */ 1, CALLBACK(src, PROC_REF(home_resume)), ) ) @@ -16,7 +16,7 @@ /* hud_owner = */ null, src, "Settings", - /* offset = */ 1, + /* offset = */ 2, CALLBACK(src, PROC_REF(home_open_settings)), ) ) @@ -27,7 +27,7 @@ /* hud_owner = */ src, src, "Admin Help", - /* offset = */ 2, + /* offset = */ 3, ) ) //SKYRAT EDIT REMOVAL BEGIN @@ -38,7 +38,7 @@ /* hud_owner = */ src, src, "Leave Body", - /* offset = */ 3, + /* offset = */ 4, CALLBACK(src, PROC_REF(open_leave_body)), ) ) From ccad45541a5d527ae8103b324823acd52f65d8f2 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 27 Apr 2024 19:38:10 +0200 Subject: [PATCH 54/60] Automatic changelog for PR #27484 [ci skip] --- html/changelogs/AutoChangeLog-pr-27484.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27484.yml diff --git a/html/changelogs/AutoChangeLog-pr-27484.yml b/html/changelogs/AutoChangeLog-pr-27484.yml new file mode 100644 index 00000000000..b44686f30f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27484.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixes clipping in the ESC menu between buttons and long station names." \ No newline at end of file From b2f41db4fa6e8f036eab9732c79db95ba59baaf4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 28 Apr 2024 00:37:18 +0000 Subject: [PATCH 55/60] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-27337.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27354.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27367.yml | 6 ----- html/changelogs/AutoChangeLog-pr-27378.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27380.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27382.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27383.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27449.yml | 6 ----- html/changelogs/AutoChangeLog-pr-27460.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27480.yml | 4 ---- html/changelogs/AutoChangeLog-pr-27484.yml | 4 ---- html/changelogs/archive/2024-04.yml | 26 ++++++++++++++++++++++ 12 files changed, 26 insertions(+), 48 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-27337.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27354.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27367.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27378.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27380.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27382.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27383.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27449.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27460.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27480.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-27484.yml diff --git a/html/changelogs/AutoChangeLog-pr-27337.yml b/html/changelogs/AutoChangeLog-pr-27337.yml deleted file mode 100644 index 4d6534b27d7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27337.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "basic bots no longer start with all access" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27354.yml b/html/changelogs/AutoChangeLog-pr-27354.yml deleted file mode 100644 index c2f24e996e0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27354.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "miners can now purchase grapple guns" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27367.yml b/html/changelogs/AutoChangeLog-pr-27367.yml deleted file mode 100644 index 086097bdb5f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27367.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - rscadd: "Being deafnened from a loud sound (flashbang, explosions) will now force people not naturally deaf to shout" - - rscadd: "Ear damage multiplier now only applies to taking damage, not healing damage, meaning Felinids (who take 2x the ear damage) will no longer heal ear damage 2x faster." - - refactor: "Ears have been refactored slightly, ear deafness should now update more snappily" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27378.yml b/html/changelogs/AutoChangeLog-pr-27378.yml deleted file mode 100644 index 9f2107bc653..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27378.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "cooling and anti-disruption RCD upgrades can now be printed in ancient protolathes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27380.yml b/html/changelogs/AutoChangeLog-pr-27380.yml deleted file mode 100644 index 4a27c16428b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27380.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - qol: "Water tiles now extinguish fires on items and people." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27382.yml b/html/changelogs/AutoChangeLog-pr-27382.yml deleted file mode 100644 index a531f486c2f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27382.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "being revived with a cyber-heart now properly restarts the cyber heart" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27383.yml b/html/changelogs/AutoChangeLog-pr-27383.yml deleted file mode 100644 index d8543b69677..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27383.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - qol: "There's a bit more user feedback when it comes to attempting to handcuff someone." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27449.yml b/html/changelogs/AutoChangeLog-pr-27449.yml deleted file mode 100644 index 8905c3ac90d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27449.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - qol: "Tuberculosis makes you cough more" - - qol: "Nicotine Addiciton makes you cough less" - - qol: "Medicine Addiction maybe makes you cough more, maybe makes you cough less" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27460.yml b/html/changelogs/AutoChangeLog-pr-27460.yml deleted file mode 100644 index 49ac837d909..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27460.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "brimbeams no longer make a cog appear above the mob" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27480.yml b/html/changelogs/AutoChangeLog-pr-27480.yml deleted file mode 100644 index 35d1ab11e7f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27480.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "fixed being able to install multiple of the same upgrade to medical cyborgs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-27484.yml b/html/changelogs/AutoChangeLog-pr-27484.yml deleted file mode 100644 index b44686f30f8..00000000000 --- a/html/changelogs/AutoChangeLog-pr-27484.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Fixes clipping in the ESC menu between buttons and long station names." \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index ec9dc315d02..2f071be822e 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -472,3 +472,29 @@ 2024-04-27: aKromatopzia: - rscadd: Chaplains can be "Clerics" +2024-04-28: + Melbert: + - qol: Tuberculosis makes you cough more + - qol: Nicotine Addiciton makes you cough less + - qol: Medicine Addiction maybe makes you cough more, maybe makes you cough less + - rscadd: Being deafnened from a loud sound (flashbang, explosions) will now force + people not naturally deaf to shout + - rscadd: Ear damage multiplier now only applies to taking damage, not healing damage, + meaning Felinids (who take 2x the ear damage) will no longer heal ear damage + 2x faster. + - refactor: Ears have been refactored slightly, ear deafness should now update more + snappily + Rhials: + - qol: Water tiles now extinguish fires on items and people. + SkyratBot: + - bugfix: basic bots no longer start with all access + - bugfix: being revived with a cyber-heart now properly restarts the cyber heart + - rscadd: miners can now purchase grapple guns + - bugfix: Fixes clipping in the ESC menu between buttons and long station names. + - bugfix: brimbeams no longer make a cog appear above the mob + - bugfix: cooling and anti-disruption RCD upgrades can now be printed in ancient + protolathes + - qol: There's a bit more user feedback when it comes to attempting to handcuff + someone. + grungussuss: + - bugfix: fixed being able to install multiple of the same upgrade to medical cyborgs From 81c965c645ad8ac6d42a49abe3346943500f5169 Mon Sep 17 00:00:00 2001 From: Waterpig <49160555+Majkl-J@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:12:53 +0200 Subject: [PATCH 56/60] [POWER FIX #2] Synth mechcharger recharging, Crank cell, MCR discharge (#27489) * More power stuff * Update stomach_ethereal.dm --- .../modules/microfusion/code/microfusion_cell.dm | 2 +- modular_skyrat/modules/new_cells/code/power_cell.dm | 4 ++-- modular_skyrat/modules/synths/code/bodyparts/stomach.dm | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm index 62a9e78bbb3..515dc89f174 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm @@ -7,7 +7,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only */ /// The amount of cell charge drained during a drain failure. -#define MICROFUSION_CELL_DRAIN_FAILURE 500 +#define MICROFUSION_CELL_DRAIN_FAILURE STANDARD_CELL_CHARGE * 0.5 /// The heavy EMP range for when a cell suffers an EMP failure. #define MICROFUSION_CELL_EMP_HEAVY_FAILURE 2 /// The light EMP range for when a cell suffers an EMP failure. diff --git a/modular_skyrat/modules/new_cells/code/power_cell.dm b/modular_skyrat/modules/new_cells/code/power_cell.dm index c5751f7b665..7c604393386 100644 --- a/modular_skyrat/modules/new_cells/code/power_cell.dm +++ b/modular_skyrat/modules/new_cells/code/power_cell.dm @@ -4,11 +4,11 @@ icon = 'modular_skyrat/modules/new_cells/icons/power.dmi' icon_state = "crankcell" /// how much each crank will give the cell charge - var/crank_amount = 100 + var/crank_amount = STANDARD_CELL_CHARGE * 0.1 /// how fast it takes to crank to get the crank_amount var/crank_speed = 1 SECONDS /// how much gets discharged every process - var/discharge_amount = 10 + var/discharge_amount = STANDARD_CELL_CHARGE * 0.01 charge_light_type = "old" /obj/item/stock_parts/cell/crank/examine(mob/user) diff --git a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm b/modular_skyrat/modules/synths/code/bodyparts/stomach.dm index 80ba4fa5223..5d14829cc92 100644 --- a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm +++ b/modular_skyrat/modules/synths/code/bodyparts/stomach.dm @@ -56,11 +56,13 @@ UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) ///Handles charging the synth from borg chargers -/obj/item/organ/internal/stomach/synth/proc/on_borg_charge(datum/source, amount) +/obj/item/organ/internal/stomach/synth/proc/on_borg_charge(datum/source, datum/callback/charge_cell, seconds_per_tick) SIGNAL_HANDLER if(owner.nutrition >= NUTRITION_LEVEL_ALMOST_FULL) return - amount /= 50 // Lowers the charging amount so it isn't instant - owner.nutrition = min((owner.nutrition + amount), NUTRITION_LEVEL_ALMOST_FULL) // Makes sure we don't make the synth too full, which would apply the overweight slowdown + // I am NOT rewriting this to fit with TG's standard. I have like 70 bugfixes waiting. Feel free to give synths actual cells if I don't i the future + // ~Waterpig + + owner.nutrition = min(owner.nutrition + (40 / seconds_per_tick), NUTRITION_LEVEL_ALMOST_FULL) // Makes sure we don't make the synth too full, which would apply the overweight slowdown From c54406fff199f19916a51d1bd6c9d0a916a2c32c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 28 Apr 2024 10:13:18 +0200 Subject: [PATCH 57/60] Automatic changelog for PR #27489 [ci skip] --- html/changelogs/AutoChangeLog-pr-27489.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27489.yml diff --git a/html/changelogs/AutoChangeLog-pr-27489.yml b/html/changelogs/AutoChangeLog-pr-27489.yml new file mode 100644 index 00000000000..bafc3b89924 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27489.yml @@ -0,0 +1,5 @@ +author: "Majkl-J" +delete-after: True +changes: + - bugfix: "Synth recharging in mechchargers is now fixed" + - bugfix: "Crank cell can now be cranked for 1MJ of energy instead of 100J. How a human manages to pull that off shall not be discussed" \ No newline at end of file From ba5c112a86bb2845df830df81d59cd54ca8ac99f Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Mon, 29 Apr 2024 01:54:01 +0530 Subject: [PATCH 58/60] Huge Mirror fixes (#27488) * Fixes incorrect operator usage in mecha code (#82570) ## About The Pull Request I completely screwed up and told the original PR author of #82415 (9922d2f2377c3ab571d34c857174c45f5521a5ae) to use the `XOR` operator instead of the `OR` operator (I wasn't thinking right for some reason when I was reading the ref), anyways this PR just fixes that because I misled the contributor into doing something that wasn't correct and actually would BREAK functionality instead. * Fixes TGUI debugging tools (#82569) This project doesn't interfere with the game logic and aims to fix multiple debugging features that are currently broken. Unfortunately, kitchen sink and debug layout became broken after migration to Redux. This PR aims to fix those features. * Removes unused code for HTML UIs (#82589) ## About The Pull Request This is the final PR for https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA that I've been slowly inching towards the past few months. This removes ``updateDialog``, ``updateUsrDialog``, ``IN_USE``, ``INTERACT_MACHINE_SET_MACHINE``, and everything surrounding it. Also fixes advanced camera consoles not booting you off when you're moved out of reach. We called ``check_eye`` on mob life whenever they had their machine var set, but their machine var would never be set to anything that actually used it, which I found to be a little funny but was also probably my fault. ## Why It's Good For The Game This is poor and unmaintained code used for HTML UIs that we no longer need thanks to TGUI, we should get rid of it to encourage the use of TGUI in the future instead. ## Changelog :cl: fix: Advanced camera consoles now boots you off when you're moved out of reach. /:cl: * Fixes a variety of input stalling exploits (#82577) ## About The Pull Request Fixes the following input stalling exploits (maybe missed some): - Changing GPS tag - Setting teleporter destination - Request Console Reply - Various AI law board interactions - Note, I used `is_holding` but technically this means these fail with telekinesis. I can swap them to `can_perform_action(...)`, which allows TK, but I noticed some places explicitly deny TK interactions with Ai law boards. Not sure which is preferred. - Borg Rename Board - Plumbing Machines and Ducts - APCs and SMES terminal placements - Stargazers Telepathy - Go Go Gadget Hat ## Changelog :cl: Melbert fix: You can't change the GPS tag of something unless you can actually use the GPS fix: You can't set the teleporter to a location unless you can actually use the teleporter fix: You can't reply to request console requests unless you can actually use the console fix: You can't update AI lawboards unless you're actually holding them fix: You can't update a borg rename board unless you're actually holding it fix: You can't mess with plumbing machines unless you can actually use them fix: You can't recolor / relayer ducts unless you're actually holding them fix: You can't magically wire APCs and SMESs unless you're right by them fix: You can't use Stargazer Telepathy on people who you can't see fix: You can't configure the Inspector Hat unless you can actually use it /:cl: * [NO GBP] Power outage operation fixes for chem master (#82591) ## About The Pull Request - If the chem master runs out of power mid printing, it will properly stop the printing process and its animation - When transferring reagents it correctly checks if we have enough power without forcing it ## Changelog :cl: fix: chem master properly shuts down if it loses power mid printing and won't transfer reagents for the same /:cl: * Refactor renaming UNIQUE_RENAME items from the pen to an element (#82491) ## About The Pull Request So a bit ago someone in code_general wanted to make plushies renamable, but learnt that just adding the `UNIQUE_RENAME` flag wouldn't work as pens would murder the plushie and only THEN let you rename it. I noted refactoring both pens and plushies to use the new `item_interaction(...)` procs would Just Solve This, but, well, they didn't really have any coding experience. But, hey, renaming being hardcoded to the pens has annoyed me ever since I laid my eyes upon the hot mess that is paperwork code. So here we are! ### We're making it an element. There's not really much to this, this is mostly the same code but moved to an element and with some minor cleanups. First, we move it all from `/obj/item/pen` to a new element we called `/datum/element/tool_renaming`. With this, instead of having it proc on `/obj/item/pen/afterattack(...)`, we register it to proc on the `COMSIG_ITEM_INTERACTING_WITH_ATOM` signal. https://github.com/tgstation/tgstation/blob/6e36ed984070d53e16bed4fa43eb0cbe6460deed/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm#L59-L62 Secondly, we realize the code is just going through each if statement regardless of whether the previous was correct. https://github.com/tgstation/tgstation/blob/6e36ed984070d53e16bed4fa43eb0cbe6460deed/code/modules/paperwork/pen.dm#L225-L258 And, as we're dealing with text, just make it a switch statement instead. ```dm switch(pen_choice) if("Rename") (...) if("Description") (...) if("Reset") (...) ``` Then, we replace all single letter variables with descriptive ones, replace the if-elses with early returns, and make it actually return item interaction flags. Finally, we slap this onto the pen, and we're done. Now we can slap it onto other fitting renaming tools, and it uses the proper item interaction system. ## Why It's Good For The Game I feel it's generally better to not hardcode this to just pens, we have plenty other writing utensils and possible renaming tools. It's also a bit cleaner than before. Apart from that, moves it from using `afterattack(...)` to the proper item interaction chain by using `COMSIG_ITEM_INTERACTING_WITH_ATOM`, which should reduce janky interactions. ## Changelog :cl: refactor: Instead of being hardcoded to the pen, renaming items is now an element. Currently only pens have this, and functionality should be the same, but please report it if you find any items that were renamable but now aren't. /:cl: * Adds various quality of life changes for cooking to make it less click intensive. (#82566) ## About The Pull Request - Increases tray item size by 1 item. - Ranges and griddles can now be fed from trays. Click when closed => fill soup pot. Click when open => fill associated oven tray. Right click when open => fill tray from oven tray Click griddle => fill griddle surface. Right click => fill tray from griddle surface - Martian batter is now 5u of each ingredient into 10u of batter. Hopefully will make it bug out less where it makes far fewer reagents than it is supposed to, fixing reagents, or well soups specifically... is out of scope for this PR. - Adds the ability to print soup pots and large trays from the service lathe Soup pot: 5 Iron sheets, 0.4 bluespace crystal (given their size of 200U) Large serving tray: 2 iron sheets ## Why It's Good For The Game Makes cooking a lot less tedious. Especially for people with low precision when it comes to filling oven trays. This also bring the behavior up to parity with how you can click microwaves with trays to fill them, ditto for the food processor. It also allows chef to use the whole capacity of an oven, as previously you couldn't easily click 6 cake batters or other giant sprites onto the tiny tray. The tray is now sized to be able to easily feed a griddle 8 items. ## Changelog :cl: qol: chef equipment can now deposit and withdraw to/from trays! qol: chef now has access to griddle and oven sized trays! qol: service can now print soup pots /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Removes grid usage + heavy refactors (#82571) ## About The Pull Request Grid has been deprecated for quite some time and we still use it. I won't completely remove the component, this way downstreams won't immediately suffer, but I can remove it from usage. Some of these UIs had issues with them and as a hobby project I've refactored them into typescript / rebuilt them. Airlock electronics, for instance, looks substantially better.
    before/after as requested current airlock electronics scrolls into oblivion ![6RJ29HCPob](https://github.com/tgstation/tgstation/assets/42397676/ba82bc20-40fa-4af0-b709-7c8846c25652) updated ![Screenshot 2024-04-11 164321](https://github.com/tgstation/tgstation/assets/42397676/05507e06-6305-4175-8476-778c345f02c8)
    ## Why It's Good For The Game Code improvement + probably UI bug fixes ## Changelog :cl: fix: Airlock electronics and other access-config type UIs should look much better. /:cl: * modular fixes * [No GBP] Removes cogbar from some stealthy actions (#82593) Issue brought some missed hidden actions to my attention. I left cogbars in for _breaking_ handcuffs because resisting is sort of a gray area. On one hand, you don't want someone to see you doing it; on the other, there is a visible warning that you started doing it. So, meet in the the middle, breaking handcuffs is still visible while resisting isn't. Closes #82583 Cogbars are not intended to ruin stealth :cl: fix: Deviants buffed: Rogue shoelacing, pickpocketing and restraint resisting no longer give cogbar icons. /:cl: * [NO GBP] ...Remember to add SIGNAL_HANDLER (#82630) ## About The Pull Request Just realized I forgot to add `SIGNAL_HANDLER` to the all-nighter `on_removed_limb(...)` proc, even though it handles signals. ## Why It's Good For The Game https://github.com/tgstation/tgstation/blob/fe26373572e41415ec12e2b0785f0c6dc2567577/code/__DEFINES/dcs/helpers.dm#L9-L11 * React cleanup (#82607) ## About The Pull Request - No defaultHooks in react. Might fix issues where pages were not scrollable on hover. - createRef in a functional component. should be useref ## Why It's Good For The Game Code improvement * Security photobooths have their own ID (#82628) ## About The Pull Request Prevents the HoP's photobooth button from connecting to the security photobooth via having the same ID. ## Why It's Good For The Game I forgot to add this when I made the security photobooth but it's important that by default without any varedits, the HoP and security photobooths stay separate. ## Changelog :cl: fix: The HoP's photobooth button is now consistently connected to the HoP's photobooth. /:cl: * Fix buckled alert unbuckling not working properly (#82627) ## About The Pull Request So funny thing, while trying to reproduce a different issue on the current master, I coincidentally let my local instance start without reading, latejoined on the shuttle, and I noticed it wasn't letting me unbuckle as easily. Looking into this a bit later, it seems as if it's a line #82593 accidentally changed while moving around the `/mob/living/carbon/resist_buckle()` proc's flow. https://github.com/tgstation/tgstation/blob/fe26373572e41415ec12e2b0785f0c6dc2567577/code/modules/mob/living/carbon/carbon.dm#L238-L241 While before it was ```dm /mob/living/carbon/resist_buckle() if(HAS_TRAIT(src, TRAIT_RESTRAINED)) (...) else buckled.user_unbuckle_mob(src,src) ``` Just changing this to `buckled.user_unbuckle_mob(src, src)` fixes this. ## Why It's Good For The Game Fixes buckled alert unbuckling not working properly. Fixes #82627. ## Changelog :cl: fix: Clicking the buckled alert unbuckles you again. /:cl: * Advanced camera consoles correctly deactivates when something happens to it or the user (#82619) ## About The Pull Request - Fixes #82520 1. The eye deactivates when the machine is destroyed/deleted 2. The eye deactivates when the machine loses power 3. The computer constantly moniters the users status inside `process()` and will deactivate when anything happens to them. Its not enough to just hook onto to the mobs `COMSIG_MOVABLE_MOVED` signal. Literarly anything can happen to them so we have to check constantly for any changes ## Changelog :cl: fix: advanced camera consoles correctly deactivate when something happens(no proximity, no power etc) to its user /:cl: * Oven tray checks for ovens (#82615) ## About The Pull Request - Fixes #82610 Only oven trays have this proc not serving trays or other stuff ![Screenshot (408)](https://github.com/tgstation/tgstation/assets/110812394/4867cc14-9df3-4398-9d2d-f8e38b5f0da9) Also oven trays have a null atom storage which prevents it from being put back in the oven after taking it out. So we remove that check ## Changelog :cl: fix: you can put back the oven tray after you take it out fix: only oven trays are allowed in ovens preventing baked food runtimes /:cl: * Living Limb fixes (feat: Basic mobs attack random body zones again) (#82556) ## About The Pull Request Reworks Living Limb code to fix a bunch of runtimes and issues I saw while testing Bioscrambler. Specifically, the contained mobs are now initialised via element following attachment so that signal registration can occur at the correct time. This allows limbs to function correctly when added from nullspace via admin panel or bioscrambler. Secondarily (and more wide-ranging) at some point (probably #79563) we inadvertently made basic mobs only attack the target's chest instead of spreading damage. This is problematic for Living Flesh which can only attach itself to damaged limbs but was left unable to attack damaged limbs. I've fixed this in a way which is maybe stupid: adding an element which randomises attack zone pre-attack. Living limbs also limit this to _only_ limbs (although it will fall back to chest if you have no limbs at all). This is _technically_ still different, the previous behaviour used `adjustBruteLoss` and `adjustFireLoss` and would spread the damage across your entire body, but there isn't a route to that via the new interface and this seems close enough. ## Changelog :cl: fix: Living Limbs created by Bioscrambler will be alive. fix: Living Limbs can once more attach themselves to your body. balance: Living Limbs will prioritise attacking your limbs. fix: Basic Mobs will once again spread their damage across body zones instead of only attacking your chest. /:cl: * RPG Loot: Revisited & READY (#82533) Revival of #72881 A new alt click window with a tarkov-y loading spinner. Replaces the object item window in stat panel.
    vids toggleable grouping: ![syAA5zf6RK](https://github.com/tgstation/tgstation/assets/42397676/c89b372d-29f6-4ebe-895d-f73bbdc41c19) now lists the floor as first obj: ![abc](https://github.com/tgstation/tgstation/assets/42397676/cd8dc962-2ac7-41bf-a5d3-b9e926116b06) in action: ![dreamseeker_IkrPKt2QZt](https://github.com/tgstation/tgstation/assets/42397676/1f990aa0-60f0-47e7-9d93-b63e35d05273)
    - search by name - 515 image generator is much faster than alt click menu - opening a gargantuan amount of items shouldnt freeze your screen - groups similar items together in stacks by default, toggleable - shows tile as first item - Shift and Ctrl compatible with LMB :computer_mouse: - RMB points points at items (sry i could not get MMB working) - key Esc to exit the window. For devs: - A new image generation tech. - An error refetch mechanic to the Image component - It does not "smart track" the items being added to the pile, just reopen or refresh. This was a design decision. Honestly I just dislike the stat panel Fixes #53824 Fixes ![image](https://github.com/tgstation/tgstation/assets/42397676/0e50faab-7d4d-4bf7-8c5b-4ac28547bfbd) :cl: add: Added a loot window for alt-clicking tiles. del: Removed the item browser from the stat panel. /:cl: --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: AnturK Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> * Reverts parts of #82602 (nodeath checks) (#82637) ## About The Pull Request Reverts the nodeath checks of #82602 I opened a review thinking these checks were sus and the PR author said they would remove them, but it was merged before that happened. TL;DR 1. I just noticed this now but it only affects carbons / humans it doesn't even cover living or any other subtypes 2. Kinda sus. Some code intentionally skips checking nodeath (I guess? Like removing the brain for example) so we would need a larger audit of this rather than haphazardly throwing it in. * Fixes to battle arcade (#82620) ## About The Pull Request Added gear for world nine, removed the "Gear" gear that did nothing. Made counterattacks to kill an enemy properly kill the enemy. I renamed some gear items to fit the theme of the area they are unlocked in just as a small thing. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/82613 ## Changelog :cl: fix: Battle arcade's higher levels no longer gives you a "Gear" gear, and counterattacks can now properly kill enemies. /:cl: * Fixes SMES terminal placing under the SMES and not under the player (#82665) ## About The Pull Request Changes `src` to`user` to get intended behavior. * Birdshot: Toy crate (#82633) ## About The Pull Request Gives the clown+mime their toy crate. ## Why It's Good For The Game *honk* * tram ai sat starts with a full smes (#82646) ## About The Pull Request consistency and also this is fixes a bug introduced by that one power refactor ## Why It's Good For The Game bug bad ## Changelog :cl: fix: tramstation AI sat starts full /:cl: * [no gbp] Space Ruin bioscramblers shouldn't chase people around (#82649) ## About The Pull Request See title They wouldn't lock on to people on the station from a space ruin, but would to whoever entered their z level the second it was entered. Also fixes bug where I changed `status_flags` to `status_effects` for some reason which isn't where you look for godmode ## Why It's Good For The Game We have a space ruin whcih several (coreless) anomalies spawn on, the bioscrambler was put as an option because it was already immortal. It's weird though to zone into the ruin and immediately have every anomaly in there lock onto you, the best intended effect is probably for these ones specifically not to be bloodthirsty. We kind of only care about that behaviour on the station. ## Changelog :cl: fix: Anomalous Research ruin Bioscrambler anomalies won't home in on targets fix: Bioscrambler won't randomly drop its target for no reason /:cl: * Sunders the many unused sprites and organizes what's left in structures.dmi (#82658) ## About The Pull Request Hello again, I noticed the /obj/structures.dmi file had a lot of unused stuff like tables from two generations ago, so I changed some stuff around: - Many unused, old icons deleted, mostly window variants used in old smoothing systems I imagine - Reorganized many sprites in the file so they're more grouped together - Tweaked some barricade sprite naming to be consistent/standardized, and to let others know they're not _too_ old... - Fixed a misnomer that I believe was making directional tinted windows look like frosted windows ## Why It's Good For The Game Saves on file space, and satisfies your brain's pattern recognition bits ### Spriting Old: ![image](https://github.com/tgstation/tgstation/assets/143908044/0717940e-787e-40ee-85e2-0a0c5ebc0837) New: ![image](https://github.com/tgstation/tgstation/assets/143908044/3954ba3b-b261-4700-986a-d30f3aa0e2a6) also good lord those linen bin sprites are a crime ## Changelog :cl: fix: Probably fixed directional tinted windows looking like directional frosted windows image: Deleted a bunch of unused structure sprites /:cl: * Birdshot Wall Sanity Pass (#82598) ## About The Pull Request Cleans up minor artifacting in the Birdshot Sec-Tram Closed Turfs ## Why It's Good For The Game Someone definitely didn't mean to place some machines under Closed Turfs. This barely qualifies as player facing. ## Changelog :cl: fix: Cleans up some rocks on Birdshot /:cl: * [NO GBP] Fixes deconstruction of closets & crates under a special case (#82612) ## About The Pull Request So if a closet/crate has the `NO_DEBRIS_AFTER_DECONSTRUCTION` set on it and if someone/something is still inside, then after deconstruction they get deleted rather than getting dumped out first. Could cause potential hard delete of mobs & stuff. We don't want to deal with that ## Changelog :cl: fix: closets & crates will dump all contents out first before deleting itself regardless of `NO_DEBRIS_AFTER_DECONSTRUCTION` thus not for e.g. hard deleting mobs inside it /:cl: * Fixes ordinance lab igniter in IceBox (#82595) ## About The Pull Request - Fixes #82294 Basically the same idea of merging ordanance lab with the burn chamber so they share the same apc as already implemented in #82322 ## Changelog :cl: fix: Ordinance lab igniter in Icebox works again /:cl: * Birdshot: engi wardrope. (#82639) ## About The Pull Request Add engi wardrope on Birdshot. ## Why It's Good For The Game Birdshot doesn't have engi wardrope. :cl: fix: Birdshot now have engi wardrope /:cl: * Gives shadow walk a new, spookier, and shorter sound effect that no longer ignores walls (#82689) ## About The Pull Request This gives shadow walk a snazzy new sound effect for entering/exiting jaunt. https://github.com/tgstation/tgstation/assets/28870487/c25f720f-5bad-4063-8d6e-140fd41bd740 This also has the sounds it plays no longer passes through walls. ## Why It's Good For The Game The ethereal_entrance/exit sound effects are drawn out, and pretty grating. They work for the other jaunts they're used for because a jaunt typically lasts longer than the sound itself. Nightmares are frequently dancing in and out of jaunt, and the sound effects for entering/exiting tend to overlap. It gets loud and annoying really fast. This sound effect is quicker, spookier, and more distinct. As for making the sound not ignore walls, I think it's pretty dumb how easy it is to detect the spooky scary shadow antag just by sitting in your department. It takes a lot of the initial fear and paranoia they have the potential for is wasted when Joe Geneticist can hear them messing around in their territory without having to leave their chair. ## Changelog :cl: Rhials sound: Nightmare has a new sound effect for entering/exiting shadow jaunt. It also no longer can be heard through walls. /:cl: * [MIRROR] Alt click refactor (#2029) * Alt click refactor * Some early conflict removal * Big modular refactor * Update console.dm * Update paper.dm --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> * Yeets `ATTACK_QDELETED`, fixes welding torches not using fuel on attacking non-mobs (2 year old bug) (#82694) ## About The Pull Request - Deletes `ATTACK_QDELETED` - May have been necessary in the past but it's pointless now. All it does is clutter the attack chain. Perish. - Fixes welders not using fuel on attacking non-mobs - #65762 "fixed" welders consuming fuel on clicking turfs by adding an `isliving` check and not an `ismovable` check? ## Changelog :cl: Melbert fix: Blobs may rejoice, welding torches now consume fuel when attacking objects again after two years. /:cl: * electric_welder fire * Quirks, which give items, now have quirk_item arg specified as obj/item, instead of being just a var (#82650) ## About The Pull Request quirk_item is now /obj/item, since it will allow for calling procs or getting variables from this item It's required for non-modular translation to call for item's name to remove articles ## Why It's Good For The Game It's always an item, and if it's a path, it's already checked for it. Better usage in the future. * turns martial arts gloves into a component (#82599) sleeping carp gloves also work on mind init this means for the sake of deathmatch you dont have to put them off and on fixes #82321 :cl: fix: you no longer need to put your sleeping carp gloves off and on in Deathmatch to get the martial art /:cl: --------- Co-authored-by: san7890 * Regal Rats can now tear down posters (#82673) ## About The Pull Request i was fixing something on bagil and someone who was playing a regal rat (after the round ended) said they wanted to be able to tear down posters as a regal rat so i decided to code it because it made sense. it's an element so literally any mob can tear down posters but i can't think of any other mobs that would make sense to let it tear down posters so we'll leave it just for _The Champion of All Mislaid Creatures_ for now ## Why It's Good For The Game Regal Rats should be all about sludgemaxxing and fucking up maintenance to make it look even more grody than it should be. Being able to tear up those disgusting and well-drawn posters to leave behind nothing but scraps fits that motif. The element has a `do_after()` just to make sure His Holiness doesn't accidentally tear down his posters while clicking (i think all mobs should have this but that's a different issue man) also includes some code improvement and user feedback in some failure cases that already existed in the code. ## Changelog :cl: add: Regal Rats are now able to tear down those colorful posters those weird grey creatures keep spackling up on the walls of their rightful domain. /:cl: * Adds "Strong Stomach" quirk, a core CDDA/PZ quirk we've sorely been missing. Also Deviant Tastes dirty food re-nerf. (#82562) ## About The Pull Request - Adds Strong Stomach quirk. - 4 points - You can eat dirty food without risk of getting disease. - You suffer less negative effects from vomiting. Vomit stuns you for half the duration, and you lose half as much nutrition. - Reverts https://github.com/tgstation/tgstation/pull/76864 , integrates its effects into Strong Stomach instead. ## Why It's Good For The Game - Lotta people (namely Lizards and sometimes Felines with Deviant Tastes) run gimmicks involving them being a gremlin person and eating trash off the ground, and it's rather hard to accomplish this now since it makes you a public medbay enemy # 1. This quirk should give them an option to avoid that. - Also (as mentioned in the title) both CDDA and PZ have this trait and I can't believe we're missing it! This is something in modifiable-character-traits/quirks-101. - I moved the effects from #76864 to this quirk because 1. I thought it was more fitting and 2. I thought the original PR was kinda wack for what is (generally) a neutral quirk. ## Changelog :cl: Melbert add: Adds the Strong Stomach quirk, which allows you to eat grimy food without worry about disease, and makes you a bit more resilient to the effects of vomiting. del: Deviant Tastes no longer prevents you from getting a negative moodlet from eating dirty food. Strong Stomach does that now. /:cl: --------- Co-authored-by: Jacquerel * Remove several functions from collections.js which have ES5 equivalents (#82417) * Makes it EVEN EASIER to work with atom item interactions ft. "Leaf and Branch" & "Death to Chains" (#82625) * apc fix * Gulag Adjustments Two (#82561) ## About The Pull Request I have received feedback that after the prior changes in #81971, the gulag is still a little bit too subject to RNG. The main culprit (as in my previous PR) is Iron being kind of cheap and the fact that unlike the old Gulag you no longer have any way of headhunting more valuable materials (everything appears as boulders on your ore scanner). My solution to this is wider than the last one of tweaking point values, but also much simpler: Just make every boulder you mine be worth the same amount of points regardless of what is inside of it. On the average test I made I could comfortably mine about 40-45 boulders in ten minutes. We'll make some adjustments to that rather than leaving 40 as the target number; Most players upon being teleported to the gulag are going to spend a few minutes whining and bemoaning their fate instead of getting straight to work. I had the benefit of being able to make sure my run started as soon as a storm ended so I wouldn't need any kind of midpoint break. I was also always the only person playing on my local instance, there hadn't been any other pesky prisoners before me who had already mined out all the nearest available deposits. And of course, let us not forget, I am an MLG master league ss13 player who was surely performing well above average. So we'll round that down to: Each boulder is worth 33 points, meaning you need to collect 31 boulders to complete a 1000 point (roughly ten minute) sentence. How do I ensure that every boulder is worth the same amount of points? Well it's pretty easy. One boulder = one material sheet. One material sheet = 33 points. Simple. "Now Jacquerel", I hear you not saying because you don't want me to know about this thing you would prefer to do instead of hitting rocks outside; "if I simply smash all of the tables and microwaves and botany trays and bed in the gulag I can easily get like 65 sheets of Iron, which is almost enough to buy the freedom for two entire people!" Unfortunately I knew you were going to try and do that and the prisoner point machine will only give you points for material sheets which have been printed from the material smelter (well, any material smelter actually but you should probably use the one in the gulag). You'll be able to tell because if you examine a valid material sheet it will mention a little maker's mark on it, which is absent in the beat-up iron that you get from smashing furniture to bits. Also glass is worth 0 points. Don't waste time digging up that shit. As glass has had all of its point value removed, I have added a "work pit" to the gulag to compensate. You can pull boulders out of this indefinitely via effort, however it also stamcrits you every time. It's not very fun to do this, but that's because I would prefer you to go find the rocks out in the field instead. This is a last resort. You can do this if there's no boulders left to mine or if you really really really hate mining and would rather very slowly click on one tile repeatedly to get your boulders instead. As a tiny bonus doing this gives workout experience. This isn't a totally ideal solution but I think it'll do for now. ## Why It's Good For The Game What we want out of the gulag is: - Something where officers can vaguely approximate an expected sentence duration. - A task that requires players to actually be spending that time doing something to get out of here. - Produces at least some amount of useful materials. In I think roughly that order. I hope this change accomplishes all three of these in a way that is somewhat predictable rather than throwing darts at a board. ## Changelog :cl: balance: Gulag mining has been rebalanced so that every boulder is worth the same amount of points to mine for a prisoner regardless of what it contains, and should be more consistent. add: A vent which boulders can be hauled out of by hand has been added to the gulag which you can use if there's nothing left to mine. It is very slow, but at least it gives you a workout... /:cl: * stone * Makes test merge bot continue with other PRs if updating one fails. (#82717) Right now updating https://github.com/tgstation/tgstation/pull/81089#issuecomment-1907296233 fails because it exceeds github character limit for comments. This will make it work until backed is updated. * Fixes the RnD console by adding a removed import (#82750) ## About The Pull Request The 'map' import was removed from this file by #82417 but it's still used in place in code. This re-adds the import ## Why It's Good For The Game Fixes RnD consoles ## Changelog :cl: fix: Fixed RnD consoles not being able to be opened. /:cl: Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> * Fixes cargo import (#82755) ## About The Pull Request One of the imports got removed and there were no warnings... Man if only there were a technology that could warn us in advance ## Why It's Good For The Game UI fixes ## Changelog :cl: fix: Fixed a bluescreen in cargo console /:cl: * fixes * Fixes, fixes. * Pre-emptive mirror of https://github.com/tgstation/tgstation/pull/82892 * Turf weakref persists in changeturf / Fix plasma cutters (#82906) ## About The Pull Request Turf references don't change so logically, turf weakrefs wouldn't change if the turf changes. By not doing this this can cause bugs: See #82886 . (This Fixes #82886) (Projectiles hold a list of weakrefs to atoms hit to determine what they have already hit. Because turf weakrefs reset, we could "hit" the same turf twice if it destroyed the turf. Old behavior - this was fine but now that they're weakrefs, we get two weakref datums in the list that point to the same ref.) Less hacky alternative to #82901 . (Closes #82901) ## Changelog :cl: Melbert fix: Plasma cutters work again /:cl: --------- Co-authored-by: san7890 Co-authored-by: Interception&? <137328283+intercepti0n@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: Ketrai Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Jacquerel Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: AnturK Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> Co-authored-by: vect0r <71346830+Vect0r2@users.noreply.github.com> Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: AMyriad <143908044+AMyriad@users.noreply.github.com> Co-authored-by: Zytolg <33048583+Zytolg@users.noreply.github.com> Co-authored-by: Xackii <120736708+Xackii@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com> Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com> Co-authored-by: Arthri <41360489+Arthri@users.noreply.github.com> Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> --- _maps/map_files/Birdshot/birdshot.dmm | 142 ++- .../map_files/IceBoxStation/IceBoxStation.dmm | 965 +++++++++--------- _maps/map_files/Mining/Lavaland.dmm | 472 ++++----- _maps/map_files/tramstation/tramstation.dmm | 348 ++++--- code/__DEFINES/basic_mobs.dm | 2 + code/__DEFINES/click.dm | 8 + code/__DEFINES/combat.dm | 2 + .../signals_atom/signals_atom_mouse.dm | 1 - .../signals/signals_mob/signals_mob_main.dm | 2 - code/__DEFINES/dcs/signals/signals_object.dm | 2 - code/__DEFINES/interaction_flags.dm | 7 +- code/__DEFINES/mobs.dm | 4 + code/__DEFINES/obj_flags.dm | 27 +- code/__DEFINES/say.dm | 1 + code/__DEFINES/subsystems.dm | 1 + code/__DEFINES/traits/declarations.dm | 1 + code/__DEFINES/traits/sources.dm | 4 +- code/__DEFINES/~skyrat_defines/combat.dm | 7 +- code/_globalvars/bitfields.dm | 27 +- code/_globalvars/traits/_traits.dm | 3 +- code/_globalvars/traits/admin_tooling.dm | 3 +- code/_onclick/ai.dm | 15 +- code/_onclick/click.dm | 30 +- code/_onclick/click_alt.dm | 66 ++ code/_onclick/cyborg.dm | 22 +- code/_onclick/item_attack.dm | 13 +- code/_onclick/observer.dm | 2 +- code/_onclick/overmind.dm | 4 +- .../subsystem/processing/obj_tab_items.dm | 24 - code/controllers/subsystem/statpanel.dm | 183 ---- code/controllers/subsystem/tgui.dm | 2 - code/datums/ai/oldhostile/hostile_tameable.dm | 2 +- code/datums/browser.dm | 4 - code/datums/components/gps.dm | 10 +- code/datums/components/infective.dm | 9 +- code/datums/components/martial_art_giver.dm | 45 + .../components/material/material_container.dm | 1 + .../components/pet_commands/obeys_commands.dm | 1 + code/datums/components/rotation.dm | 1 + code/datums/components/style/style_meter.dm | 15 +- code/datums/components/toggle_suit.dm | 9 +- .../datums/elements/attack_zone_randomiser.dm | 33 + .../elements/living_limb_initialiser.dm | 19 + code/datums/elements/poster_tearer.dm | 45 + code/datums/elements/ridable.dm | 12 + code/datums/elements/strippable.dm | 6 +- code/datums/elements/tool_renaming.dm | 78 ++ code/datums/martial/boxing.dm | 17 +- code/datums/martial/krav_maga.dm | 17 +- code/datums/martial/sleeping_carp.dm | 20 +- code/datums/martial/wrestling.dm | 17 +- code/datums/mood_events/needs_events.dm | 2 +- code/datums/quirks/_quirk.dm | 2 +- .../quirks/negative_quirks/all_nighter.dm | 2 + .../quirks/positive_quirks/strong_stomach.dm | 12 + code/datums/storage/storage.dm | 3 +- code/game/atom/_atom.dm | 8 +- code/game/atom/atom_tool_acts.dm | 34 +- code/game/machinery/_machinery.dm | 21 +- code/game/machinery/autolathe.dm | 10 +- code/game/machinery/camera/camera.dm | 27 +- code/game/machinery/civilian_bounties.dm | 6 +- code/game/machinery/computer/_computer.dm | 6 - .../game/machinery/computer/arcade/_arcade.dm | 10 +- code/game/machinery/computer/arcade/battle.dm | 10 +- .../machinery/computer/arcade/battle_gear.dm | 21 +- .../game/machinery/computer/buildandrepair.dm | 2 +- .../machinery/computer/camera_advanced.dm | 58 +- code/game/machinery/computer/dna_console.dm | 12 +- .../machinery/computer/prisoner/_prisoner.dm | 8 +- code/game/machinery/computer/teleporter.dm | 4 +- code/game/machinery/constructable_frame.dm | 9 +- code/game/machinery/defibrillator_mount.dm | 9 +- code/game/machinery/deployable.dm | 9 +- code/game/machinery/dish_drive.dm | 7 +- .../game/machinery/dna_infuser/dna_infuser.dm | 8 +- code/game/machinery/fat_sucker.dm | 9 +- code/game/machinery/harvester.dm | 18 +- code/game/machinery/iv_drip.dm | 9 +- code/game/machinery/machine_frame.dm | 15 +- code/game/machinery/photobooth.dm | 1 + code/game/machinery/pipe/construction.dm | 2 - code/game/machinery/requests_console.dm | 5 +- code/game/machinery/sleepers.dm | 6 +- code/game/machinery/slotmachine.dm | 40 +- code/game/machinery/spaceheater.dm | 8 +- code/game/machinery/stasis.dm | 26 +- .../telecomms/computers/telemonitor.dm | 1 - code/game/objects/buckling.dm | 12 - .../anomalies/anomalies_bioscrambler.dm | 41 +- code/game/objects/effects/posters/poster.dm | 19 +- code/game/objects/items.dm | 25 + .../game/objects/items/AI_modules/freeform.dm | 6 +- .../objects/items/AI_modules/full_lawsets.dm | 4 +- code/game/objects/items/AI_modules/hacked.dm | 3 +- .../game/objects/items/AI_modules/supplied.dm | 2 +- code/game/objects/items/AI_modules/zeroth.dm | 2 +- code/game/objects/items/airlock_painter.dm | 18 +- code/game/objects/items/cards_ids.dm | 26 +- .../machines/machine_circuitboards.dm | 5 +- code/game/objects/items/cosmetics.dm | 13 +- code/game/objects/items/crayons.dm | 8 +- code/game/objects/items/credit_holochip.dm | 18 +- .../objects/items/devices/desynchronizer.dm | 18 +- .../objects/items/devices/geiger_counter.dm | 7 +- .../objects/items/devices/laserpointer.dm | 9 +- .../objects/items/devices/quantum_keycard.dm | 7 +- .../objects/items/devices/radio/headset.dm | 12 +- .../items/devices/scanners/autopsy_scanner.dm | 2 +- .../items/devices/scanners/gas_analyzer.dm | 26 +- .../items/devices/scanners/health_analyzer.dm | 20 +- .../devices/scanners/sequence_scanner.dm | 4 +- .../items/devices/scanners/slime_scanner.dm | 2 +- code/game/objects/items/devices/swapper.dm | 12 +- .../objects/items/devices/taperecorder.dm | 6 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/emags.dm | 4 +- code/game/objects/items/etherealdiscoball.dm | 4 +- code/game/objects/items/extinguisher.dm | 8 +- code/game/objects/items/flamethrower.dm | 20 +- .../game/objects/items/implants/implantpad.dm | 7 +- code/game/objects/items/inspector.dm | 9 +- code/game/objects/items/machine_wand.dm | 7 +- code/game/objects/items/paiwire.dm | 8 +- code/game/objects/items/pet_carrier.dm | 7 +- code/game/objects/items/pillow.dm | 12 +- code/game/objects/items/rcd/RPLD.dm | 3 +- code/game/objects/items/rcd/RWD.dm | 6 +- code/game/objects/items/robot/items/hypo.dm | 13 +- .../game/objects/items/robot/items/storage.dm | 23 +- .../objects/items/robot/robot_upgrades.dm | 5 +- code/game/objects/items/spear.dm | 13 +- code/game/objects/items/stacks/bscrystal.dm | 2 +- code/game/objects/items/stacks/medical.dm | 8 +- .../game/objects/items/stacks/sheets/glass.dm | 4 +- .../objects/items/stacks/sheets/mineral.dm | 20 +- .../items/stacks/sheets/sheet_types.dm | 4 +- .../objects/items/stacks/sheets/sheets.dm | 18 +- code/game/objects/items/stacks/telecrystal.dm | 2 +- code/game/objects/items/stacks/wrap.dm | 9 +- code/game/objects/items/storage/bags.dm | 39 +- code/game/objects/items/storage/belt.dm | 6 +- .../items/storage/boxes/engineering_boxes.dm | 8 +- code/game/objects/items/storage/fancy.dm | 4 +- code/game/objects/items/storage/lockbox.dm | 6 +- code/game/objects/items/tanks/tank_types.dm | 10 +- code/game/objects/items/tcg/tcg_machines.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 28 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/items_reskin.dm | 57 ++ code/game/objects/objs.dm | 131 +-- .../structures/beds_chairs/alien_nest.dm | 56 +- .../objects/structures/beds_chairs/bed.dm | 9 +- .../objects/structures/beds_chairs/chair.dm | 9 +- code/game/objects/structures/bedsheet_bin.dm | 7 +- .../structures/crates_lockers/closets.dm | 7 +- code/game/objects/structures/divine.dm | 10 +- code/game/objects/structures/false_walls.dm | 4 +- code/game/objects/structures/kitchen_spike.dm | 2 +- .../objects/structures/lavaland/geyser.dm | 10 +- .../objects/structures/lavaland/gulag_vent.dm | 42 + code/game/objects/structures/morgue.dm | 7 +- code/game/objects/structures/railings.dm | 2 - code/game/objects/structures/reflector.dm | 4 +- code/game/objects/structures/shower.dm | 2 - code/game/objects/structures/tables_racks.dm | 8 +- .../objects/structures/training_machine.dm | 19 +- .../transit_tube_construction.dm | 2 - .../objects/structures/windoor_assembly.dm | 2 - code/game/objects/structures/window.dm | 6 +- code/game/turfs/change_turf.dm | 4 + code/game/turfs/open/floor/plating.dm | 5 +- code/modules/admin/sound_emitter.dm | 11 +- .../abductor/equipment/gear/abductor_items.dm | 8 +- .../antagonists/cult/rune_spawn_action.dm | 2 +- code/modules/antagonists/cult/runes.dm | 2 +- code/modules/art/paintings.dm | 10 +- code/modules/art/statues.dm | 2 - code/modules/assembly/health.dm | 6 +- code/modules/assembly/holder.dm | 2 - code/modules/assembly/infrared.dm | 2 - .../asset_cache/assets/icon_ref_map.dm | 28 + .../asset_cache/transports/asset_transport.dm | 10 +- .../atmospherics/machinery/atmosmachinery.dm | 5 - .../components/binary_devices/passive_gate.dm | 16 +- .../binary_devices/pressure_valve.dm | 16 +- .../components/binary_devices/pump.dm | 16 +- .../binary_devices/temperature_gate.dm | 16 +- .../binary_devices/temperature_pump.dm | 16 +- .../components/binary_devices/volume_pump.dm | 16 +- .../components/electrolyzer/electrolyzer.dm | 8 +- .../components/trinary_devices/filter.dm | 16 +- .../components/trinary_devices/mixer.dm | 16 +- .../components/unary_devices/cryo.dm | 15 +- .../unary_devices/outlet_injector.dm | 16 +- .../components/unary_devices/passive_vent.dm | 2 + .../components/unary_devices/thermomachine.dm | 7 +- .../components/unary_devices/unary_devices.dm | 6 + .../components/unary_devices/vent_pump.dm | 1 + .../components/unary_devices/vent_scrubber.dm | 1 + .../portable/portable_atmospherics.dm | 9 +- .../awaymissions/mission_code/snowdin.dm | 2 +- code/modules/bitrunning/objects/disks.dm | 4 +- code/modules/cards/deck/deck.dm | 15 +- code/modules/cards/singlecard.dm | 8 +- code/modules/cargo/supplypod_beacon.dm | 16 +- code/modules/cargo/universal_scanner.dm | 6 +- code/modules/client/client_defines.dm | 5 +- code/modules/client/client_procs.dm | 5 +- code/modules/clothing/glasses/_glasses.dm | 51 +- code/modules/clothing/head/jobs.dm | 34 +- code/modules/clothing/head/soft_caps.dm | 12 +- code/modules/clothing/masks/animal_masks.dm | 11 +- code/modules/clothing/masks/bandana.dm | 66 +- code/modules/clothing/masks/breath.dm | 8 +- code/modules/clothing/masks/costume.dm | 8 - code/modules/clothing/neck/_neck.dm | 10 +- code/modules/clothing/shoes/_shoes.dm | 17 +- .../clothing/spacesuits/_spacesuits.dm | 21 +- code/modules/clothing/spacesuits/plasmamen.dm | 6 +- code/modules/clothing/suits/wintercoats.dm | 8 +- code/modules/clothing/under/_under.dm | 33 +- code/modules/clothing/under/costume.dm | 1 + code/modules/detectivework/scanner.dm | 18 +- .../experiment/handlers/experiment_handler.dm | 1 + code/modules/fishing/aquarium/aquarium.dm | 6 +- .../food_and_drinks/machinery/griddle.dm | 38 + .../food_and_drinks/machinery/grill.dm | 30 +- .../food_and_drinks/machinery/icecream_vat.dm | 13 +- .../food_and_drinks/machinery/microwave.dm | 33 +- .../modules/food_and_drinks/machinery/oven.dm | 60 +- .../food_and_drinks/machinery/stove.dm | 34 + .../machinery/stove_component.dm | 8 + .../food_and_drinks/recipes/food_mixtures.dm | 4 +- code/modules/holodeck/turfs.dm | 5 +- code/modules/hydroponics/biogenerator.dm | 8 +- code/modules/hydroponics/hydroponics.dm | 2 - code/modules/jobs/job_types/prisoner.dm | 4 +- code/modules/lootpanel/_lootpanel.dm | 75 ++ code/modules/lootpanel/contents.dm | 49 + code/modules/lootpanel/handlers.dm | 19 + code/modules/lootpanel/misc.dm | 48 + code/modules/lootpanel/search_object.dm | 84 ++ code/modules/lootpanel/ss_looting.dm | 39 + code/modules/lootpanel/ui.dm | 42 + .../ruins/spaceruin_code/anomalyresearch.dm | 2 +- .../ruins/spaceruin_code/hilbertshotel.dm | 27 +- code/modules/mining/abandoned_crates.dm | 7 +- .../boulder_processing/_boulder_processing.dm | 6 +- .../boulder_processing/boulder_types.dm | 4 +- .../modules/mining/equipment/explorer_gear.dm | 37 +- .../mining/equipment/marker_beacons.dm | 23 +- code/modules/mining/equipment/mining_tools.dm | 2 +- code/modules/mining/laborcamp/laborstacker.dm | 22 +- code/modules/mining/machine_processing.dm | 12 +- code/modules/mining/machine_redemption.dm | 22 +- code/modules/mining/machine_stacking.dm | 18 +- code/modules/mob/living/basic/basic.dm | 6 + code/modules/mob/living/basic/bots/_bots.dm | 9 +- .../mob/living/basic/minebots/minebot.dm | 6 +- .../mob/living/basic/ruin_defender/flesh.dm | 9 +- .../basic/space_fauna/regal_rat/regal_rat.dm | 1 + .../basic/space_fauna/revenant/_revenant.dm | 2 +- code/modules/mob/living/brain/posibrain.dm | 9 +- code/modules/mob/living/carbon/carbon.dm | 102 +- code/modules/mob/living/carbon/death.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 2 +- .../living/carbon/human/human_stripping.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 7 +- code/modules/mob/living/death.dm | 1 - code/modules/mob/living/init_signals.dm | 1 - code/modules/mob/living/life.dm | 3 - code/modules/mob/living/living.dm | 9 +- code/modules/mob/living/silicon/ai/ai.dm | 13 - .../mob/living/silicon/ai/freelook/eye.dm | 1 - code/modules/mob/living/silicon/ai/life.dm | 3 - .../mob/living/simple_animal/bot/bot.dm | 9 +- .../mob/living/simple_animal/bot/floorbot.dm | 4 +- code/modules/mob/logout.dm | 1 - code/modules/mob/mob.dm | 9 +- code/modules/mob/mob_defines.dm | 3 - code/modules/mod/mod_link.dm | 2 + .../computers/item/computer.dm | 13 +- .../computers/item/laptop.dm | 13 +- .../modular_computers/computers/item/pda.dm | 6 - .../computers/machinery/modular_computer.dm | 8 +- code/modules/pai/door_jack.dm | 6 +- code/modules/paperwork/carbonpaper.dm | 6 +- code/modules/paperwork/clipboard.dm | 17 +- code/modules/paperwork/handlabeler.dm | 7 +- code/modules/paperwork/paper.dm | 17 +- code/modules/paperwork/paper_cutter.dm | 6 +- code/modules/paperwork/pen.dm | 50 +- code/modules/photography/camera/camera.dm | 13 +- code/modules/plumbing/ducts.dm | 4 + .../plumbing/plumbers/_plumb_machinery.dm | 2 - code/modules/plumbing/plumbers/filter.dm | 6 +- code/modules/plumbing/plumbers/iv_drip.dm | 2 - .../plumbing/plumbers/reaction_chamber.dm | 2 + code/modules/power/apc/apc_tool_act.dm | 77 +- code/modules/power/pipecleaners.dm | 5 +- code/modules/power/singularity/emitter.dm | 2 - code/modules/power/smes.dm | 92 +- code/modules/projectiles/guns/ballistic.dm | 22 +- .../projectiles/guns/ballistic/automatic.dm | 5 +- .../projectiles/guns/ballistic/bows/_bow.dm | 5 +- .../projectiles/guns/ballistic/revolver.dm | 4 +- .../projectiles/guns/ballistic/shotgun.dm | 10 +- code/modules/projectiles/projectile.dm | 1 - .../chemistry/machinery/chem_dispenser.dm | 8 +- .../chemistry/machinery/chem_heater.dm | 6 +- .../chemistry/machinery/chem_mass_spec.dm | 15 +- .../chemistry/machinery/chem_master.dm | 12 +- .../machinery/portable_chem_mixer.dm | 12 +- .../chemistry/machinery/reagentgrinder.dm | 6 +- .../reagents/reagent_containers/chem_pack.dm | 32 +- .../reagents/reagent_containers/cups/_cup.dm | 12 +- .../reagent_containers/cups/bottle.dm | 4 +- .../reagent_containers/cups/drinkingglass.dm | 4 +- .../reagent_containers/cups/drinks.dm | 28 +- .../reagents/reagent_containers/medigel.dm | 1 + .../reagents/reagent_containers/pill.dm | 6 + .../reagents/reagent_containers/spray.dm | 11 +- code/modules/reagents/reagent_dispenser.dm | 2 - .../recycling/disposal/construction.dm | 2 - code/modules/recycling/sortingmachinery.dm | 4 +- code/modules/religion/burdened/psyker.dm | 2 +- .../designs/autolathe/service_designs.dm | 13 + code/modules/research/destructive_analyzer.dm | 14 +- .../modules/research/machinery/_production.dm | 10 +- .../research/ordnance/doppler_array.dm | 2 - code/modules/research/server.dm | 17 +- code/modules/research/techweb/all_nodes.dm | 1 + .../research/xenobiology/xenobio_camera.dm | 4 +- .../research/xenobiology/xenobiology.dm | 5 +- code/modules/shuttle/emergency.dm | 14 +- .../spells/spell_types/jaunt/shadow_walk.dm | 4 +- code/modules/surgery/bodyparts/_bodyparts.dm | 4 +- .../surgery/bodyparts/dismemberment.dm | 2 +- code/modules/surgery/bodyparts/helpers.dm | 4 +- .../bodyparts/species_parts/misc_bodyparts.dm | 20 +- code/modules/tgui/tgui.dm | 2 + code/modules/transport/tram/tram_remote.dm | 7 +- code/modules/transport/tram/tram_signals.dm | 12 +- code/modules/unit_tests/_unit_tests.dm | 2 + code/modules/unit_tests/combat_welder.dm | 26 + code/modules/unit_tests/lootpanel.dm | 34 + code/modules/vehicles/mecha/_mecha.dm | 2 +- .../modules/vehicles/mecha/mech_fabricator.dm | 14 +- code/modules/vehicles/mecha/mecha_actions.dm | 9 +- code/modules/vehicles/ridden.dm | 10 +- code/modules/vehicles/wheelchair.dm | 2 - code/modules/wiremod/shell/controller.dm | 4 +- icons/obj/structures.dmi | Bin 211058 -> 83526 bytes .../code/datums/traits/neutral.dm | 3 +- .../code/game/machinery/doors/firedoor.dm | 5 +- .../code/modules/clothing/towels.dm | 12 +- .../modules/reagents/reagent_containers.dm | 3 +- .../modules/SiliconQoL/code/_onclick.dm | 47 +- .../aesthetics/keyed_doors/code/keyed_door.dm | 6 +- .../ammo_workbench/code/ammo_workbench.dm | 4 +- modular_skyrat/modules/apc_arcing/code/apc.dm | 27 +- .../ashwalkers/code/buildings/railroad.dm | 4 +- .../assault_operatives/code/interrogator.dm | 2 +- .../mothership_astrum/fluff.dm | 4 +- .../modules/barricades/code/barricade.dm | 16 +- .../borg_buffs/code/snack_dispensor.dm | 3 +- .../modules/borgs/code/robot_items.dm | 14 +- modular_skyrat/modules/bsrpd/code/bsrpd.dm | 6 +- .../cargo_teleporter/code/cargo_teleporter.dm | 3 +- .../modules/cellguns/code/cellguns.dm | 5 +- .../code/computers/station_goal_computer.dm | 4 +- .../code/design_datums/appliances.dm | 1 - .../code/design_datums/equipment.dm | 18 +- .../code/machines/arc_furnace.dm | 1 - .../conveyor_sorter/code/conveyor_sorter.dm | 6 +- .../modules/clothing/masks/paper.dm | 1 - .../modules/clothing/neck/_neck.dm | 4 +- .../modules/clothing/storage/belts.dm | 9 +- .../clothing/~donator/donator_clothing.dm | 9 +- .../clothing/~donator/donator_items.dm | 4 +- .../electric_welder/code/electric_welder.dm | 4 - .../modules/exp_corps/code/clothing.dm | 6 +- .../goofsec/code/sec_clothing_overrides.dm | 4 +- .../modules/hev_suit/code/hev_suit.dm | 6 +- .../modules/inflatables/code/inflatable.dm | 6 +- modular_skyrat/modules/knives/knives.dm | 9 +- .../code/liquid_systems/liquid_pump.dm | 6 +- .../medical/code/anesthetic_machine.dm | 6 +- .../code/microfusion_energy_master.dm | 13 +- .../code/lewd_clothing/bdsm_mask.dm | 20 +- .../lewd_items/code/lewd_clothing/corset.dm | 3 +- .../code/lewd_clothing/deprivation_helmet.dm | 10 +- .../code/lewd_clothing/hypnogoggles.dm | 10 +- .../code/lewd_clothing/kink_collars.dm | 39 +- .../code/lewd_clothing/kinky_blindfold.dm | 11 +- .../code/lewd_clothing/kinky_headphones.dm | 10 +- .../code/lewd_clothing/kinky_sleepbag.dm | 12 +- .../code/lewd_clothing/lewd_maid.dm | 10 +- .../lewd_items/code/lewd_clothing/shackles.dm | 24 +- .../lewd_clothing/shibari_worn_uniform.dm | 8 +- .../lewd_items/code/lewd_clothing/strapon.dm | 23 +- .../code/lewd_clothing/stripper_outfit.dm | 6 +- .../code/lewd_items/attachable_vibrator.dm | 15 +- .../lewd_items/code/lewd_items/buttplug.dm | 14 +- .../lewd_items/code/lewd_items/dildo.dm | 25 +- .../lewd_items/code/lewd_items/fleshlight.dm | 10 +- .../code/lewd_items/kinky_shocker.dm | 4 +- .../code/lewd_items/leather_whip.dm | 17 +- .../code/lewd_items/spanking_pad.dm | 10 +- .../code/lewd_items/torture_candle.dm | 11 +- .../lewd_items/code/lewd_items/vibrator.dm | 8 +- .../lewd_items/code/lewd_items/vibroring.dm | 10 +- .../code/lewd_machinery/milking_machine.dm | 4 +- .../code/lewd_structures/dancing_pole.dm | 12 +- .../lewd_items/code/lewd_structures/pillow.dm | 43 +- .../modules/modular_weapons/code/gunsets.dm | 4 +- .../code/mounted_machine_gun.dm | 6 +- .../modules/mutants/code/mutant_cure.dm | 6 +- .../modules/pollution/code/perfumes.dm | 3 +- .../code/big_mortar.dm | 5 +- .../code/cutting_board.dm | 5 +- .../code/millstone.dm | 7 +- .../primitive_production/code/glassblowing.dm | 1 - modular_skyrat/modules/salon/code/hair_tie.dm | 8 +- .../code/self_actualization_device.dm | 6 +- .../specialist_armor/code/sacrificial.dm | 3 +- .../stasisrework/code/stasissleeper.dm | 7 +- modular_skyrat/modules/stone/code/stone.dm | 1 - .../modules/time_clock/code/console.dm | 11 +- .../wargame_projectors/code/projectors.dm | 3 +- sound/attributions.txt | 4 + sound/effects/nightmare_poof.ogg | Bin 0 -> 15537 bytes sound/effects/nightmare_reappear.ogg | Bin 0 -> 18238 bytes tgstation.dme | 19 +- tgui/packages/common/collections.ts | 239 ++--- tgui/packages/common/fp.js | 24 - tgui/packages/common/vector.js | 48 - tgui/packages/common/vector.ts | 51 + tgui/packages/tgui-panel/chat/selectors.ts | 2 +- tgui/packages/tgui/backend.ts | 4 - tgui/packages/tgui/components/Autofocus.tsx | 18 +- tgui/packages/tgui/components/Chart.tsx | 17 +- tgui/packages/tgui/components/DmIcon.tsx | 72 ++ tgui/packages/tgui/components/Grid.jsx | 33 - tgui/packages/tgui/components/Grid.tsx | 44 + tgui/packages/tgui/components/Image.tsx | 43 +- tgui/packages/tgui/components/Table.tsx | 2 + tgui/packages/tgui/components/index.ts | 1 + tgui/packages/tgui/debug/KitchenSink.jsx | 9 +- tgui/packages/tgui/drag.ts | 14 +- .../tgui/interfaces/AirlockElectronics.tsx | 266 ++--- tgui/packages/tgui/interfaces/ApcControl.jsx | 38 +- .../tgui/interfaces/AtmosControlPanel.jsx | 9 +- .../tgui/interfaces/BluespaceSender.tsx | 9 +- .../tgui/interfaces/BluespaceVendor.tsx | 9 +- .../tgui/interfaces/CameraConsole.tsx | 21 +- tgui/packages/tgui/interfaces/Cargo.jsx | 12 +- .../tgui/interfaces/CircuitAccessChecker.tsx | 8 +- .../tgui/interfaces/ClockworkSlab.jsx | 16 +- .../tgui/interfaces/CommunicationsConsole.jsx | 10 +- tgui/packages/tgui/interfaces/CrewConsole.jsx | 2 +- .../tgui/interfaces/DestinationTagger.tsx | 19 +- .../DnaConsole/DnaConsoleStorage.jsx | 2 +- .../interfaces/DnaConsole/MutationInfo.jsx | 9 +- .../interfaces/{DnaVault.jsx => DnaVault.tsx} | 58 +- .../tgui/interfaces/EightBallVote.tsx | 35 +- ...onsole.jsx => EmergencyShuttleConsole.tsx} | 82 +- .../tgui/interfaces/ExperimentConfigure.jsx | 2 +- .../interfaces/Fabrication/DesignBrowser.tsx | 14 +- .../Fabrication/MaterialAccessBar.tsx | 2 +- tgui/packages/tgui/interfaces/Fax.tsx | 3 +- tgui/packages/tgui/interfaces/Filteriffic.jsx | 14 +- tgui/packages/tgui/interfaces/FishCatalog.tsx | 5 +- tgui/packages/tgui/interfaces/Gps.jsx | 44 +- .../tgui/interfaces/Hypertorus/Gases.tsx | 9 +- tgui/packages/tgui/interfaces/Jukebox.tsx | 3 +- .../tgui/interfaces/LaborClaimConsole.jsx | 27 +- .../tgui/interfaces/LaunchpadConsole.jsx | 276 ----- .../tgui/interfaces/LaunchpadConsole.tsx | 259 +++++ .../packages/tgui/interfaces/LibraryAdmin.tsx | 27 +- .../tgui/interfaces/LibraryConsole.jsx | 25 +- .../tgui/interfaces/LibraryVisitor.jsx | 9 +- .../interfaces/LootPanel/GroupedContents.tsx | 47 + .../tgui/interfaces/LootPanel/IconDisplay.tsx | 24 + .../tgui/interfaces/LootPanel/LootBox.tsx | 53 + .../tgui/interfaces/LootPanel/RawContents.tsx | 28 + .../tgui/interfaces/LootPanel/index.tsx | 76 ++ .../tgui/interfaces/LootPanel/types.ts | 13 + tgui/packages/tgui/interfaces/MatMarket.tsx | 2 +- tgui/packages/tgui/interfaces/Mecha/data.ts | 4 +- .../interfaces/MedicalRecords/RecordTabs.tsx | 9 +- tgui/packages/tgui/interfaces/NtosArcade.jsx | 135 --- tgui/packages/tgui/interfaces/NtosArcade.tsx | 178 ++++ .../tgui/interfaces/NtosCrewManifest.jsx | 4 +- .../tgui/interfaces/NtosEmojipedia.tsx | 20 +- .../tgui/interfaces/NtosMessenger/index.tsx | 3 +- .../tgui/interfaces/NtosNetDownloader.tsx | 23 +- .../{NuclearBomb.jsx => NuclearBomb.tsx} | 99 +- .../packages/tgui/interfaces/Orbit/helpers.ts | 23 +- tgui/packages/tgui/interfaces/Orbit/index.tsx | 12 +- .../tgui/interfaces/PersonalCrafting.tsx | 65 +- tgui/packages/tgui/interfaces/Photocopier.jsx | 2 +- .../tgui/interfaces/PlaneMasterDebug.tsx | 21 +- .../tgui/interfaces/PortableChemMixer.tsx | 3 +- .../packages/tgui/interfaces/PowerMonitor.jsx | 26 +- .../interfaces/PreferencesMenu/AntagsPage.tsx | 7 +- .../PreferencesMenu/GamePreferencesPage.tsx | 10 +- .../interfaces/PreferencesMenu/JobsPage.tsx | 5 +- .../PreferencesMenu/KeybindingsPage.tsx | 21 +- .../interfaces/PreferencesMenu/MainPage.tsx | 53 +- .../interfaces/PreferencesMenu/QuirksPage.tsx | 12 +- .../tgui/interfaces/PreferencesMenu/names.tsx | 6 +- .../preferences/features/base.tsx | 9 +- .../character_preferences/skin_tone.tsx | 5 +- .../features/game_preferences/ghost.tsx | 7 +- tgui/packages/tgui/interfaces/Radio.jsx | 4 +- .../RequestsConsole/MessageWriteTab.tsx | 8 +- .../tgui/interfaces/RestockTracker.jsx | 3 +- tgui/packages/tgui/interfaces/Roulette.jsx | 313 ------ .../tgui/interfaces/Roulette/BetTable.tsx | 171 ++++ .../tgui/interfaces/Roulette/Board.tsx | 107 ++ .../tgui/interfaces/Roulette/NumberCell.tsx | 48 + .../tgui/interfaces/Roulette/helpers.tsx | 9 + .../tgui/interfaces/Roulette/index.tsx | 14 + .../interfaces/SecurityRecords/RecordTabs.tsx | 9 +- .../tgui/interfaces/SeedExtractor.tsx | 8 +- .../tgui/interfaces/SelectEquipment.jsx | 21 +- .../tgui/interfaces/ShuttleManipulator.jsx | 4 +- .../tgui/interfaces/StackCrafting.tsx | 40 +- .../tgui/interfaces/StationAlertConsole.jsx | 4 +- .../tgui/interfaces/StationTraitsPanel.tsx | 14 +- tgui/packages/tgui/interfaces/Supermatter.tsx | 13 +- .../tgui/interfaces/SurgeryInitiator.tsx | 3 +- .../tgui/interfaces/SyndContractor.jsx | 13 +- .../tgui/interfaces/SyndicateContractor.tsx | 198 ++-- tgui/packages/tgui/interfaces/Techweb.jsx | 9 +- .../tgui/interfaces/TrackedPlaytime.jsx | 2 +- .../tgui/interfaces/WarrantConsole.tsx | 2 +- .../tgui/interfaces/common/AccessConfig.jsx | 136 --- .../tgui/interfaces/common/AccessConfig.tsx | 204 ++++ .../tgui/interfaces/common/AccessList.jsx | 3 +- tgui/packages/tgui/layouts/Layout.tsx | 21 +- tgui/packages/tgui/layouts/Pane.tsx | 8 +- tgui/packages/tgui/layouts/Window.tsx | 16 +- tgui/packages/tgui/routes.tsx | 7 +- .../tgui/styles/components/SearchItem.scss | 22 + tgui/packages/tgui/styles/main.scss | 1 + tools/test_merge_bot/main.js | 46 +- 549 files changed, 6500 insertions(+), 5378 deletions(-) create mode 100644 code/__DEFINES/click.dm create mode 100644 code/_onclick/click_alt.dm delete mode 100644 code/controllers/subsystem/processing/obj_tab_items.dm create mode 100644 code/datums/components/martial_art_giver.dm create mode 100644 code/datums/elements/attack_zone_randomiser.dm create mode 100644 code/datums/elements/living_limb_initialiser.dm create mode 100644 code/datums/elements/poster_tearer.dm create mode 100644 code/datums/elements/tool_renaming.dm create mode 100644 code/datums/quirks/positive_quirks/strong_stomach.dm create mode 100644 code/game/objects/items_reskin.dm create mode 100644 code/game/objects/structures/lavaland/gulag_vent.dm create mode 100644 code/modules/asset_cache/assets/icon_ref_map.dm create mode 100644 code/modules/lootpanel/_lootpanel.dm create mode 100644 code/modules/lootpanel/contents.dm create mode 100644 code/modules/lootpanel/handlers.dm create mode 100644 code/modules/lootpanel/misc.dm create mode 100644 code/modules/lootpanel/search_object.dm create mode 100644 code/modules/lootpanel/ss_looting.dm create mode 100644 code/modules/lootpanel/ui.dm create mode 100644 code/modules/unit_tests/combat_welder.dm create mode 100644 code/modules/unit_tests/lootpanel.dm create mode 100644 sound/effects/nightmare_poof.ogg create mode 100644 sound/effects/nightmare_reappear.ogg delete mode 100644 tgui/packages/common/vector.js create mode 100644 tgui/packages/common/vector.ts create mode 100644 tgui/packages/tgui/components/DmIcon.tsx delete mode 100644 tgui/packages/tgui/components/Grid.jsx create mode 100644 tgui/packages/tgui/components/Grid.tsx rename tgui/packages/tgui/interfaces/{DnaVault.jsx => DnaVault.tsx} (75%) rename tgui/packages/tgui/interfaces/{EmergencyShuttleConsole.jsx => EmergencyShuttleConsole.tsx} (73%) delete mode 100644 tgui/packages/tgui/interfaces/LaunchpadConsole.jsx create mode 100644 tgui/packages/tgui/interfaces/LaunchpadConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/GroupedContents.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/IconDisplay.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/RawContents.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/index.tsx create mode 100644 tgui/packages/tgui/interfaces/LootPanel/types.ts delete mode 100644 tgui/packages/tgui/interfaces/NtosArcade.jsx create mode 100644 tgui/packages/tgui/interfaces/NtosArcade.tsx rename tgui/packages/tgui/interfaces/{NuclearBomb.jsx => NuclearBomb.tsx} (64%) delete mode 100644 tgui/packages/tgui/interfaces/Roulette.jsx create mode 100644 tgui/packages/tgui/interfaces/Roulette/BetTable.tsx create mode 100644 tgui/packages/tgui/interfaces/Roulette/Board.tsx create mode 100644 tgui/packages/tgui/interfaces/Roulette/NumberCell.tsx create mode 100644 tgui/packages/tgui/interfaces/Roulette/helpers.tsx create mode 100644 tgui/packages/tgui/interfaces/Roulette/index.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.jsx create mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.tsx create mode 100644 tgui/packages/tgui/styles/components/SearchItem.scss diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index d9fb22def8f..eec9705fcf4 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -2799,6 +2799,12 @@ }, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"boT" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/turf/open/floor/iron, +/area/station/engineering/main) "boW" = ( /obj/structure/table/glass, /obj/machinery/status_display/ai/directional/south, @@ -10007,18 +10013,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/tile, /area/station/science/lower) -"erJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/greyscale, -/obj/item/folder/yellow{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/glasses/meson, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "erK" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new, @@ -11513,13 +11507,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"eWf" = ( -/obj/structure/closet/cardboard, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "eWj" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ dir = 4; @@ -11999,17 +11986,6 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) -"fhX" = ( -/obj/structure/table/greyscale, -/obj/item/folder/yellow{ - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "fib" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31165,6 +31141,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"lwl" = ( +/obj/effect/gibspawner/human, +/obj/structure/table/optable{ + desc = "A cold, hard place for your final rest."; + name = "Morgue Slab" + }, +/mob/living/carbon/human/species/monkey/humand_legged{ + name = "Charles"; + real_name = "Charles" + }, +/turf/open/floor/iron/white/diagonal, +/area/station/maintenance/department/science/xenobiology) "lwn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/hatch, @@ -33051,6 +33039,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"lWK" = ( +/obj/structure/closet/cardboard, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/item/airlock_painter, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "lWQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/ticket_machine/directional/north, @@ -36959,31 +36955,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/textured_half, /area/station/security) -"nki" = ( -/obj/structure/rack, -/obj/item/airlock_painter, -/obj/item/lightreplacer{ - pixel_y = 7 - }, -/obj/item/clothing/head/utility/hardhat/welding{ - pixel_x = -4; - pixel_y = -3 - }, -/obj/item/clothing/head/utility/hardhat/welding{ - pixel_x = -4 - }, -/obj/item/clothing/head/utility/hardhat/welding{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/light/cold/dim/directional/west, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 9; - pixel_y = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "nkl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -45700,10 +45671,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/science/xenobiology) -"pRb" = ( -/obj/item/computer_disk/virus/mime, -/turf/closed/mineral/random/stationside, -/area/space/nearstation) "pRe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/wood, @@ -60444,18 +60411,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/security/execution/transfer) -"tUa" = ( -/obj/effect/gibspawner/human, -/obj/structure/table/optable{ - desc = "A cold, hard place for your final rest."; - name = "Morgue Slab" - }, -/mob/living/carbon/human/species/monkey/humand_legged{ - name = "Charles"; - real_name = "Charles" - }, -/turf/open/floor/iron/white/diagonal, -/area/station/maintenance/department/science/xenobiology) "tUc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68928,6 +68883,17 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"wlW" = ( +/obj/structure/table/greyscale, +/obj/item/lightreplacer{ + pixel_y = 7 + }, +/obj/item/lightreplacer{ + pixel_y = 2; + pixel_x = -2 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "wmd" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ @@ -70351,8 +70317,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "wHO" = ( -/obj/structure/dresser, /obj/structure/sign/poster/official/random/directional/north, +/obj/structure/closet/crate/wooden/toy, /turf/open/floor/wood/parquet, /area/station/service/greenroom) "wHP" = ( @@ -74918,6 +74884,22 @@ }, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den/gaming) +"xMU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/greyscale, +/obj/item/folder/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/glasses/meson, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -8; + pixel_y = 14 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "xMY" = ( /turf/closed/wall/r_wall, /area/station/command/teleporter) @@ -88018,7 +88000,7 @@ aJq aJq aJq aJq -pRb +aJq dDB dDB dDB @@ -88275,7 +88257,7 @@ aJq aJq aJq aJq -pRb +aJq aJq aJq aJq @@ -88532,7 +88514,7 @@ aJq aJq aJq aJq -pRb +aJq aJq aJq aJq @@ -92010,7 +91992,7 @@ dgV sHH rQi rPV -nki +boT uOk nmH sHO @@ -92275,7 +92257,7 @@ dgm wIu oHO sDo -fhX +wlW lsd jJu kya @@ -92786,11 +92768,11 @@ rmM btV lMl ayR -erJ +xMU vDg euP all -eWf +lWK eIx kWg bNq @@ -113439,7 +113421,7 @@ dDB blb dDB ldq -tUa +lwl vXn ldq ldq diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index e81e9481cf7..e66eb438644 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -562,16 +562,6 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) -"akG" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "akK" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -4069,15 +4059,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"bmZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "bna" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -4507,13 +4488,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"bsR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "bta" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -5474,6 +5448,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"bFw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/item/paper_bin, +/turf/open/floor/plating, +/area/station/hallway/secondary/service) "bFS" = ( /obj/item/crowbar/red, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5682,6 +5667,15 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"bIQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "bIU" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -5756,6 +5750,37 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/mine/laborcamp) +"bJy" = ( +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = 8; + pixel_y = -32 + }, +/obj/machinery/button/door/directional/south{ + id = "hopqueue"; + name = "Queue Shutters Control"; + pixel_x = -8; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/south{ + id = "hop"; + name = "Privacy Shutters Control"; + pixel_x = 8; + req_access = list("hop") + }, +/obj/machinery/button/ticket_machine{ + pixel_x = -8; + pixel_y = -32 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/item/paper/fluff/ids_for_dummies, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "bJA" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -7593,17 +7618,6 @@ "clq" = ( /turf/open/floor/iron/dark, /area/station/security/processing) -"clr" = ( -/obj/machinery/power/smes{ - capacity = 1.8e+008; - charge = 2e+005 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/iron/dark/textured_large, -/area/station/maintenance/disposal/incinerator) "clz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -8029,6 +8043,17 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white, /area/station/science/genetics) +"crH" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/requests_console/directional/west, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "crS" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /turf/open/floor/wood, @@ -8154,6 +8179,12 @@ /obj/structure/tank_holder/anesthetic, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"cua" = ( +/obj/machinery/button/photobooth{ + pixel_y = -26 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "cuc" = ( /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron, @@ -8528,6 +8559,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"czl" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/modular_computer/preset/cargochat/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "czm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9857,6 +9893,13 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) +"cSm" = ( +/obj/machinery/mineral/processing_unit/gulag{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/mine/laborcamp) "cSu" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -12609,7 +12652,7 @@ dir = 8 }, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "dJx" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -12852,16 +12895,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) -"dNv" = ( -/obj/machinery/modular_computer/preset/cargochat/security{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "dNw" = ( /obj/structure/chair/office{ dir = 8 @@ -13269,6 +13302,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) +"dVc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "dVq" = ( /obj/machinery/space_heater, /obj/structure/sign/poster/random/directional/east, @@ -13891,9 +13936,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"egf" = ( -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "egj" = ( /obj/structure/rack, /obj/machinery/light/small/directional/north, @@ -15068,6 +15110,18 @@ /obj/item/poster/random_official, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"ezs" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/station/security/office) "ezu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15364,6 +15418,18 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"eDH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "eDM" = ( /obj/machinery/door/airlock/command/glass{ name = "Head of Security" @@ -16298,18 +16364,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"eUH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "eUI" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -16552,16 +16606,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"eYz" = ( -/obj/machinery/mineral/processing_unit{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mine/laborcamp) "eYC" = ( /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) +"eYH" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) "eYL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall, @@ -17877,6 +17929,19 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron, /area/station/cargo/miningdock) +"fvA" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Engineering Lobby"; + name = "Engineering Lobby Fax Machine" + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "fvK" = ( /obj/structure/rack, /obj/item/storage/box/petridish, @@ -18453,15 +18518,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"fEY" = ( -/obj/machinery/modular_computer/preset/cargochat/medical{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/end{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/medical/medbay/aft) "fEZ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -19266,7 +19322,7 @@ "fSG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "fTb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20385,18 +20441,6 @@ "gka" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) -"gkf" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/disposal/bin{ - desc = "A pneumatic waste disposal unit. This one leads to the morgue."; - name = "corpse disposal" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "gko" = ( /obj/machinery/conveyor{ dir = 8; @@ -20659,17 +20703,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"gnA" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/requests_console/directional/west, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "gnL" = ( /obj/structure/closet/bombcloset/security, /turf/open/floor/iron/smooth, @@ -20936,6 +20969,10 @@ }, /turf/open/floor/iron, /area/station/security/prison/visit) +"grY" = ( +/obj/structure/gulag_vent/ice, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "gsk" = ( /obj/structure/reflector/single/anchored{ dir = 5 @@ -22526,11 +22563,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/plating, /area/station/cargo/storage) -"gTf" = ( -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/photocopier, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "gTi" = ( /obj/machinery/door/airlock/medical/glass{ name = "Medbay Chemistry Access" @@ -22742,7 +22774,7 @@ "gWZ" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "gXe" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -22875,11 +22907,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gYP" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit/telecomms/mainframe, -/area/station/tcommsat/server) "gZa" = ( /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -23163,6 +23190,14 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"hdn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "hdp" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 10 @@ -23317,15 +23352,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) -"hfw" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/machinery/camera/directional/south{ - c_tag = "Labor Camp Utilities"; - network = list("labor") - }, -/turf/open/floor/iron/smooth, -/area/mine/laborcamp/security) "hfA" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -23428,6 +23454,13 @@ dir = 4 }, /area/station/command/gateway) +"hhP" = ( +/obj/machinery/newscaster/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white/side{ + dir = 5 + }, +/area/station/science/lab) "hhT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -23454,19 +23487,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"hio" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Engineering Lobby"; - name = "Engineering Lobby Fax Machine" - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "hjh" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -23540,6 +23560,21 @@ }, /turf/open/floor/plating, /area/station/medical/virology) +"hjX" = ( +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/red/anticorner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 1 + }, +/area/station/security/office) "hkd" = ( /obj/structure/cable, /obj/machinery/light/small/directional/west, @@ -23803,16 +23838,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) -"hpc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "hpd" = ( /turf/open/floor/plating, /area/station/engineering/engine_smes) @@ -24914,18 +24939,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/teleporter) -"hGj" = ( -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_corner{ - dir = 4 - }, -/area/station/security/office) "hGs" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -25050,10 +25063,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"hIK" = ( -/mob/living/basic/slime, -/turf/open/floor/engine, -/area/station/science/xenobiology) "hIN" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, @@ -25146,7 +25155,7 @@ dir = 4 }, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "hKr" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/infections{ @@ -26008,12 +26017,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"hYW" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "hZe" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 @@ -26040,7 +26043,7 @@ "iao" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "iar" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -26070,15 +26073,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/cargo/storage) -"iaS" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "iaT" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -26654,17 +26648,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"ijf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/obj/machinery/holopad, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "iji" = ( /obj/structure/table, /obj/item/multitool/circuit{ @@ -26947,7 +26930,7 @@ "inb" = ( /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "inh" = ( /obj/structure/stairs/west, /obj/structure/railing, @@ -27450,18 +27433,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) -"iuK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "iuS" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/glass/reinforced, @@ -27698,7 +27669,7 @@ dir = 8 }, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "izn" = ( /obj/effect/spawner/random/decoration/generic, /turf/open/floor/plating, @@ -31798,6 +31769,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) +"jOS" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Security Office"; + name = "Security Office Fax Machine" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "jOY" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/reagent_dispensers/plumbed{ @@ -32604,16 +32585,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"kbz" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Security Office"; - name = "Security Office Fax Machine" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "kbJ" = ( /obj/machinery/field/generator, /turf/open/floor/plating, @@ -32861,7 +32832,7 @@ /area/station/maintenance/port/fore) "keV" = ( /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "keX" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -33094,15 +33065,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction) -"khv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "khy" = ( /obj/structure/rack, /obj/item/wrench, @@ -34601,6 +34563,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"kCG" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/photocopier, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "kCH" = ( /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Airlock" @@ -35849,6 +35816,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/engineering/lobby) +"kVS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "kWa" = ( /obj/structure/fireplace, /turf/open/floor/plating, @@ -38325,6 +38301,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"lIt" = ( +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "lIy" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -39224,19 +39210,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"lWS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "lXi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40253,6 +40226,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/bridge) +"mpR" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/disposal/bin{ + desc = "A pneumatic waste disposal unit. This one leads to the morgue."; + name = "corpse disposal" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "mpU" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -41354,7 +41339,7 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "mIE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -41534,11 +41519,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"mMf" = ( -/obj/machinery/firealarm/directional/east, -/obj/structure/filingcabinet, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "mMk" = ( /obj/machinery/telecomms/message_server/preset, /turf/open/floor/iron/dark/telecomms, @@ -41664,6 +41644,13 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"mOM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "mPh" = ( /obj/structure/rack, /obj/item/crowbar, @@ -42207,7 +42194,7 @@ "mYd" = ( /obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "mYh" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) @@ -42467,6 +42454,16 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/hos) +"nbw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "nbC" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, @@ -42798,6 +42795,12 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"nfD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "nfG" = ( /obj/structure/marker_beacon/burgundy{ name = "landing marker" @@ -43576,15 +43579,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"nqt" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "nqv" = ( /obj/structure/fence{ dir = 4 @@ -44399,7 +44393,7 @@ "nBV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "nCa" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -45816,9 +45810,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/prison/visit) -"nYm" = ( -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "nYn" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet, @@ -48893,18 +48884,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"oTE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/item/kirbyplants/random, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "oTM" = ( /obj/item/flashlight/lantern, /obj/structure/table/wood, @@ -51133,6 +51112,17 @@ "pBE" = ( /turf/closed/wall, /area/station/cargo/bitrunning/den) +"pBI" = ( +/obj/machinery/power/smes{ + capacity = 1.8e+008; + charge = 2e+005 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark/textured_large, +/area/station/maintenance/disposal/incinerator) "pBN" = ( /obj/structure/flora/tree/jungle/small/style_random, /turf/open/floor/grass, @@ -51159,6 +51149,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pCE" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "pCI" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -54068,6 +54063,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/dorms) +"qxu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/holopad, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "qxv" = ( /obj/machinery/disposal/bin{ desc = "A pneumatic waste disposal unit. This one leads to the frozen exterior of the moon."; @@ -54316,12 +54322,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"qCH" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "qCI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54656,16 +54656,6 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/checker, /area/station/commons/storage/emergency/port) -"qHa" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "qHg" = ( /obj/structure/transit_tube/curved/flipped{ dir = 1 @@ -54914,13 +54904,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/entry) -"qKN" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "qKQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -55319,6 +55302,10 @@ /obj/machinery/door/window/left/directional/north, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"qQb" = ( +/obj/machinery/photobooth, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qQf" = ( /turf/closed/wall, /area/station/maintenance/fore/lesser) @@ -56973,6 +56960,18 @@ dir = 1 }, /area/station/science/explab) +"rqd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "rqi" = ( /obj/item/crowbar{ pixel_y = 3 @@ -58931,6 +58930,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"rWR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "rWU" = ( /obj/machinery/door/airlock/public/glass{ name = "Prison Wing" @@ -59034,37 +59043,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"rYk" = ( -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_x = 8; - pixel_y = -32 - }, -/obj/machinery/button/door/directional/south{ - id = "hopqueue"; - name = "Queue Shutters Control"; - pixel_x = -8; - req_access = list("hop") - }, -/obj/machinery/button/door/directional/south{ - id = "hop"; - name = "Privacy Shutters Control"; - pixel_x = 8; - req_access = list("hop") - }, -/obj/machinery/button/ticket_machine{ - pixel_x = -8; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/obj/item/paper/fluff/ids_for_dummies, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "rYq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59186,10 +59164,6 @@ dir = 4 }, /area/station/service/chapel) -"sao" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "sbc" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -59598,6 +59572,15 @@ }, /turf/open/floor/iron, /area/mine/production) +"shy" = ( +/obj/machinery/modular_computer/preset/cargochat/medical{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/medical/medbay/aft) "shB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -60038,6 +60021,15 @@ /obj/machinery/microwave, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"snG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "snI" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/vending/modularpc, @@ -60951,6 +60943,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"sAj" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "sAu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61129,7 +61129,7 @@ "sDA" = ( /obj/machinery/igniter/incinerator_ordmix, /turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "sDQ" = ( /obj/item/radio/intercom/prison/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -62224,6 +62224,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"sUT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "sVf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62376,14 +62383,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/science/explab) -"sXG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "sXK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64194,6 +64193,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tDA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "tDL" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -64926,11 +64935,6 @@ /obj/structure/sign/warning/electric_shock, /turf/open/floor/plating, /area/station/science/xenobiology) -"tOg" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai) "tOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65191,6 +65195,26 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"tUz" = ( +/obj/machinery/button/door/directional/north{ + id = "permainner"; + name = "Inner Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -6; + req_access = list("brig"); + specialfunctions = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "permaouter"; + name = "Outer Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 6; + req_access = list("brig"); + specialfunctions = 4 + }, +/obj/machinery/photobooth/security, +/turf/open/floor/iron/smooth, +/area/station/security/execution/transfer) "tUC" = ( /obj/effect/landmark/event_spawn, /obj/machinery/light/floor, @@ -65401,11 +65425,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"tXL" = ( -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/modular_computer/preset/cargochat/engineering, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "tXV" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/camera/directional/north{ @@ -66046,6 +66065,18 @@ /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/plating, /area/station/service/hydroponics) +"uiF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/item/kirbyplants/random, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "uiI" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/three, @@ -66238,6 +66269,19 @@ /obj/structure/sign/warning/docking/directional/south, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"uml" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "umv" = ( /obj/effect/turf_decal/siding/white{ dir = 9 @@ -68603,6 +68647,20 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"vbg" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/machinery/camera/directional/south{ + c_tag = "Labor Camp Utilities"; + network = list("labor") + }, +/turf/open/floor/iron/smooth, +/area/mine/laborcamp/security) +"vbn" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit/telecomms/mainframe, +/area/station/tcommsat/server) "vbz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69527,21 +69585,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/medical/virology) -"vqJ" = ( -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/tile/red/anticorner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_corner{ - dir = 1 - }, -/area/station/security/office) "vqN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69577,12 +69620,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/courtroom) -"vry" = ( -/obj/machinery/button/photobooth{ - pixel_y = -26 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "vrC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70382,13 +70419,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig/entrance) -"vDg" = ( -/obj/machinery/newscaster/directional/south, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white/side{ - dir = 5 - }, -/area/station/science/lab) "vDh" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -70880,10 +70910,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) -"vMz" = ( -/obj/machinery/photobooth, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "vMA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71588,17 +71614,6 @@ /obj/structure/barricade/wooden/snowed, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"vYr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/item/paper_bin, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "vYs" = ( /obj/machinery/light/directional/east, /obj/structure/cable, @@ -72857,14 +72872,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"wry" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured, -/area/station/security/office) "wrA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -73787,18 +73794,10 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wFo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) +"wFN" = ( +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) "wFO" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/siding/wood{ @@ -73908,7 +73907,7 @@ "wHd" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "wHe" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured, @@ -74385,7 +74384,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "wPD" = ( /obj/machinery/door/airlock/security/glass{ name = "Evidence Storage" @@ -74945,6 +74944,12 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/office) +"wXW" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "wXX" = ( /obj/machinery/door/window/right/directional/west{ name = "Containment Pen 10"; @@ -75197,6 +75202,10 @@ "xaI" = ( /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"xaJ" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/textured, +/area/station/security/office) "xaO" = ( /obj/effect/spawner/random/trash/moisture_trap, /obj/machinery/light/small/directional/west, @@ -75540,26 +75549,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/security/armory/upper) -"xge" = ( -/obj/machinery/button/door/directional/north{ - id = "permainner"; - name = "Inner Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -6; - req_access = list("brig"); - specialfunctions = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "permaouter"; - name = "Outer Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 6; - req_access = list("brig"); - specialfunctions = 4 - }, -/obj/machinery/photobooth/security, -/turf/open/floor/iron/smooth, -/area/station/security/execution/transfer) "xgg" = ( /obj/structure/rack, /obj/item/clothing/suit/hooded/wintercoat/eva{ @@ -76847,6 +76836,9 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) +"xAn" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "xAs" = ( /turf/closed/wall/r_wall, /area/icemoon/surface/outdoors/nospawn) @@ -77635,6 +77627,15 @@ /obj/effect/mapping_helpers/ianbirthday, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"xMR" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "xMT" = ( /turf/closed/wall, /area/station/science/research) @@ -114615,7 +114616,7 @@ iDt nTO ody hMJ -hfw +vbg nTO iDt xMq @@ -116640,7 +116641,7 @@ dhq dhq iDt iDt -iDt +grY iDt dLN rbT @@ -116904,7 +116905,7 @@ rbT lLN vRO ggV -eYz +cSm tGP tGP iRp @@ -172462,7 +172463,7 @@ uME doq trA uME -xge +tUz hBg dzt kvu @@ -187447,10 +187448,10 @@ tsa wHb qLY abe -hIK +wFN abe cKA -hIK +wFN abe cKA abe @@ -189503,7 +189504,7 @@ abe abe gLj abe -hIK +wFN gLj abe abe @@ -193601,10 +193602,10 @@ thA thA rcY iDt -egf -egf -egf -egf +uIf +uIf +uIf +uIf fSG fSG bId @@ -235229,7 +235230,7 @@ xzh dnq qcu bDR -hYW +wXW mpy bep ylU @@ -235255,7 +235256,7 @@ vjx mDf nLb kNp -gYP +vbn vFs mMk qAV @@ -235743,7 +235744,7 @@ iIA fSC iIA cvg -vMz +qQb jII okb ylU @@ -236252,12 +236253,12 @@ dkb kmi iYb xaA -gnA +crH wjv pec fJl -iaS -rYk +xMR +bJy cpm dnq ylU @@ -236514,7 +236515,7 @@ ool jRC cgC jaq -vry +cua cpm dnq ylU @@ -236955,10 +236956,10 @@ aBR aBR lbc nbp -dNv -sXG +lIt +hdn ijj -hpc +nbw lRF feJ mgZ @@ -237212,7 +237213,7 @@ aBR aBR nbp nbp -vqJ +hjX omk omk jeF @@ -237731,7 +237732,7 @@ sMY wMV qqM wMi -sao +xaJ arA jwx kfy @@ -238240,12 +238241,12 @@ bln lBD nbp nbp -hGj +ezs jeF omk jeF nQf -mMf +pCE arA rYB rgC @@ -238497,8 +238498,8 @@ tGr bln lbc nbp -kbz -wry +jOS +sAj dlK pbI jIm @@ -240136,7 +240137,7 @@ elj iRr omi tKi -tXL +czl ydg dAm szR @@ -240393,7 +240394,7 @@ jkx fLq hro tKi -gTf +kCG dxA oht rSC @@ -240650,7 +240651,7 @@ gwK jyR bID bID -hio +fvA vCK rSC rSC @@ -241163,7 +241164,7 @@ gMN xnE tvd egV -nYm +xAn syU vYJ fGn @@ -246251,7 +246252,7 @@ gzw kiB kQX kyZ -vYr +bFw mdZ rth hid @@ -248685,7 +248686,7 @@ mlp lEg cvh uBi -tOg +eYH jIZ oFx iHp @@ -248885,7 +248886,7 @@ oqc oAD xKX vep -clr +pBI sCm gGo bTQ @@ -249117,7 +249118,7 @@ tAx wbN grT lEo -fEY +shy qQp bVp jnS @@ -249374,7 +249375,7 @@ xyc dVw bkV ree -gkf +mpR qQp tQc jbx @@ -249629,12 +249630,12 @@ kNa ica lDM klc -qHa -iuK -bmZ +rWR +rqd +snG mJj laD -lWS +uml laD laD laD @@ -249886,16 +249887,16 @@ vzN oXq xWT klc -oTE +uiF pJX -ijf +qxu lPr vcY mmR -bsR +mOM dMp dMp -khv +kVS lqG grD xZW @@ -250143,16 +250144,16 @@ bNH rIc tVB klc -akG +tDA gsT -eUH +eDH iYs xFo rvA -wFo -qCH -qKN -nqt +dVc +nfD +sUT +bIQ fFJ hRA npo @@ -257589,7 +257590,7 @@ ljF ljF sDg gXJ -vDg +hhP oHK iZl iZl diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 712e555b878..6a1d703aea4 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -166,14 +166,6 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/carpet/royalblue, /area/mine/living_quarters) -"bq" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "bt" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -191,14 +183,6 @@ }, /turf/open/floor/iron/edge, /area/mine/lounge) -"bx" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/structure/ore_box, -/turf/open/floor/iron/dark, -/area/mine/production) "by" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wideplating_new{ @@ -295,12 +279,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/mine/maintenance/living/north) -"cg" = ( -/obj/structure/cable, -/obj/machinery/power/smes/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mine/maintenance/service) "ch" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -535,12 +513,6 @@ /obj/structure/lattice/catwalk/mining, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) -"dp" = ( -/obj/structure/ore_vent/starter_resources{ - icon_state = "ore_vent_active" - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "dq" = ( /obj/structure/stone_tile{ dir = 4 @@ -630,13 +602,18 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/mine/production) -"dW" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 +"dV" = ( +/obj/structure/railing/corner{ + dir = 4 }, -/turf/open/lava/smooth/lava_land_surface, +/obj/structure/railing/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "ee" = ( /obj/machinery/shower/directional/south, @@ -824,6 +801,16 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"fx" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "fA" = ( /obj/machinery/computer/shuttle/mining{ dir = 1 @@ -883,6 +870,10 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"fP" = ( +/obj/structure/gulag_vent, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "fQ" = ( /turf/open/genturf, /area/lavaland/surface/outdoors/unexplored/danger) @@ -894,14 +885,6 @@ dir = 1 }, /area/mine/laborcamp/security) -"fT" = ( -/obj/effect/turf_decal/loading_area, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/dark, -/area/mine/production) "fU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, @@ -1041,6 +1024,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/mine/living_quarters) +"gA" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "gB" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -1135,6 +1126,14 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/mine/maintenance/service/disposals) +"gW" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark, +/area/mine/production) "gZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -1538,13 +1537,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/mine/maintenance/public/north) -"jk" = ( -/obj/structure/table, -/obj/item/storage/box/bandages{ - pixel_y = 6 - }, -/turf/open/floor/iron/white, -/area/mine/laborcamp/production) "jm" = ( /obj/machinery/door/airlock/public/glass{ name = "Showers" @@ -1578,6 +1570,16 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/edge, /area/mine/living_quarters) +"js" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "jw" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -1722,24 +1724,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/maintenance/living/north) -"kx" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/table, -/obj/item/paper/fluff/stations/lavaland/orm_notice, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/mine/production) -"ky" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "kB" = ( /obj/structure/stone_tile/surrounding_tile, /obj/structure/stone_tile/surrounding_tile{ @@ -1783,6 +1767,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/plating, /area/mine/maintenance/service) +"kG" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "kH" = ( /obj/structure/stone_tile/surrounding_tile{ dir = 1 @@ -1980,17 +1973,6 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) -"lA" = ( -/obj/machinery/recycler{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 4; - id = "mining_disposals" - }, -/obj/effect/turf_decal/sand/plating/volcanic, -/turf/open/floor/plating/lavaland_atmos, -/area/mine/maintenance/service/disposals) "lC" = ( /obj/structure/stone_tile/block/cracked{ dir = 1 @@ -2105,18 +2087,6 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) -"lT" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "lV" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -2182,19 +2152,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, /area/mine/hydroponics) -"mh" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/structure/railing/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "mj" = ( /obj/structure/stone_tile/block, /obj/structure/stone_tile/block{ @@ -2745,6 +2702,13 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron/dark/textured_large, /area/mine/production) +"oy" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "oA" = ( /turf/closed/wall, /area/mine/storage) @@ -2870,6 +2834,12 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron/white, /area/mine/laborcamp/production) +"ps" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/mine/maintenance/service) "pu" = ( /obj/item/chair/stool{ pixel_x = -2; @@ -3310,6 +3280,23 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"so" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/item/storage/box/bandages{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/storage/pill_bottle/epinephrine{ + pixel_x = -6; + pixel_y = 4 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/mine/medical) "st" = ( /obj/structure/chair/stool/directional/north, /obj/effect/decal/cleanable/dirt, @@ -3531,15 +3518,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/storage) -"tO" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/table, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/mine/production) "tV" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -4308,15 +4286,6 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) -"yQ" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "yR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4442,6 +4411,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/living/north) +"zD" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/barricade/wooden/crude, +/obj/structure/barricade/wooden, +/turf/open/floor/iron/dark, +/area/mine/production) "zF" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -4474,6 +4451,18 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/mine/maintenance/service) +"zO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "zQ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_edge, @@ -4494,14 +4483,6 @@ /obj/structure/cable, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"Ac" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/obj/machinery/computer/order_console/mining, -/turf/open/floor/iron/dark, -/area/mine/production) "Ae" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4509,14 +4490,6 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"Af" = ( -/obj/machinery/mineral/processing_unit{ - dir = 1; - input_dir = 8; - output_dir = 4 - }, -/turf/open/floor/plating, -/area/mine/laborcamp/production) "Ai" = ( /obj/structure/stone_tile/cracked{ dir = 1 @@ -4616,13 +4589,6 @@ "AX" = ( /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) -"AY" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) "Bb" = ( /obj/machinery/camera/autoname/directional/east{ network = list("mine") @@ -4991,6 +4957,11 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"Ee" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/plating, +/area/mine/maintenance/labor) "Eg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -5004,14 +4975,12 @@ /turf/open/floor/plating/lavaland_atmos, /area/mine/maintenance/service/disposals) "Ep" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing/corner{ +/obj/structure/railing{ dir = 1 }, -/turf/open/lava/smooth/lava_land_surface, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Eq" = ( /obj/machinery/door/airlock/security/glass{ @@ -5357,13 +5326,6 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"GV" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) "GW" = ( /obj/structure/chair/office{ dir = 1 @@ -5407,11 +5369,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/mine/maintenance/public/north) -"Hi" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/plating, -/area/mine/maintenance/labor) "Hp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -5793,6 +5750,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/mine/laborcamp/production) +"Jz" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "JA" = ( /obj/machinery/computer/shuttle/mining/common, /obj/structure/sign/directions/evac/directional/east{ @@ -5879,13 +5843,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) -"JO" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) "JP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5898,23 +5855,6 @@ dir = 1 }, /area/mine/living_quarters) -"JQ" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 - }, -/obj/item/storage/pill_bottle/epinephrine{ - pixel_x = -6; - pixel_y = 4 - }, -/turf/open/floor/iron/white/smooth_corner{ - dir = 8 - }, -/area/mine/medical) "JR" = ( /obj/structure/stone_tile, /obj/structure/stone_tile{ @@ -6290,6 +6230,13 @@ dir = 4 }, /area/mine/lounge) +"LO" = ( +/obj/structure/table, +/obj/item/storage/box/bandages{ + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/mine/laborcamp/production) "LR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6306,6 +6253,14 @@ }, /turf/open/floor/plating/lavaland_atmos, /area/lavaland/surface/outdoors) +"LT" = ( +/obj/machinery/mineral/processing_unit/gulag{ + dir = 1; + input_dir = 8; + output_dir = 4 + }, +/turf/open/floor/plating, +/area/mine/laborcamp/production) "LY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -6576,6 +6531,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) +"NG" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/machinery/computer/order_console/mining, +/turf/open/floor/iron/dark, +/area/mine/production) "NL" = ( /obj/structure/railing, /obj/structure/lattice/catwalk/mining, @@ -6878,6 +6841,17 @@ }, /turf/open/floor/plating, /area/mine/production) +"PL" = ( +/obj/machinery/recycler{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "mining_disposals" + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/maintenance/service/disposals) "PR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, @@ -6959,13 +6933,9 @@ }, /turf/open/floor/iron/dark, /area/mine/mechbay) -"Qm" = ( -/obj/structure/railing, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 +"Qq" = ( +/obj/structure/ore_vent/starter_resources{ + icon_state = "ore_vent_active" }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) @@ -7056,6 +7026,16 @@ dir = 4 }, /area/mine/production) +"QV" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "QX" = ( /turf/closed/wall, /area/mine/mechbay) @@ -7100,6 +7080,14 @@ }, /turf/open/floor/iron/dark, /area/mine/production) +"Ro" = ( +/obj/effect/turf_decal/loading_area, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark, +/area/mine/production) "Rs" = ( /obj/machinery/conveyor{ dir = 6; @@ -7176,14 +7164,6 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"RS" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/structure/barricade/wooden/crude, -/obj/structure/barricade/wooden, -/turf/open/floor/iron/dark, -/area/mine/production) "RV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -7385,6 +7365,14 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/mine/eva) +"Ti" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/table, +/obj/item/paper/fluff/stations/lavaland/orm_notice, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/mine/production) "To" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -7432,6 +7420,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/living/north) +"TD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/smooth_edge, +/area/mine/production) "TF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7660,13 +7655,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) -"UW" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/ore_box, -/turf/open/floor/iron/dark/smooth_edge, -/area/mine/production) "UZ" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7847,6 +7835,15 @@ }, /turf/open/floor/iron/dark/textured_large, /area/mine/laborcamp) +"VZ" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/table, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/mine/production) "Wb" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, @@ -7894,6 +7891,13 @@ }, /turf/open/floor/carpet/neon/simple/red/nodots, /area/mine/cafeteria) +"Wy" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "WB" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -22569,7 +22573,7 @@ uU uU uU pU -pU +fP pU ff Gf @@ -23851,7 +23855,7 @@ aj aj eR Kw -jk +LO ff mU Fv @@ -24373,7 +24377,7 @@ Hd Nb NR Kv -Af +LT ff gm mN @@ -28234,7 +28238,7 @@ Zt Zt Zt Zt -Hi +Ee ve RD RD @@ -36428,7 +36432,7 @@ pU mA su xG -lA +PL Sd pU aj @@ -38481,7 +38485,7 @@ Ue AA gB ON -cg +ps gq ER vc @@ -39546,7 +39550,7 @@ yp yp Dz LG -JQ +so It Xp Ss @@ -45941,9 +45945,9 @@ pU aj aj aj -AY -lT -JO +Wy +zO +Jz aj oA Lu @@ -46198,9 +46202,9 @@ aj aj aj aj -bq -dp -Qm +Ep +Qq +fx aj oA Lz @@ -46455,9 +46459,9 @@ pU pU aj aj -yQ -mh -ky +kG +dV +QV NU NU NU @@ -46713,7 +46717,7 @@ pU pU aj aj -dW +gA aj Le Lh @@ -46969,8 +46973,8 @@ pU pU AQ ZM -GV -Ep +oy +js ZM Ki Uq @@ -47748,10 +47752,10 @@ NU NU NU NU -bx +gW Xj QT -Ac +NG pK No Hp @@ -48004,11 +48008,11 @@ pU pU NU PI -RS -UW +zD +TD Vw wl -kx +Ti pK lg se @@ -48265,7 +48269,7 @@ zJ oi Ts Wb -tO +VZ pK Tf Jp @@ -48777,7 +48781,7 @@ NU Rs rP JG -fT +Ro op NU pK diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index e0de5bebc26..456cf46196e 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -597,16 +597,6 @@ dir = 1 }, /area/station/escapepodbay) -"aci" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/photobooth/security, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "acj" = ( /turf/open/floor/iron/stairs/medium{ dir = 1 @@ -6018,6 +6008,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"aUc" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/photobooth, +/turf/open/floor/iron/grimy, +/area/station/service/library/lounge) "aUh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7521,6 +7516,15 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/captain/private) +"bCx" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/research) "bDf" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, @@ -8262,6 +8266,12 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) +"bNI" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/modular_computer/preset/cargochat/service, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "bNJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12269,10 +12279,6 @@ "dfz" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/storage) -"dfC" = ( -/mob/living/basic/slime, -/turf/open/floor/engine, -/area/station/science/xenobiology) "dfE" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 @@ -19485,13 +19491,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/science/explab) -"fRb" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 9 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "fRs" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -20093,6 +20092,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"gbZ" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Science - Research & Development"; + network = list("ss13","rd") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/kirbyplants/organic/plant10, +/turf/open/floor/iron/white, +/area/station/science/lab) "gcp" = ( /turf/closed/wall/r_wall, /area/station/commons/vacant_room) @@ -22957,13 +22970,6 @@ "hhc" = ( /turf/open/floor/iron/dark, /area/station/command/bridge) -"hhf" = ( -/obj/machinery/power/smes{ - charge = 5e+06 - }, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai) "hht" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23161,6 +23167,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"hjz" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/modular_computer/preset/cargochat/medical{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/storage) "hjM" = ( /obj/structure/railing/corner{ dir = 4 @@ -25712,6 +25727,18 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/monastery) +"ikM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ikT" = ( /obj/effect/turf_decal/trimline/dark_red/warning{ dir = 10 @@ -26539,6 +26566,19 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"iBo" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Service - Autolathe Room" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/dim/directional/north, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine" + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "iBx" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -27794,6 +27834,14 @@ }, /turf/open/floor/plating/airless, /area/station/asteroid) +"iYO" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/modular_computer/preset/cargochat/science, +/turf/open/floor/iron/white, +/area/station/science/lab) "iZb" = ( /turf/closed/wall, /area/station/security/office) @@ -31330,6 +31378,16 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/catwalk_floor, /area/station/maintenance/tram/mid) +"kfH" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/photobooth/security, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "kfO" = ( /turf/open/floor/plating, /area/station/cargo/drone_bay) @@ -33908,6 +33966,13 @@ }, /turf/open/space/openspace, /area/station/solars/port) +"kXq" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/ai) "kXr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -34662,6 +34727,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"llW" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) "lml" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) @@ -37150,18 +37220,6 @@ "mbJ" = ( /turf/closed/wall, /area/station/maintenance/tram/right) -"mbK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "mbQ" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -37232,17 +37290,6 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/rd) -"mdk" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 5 - }, -/obj/structure/cable, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/engineering/break_room) "mdl" = ( /obj/effect/turf_decal/trimline/white/warning{ dir = 6 @@ -37628,25 +37675,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"mjy" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/trimline/red/filled/warning{ - dir = 4 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 3; - pixel_y = 8 - }, -/turf/open/floor/iron, -/area/station/security/office) "mjF" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -38874,11 +38902,6 @@ /obj/structure/railing, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) -"mHZ" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/photobooth, -/turf/open/floor/iron/grimy, -/area/station/service/library/lounge) "mId" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -39212,6 +39235,13 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"mOq" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "mOB" = ( /obj/structure/table, /obj/item/analyzer, @@ -42013,6 +42043,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"nOB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "nOI" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/disposalpipe/segment{ @@ -43829,6 +43864,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/grass, /area/station/medical/virology) +"oxe" = ( +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) "oxf" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/dark_blue/arrow_cw, @@ -44705,6 +44744,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) +"oSu" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 4 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 3; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) "oSB" = ( /obj/machinery/camera/directional/west{ network = list("ss13","Security","cargo"); @@ -46707,15 +46765,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) -"pBU" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/glass/reinforced, -/area/station/science/research) "pBZ" = ( /obj/structure/railing/corner{ dir = 4 @@ -47471,20 +47520,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/storage/primary) -"pOY" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Science - Research & Development"; - network = list("ss13","rd") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/iron/white, -/area/station/science/lab) "pOZ" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -48979,11 +49014,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/fitness/recreation) -"qqm" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "qqv" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on, /obj/machinery/light/directional/north, @@ -49258,21 +49288,23 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"qvR" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/glass/reinforced, -/area/station/science/research) "qvV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/iron, /area/station/security/prison/work) +"qwn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/engineering/break_room) "qwq" = ( /obj/structure/table/wood, /obj/item/radio/intercom, @@ -51907,6 +51939,15 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/central) +"rpq" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/research) "rpr" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 @@ -57000,15 +57041,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"thm" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/modular_computer/preset/cargochat/medical{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/medical/storage) "thG" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -62777,19 +62809,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/medical) -"vbl" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Service - Autolathe Room" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/dim/directional/north, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Service Hallway"; - name = "Service Fax Machine" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "vbt" = ( /obj/machinery/computer/atmos_control/oxygen_tank{ atmos_chambers = list(o2ordance="Oxygen Supply") @@ -65292,13 +65311,6 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"vTD" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "vTE" = ( /obj/machinery/camera{ dir = 9; @@ -66034,12 +66046,6 @@ /obj/structure/railing/corner, /turf/open/space/openspace, /area/station/solars/starboard/fore) -"whX" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/modular_computer/preset/cargochat/service, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "wid" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -66913,14 +66919,6 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/maintenance/port/central) -"wzX" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/modular_computer/preset/cargochat/science, -/turf/open/floor/iron/white, -/area/station/science/lab) "wAa" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -86737,7 +86735,7 @@ jWs jvE eLB abU -aci +kfH acv acH sXc @@ -102685,10 +102683,10 @@ apl iRL snQ iRL -whX +bNI tbm nNZ -qqm +nOB cWZ klk kNo @@ -103199,7 +103197,7 @@ bje iRL snQ iRL -fRb +mOq twg dWn cWZ @@ -103752,7 +103750,7 @@ ixT gYI cgR ial -mdk +qwn amV mvy iXQ @@ -103970,7 +103968,7 @@ aeF iRL quF iRL -vbl +iBo sWF iog cWZ @@ -115592,7 +115590,7 @@ dUT gdC qVr bfH -dfC +oxe ahk hdA mBm @@ -115604,7 +115602,7 @@ hik sml bfH bfH -dfC +oxe jTC qVr aaa @@ -118676,7 +118674,7 @@ hFH tYB qVr jTC -dfC +oxe bfH bfH nbI @@ -118688,7 +118686,7 @@ rbU uAF ahk hdA -dfC +oxe bfH qVr aaa @@ -152593,7 +152591,7 @@ cSr rAS xzI uYa -mHZ +aUc ppK rAS rAS @@ -156634,7 +156632,7 @@ dEv ukw pyF dEv -mjy +oSu rWT gYd isV @@ -166203,7 +166201,7 @@ kZD wAe glU jSc -thm +hjz xRx aLw pVk @@ -167228,7 +167226,7 @@ jAc kkd qNI mrC -mbK +ikM tOw kGa djz @@ -182133,14 +182131,14 @@ wxu yjY eYS oxL -pOY +gbZ oGO xQN mEt vNk kTU xyt -qvR +rpq ovC dCq uiV @@ -183161,14 +183159,14 @@ aIv aHQ tJz oxL -wzX +iYO lpC vTb vTb rbn crj wWT -pBU +bCx uvB rBb tbK @@ -185803,7 +185801,7 @@ jLx ffe mgi pIQ -hhf +llW xZx rSB dVM @@ -186316,7 +186314,7 @@ mYB njC aoh iUO -vTD +kXq lxi njC mEb diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index b673d0e7a12..c827f760b8a 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -14,6 +14,8 @@ #define IMMUNE_TO_FISTS (1<<4) /// Mob is immune to getting wet #define IMMUNE_TO_GETTING_WET (1<<5) +/// Disables the function of attacking random body zones +#define PRECISE_ATTACK_ZONES (1<<6) /// Temporary trait applied when an attack forecast animation has completed #define TRAIT_BASIC_ATTACK_FORECAST "trait_basic_attack_forecast" diff --git a/code/__DEFINES/click.dm b/code/__DEFINES/click.dm new file mode 100644 index 00000000000..5900dd54210 --- /dev/null +++ b/code/__DEFINES/click.dm @@ -0,0 +1,8 @@ +/// Action has succeeded, preventing further alt click interaction +#define CLICK_ACTION_SUCCESS (1<<0) +/// Action failed, preventing further alt click interaction +#define CLICK_ACTION_BLOCKING (1<<1) +/// Either return state +#define CLICK_ACTION_ANY (CLICK_ACTION_SUCCESS | CLICK_ACTION_BLOCKING) + +/// Use NONE for continue interaction diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 847fd52cc22..686e422b020 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -282,6 +282,8 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( #define BODY_ZONE_L_LEG "l_leg" #define BODY_ZONE_R_LEG "r_leg" +GLOBAL_LIST_INIT(all_body_zones, list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) +GLOBAL_LIST_INIT(limb_zones, list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) #define BODY_ZONE_PRECISE_EYES "eyes" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm index 3ff131d9a39..2ea2e4d5fe3 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm @@ -13,7 +13,6 @@ #define COMSIG_CLICK_CTRL "ctrl_click" ///from base of atom/AltClick(): (/mob) #define COMSIG_CLICK_ALT "alt_click" - #define COMPONENT_CANCEL_CLICK_ALT (1<<0) ///from base of atom/alt_click_secondary(): (/mob) #define COMSIG_CLICK_ALT_SECONDARY "alt_click_secondary" #define COMPONENT_CANCEL_CLICK_ALT_SECONDARY (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 068aadf6a5e..f33d2f1f40d 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -182,8 +182,6 @@ #define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" ///from base of obj/item/afterattack_secondary(): (atom/target, obj/item/weapon, proximity_flag, click_parameters) #define COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY "mob_item_afterattack_secondary" -///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, proximity_flag, click_parameters) -#define COMSIG_MOB_ITEM_ATTACK_QDELETED "mob_item_attack_qdeleted" ///from base of mob/RangedAttack(): (atom/A, modifiers) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" ///from base of mob/ranged_secondary_attack(): (atom/target, modifiers) diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index d926cc6d5df..43e3a09a028 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -472,8 +472,6 @@ #define COMPONENT_AFTERATTACK_PROCESSED_ITEM (1<<0) ///from base of obj/item/afterattack_secondary(): (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_ITEM_AFTERATTACK_SECONDARY "item_afterattack_secondary" -///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) -#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" ///from base of obj/item/embedded(): (atom/target, obj/item/bodypart/part) #define COMSIG_ITEM_EMBEDDED "item_embedded" ///from base of datum/component/embedded/safeRemove(): (mob/living/carbon/victim) diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm index 55732f2364b..418466a0eb2 100644 --- a/code/__DEFINES/interaction_flags.dm +++ b/code/__DEFINES/interaction_flags.dm @@ -36,10 +36,7 @@ #define INTERACT_MACHINE_OPEN_SILICON (1<<4) /// must be silicon to interact #define INTERACT_MACHINE_REQUIRES_SILICON (1<<5) -/// This flag determines if a machine set_machine's the user when the user uses it, making updateUsrDialog make the user re-call interact() on it. -/// This is exclusively used for non-TGUI UIs, and its instances should be removed when moved to TGUI. -#define INTERACT_MACHINE_SET_MACHINE (1<<6) /// the user must have vision to interact (blind people need not apply) -#define INTERACT_MACHINE_REQUIRES_SIGHT (1<<7) +#define INTERACT_MACHINE_REQUIRES_SIGHT (1<<6) /// the user must be able to read to interact -#define INTERACT_MACHINE_REQUIRES_LITERACY (1<<8) +#define INTERACT_MACHINE_REQUIRES_LITERACY (1<<7) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e46600abe2a..f47ad817e92 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -855,6 +855,10 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define ALLOW_SILICON_REACH (1<<6) /// If resting on the floor is allowed to perform action (pAIs can play music while resting) #define ALLOW_RESTING (1<<7) +/// If this is accessible to creatures with ventcrawl capabilities +#define NEED_VENTCRAWL (1<<8) +/// Checks for base adjacency, but silences the error +#define SILENT_ADJACENCY (1<<9) /// The default mob sprite size (used for shrinking or enlarging the mob sprite to regular size) #define RESIZE_DEFAULT_SIZE 1 diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index ea5b929651d..9e38eada923 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -2,20 +2,19 @@ #define EMAGGED (1<<0) -#define IN_USE (1<<1) // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! -#define CAN_BE_HIT (1<<2) //can this be bludgeoned by items? -#define DANGEROUS_POSSESSION (1<<3) //Admin possession yes/no -#define UNIQUE_RENAME (1<<4) // can you customize the description/name of the thing? -#define BLOCK_Z_OUT_DOWN (1<<5) // Should this object block z falling from loc? -#define BLOCK_Z_OUT_UP (1<<6) // Should this object block z uprise from loc? -#define BLOCK_Z_IN_DOWN (1<<7) // Should this object block z falling from above? -#define BLOCK_Z_IN_UP (1<<8) // Should this object block z uprise from below? -#define BLOCKS_CONSTRUCTION (1<<9) //! Does this object prevent things from being built on it? -#define BLOCKS_CONSTRUCTION_DIR (1<<10) //! Does this object prevent same-direction things from being built on it? -#define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles) -#define INFINITE_RESKIN (1<<12) // We can reskin this item infinitely -#define CONDUCTS_ELECTRICITY (1<<13) //! Can this object conduct electricity? -#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish +#define CAN_BE_HIT (1<<1) //can this be bludgeoned by items? +#define DANGEROUS_POSSESSION (1<<2) //Admin possession yes/no +#define UNIQUE_RENAME (1<<3) // can you customize the description/name of the thing? +#define BLOCK_Z_OUT_DOWN (1<<4) // Should this object block z falling from loc? +#define BLOCK_Z_OUT_UP (1<<5) // Should this object block z uprise from loc? +#define BLOCK_Z_IN_DOWN (1<<6) // Should this object block z falling from above? +#define BLOCK_Z_IN_UP (1<<7) // Should this object block z uprise from below? +#define BLOCKS_CONSTRUCTION (1<<8) //! Does this object prevent things from being built on it? +#define BLOCKS_CONSTRUCTION_DIR (1<<9) //! Does this object prevent same-direction things from being built on it? +#define IGNORE_DENSITY (1<<10) //! Can we ignore density when building on this object? (for example, directional windows and grilles) +#define INFINITE_RESKIN (1<<11) // We can reskin this item infinitely +#define CONDUCTS_ELECTRICITY (1<<12) //! Can this object conduct electricity? +#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<13) //! Atoms don't spawn anything when deconstructed. They just vanish // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 3260dd4d5a8..f82f4af2ddd 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -111,6 +111,7 @@ #define MAX_CHARTER_LEN 80 #define MAX_PLAQUE_LEN 144 #define MAX_LABEL_LEN 64 +#define MAX_DESC_LEN 280 // Audio/Visual Flags. Used to determine what sense are required to notice a message. #define MSG_VISUAL (1<<0) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index ccd7e4e06bb..d7ec3e4669c 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -191,6 +191,7 @@ #define INIT_ORDER_MATURITY_GUARD -60 //SKYRAT EDIT ADDITION #define INIT_ORDER_DECAY -61 //SKYRAT EDIT ADDITION #define INIT_ORDER_EXPLOSIONS -69 +#define INIT_ORDER_LOOT -70 #define INIT_ORDER_STATPANELS -97 #define INIT_ORDER_BAN_CACHE -98 #define INIT_ORDER_INIT_PROFILER -99 //Near the end, logs the costs of initialize diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index f5ad67a8c94..6a83f33083a 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -767,6 +767,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_POSTERBOY "poster_boy" #define TRAIT_THROWINGARM "throwing_arm" #define TRAIT_SETTLER "settler" +#define TRAIT_STRONG_STOMACH "strong_stomach" /// This mob always lands on their feet when they fall, for better or for worse. #define TRAIT_CATLIKE_GRACE "catlike_grace" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index dcbfab7fe5f..56bcbf3c90d 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -286,8 +286,8 @@ /// Trait from an organ being inside a bodypart #define ORGAN_INSIDE_BODY_TRAIT "organ_inside_body" -/// Trait when something was labelled by a pen. -#define PEN_LABEL_TRAIT "pen_label" +/// Trait when something was labelled by the /datum/element/tool_renaming element. +#define RENAMING_TOOL_LABEL_TRAIT "renaming_tool_label" /// Trait when a drink was renamed by a shaker #define SHAKER_LABEL_TRAIT "shaker_trait" diff --git a/code/__DEFINES/~skyrat_defines/combat.dm b/code/__DEFINES/~skyrat_defines/combat.dm index 5137aa81376..05474bb21d8 100644 --- a/code/__DEFINES/~skyrat_defines/combat.dm +++ b/code/__DEFINES/~skyrat_defines/combat.dm @@ -59,14 +59,13 @@ #define HEADSMASH_BLOCK_ARMOR 20 #define SUPLEX_TIMER 3 SECONDS -/// Skyrat change - alt-clicking a human as another human while grappling them tightly makes you try for grappling-based maneuvers. -/mob/living/carbon/human/AltClick(mob/user) +// alt-clicking a human as another human while grappling them tightly makes you try for grappling-based maneuvers. +/mob/living/carbon/human/click_alt(mob/user) if(!ishuman(user)) return ..() var/mob/living/carbon/human/human_user = user if(human_user == src || !human_user.combat_mode || !human_user.dna.species.try_grab_maneuver(user, src)) - return FALSE - . = ..() + return CLICK_ACTION_BLOCKING /// State check for grab maneuver - because you can't logically suplex a man if you've stopped grappling them. /datum/species/proc/grab_maneuver_state_check(mob/living/carbon/human/user, mob/living/carbon/human/target) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index f210774ac81..e0f07ab2835 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -152,15 +152,14 @@ DEFINE_BITFIELD(interaction_flags_atom, list( )) DEFINE_BITFIELD(interaction_flags_machine, list( - "INTERACT_MACHINE_ALLOW_SILICON" = INTERACT_MACHINE_ALLOW_SILICON, - "INTERACT_MACHINE_OFFLINE" = INTERACT_MACHINE_OFFLINE, "INTERACT_MACHINE_OPEN" = INTERACT_MACHINE_OPEN, + "INTERACT_MACHINE_OFFLINE" = INTERACT_MACHINE_OFFLINE, + "INTERACT_MACHINE_WIRES_IF_OPEN" = INTERACT_MACHINE_WIRES_IF_OPEN, + "INTERACT_MACHINE_ALLOW_SILICON" = INTERACT_MACHINE_ALLOW_SILICON, "INTERACT_MACHINE_OPEN_SILICON" = INTERACT_MACHINE_OPEN_SILICON, + "INTERACT_MACHINE_REQUIRES_SILICON" = INTERACT_MACHINE_REQUIRES_SILICON, "INTERACT_MACHINE_REQUIRES_SIGHT" = INTERACT_MACHINE_REQUIRES_SIGHT, "INTERACT_MACHINE_REQUIRES_LITERACY" = INTERACT_MACHINE_REQUIRES_LITERACY, - "INTERACT_MACHINE_REQUIRES_SILICON" = INTERACT_MACHINE_REQUIRES_SILICON, - "INTERACT_MACHINE_SET_MACHINE" = INTERACT_MACHINE_SET_MACHINE, - "INTERACT_MACHINE_WIRES_IF_OPEN" = INTERACT_MACHINE_WIRES_IF_OPEN, )) DEFINE_BITFIELD(interaction_flags_item, list( @@ -282,20 +281,20 @@ DEFINE_BITFIELD(movement_type, list( )) DEFINE_BITFIELD(obj_flags, list( - "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, - "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, + "EMAGGED" = EMAGGED, + "CAN_BE_HIT" = CAN_BE_HIT, + "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, + "UNIQUE_RENAME" = UNIQUE_RENAME, "BLOCK_Z_OUT_DOWN" = BLOCK_Z_OUT_DOWN, "BLOCK_Z_OUT_UP" = BLOCK_Z_OUT_UP, - "BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR, + "BLOCK_Z_IN_DOWN" = BLOCK_Z_IN_DOWN, + "BLOCK_Z_IN_UP" = BLOCK_Z_IN_UP, "BLOCKS_CONSTRUCTION" = BLOCKS_CONSTRUCTION, - "CAN_BE_HIT" = CAN_BE_HIT, - "CONDUCTS_ELECTRICITY" = CONDUCTS_ELECTRICITY, - "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, - "EMAGGED" = EMAGGED, + "BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR, "IGNORE_DENSITY" = IGNORE_DENSITY, - "IN_USE" = IN_USE, + "INFINITE_RESKIN" = INFINITE_RESKIN, + "CONDUCTS_ELECTRICITY" = CONDUCTS_ELECTRICITY, "NO_DEBRIS_AFTER_DECONSTRUCTION" = NO_DEBRIS_AFTER_DECONSTRUCTION, - "UNIQUE_RENAME" = UNIQUE_RENAME, )) DEFINE_BITFIELD(pass_flags, list( diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 83e199cb908..f67ed4f6d07 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -362,6 +362,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_OVERWATCHED" = TRAIT_OVERWATCHED, "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, @@ -418,7 +419,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, - "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, @@ -440,6 +440,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STASIS" = TRAIT_STASIS, "TRAIT_STIMULATED" = TRAIT_STIMULATED, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, + "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, "TRAIT_SUCCUMB_OVERRIDE" = TRAIT_SUCCUMB_OVERRIDE, "TRAIT_SUICIDED" = TRAIT_SUICIDED, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index d4c203342e4..5fe6883e82b 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -160,6 +160,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, @@ -192,7 +193,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, - "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, @@ -206,6 +206,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, + "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, "TRAIT_SURGEON" = TRAIT_SURGEON, "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index c8c35b30847..0a6e54a46e0 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -55,7 +55,7 @@ ShiftClickOn(A) return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) - AltClickOn(A) + A.ai_click_alt(src) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -120,8 +120,6 @@ /mob/living/silicon/ai/CtrlClickOn(atom/target) target.AICtrlClick(src) -/mob/living/silicon/ai/AltClickOn(atom/target) - target.AIAltClick(src) /* The following criminally helpful code is just the previous code cleaned up; @@ -133,8 +131,7 @@ /atom/proc/AICtrlClick(mob/living/silicon/ai/user) return -/atom/proc/AIAltClick(mob/living/silicon/ai/user) - AltClick(user) +/atom/proc/ai_click_alt(mob/living/silicon/ai/user) return /atom/proc/AIShiftClick(mob/living/silicon/ai/user) @@ -150,7 +147,7 @@ toggle_bolt(user) add_hiddenprint(user) -/obj/machinery/door/airlock/AIAltClick(mob/living/silicon/ai/user) // Eletrifies doors. +/obj/machinery/door/airlock/ai_click_alt(mob/living/silicon/ai/user) if(obj_flags & EMAGGED) return @@ -219,7 +216,7 @@ update() /// Toggle APC equipment settings -/obj/machinery/power/apc/AIAltClick(mob/living/silicon/ai/user) +/obj/machinery/power/apc/ai_click_alt(mob/living/silicon/ai/user) if(!can_use(user, loud = TRUE)) return @@ -243,7 +240,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /* AI Turrets */ -/obj/machinery/turretid/AIAltClick(mob/living/silicon/ai/user) //toggles lethal on turrets +/obj/machinery/turretid/ai_click_alt(mob/living/silicon/ai/user) //toggles lethal on turrets if(ailock) return toggle_lethal(user) @@ -254,7 +251,7 @@ toggle_on(user) /* Holopads */ -/obj/machinery/holopad/AIAltClick(mob/living/silicon/ai/user) +/obj/machinery/holopad/ai_click_alt(mob/living/silicon/ai/user) if (user) balloon_alert(user, "disrupted all active calls") add_hiddenprint(user) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 566256824bf..af391efc859 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -96,7 +96,7 @@ if(LAZYACCESS(modifiers, RIGHT_CLICK)) alt_click_on_secondary(A) else - AltClickOn(A) + base_click_alt(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -385,24 +385,6 @@ A.CtrlClick(src) return -/** - * Alt click - * Unused except for AI - */ -/mob/proc/AltClickOn(atom/A) - . = SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, A) - if(. & COMSIG_MOB_CANCEL_CLICKON) - return - A.AltClick(src) - -/atom/proc/AltClick(mob/user) - if(!user.can_interact_with(src)) - return FALSE - if(SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) & COMPONENT_CANCEL_CLICK_ALT) - return - var/turf/T = get_turf(src) - if(T && (isturf(loc) || isturf(src)) && user.TurfAdjacent(T) && !HAS_TRAIT(user, TRAIT_MOVE_VENTCRAWLING)) - user.set_listed_turf(T) ///The base proc of when something is right clicked on when alt is held - generally use alt_click_secondary instead /atom/proc/alt_click_on_secondary(atom/A) @@ -421,14 +403,8 @@ user.client.toggle_tag_datum(src) return -/// Use this instead of [/mob/proc/AltClickOn] where you only want turf content listing without additional atom alt-click interaction -/atom/proc/AltClickNoInteract(mob/user, atom/A) - var/turf/T = get_turf(A) - if(T && user.TurfAdjacent(T)) - user.set_listed_turf(T) - -/mob/proc/TurfAdjacent(turf/T) - return T.Adjacent(src) +/mob/proc/TurfAdjacent(turf/tile) + return tile.Adjacent(src) /** * Control+Shift click diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm new file mode 100644 index 00000000000..16c8e843995 --- /dev/null +++ b/code/_onclick/click_alt.dm @@ -0,0 +1,66 @@ +/** + * ### Base proc for alt click interaction. + * + * If you wish to add custom `click_alt` behavior for a single type, use that proc. + */ +/mob/proc/base_click_alt(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) + + var/turf/tile = isturf(target) ? target : get_turf(target) + + if(isobserver(src) || isrevenant(src)) + open_lootpanel(tile) + return + + if(!isturf(target) && can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) + if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) + return + + if(target.click_alt(src) & CLICK_ACTION_ANY) + return + + open_lootpanel(tile) + + +/// Helper for opening the lootpanel +/mob/proc/open_lootpanel(turf/target) + if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING)) + return + + var/datum/lootpanel/panel = client?.loot_panel + if(isnull(panel)) + return + + panel.open(target) + + +/** + * ## Custom alt click interaction + * Override this to change default alt click behavior. Return `CLICK_ACTION_SUCCESS`, `CLICK_ACTION_BLOCKING` or `NONE`. + * + * ### Guard clauses + * Consider adding `interaction_flags_click` before adding unique guard clauses. + * + * ### Return flags + * Forgetting your return will cause the default alt click behavior to occur thereafter. + * + * The difference between NONE and BLOCKING can get hazy, but I like to keep NONE limited to guard clauses and "never" cases. + * + * A good usage for BLOCKING over NONE is when it's situational for the item and there's some feedback indicating this. + * + * ### Examples: + * User is a ghost, alt clicks on item with special disk eject: NONE + * + * Machine broken, no feedback: NONE + * + * Alt click a pipe to max output but its already max: BLOCKING + * + * Alt click a gun that normally works, but is out of ammo: BLOCKING + * + * User unauthorized, machine beeps: BLOCKING + * + * @param {mob} user - The person doing the alt clicking. + */ +/atom/proc/click_alt(mob/user) + SHOULD_CALL_PARENT(FALSE) + return NONE diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 8cad6f772e0..4f06e15f2cd 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -31,7 +31,7 @@ MiddleClickOn(A, params) return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) - AltClickOn(A) + A.borg_click_alt(src) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -89,7 +89,7 @@ if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) W.afterattack(A, src, FALSE, params) - else + else W.afterattack(A, src, FALSE, params) //Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks @@ -103,8 +103,6 @@ /mob/living/silicon/robot/CtrlClickOn(atom/target) target.BorgCtrlClick(src) -/mob/living/silicon/robot/AltClickOn(atom/target) - target.BorgAltClick(src) /atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden CtrlShiftClick(user) @@ -152,9 +150,9 @@ else ..() -/obj/machinery/power/apc/BorgAltClick(mob/living/silicon/robot/user) +/obj/machinery/power/apc/borg_click_alt(mob/living/silicon/robot/user) if(get_dist(src, user) <= user.interaction_range && !(user.control_disabled)) - AIAltClick(user) + ai_click_alt(user) else ..() @@ -171,19 +169,19 @@ else ..() -/atom/proc/BorgAltClick(mob/living/silicon/robot/user) - AltClick(user) +/atom/proc/borg_click_alt(mob/living/silicon/robot/user) + user.base_click_alt(src) return -/obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. +/obj/machinery/door/airlock/borg_click_alt(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. if(get_dist(src, user) <= user.interaction_range && !(user.control_disabled)) - AIAltClick(user) + ai_click_alt(user) else ..() -/obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. +/obj/machinery/turretid/borg_click_alt(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. if(get_dist(src, user) <= user.interaction_range && !(user.control_disabled)) - AIAltClick(user) + ai_click_alt(user) else ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index a3f886e656f..a1ca5ebf85a 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -11,7 +11,7 @@ var/list/modifiers = params2list(params) var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) - var/item_interact_result = target.item_interaction(user, src, modifiers, is_right_clicking) + var/item_interact_result = target.base_item_interaction(user, src, modifiers) if(item_interact_result & ITEM_INTERACT_SUCCESS) return TRUE if(item_interact_result & ITEM_INTERACT_BLOCKING) @@ -52,10 +52,6 @@ if (attackby_result) return TRUE - if(QDELETED(src) || QDELETED(target)) - attack_qdeleted(target, user, TRUE, params) - return TRUE - if (is_right_clicking) var/after_attack_secondary_result = afterattack_secondary(target, user, TRUE, params) @@ -163,7 +159,7 @@ return FALSE return attacking_item.attack_atom(src, user, params) -/mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers) // Surgery and such happens very high up in the interaction chain, before parent call var/attempt_tending = item_tending(user, tool, modifiers) if(attempt_tending & ITEM_INTERACT_ANY_BLOCKER) @@ -472,11 +468,6 @@ return SECONDARY_ATTACK_CALL_NORMAL -/// Called if the target gets deleted by our attack -/obj/item/proc/attack_qdeleted(atom/target, mob/user, proximity_flag, click_parameters) - SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_QDELETED, target, user, proximity_flag, click_parameters) - SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK_QDELETED, target, user, proximity_flag, click_parameters) - /obj/item/proc/get_clamped_volume() if(w_class) if(force) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 38d99a75e6c..ae2ebd97632 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -31,7 +31,7 @@ MiddleClickOn(A, params) return if(LAZYACCESS(modifiers, ALT_CLICK)) - AltClickNoInteract(src, A) + base_click_alt(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm index d6b8994f82f..900ad59bde2 100644 --- a/code/_onclick/overmind.dm +++ b/code/_onclick/overmind.dm @@ -10,7 +10,7 @@ ShiftClickOn(A) return if(LAZYACCESS(modifiers, ALT_CLICK)) - AltClickOn(A) + blob_click_alt(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -30,7 +30,7 @@ if(T) create_shield(T) -/mob/camera/blob/AltClickOn(atom/A) //Remove a blob +/mob/camera/blob/proc/blob_click_alt(atom/A) //Remove a blob var/turf/T = get_turf(A) if(T) remove_blob(T) diff --git a/code/controllers/subsystem/processing/obj_tab_items.dm b/code/controllers/subsystem/processing/obj_tab_items.dm deleted file mode 100644 index 53786daf011..00000000000 --- a/code/controllers/subsystem/processing/obj_tab_items.dm +++ /dev/null @@ -1,24 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(obj_tab_items) - name = "Obj Tab Items" - flags = SS_NO_INIT - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - wait = 0.1 SECONDS - -// I know this is mostly copypasta, but I want to change the processing logic -// Sorry bestie :( -/datum/controller/subsystem/processing/obj_tab_items/fire(resumed = FALSE) - if (!resumed) - currentrun = processing.Copy() - //cache for sanic speed (lists are references anyways) - var/list/current_run = currentrun - - while(current_run.len) - var/datum/thing = current_run[current_run.len] - if(QDELETED(thing)) - processing -= thing - else if(thing.process(wait * 0.1) == PROCESS_KILL) - // fully stop so that a future START_PROCESSING will work - STOP_PROCESSING(src, thing) - if (MC_TICK_CHECK) - return - current_run.len-- diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 1576c342273..7b1394ada16 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -110,12 +110,6 @@ SUBSYSTEM_DEF(statpanels) if(update_actions && num_fires % default_wait == 0) set_action_tabs(target, target_mob) - // Handle the examined turf of the stat panel, if it's been long enough, or if we've generated new images for it - var/turf/listed_turf = target_mob?.listed_turf - if(listed_turf && num_fires % default_wait == 0) - if(target.stat_tab == listed_turf.name || !(listed_turf.name in target.panel_tabs)) - set_turf_examine_tab(target, target_mob) - if(MC_TICK_CHECK) return @@ -188,71 +182,6 @@ SUBSYSTEM_DEF(statpanels) target.stat_panel.send_message("update_spells", list(spell_tabs = target.spell_tabs, actions = actions)) -/datum/controller/subsystem/statpanels/proc/set_turf_examine_tab(client/target, mob/target_mob) - var/list/overrides = list() - for(var/image/target_image as anything in target.images) - if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override) - continue - overrides += target_image.loc - - var/list/atoms_to_display = list(target_mob.listed_turf) - for(var/atom/movable/turf_content as anything in target_mob.listed_turf) - if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT) - continue - if(turf_content.invisibility > target_mob.see_invisible) - continue - if(turf_content in overrides) - continue - if(turf_content.IsObscured()) - continue - atoms_to_display += turf_content - - /// Set the atoms we're meant to display - var/datum/object_window_info/obj_window = target.obj_window - obj_window.atoms_to_show = atoms_to_display - START_PROCESSING(SSobj_tab_items, obj_window) - refresh_client_obj_view(target) - -/datum/controller/subsystem/statpanels/proc/refresh_client_obj_view(client/refresh) - var/list/turf_items = return_object_images(refresh) - if(!length(turf_items) || !refresh.mob?.listed_turf) - return - refresh.stat_panel.send_message("update_listedturf", turf_items) - -#define OBJ_IMAGE_LOADING "statpanels obj loading temporary" -/// Returns all our ready object tab images -/// Returns a list in the form list(list(object_name, object_ref, loaded_image), ...) -/datum/controller/subsystem/statpanels/proc/return_object_images(client/load_from) - // You might be inclined to think that this is a waste of cpu time, since we - // A: Double iterate over atoms in the build case, or - // B: Generate these lists over and over in the refresh case - // It's really not very hot. The hot portion of this code is genuinely mostly in the image generation - // So it's ok to pay a performance cost for cleanliness here - - // No turf? go away - if(!load_from.mob?.listed_turf) - return list() - var/datum/object_window_info/obj_window = load_from.obj_window - var/list/already_seen = obj_window.atoms_to_images - var/list/to_make = obj_window.atoms_to_imagify - var/list/turf_items = list() - for(var/atom/turf_item as anything in obj_window.atoms_to_show) - // First, we fill up the list of refs to display - // If we already have one, just use that - var/existing_image = already_seen[turf_item] - if(existing_image == OBJ_IMAGE_LOADING) - continue - // We already have it. Success! - if(existing_image) - turf_items[++turf_items.len] = list("[turf_item.name]", REF(turf_item), existing_image) - continue - // Now, we're gonna queue image generation out of those refs - to_make += turf_item - already_seen[turf_item] = OBJ_IMAGE_LOADING - obj_window.RegisterSignal(turf_item, COMSIG_QDELETING, TYPE_PROC_REF(/datum/object_window_info,viewing_atom_deleted)) // we reset cache if anything in it gets deleted - return turf_items - -#undef OBJ_IMAGE_LOADING /datum/controller/subsystem/statpanels/proc/generate_mc_data() mc_data = list( @@ -294,16 +223,6 @@ SUBSYSTEM_DEF(statpanels) set_action_tabs(target, target_mob) return TRUE - // Handle turfs - - if(target_mob?.listed_turf) - if(!target_mob.TurfAdjacent(target_mob.listed_turf)) - target_mob.set_listed_turf(null) - - else if(target.stat_tab == target_mob?.listed_turf.name || !(target_mob?.listed_turf.name in target.panel_tabs)) - set_turf_examine_tab(target, target_mob) - return TRUE - if(!target.holder) return FALSE @@ -323,105 +242,3 @@ SUBSYSTEM_DEF(statpanels) /// Stat panel window declaration /client/var/datum/tgui_window/stat_panel - -/// Datum that holds and tracks info about a client's object window -/// Really only exists because I want to be able to do logic with signals -/// And need a safe place to do the registration -/datum/object_window_info - /// list of atoms to show to our client via the object tab, at least currently - var/list/atoms_to_show = list() - /// list of atom -> image string for objects we have had in the right click tab - /// this is our caching - var/list/atoms_to_images = list() - /// list of atoms to turn into images for the object tab - var/list/atoms_to_imagify = list() - /// Our owner client - var/client/parent - /// Are we currently tracking a turf? - var/actively_tracking = FALSE - -/datum/object_window_info/New(client/parent) - . = ..() - src.parent = parent - -/datum/object_window_info/Destroy(force) - atoms_to_show = null - atoms_to_images = null - atoms_to_imagify = null - parent.obj_window = null - parent = null - STOP_PROCESSING(SSobj_tab_items, src) - return ..() - -/// Takes a client, attempts to generate object images for it -/// We will update the client with any improvements we make when we're done -/datum/object_window_info/process(seconds_per_tick) - // Cache the datum access for sonic speed - var/list/to_make = atoms_to_imagify - var/list/newly_seen = atoms_to_images - var/index = 0 - for(index in 1 to length(to_make)) - var/atom/thing = to_make[index] - - var/generated_string - if(ismob(thing) || length(thing.overlays) > 2) - generated_string = costly_icon2html(thing, parent, sourceonly=TRUE) - else - generated_string = icon2html(thing, parent, sourceonly=TRUE) - - newly_seen[thing] = generated_string - if(TICK_CHECK) - to_make.Cut(1, index + 1) - index = 0 - break - // If we've not cut yet, do it now - if(index) - to_make.Cut(1, index + 1) - SSstatpanels.refresh_client_obj_view(parent) - if(!length(to_make)) - return PROCESS_KILL - -/datum/object_window_info/proc/start_turf_tracking() - if(actively_tracking) - stop_turf_tracking() - var/static/list/connections = list( - COMSIG_MOVABLE_MOVED = PROC_REF(on_mob_move), - COMSIG_MOB_LOGOUT = PROC_REF(on_mob_logout), - ) - AddComponent(/datum/component/connect_mob_behalf, parent, connections) - actively_tracking = TRUE - -/datum/object_window_info/proc/stop_turf_tracking() - qdel(GetComponent(/datum/component/connect_mob_behalf)) - actively_tracking = FALSE - -/datum/object_window_info/proc/on_mob_move(mob/source) - SIGNAL_HANDLER - var/turf/listed = source.listed_turf - if(!listed || !source.TurfAdjacent(listed)) - source.set_listed_turf(null) - -/datum/object_window_info/proc/on_mob_logout(mob/source) - SIGNAL_HANDLER - on_mob_move(parent.mob) - -/// Clears any cached object window stuff -/// We use hard refs cause we'd need a signal for this anyway. Cleaner this way -/datum/object_window_info/proc/viewing_atom_deleted(atom/deleted) - SIGNAL_HANDLER - atoms_to_show -= deleted - atoms_to_imagify -= deleted - atoms_to_images -= deleted - -/mob/proc/set_listed_turf(turf/new_turf) - listed_turf = new_turf - if(!client) - return - if(!client.obj_window) - client.obj_window = new(client) - if(listed_turf) - client.stat_panel.send_message("create_listedturf", listed_turf.name) - client.obj_window.start_turf_tracking() - else - client.stat_panel.send_message("remove_listedturf") - client.obj_window.stop_turf_tracking() diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index c12c1b2bb32..cd03e1f3e52 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -122,8 +122,6 @@ SUBSYSTEM_DEF(tgui) for(var/datum/tgui/ui in user.tgui_open_uis) if(ui.window && ui.window.id == window_id) ui.close(can_be_suspended = FALSE) - // Unset machine just to be sure. - user.unset_machine() // Close window directly just to be sure. user << browse(null, "window=[window_id]") diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm index 5c96eca17da..d76ffb8a282 100644 --- a/code/datums/ai/oldhostile/hostile_tameable.dm +++ b/code/datums/ai/oldhostile/hostile_tameable.dm @@ -108,7 +108,7 @@ return if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker) return - . = COMPONENT_CANCEL_CLICK_ALT + . = CLICK_ACTION_BLOCKING INVOKE_ASYNC(src, PROC_REF(command_radial), clicker) /// Show the command radial menu diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 08099b46f1a..f74ecf6c5a3 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -475,7 +475,3 @@ src.Topic(href, params2list(href), hsrc) // this will direct to the atom's return // Topic() proc via client.Topic() - // no atomref specified (or not found) - // so just reset the user mob's machine var - if(src?.mob) - src.mob.unset_machine() diff --git a/code/datums/components/gps.dm b/code/datums/components/gps.dm index ceee193bf4a..7e52f00def7 100644 --- a/code/datums/components/gps.dm +++ b/code/datums/components/gps.dm @@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(GPS_list) if(!emp_proof) RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_AltClick)) + RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) ///Called on COMSIG_ITEM_ATTACK_SELF /datum/component/gps/item/proc/interact(datum/source, mob/user) @@ -85,10 +85,11 @@ GLOBAL_LIST_EMPTY(GPS_list) A.add_overlay("working") ///Calls toggletracking -/datum/component/gps/item/proc/on_AltClick(datum/source, mob/user) +/datum/component/gps/item/proc/on_click_alt(datum/source, mob/user) SIGNAL_HANDLER toggletracking(user) + return CLICK_ACTION_SUCCESS ///Toggles the tracking for the gps /datum/component/gps/item/proc/toggletracking(mob/user) @@ -153,7 +154,7 @@ GLOBAL_LIST_EMPTY(GPS_list) data["signals"] = signals return data -/datum/component/gps/item/ui_act(action, params) +/datum/component/gps/item/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -162,7 +163,8 @@ GLOBAL_LIST_EMPTY(GPS_list) if("rename") var/atom/parentasatom = parent var/a = tgui_input_text(usr, "Enter the desired tag", "GPS Tag", gpstag, 20) - + if (QDELETED(ui) || ui.status != UI_INTERACTIVE) + return if (!a) return diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index 97df6342aeb..fc2081481d9 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -59,8 +59,10 @@ /datum/component/infective/proc/try_infect_eat(datum/source, mob/living/eater, mob/living/feeder) SIGNAL_HANDLER - if(!eater.has_quirk(/datum/quirk/deviant_tastes)) - eater.add_mood_event("disgust", /datum/mood_event/disgust/dirty_food) + if(HAS_TRAIT(eater, TRAIT_STRONG_STOMACH)) + return + + eater.add_mood_event("disgust", /datum/mood_event/disgust/dirty_food) if(is_weak && !prob(weak_infection_chance)) return @@ -76,6 +78,9 @@ /datum/component/infective/proc/try_infect_drink(datum/source, mob/living/drinker, mob/living/feeder) SIGNAL_HANDLER + if(HAS_TRAIT(drinker, TRAIT_STRONG_STOMACH)) + return + var/appendage_zone = feeder.held_items.Find(source) appendage_zone = appendage_zone == 0 ? BODY_ZONE_CHEST : appendage_zone % 2 ? BODY_ZONE_R_ARM : BODY_ZONE_L_ARM try_infect(feeder, appendage_zone) diff --git a/code/datums/components/martial_art_giver.dm b/code/datums/components/martial_art_giver.dm new file mode 100644 index 00000000000..1a0bfa9951a --- /dev/null +++ b/code/datums/components/martial_art_giver.dm @@ -0,0 +1,45 @@ +/// when equipped and unequipped this item gives a martial art +/datum/component/martial_art_giver + /// the style we give + var/datum/martial_art/style + +/datum/component/martial_art_giver/Initialize(style_type) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + style = new style_type() + style.allow_temp_override = FALSE + +/datum/component/martial_art_giver/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(dropped)) + +/datum/component/martial_art_giver/UnregisterFromParent(datum/source) + UnregisterSignal(parent, list(COMSIG_ITEM_POST_EQUIPPED, COMSIG_ITEM_POST_UNEQUIP)) + var/obj/item/parent_item = parent + if(ismob(parent_item?.loc)) + UnregisterSignal(parent, list(COMSIG_MOB_MIND_TRANSFERRED_INTO, COMSIG_MOB_MIND_INITIALIZED, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF)) + QDEL_NULL(style) + +/datum/component/martial_art_giver/proc/equipped(obj/item/source, mob/user, slot) + SIGNAL_HANDLER + if(!(source.slot_flags & slot)) + return + RegisterSignals(user, list(COMSIG_MOB_MIND_TRANSFERRED_INTO, COMSIG_MOB_MIND_INITIALIZED), PROC_REF(teach)) + RegisterSignal(user, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, PROC_REF(forget)) + teach(user) + +/datum/component/martial_art_giver/proc/dropped(obj/item/source, mob/user) + SIGNAL_HANDLER + forget(user) + UnregisterSignal(user, list(COMSIG_MOB_MIND_TRANSFERRED_INTO, COMSIG_MOB_MIND_INITIALIZED, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF)) + +/datum/component/martial_art_giver/proc/teach(mob/source) + if(isnull(style)) + return + style.teach(source, TRUE) + +/datum/component/martial_art_giver/proc/forget(mob/source) + if(isnull(style)) + return + style.fully_remove(source) diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index a17e642e039..ffcf81feace 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -678,6 +678,7 @@ while(sheet_amt > 0) //don't merge yet. we need to do stuff with it first var/obj/item/stack/sheet/new_sheets = new material.sheet_type(target, min(sheet_amt, MAX_STACK_SIZE), FALSE) + new_sheets.manufactured = TRUE count += new_sheets.amount //use material & deduct work needed use_amount_mat(new_sheets.amount * SHEET_MATERIAL_AMOUNT, material) diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm index 2fceaa2b337..ec3a04c940a 100644 --- a/code/datums/components/pet_commands/obeys_commands.dm +++ b/code/datums/components/pet_commands/obeys_commands.dm @@ -72,6 +72,7 @@ return // Not our friend, can't boss us around INVOKE_ASYNC(src, PROC_REF(display_radial_menu), clicker) + return CLICK_ACTION_SUCCESS /// Actually display the radial menu and then do something with the result /datum/component/obeys_commands/proc/display_radial_menu(mob/living/clicker) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 7c55579c999..f872c6bfd69 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -59,6 +59,7 @@ /datum/component/simple_rotation/proc/rotate_left(datum/source, mob/user) SIGNAL_HANDLER rotate(user, ROTATION_COUNTERCLOCKWISE) + return CLICK_ACTION_SUCCESS /datum/component/simple_rotation/proc/rotate(mob/user, degrees) if(QDELETED(user)) diff --git a/code/datums/components/style/style_meter.dm b/code/datums/components/style/style_meter.dm index 72688f41c52..c06fc35aca3 100644 --- a/code/datums/components/style/style_meter.dm +++ b/code/datums/components/style/style_meter.dm @@ -27,7 +27,7 @@ . = ..() . += span_notice("You feel like a multitool could be used on this.") -/obj/item/style_meter/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/style_meter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!istype(interacting_with, /obj/item/clothing/glasses)) return NONE @@ -38,7 +38,7 @@ RegisterSignal(interacting_with, COMSIG_ITEM_EQUIPPED, PROC_REF(check_wearing)) RegisterSignal(interacting_with, COMSIG_ITEM_DROPPED, PROC_REF(on_drop)) RegisterSignal(interacting_with, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - RegisterSignal(interacting_with, COMSIG_CLICK_ALT, PROC_REF(on_altclick)) + RegisterSignal(interacting_with, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) RegisterSignal(interacting_with, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(redirect_multitool)) balloon_alert(user, "style meter attached") playsound(src, 'sound/machines/click.ogg', 30, TRUE) @@ -90,14 +90,15 @@ /// Signal proc to remove from glasses -/obj/item/style_meter/proc/on_altclick(datum/source, mob/user) +/obj/item/style_meter/proc/on_click_alt(datum/source, mob/user) SIGNAL_HANDLER - if(istype(loc, /obj/item/clothing/glasses)) - clean_up() - forceMove(get_turf(src)) + if(!istype(loc, /obj/item/clothing/glasses)) + return CLICK_ACTION_BLOCKING - return COMPONENT_CANCEL_CLICK_ALT + clean_up() + forceMove(get_turf(src)) + return CLICK_ACTION_SUCCESS /obj/item/style_meter/multitool_act(mob/living/user, obj/item/tool) multitooled = !multitooled diff --git a/code/datums/components/toggle_suit.dm b/code/datums/components/toggle_suit.dm index 596bf3b3252..c4a378a16de 100644 --- a/code/datums/components/toggle_suit.dm +++ b/code/datums/components/toggle_suit.dm @@ -20,7 +20,7 @@ src.base_icon_state = atom_parent.base_icon_state || atom_parent.icon_state /datum/component/toggle_icon/RegisterWithParent() - RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_alt_click)) + RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) /datum/component/toggle_icon/UnregisterFromParent() @@ -34,7 +34,7 @@ * source - the atom being clicked on * user - the mob doing the click */ -/datum/component/toggle_icon/proc/on_alt_click(atom/source, mob/user) +/datum/component/toggle_icon/proc/on_click_alt(atom/source, mob/user) SIGNAL_HANDLER if(!isliving(user)) @@ -47,13 +47,14 @@ if(living_user.incapacitated()) source.balloon_alert(user, "you're incapacitated!") - return + return CLICK_ACTION_BLOCKING if(living_user.usable_hands <= 0) source.balloon_alert(user, "you don't have hands!") - return + return CLICK_ACTION_BLOCKING do_icon_toggle(source, living_user) + return CLICK_ACTION_SUCCESS /* * Signal proc for COMSIG_ATOM_EXAMINE. diff --git a/code/datums/elements/attack_zone_randomiser.dm b/code/datums/elements/attack_zone_randomiser.dm new file mode 100644 index 00000000000..35275e11a9b --- /dev/null +++ b/code/datums/elements/attack_zone_randomiser.dm @@ -0,0 +1,33 @@ +/// Pick a random attack zone before you attack something +/datum/element/attack_zone_randomiser + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// List of attack zones you can select, should be a subset of GLOB.all_body_zones + var/list/valid_attack_zones + +/datum/element/attack_zone_randomiser/Attach(datum/target, list/valid_attack_zones = GLOB.all_body_zones) + . = ..() + if (!isliving(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignals(target, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK), PROC_REF(randomise)) + src.valid_attack_zones = valid_attack_zones + +/datum/element/attack_zone_randomiser/Detach(datum/source) + UnregisterSignal(source, list (COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK)) + return ..() + +/// If we're attacking a carbon, pick a random defence zone +/datum/element/attack_zone_randomiser/proc/randomise(mob/living/source, atom/target) + SIGNAL_HANDLER + if (!iscarbon(target)) + return + var/mob/living/living_target = target + var/list/blacklist_zones = GLOB.all_body_zones - valid_attack_zones + var/new_zone = living_target.get_random_valid_zone(blacklisted_parts = blacklist_zones, bypass_warning = TRUE) + if (isnull(new_zone)) + new_zone = BODY_ZONE_CHEST + var/atom/movable/screen/zone_sel/zone_selector = source.hud_used?.zone_select + if (isnull(zone_selector)) + source.zone_selected = new_zone + else + zone_selector.set_selected_zone(new_zone, source, should_log = FALSE) diff --git a/code/datums/elements/living_limb_initialiser.dm b/code/datums/elements/living_limb_initialiser.dm new file mode 100644 index 00000000000..943b39dcf37 --- /dev/null +++ b/code/datums/elements/living_limb_initialiser.dm @@ -0,0 +1,19 @@ +/// Spawns a living limb mob inside a limb upon attachment if it doesn't have one +/datum/element/living_limb_initialiser + +/datum/element/living_limb_initialiser/Attach(atom/target) + . = ..() + if(!isbodypart(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignal(target, COMSIG_BODYPART_CHANGED_OWNER, PROC_REF(try_animate_limb)) + +/datum/element/living_limb_initialiser/Detach(atom/target) + UnregisterSignal(target, COMSIG_BODYPART_CHANGED_OWNER) + return ..() + +/// Create a living limb mob inside the limb if it doesn't already have one +/datum/element/living_limb_initialiser/proc/try_animate_limb(obj/item/bodypart/part) + SIGNAL_HANDLER + if (locate(/mob/living/basic/living_limb_flesh) in part) + return + new /mob/living/basic/living_limb_flesh(part, part) diff --git a/code/datums/elements/poster_tearer.dm b/code/datums/elements/poster_tearer.dm new file mode 100644 index 00000000000..7a784a48615 --- /dev/null +++ b/code/datums/elements/poster_tearer.dm @@ -0,0 +1,45 @@ +/// Allows mobs with this element attached to just simply tear down any poster they desire to. +/datum/element/poster_tearer + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// The amount of time it takes to tear down a poster. + var/tear_time + /// Interaction key to use whilst tearing down a poster. + var/interaction_key + +/datum/element/poster_tearer/Attach(datum/target, tear_time = 2 SECONDS, interaction_key = null) + . = ..() + if (!isliving(target)) + return ELEMENT_INCOMPATIBLE + + src.tear_time = tear_time + src.interaction_key = interaction_key + + RegisterSignals(target, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK), PROC_REF(on_attacked_poster)) + +/datum/element/poster_tearer/Detach(datum/source) + . = ..() + UnregisterSignal(source, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK)) + +/// Try to tear up a poster on the wall +/datum/element/poster_tearer/proc/on_attacked_poster(mob/living/user, atom/target, proximity_flag) + SIGNAL_HANDLER + if(!istype(target, /obj/structure/sign/poster)) + return NONE // don't care we move on + + if(DOING_INTERACTION_WITH_TARGET(user, target) || (!isnull(interaction_key) && DOING_INTERACTION(user, interaction_key))) + user.balloon_alert(target, "busy!") + return COMPONENT_CANCEL_ATTACK_CHAIN + + INVOKE_ASYNC(src, PROC_REF(tear_it_down), user, target) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// Actually work on tearing down that poster +/datum/element/poster_tearer/proc/tear_it_down(mob/living/user, obj/structure/sign/poster/target) + if(!target.check_tearability(user)) // this proc will handle user feedback + return + + target.balloon_alert(user, "tearing down the poster...") + if(!do_after(user, tear_time, target, interaction_key = interaction_key)) // just in case the user actually enjoys art + return + target.tear_poster(user) diff --git a/code/datums/elements/ridable.dm b/code/datums/elements/ridable.dm index cbb6d7931f9..e68653b3d4a 100644 --- a/code/datums/elements/ridable.dm +++ b/code/datums/elements/ridable.dm @@ -197,3 +197,15 @@ to_chat(user, span_notice("You gently let go of [rider].")) return return rider + +/obj/item/riding_offhand/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with) || !interacting_with.can_buckle) + return NONE + if(rider == user) // Piggyback user + return ITEM_INTERACT_BLOCKING + + // Handles de-fireman carrying a mob and buckling them onto something (tables, etc) + var/mob/living/former_rider = rider + user.unbuckle_mob(former_rider) + former_rider.forceMove(get_turf(interacting_with)) + return interacting_with.mouse_buckle_handling(former_rider, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index f6712455ac3..ea25c5f957f 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -283,10 +283,8 @@ source.log_message("had [item] put on them by [key_name(user)].", LOG_VICTIM, color="orange", log_globally=FALSE) /// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob. -/proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay) - //SKYRAT EDIT ADDITION - THIEVING GLOVES - //if (!do_after(user, strip_delay || item.strip_delay, source, interaction_key = REF(item))) - if (!do_after(user, (strip_delay || item.strip_delay) * (HAS_TRAIT(user, TRAIT_STICKY_FINGERS) ? THIEVING_GLOVES_STRIP_SLOWDOWN : NORMAL_STRIP_SLOWDOWN), source, interaction_key = REF(item))) +/proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay, hidden = FALSE) + if (!do_after(user, (strip_delay || item.strip_delay) * (HAS_TRAIT(user, TRAIT_STICKY_FINGERS) ? THIEVING_GLOVES_STRIP_SLOWDOWN : NORMAL_STRIP_SLOWDOWN), source, interaction_key = REF(item), hidden = hidden)) // SKYRAT EDIT CHANGE - ORIGINAL: if (!do_after(user, strip_delay || item.strip_delay, source, interaction_key = REF(item), hidden = hidden)) return FALSE return TRUE diff --git a/code/datums/elements/tool_renaming.dm b/code/datums/elements/tool_renaming.dm new file mode 100644 index 00000000000..bd87f1d171c --- /dev/null +++ b/code/datums/elements/tool_renaming.dm @@ -0,0 +1,78 @@ +#define OPTION_RENAME "Rename" +#define OPTION_DESCRIPTION "Description" +#define OPTION_RESET "Reset" + +/** + * Renaming tool element + * + * When using this tool on an object with UNIQUE_RENAME, + * lets the user rename/redesc it. + */ +/datum/element/tool_renaming + +/datum/element/tool_renaming/Attach(datum/target) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(attempt_rename)) + +/datum/element/tool_renaming/Detach(datum/source) + . = ..() + UnregisterSignal(source, COMSIG_ITEM_INTERACTING_WITH_ATOM) + +/datum/element/tool_renaming/proc/attempt_rename(datum/source, mob/living/user, atom/interacting_with, list/modifiers) + SIGNAL_HANDLER + + if(!isobj(interacting_with)) + return NONE + + var/obj/renamed_obj = interacting_with + + if(!(renamed_obj.obj_flags & UNIQUE_RENAME)) + return NONE + + INVOKE_ASYNC(src, PROC_REF(async_rename), user, renamed_obj) + return ITEM_INTERACT_SUCCESS + +/datum/element/tool_renaming/proc/async_rename(mob/living/user, obj/renamed_obj) + var/custom_choice = tgui_input_list(user, "What would you like to edit?", "Customization", list(OPTION_RENAME, OPTION_DESCRIPTION, OPTION_RESET)) + if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj) || isnull(custom_choice)) + return + + switch(custom_choice) + if(OPTION_RENAME) + var/old_name = renamed_obj.name + var/input = tgui_input_text(user, "What do you want to name [renamed_obj]?", "Object Name", "[old_name]", MAX_NAME_LEN) + if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj)) + return + if(input == old_name || !input) + to_chat(user, span_notice("You changed [renamed_obj] to... well... [renamed_obj].")) + return + renamed_obj.AddComponent(/datum/component/rename, input, renamed_obj.desc) + to_chat(user, span_notice("You have successfully renamed \the [old_name] to [renamed_obj].")) + ADD_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) + renamed_obj.update_appearance(UPDATE_NAME) + + if(OPTION_DESCRIPTION) + var/old_desc = renamed_obj.desc + var/input = tgui_input_text(user, "Describe [renamed_obj]", "Description", "[old_desc]", MAX_DESC_LEN) + if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj)) + return + if(input == old_desc || !input) + to_chat(user, span_notice("You decide against changing [renamed_obj]'s description.")) + return + renamed_obj.AddComponent(/datum/component/rename, renamed_obj.name, input) + to_chat(user, span_notice("You have successfully changed [renamed_obj]'s description.")) + ADD_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) + renamed_obj.update_appearance(UPDATE_DESC) + + if(OPTION_RESET) + qdel(renamed_obj.GetComponent(/datum/component/rename)) + to_chat(user, span_notice("You have successfully reset [renamed_obj]'s name and description.")) + REMOVE_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) + renamed_obj.update_appearance(UPDATE_NAME | UPDATE_DESC) + +#undef OPTION_RENAME +#undef OPTION_DESCRIPTION +#undef OPTION_RESET diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 8ef30db63aa..ec111fb3cf0 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -74,7 +74,6 @@ return ..() /obj/item/clothing/gloves/boxing - var/datum/martial_art/boxing/style /obj/item/clothing/gloves/boxing/Initialize(mapload) . = ..() @@ -85,18 +84,4 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) - style = new() - style.allow_temp_override = FALSE - -/obj/item/clothing/gloves/boxing/Destroy() - QDEL_NULL(style) - return ..() - -/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - . = ..() - if(slot & ITEM_SLOT_GLOVES) - style.teach(user, TRUE) - -/obj/item/clothing/gloves/boxing/dropped(mob/user) - . = ..() - style.fully_remove(user) + AddComponent(/datum/component/martial_art_giver, /datum/martial_art/boxing) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 66d092e886e..57e158cf669 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -208,26 +208,11 @@ //Krav Maga Gloves /obj/item/clothing/gloves/krav_maga - var/datum/martial_art/krav_maga/style clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/krav_maga/Initialize(mapload) . = ..() - style = new() - style.allow_temp_override = FALSE - -/obj/item/clothing/gloves/krav_maga/Destroy() - QDEL_NULL(style) - return ..() - -/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) - . = ..() - if(slot & ITEM_SLOT_GLOVES) - style.teach(user, TRUE) - -/obj/item/clothing/gloves/krav_maga/dropped(mob/user) - . = ..() - style.fully_remove(user) + AddComponent(/datum/component/martial_art_giver, /datum/martial_art/krav_maga) /obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec name = "krav maga gloves" diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index c55f95d4bd6..8116084127e 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -325,7 +325,7 @@ /obj/item/clothing/gloves/the_sleeping_carp name = "carp gloves" - desc = "This gloves are capable of making people use The Sleeping Carp." + desc = "These gloves are capable of making people use The Sleeping Carp." icon_state = "black" greyscale_colors = COLOR_BLACK cold_protection = HANDS @@ -333,26 +333,10 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - var/datum/martial_art/the_sleeping_carp/style /obj/item/clothing/gloves/the_sleeping_carp/Initialize(mapload) . = ..() - style = new() - style.allow_temp_override = FALSE - -/obj/item/clothing/gloves/the_sleeping_carp/Destroy() - QDEL_NULL(style) - return ..() - -/obj/item/clothing/gloves/the_sleeping_carp/equipped(mob/user, slot) - . = ..() - if(slot & ITEM_SLOT_GLOVES) - style.teach(user, TRUE) - -/obj/item/clothing/gloves/the_sleeping_carp/dropped(mob/user) - . = ..() - if(!isnull(style)) - style.fully_remove(user) + AddComponent(/datum/component/martial_art_giver, /datum/martial_art/the_sleeping_carp) #undef STRONG_PUNCH_COMBO #undef LAUNCH_KICK_COMBO diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 6969c3eeb9e..4bcaf02b2d5 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -490,22 +490,7 @@ If you make a derivative work from this code, you must include this notification /obj/item/storage/belt/champion/wrestling name = "Wrestling Belt" - var/datum/martial_art/wrestling/style /obj/item/storage/belt/champion/wrestling/Initialize(mapload) . = ..() - style = new() - style.allow_temp_override = FALSE - -/obj/item/storage/belt/champion/wrestling/Destroy() - QDEL_NULL(style) - return ..() - -/obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) - . = ..() - if(slot & ITEM_SLOT_BELT) - style.teach(user, TRUE) - -/obj/item/storage/belt/champion/wrestling/dropped(mob/user) - . = ..() - style.fully_remove(user) + AddComponent(/datum/component/martial_art_giver, /datum/martial_art/wrestling) diff --git a/code/datums/mood_events/needs_events.dm b/code/datums/mood_events/needs_events.dm index 72d789da1e0..dd5441476dc 100644 --- a/code/datums/mood_events/needs_events.dm +++ b/code/datums/mood_events/needs_events.dm @@ -66,7 +66,7 @@ mood_change = -12 /datum/mood_event/disgust/dirty_food - description = "It was too dirty to eat..." + description = "That was too dirty to eat..." mood_change = -6 timeout = 4 MINUTES diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index 2f7c701e70f..05e62ab2726 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -167,7 +167,7 @@ * * default_location - If the item isn't possible to equip in a valid slot, this is a description of where the item was spawned. * * notify_player - If TRUE, adds strings to where_items_spawned list to be output to the player in [/datum/quirk/item_quirk/post_add()] */ -/datum/quirk/item_quirk/proc/give_item_to_holder(quirk_item, list/valid_slots, flavour_text = null, default_location = "at your feet", notify_player = TRUE) +/datum/quirk/item_quirk/proc/give_item_to_holder(obj/item/quirk_item, list/valid_slots, flavour_text = null, default_location = "at your feet", notify_player = TRUE) if(ispath(quirk_item)) quirk_item = new quirk_item(get_turf(quirk_holder)) diff --git a/code/datums/quirks/negative_quirks/all_nighter.dm b/code/datums/quirks/negative_quirks/all_nighter.dm index 7f9f051ecf7..f5288b82215 100644 --- a/code/datums/quirks/negative_quirks/all_nighter.dm +++ b/code/datums/quirks/negative_quirks/all_nighter.dm @@ -43,6 +43,8 @@ ///if we have bags and lost a head, remove them /datum/quirk/all_nighter/proc/on_removed_limb(datum/source, obj/item/bodypart/removed_limb, special, dismembered) + SIGNAL_HANDLER + if(bodypart_overlay && istype(removed_limb, /obj/item/bodypart/head)) remove_bags() diff --git a/code/datums/quirks/positive_quirks/strong_stomach.dm b/code/datums/quirks/positive_quirks/strong_stomach.dm new file mode 100644 index 00000000000..8c0a3f3b137 --- /dev/null +++ b/code/datums/quirks/positive_quirks/strong_stomach.dm @@ -0,0 +1,12 @@ +/datum/quirk/strong_stomach + name = "Strong Stomach" + desc = "You can eat food discarded on the ground without getting sick, and vomiting affects you less." + icon = FA_ICON_FACE_GRIN_BEAM_SWEAT + value = 4 + mob_trait = TRAIT_STRONG_STOMACH + gain_text = span_notice("You feel like you could eat anything!") + lose_text = span_danger("Looking at food on the ground makes you feel a little queasy.") + medical_record_text = "Patient has a stronger than average immune system...to food poisoning, at least." + mail_goodies = list( + /obj/item/reagent_containers/pill/ondansetron, + ) diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 87398f52555..b1bacfbceab 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -916,7 +916,8 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(open_storage), to_show) - return COMPONENT_NO_AFTERATTACK + if(display_contents) + return COMPONENT_NO_AFTERATTACK /// Opens the storage to the mob, showing them the contents to their UI. /datum/storage/proc/open_storage(mob/to_show) diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index ad841856c64..e1b873cfec7 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -136,6 +136,9 @@ ///whether ghosts can see screentips on it var/ghost_screentips = FALSE + /// Flags to check for in can_perform_action. Used in alt-click checks + var/interaction_flags_click = NONE + /** * Top level of the destroy chain for most atoms * @@ -368,11 +371,6 @@ /atom/proc/return_analyzable_air() return null -///Check if this atoms eye is still alive (probably) -/atom/proc/check_eye(mob/user) - SIGNAL_HANDLER - return - /atom/proc/Bumped(atom/movable/bumped_atom) set waitfor = FALSE SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm index 4b91f396095..b2cea26224b 100644 --- a/code/game/atom/atom_tool_acts.dm +++ b/code/game/atom/atom_tool_acts.dm @@ -4,15 +4,12 @@ * Handles non-combat iteractions of a tool on this atom, * such as using a tool on a wall to deconstruct it, * or scanning someone with a health analyzer - * - * This can be overridden to add custom item interactions to this atom - * - * Do not call this directly */ -/atom/proc/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/atom/proc/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) SHOULD_CALL_PARENT(TRUE) PROTECTED_PROC(TRUE) + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) var/is_left_clicking = !is_right_clicking var/early_sig_return = NONE if(is_left_clicking) @@ -24,6 +21,12 @@ if(early_sig_return) return early_sig_return + var/self_interaction = is_left_clicking \ + ? item_interaction(user, tool, modifiers) \ + : item_interaction_secondary(user, tool, modifiers) + if(self_interaction) + return self_interaction + var/interact_return = is_left_clicking \ ? tool.interact_with_atom(src, user, modifiers) \ : tool.interact_with_atom_secondary(src, user, modifiers) @@ -85,6 +88,27 @@ SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) return act_result +/** + * Called when this atom has an item used on it. + * IE, a mob is clicking on this atom with an item. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/atom/proc/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return NONE + +/** + * Called when this atom has an item used on it WITH RIGHT CLICK, + * IE, a mob is right clicking on this atom with an item. + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/atom/proc/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + return item_interaction(user, tool, modifiers) + /** * Called when this item is being used to interact with an atom, * IE, a mob is clicking on an atom with this item. diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index fb8a4ce139f..533c3aa1a42 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -338,7 +338,6 @@ if(drop) dump_inventory_contents() update_appearance() - updateUsrDialog() /** * Drop every movable atom in the machine's contents list, including any components and circuit. @@ -423,7 +422,6 @@ if(target && !target.has_buckled_mobs() && (!isliving(target) || !mobtarget.buckled)) set_occupant(target) target.forceMove(src) - updateUsrDialog() update_appearance() ///updates the use_power var for this machine and updates its static power usage from its area to reflect the new value @@ -590,13 +588,15 @@ set_panel_open(!panel_open) /obj/machinery/can_interact(mob/user) + if(QDELETED(user)) + return FALSE + if((machine_stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) // Check if the machine is broken, and if we can still interact with it if so return FALSE if(SEND_SIGNAL(user, COMSIG_TRY_USE_MACHINE, src) & COMPONENT_CANT_USE_MACHINE_INTERACT) return FALSE - if(isAdminGhostAI(user)) return TRUE //the Gods have unlimited power and do not care for things such as range or blindness @@ -668,10 +668,8 @@ //Return a non FALSE value to interrupt attack_hand propagation to subtypes. /obj/machinery/interact(mob/user) - if(interaction_flags_machine & INTERACT_MACHINE_SET_MACHINE) - user.set_machine(src) update_last_used(user) - . = ..() + return ..() /obj/machinery/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) add_fingerprint(usr) @@ -769,13 +767,14 @@ return update_last_used(user) -/obj/machinery/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(SEND_SIGNAL(user, COMSIG_TRY_USE_MACHINE, src) & COMPONENT_CANT_USE_MACHINE_TOOLS) - return ITEM_INTERACT_ANY_BLOCKER + return ITEM_INTERACT_BLOCKING + . = ..() - if(. & ITEM_INTERACT_BLOCKING) - return - update_last_used(user) + if(.) + update_last_used(user) + return . /obj/machinery/_try_interact(mob/user) if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK)) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 4fbfe2d37bf..1bdcba84967 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -388,15 +388,15 @@ drop_direction = direction balloon_alert(usr, "dropping [dir2text(drop_direction)]") -/obj/machinery/autolathe/AltClick(mob/user) - . = ..() - if(!drop_direction || !can_interact(user)) - return +/obj/machinery/autolathe/click_alt(mob/user) + if(!drop_direction) + return CLICK_ACTION_BLOCKING if(busy) balloon_alert(user, "busy printing!") - return + return CLICK_ACTION_SUCCESS balloon_alert(user, "drop direction reset") drop_direction = 0 + return CLICK_ACTION_SUCCESS /obj/machinery/autolathe/attackby(obj/item/attacking_item, mob/living/user, params) if(user.combat_mode) //so we can hit the machine diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index b096633a9c1..ca6562635ee 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -216,19 +216,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) return if(. & EMP_PROTECT_SELF) return - if(prob(150 / severity)) - network = list() - GLOB.cameranet.removeCamera(src) - set_machine_stat(machine_stat | EMPED) - set_light(0) - emped++ //Increase the number of consecutive EMP's - update_appearance() - addtimer(CALLBACK(src, PROC_REF(post_emp_reset), emped, network), reset_time) - for(var/mob/M as anything in GLOB.player_list) - if (M.client?.eye == src) - M.unset_machine() - M.reset_perspective(null) - to_chat(M, span_warning("The screen bursts into static!")) + if(!prob(150 / severity)) + return + network = list() + GLOB.cameranet.removeCamera(src) + set_machine_stat(machine_stat | EMPED) + set_light(0) + emped++ //Increase the number of consecutive EMP's + update_appearance() + addtimer(CALLBACK(src, PROC_REF(post_emp_reset), emped, network), reset_time) + for(var/mob/M as anything in GLOB.player_list) + if (M.client?.eye == src) + M.reset_perspective(null) + to_chat(M, span_warning("The screen bursts into static!")) /obj/machinery/camera/proc/on_saboteur(datum/source, disrupt_duration) SIGNAL_HANDLER @@ -371,7 +371,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) //I guess that doesn't matter since they can't use it anyway? for(var/mob/O as anything in GLOB.player_list) if (O.client?.eye == src) - O.unset_machine() O.reset_perspective(null) to_chat(O, span_warning("The screen bursts into static!")) diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index d2a584a1675..1cb7ee1477e 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -163,11 +163,9 @@ inserted_scan_id.registered_account.bounties = null return inserted_scan_id.registered_account.civilian_bounty -/obj/machinery/computer/piratepad_control/civilian/AltClick(mob/user) - . = ..() - if(!Adjacent(user)) - return FALSE +/obj/machinery/computer/piratepad_control/civilian/click_alt(mob/user) id_eject(user, inserted_scan_id) + return CLICK_ACTION_SUCCESS /obj/machinery/computer/piratepad_control/civilian/ui_data(mob/user) var/list/data = list() diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 0749c79bb88..3ab4fef3fdb 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -128,12 +128,6 @@ new_frame.state = FRAME_COMPUTER_STATE_GLASSED new_frame.update_appearance(UPDATE_ICON_STATE) -/obj/machinery/computer/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(!user.can_perform_action(src, ALLOW_SILICON_REACH) || !is_operational) - return /obj/machinery/computer/ui_interact(mob/user, datum/tgui/ui) SHOULD_CALL_PARENT(TRUE) diff --git a/code/game/machinery/computer/arcade/_arcade.dm b/code/game/machinery/computer/arcade/_arcade.dm index 1bfd43cdb69..69994634fc3 100644 --- a/code/game/machinery/computer/arcade/_arcade.dm +++ b/code/game/machinery/computer/arcade/_arcade.dm @@ -12,11 +12,7 @@ ///Like prize pool, it must be a list of the prize and the weight of being selected. var/list/prize_override -/obj/machinery/computer/arcade/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . - +/obj/machinery/computer/arcade/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(istype(tool, /obj/item/stack/arcadeticket)) var/obj/item/stack/arcadeticket/tickets = tool if(!tickets.use(2)) @@ -44,6 +40,8 @@ reset_cabinet(user) return ITEM_INTERACT_SUCCESS + return NONE + /obj/machinery/computer/arcade/screwdriver_act(mob/living/user, obj/item/I) //you can't stop playing when you start. if(obj_flags & EMAGGED) @@ -100,5 +98,3 @@ var/atom/movable/the_prize = new prizeselect(get_turf(src)) playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) visible_message(span_notice("[src] dispenses [the_prize]!"), span_notice("You hear a chime and a clunk.")) - - diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm index 5586f3f8b22..63d2808c773 100644 --- a/code/game/machinery/computer/arcade/battle.dm +++ b/code/game/machinery/computer/arcade/battle.dm @@ -113,6 +113,8 @@ if(isnull(battle_arcade_gear_list)) var/list/all_gear = list() for(var/datum/battle_arcade_gear/template as anything in subtypesof(/datum/battle_arcade_gear)) + if(!(template::slot)) //needs to fit in something. + continue all_gear[template::name] = new template battle_arcade_gear_list = all_gear @@ -216,7 +218,7 @@ message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") usr.log_message("outbombed Cuban Pete and has been awarded a bomb.", LOG_GAME) else - to_chat(user, span_notice("[src] dispenses 2 tickets!")) + visible_message(span_notice("[src] dispenses 2 tickets!")) new /obj/item/stack/arcadeticket((get_turf(src)), 2) player_gold += enemy_gold_reward if(user) @@ -282,12 +284,14 @@ process_enemy_turn(user) ///Called when you successfully counterattack the enemy. -/obj/machinery/computer/arcade/battle/proc/successful_counterattack() +/obj/machinery/computer/arcade/battle/proc/successful_counterattack(mob/user) var/datum/battle_arcade_gear/weapon = equipped_gear[WEAPON_SLOT] var/damage_dealt = (rand(20, 30) * (!isnull(weapon) ? weapon.bonus_modifier : 1)) enemy_hp -= round(max(0, damage_dealt), 1) feedback_message = "User counterattacked for [damage_dealt] damage!" playsound(loc, 'sound/arcade/boom.ogg', 40, TRUE, extrarange = -3) + if(enemy_hp <= 0) + on_battle_win(user) SStgui.update_uis(src) ///Handles the delay between the user's and enemy's turns to process what's going on. @@ -346,7 +350,7 @@ var/chance_at_counterattack = 40 + (skill_level * 5) //at level 1 this is 45, at legendary this is 75 var/damage_dealt = (defending_flags & BATTLE_ATTACK_FLAG_DEFEND) ? rand(5, 10) : rand(15, 20) if((defending_flags & BATTLE_ATTACK_FLAG_COUNTERATTACK) && prob(chance_at_counterattack)) - return successful_counterattack() + return successful_counterattack(user) return user_take_damage(user, damage_dealt) /obj/machinery/computer/arcade/battle/ui_data(mob/user) diff --git a/code/game/machinery/computer/arcade/battle_gear.dm b/code/game/machinery/computer/arcade/battle_gear.dm index 7a91df0e058..32d1d73dd4f 100644 --- a/code/game/machinery/computer/arcade/battle_gear.dm +++ b/code/game/machinery/computer/arcade/battle_gear.dm @@ -2,7 +2,7 @@ ///The name of the gear, used in shops. var/name = "Gear" ///The slot this gear fits into - var/slot = WEAPON_SLOT + var/slot ///The world the player has to be at in order to buy this item. var/world_available ///The stat given by the gear @@ -95,7 +95,7 @@ bonus_modifier = 4 /datum/battle_arcade_gear/tier_7/armor - name = "Celestial Armor" + name = "Ethereal Armor" slot = ARMOR_SLOT bonus_modifier = 4 @@ -103,11 +103,24 @@ world_available = BATTLE_WORLD_EIGHT /datum/battle_arcade_gear/tier_8/weapon + name = "Gungnir" + slot = WEAPON_SLOT + bonus_modifier = 4.5 + +/datum/battle_arcade_gear/tier_8/armor + name = "Celestial Armor" + slot = ARMOR_SLOT + bonus_modifier = 4.5 + +/datum/battle_arcade_gear/tier_9 + world_available = BATTLE_WORLD_NINE + +/datum/battle_arcade_gear/tier_9/weapon name = "Mjolnir" slot = WEAPON_SLOT bonus_modifier = 5 -/datum/battle_arcade_gear/tier_8/armor - name = "Ethereal Armor" +/datum/battle_arcade_gear/tier_9/armor + name = "Void Armor" slot = ARMOR_SLOT bonus_modifier = 5 diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 18ca1665765..750a1d5d53e 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -146,7 +146,7 @@ return FALSE -/obj/structure/frame/computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/structure/frame/computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() if(. & ITEM_INTERACT_ANY_BLOCKER) return . diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 488331c41b8..1868bc3c38c 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -4,6 +4,8 @@ icon_screen = "cameras" icon_keyboard = "security_key" light_color = COLOR_SOFT_RED + processing_flags = START_PROCESSING_MANUALLY + var/list/z_lock = list() // Lock use to these z levels var/lock_override = NONE var/mob/camera/ai_eye/remote/eyeobj @@ -50,6 +52,20 @@ if(move_down_action) actions += new move_down_action(src) +/obj/machinery/computer/camera_advanced/Destroy() + if(!QDELETED(current_user)) + unset_machine(current_user) + if(eyeobj) + QDEL_NULL(eyeobj) + QDEL_LIST(actions) + current_user = null + return ..() + +/obj/machinery/computer/camera_advanced/process() + if(!can_use(current_user) || (issilicon(current_user) && !current_user.has_unlimited_silicon_privilege)) + unset_machine(current_user) + return PROCESS_KILL + /obj/machinery/computer/camera_advanced/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) for(var/i in networks) networks -= i @@ -73,6 +89,20 @@ /obj/machinery/proc/remove_eye_control(mob/living/user) CRASH("[type] does not implement ai eye handling") +/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user) + if(isnull(user?.client)) + return + GrantActions(user) + current_user = user + eyeobj.eye_user = user + eyeobj.name = "Camera Eye ([user.name])" + user.remote_control = eyeobj + user.reset_perspective(eyeobj) + eyeobj.setLoc(eyeobj.loc) + if(should_supress_view_changes) + user.client.view_size.supress() + begin_processing() + /obj/machinery/computer/camera_advanced/remove_eye_control(mob/living/user) if(isnull(user?.client)) return @@ -90,23 +120,16 @@ eyeobj.eye_user = null user.remote_control = null current_user = null - unset_machine(user) playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) -/obj/machinery/computer/camera_advanced/check_eye(mob/user) - if(!can_use(user) || (issilicon(user) && !user.has_unlimited_silicon_privilege)) - unset_machine(user) - -/obj/machinery/computer/camera_advanced/Destroy() - if(eyeobj) - QDEL_NULL(eyeobj) - QDEL_LIST(actions) - current_user = null - return ..() +/obj/machinery/computer/camera_advanced/on_set_is_operational(old_value) + if(!is_operational) + unset_machine(current_user) /obj/machinery/computer/camera_advanced/proc/unset_machine(mob/M) if(M == current_user) remove_eye_control(M) + end_processing() /obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user) return can_interact(user) @@ -167,19 +190,6 @@ /obj/machinery/computer/camera_advanced/attack_ai(mob/user) return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise. -/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user) - if(isnull(user?.client)) - return - GrantActions(user) - current_user = user - eyeobj.eye_user = user - eyeobj.name = "Camera Eye ([user.name])" - user.remote_control = eyeobj - user.reset_perspective(eyeobj) - eyeobj.setLoc(eyeobj.loc) - if(should_supress_view_changes) - user.client.view_size.supress() - /mob/camera/ai_eye/remote name = "Inactive Camera Eye" ai_detector_visible = FALSE diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index ca3329298cb..4c210e8fd26 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -54,7 +54,7 @@ icon_keyboard = "med_key" density = TRUE circuit = /obj/item/circuitboard/computer/scan_consolenew - + interaction_flags_click = ALLOW_SILICON_REACH light_color = LIGHT_COLOR_BLUE /// Link to the techweb's stored research. Used to retrieve stored mutations @@ -210,15 +210,9 @@ stored_research = tool.buffer return TRUE -/obj/machinery/computer/scan_consolenew/AltClick(mob/user) - // Make sure the user can interact with the machine. - . = ..() - if(!can_interact(user)) - return - if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return - +/obj/machinery/computer/scan_consolenew/click_alt(mob/user) eject_disk(user) + return CLICK_ACTION_SUCCESS /obj/machinery/computer/scan_consolenew/Initialize(mapload) . = ..() diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index f1ce2555936..9777c1b209c 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -2,6 +2,7 @@ interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY /// ID card currently inserted into the computer. VAR_FINAL/obj/item/card/id/advanced/prisoner/contained_id + interaction_flags_click = ALLOW_SILICON_REACH /obj/machinery/computer/prisoner/on_deconstruction(disassembled) contained_id?.forceMove(drop_location()) @@ -20,10 +21,9 @@ if(contained_id) . += span_notice("Alt-click to eject the ID card.") -/obj/machinery/computer/prisoner/AltClick(mob/user) - . = ..() - if(user.can_perform_action(src, ALLOW_SILICON_REACH)) - id_eject(user) +/obj/machinery/computer/prisoner/click_alt(mob/user) + id_eject(user) + return CLICK_ACTION_SUCCESS /obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/advanced/prisoner/new_id) if(!istype(new_id)) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 0915d4d1d17..5baf5497853 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -201,7 +201,7 @@ if (regime_set == "Teleporter") var/desc = tgui_input_list(usr, "Select a location to lock in", "Locking Computer", sort_list(targets)) - if(isnull(desc)) + if(isnull(desc) || !user.can_perform_action(src)) return set_teleport_target(targets[desc]) user.log_message("set the teleporter target to [targets[desc]].]", LOG_GAME) @@ -211,7 +211,7 @@ return var/desc = tgui_input_list(usr, "Select a station to lock in", "Locking Computer", sort_list(targets)) - if(isnull(desc)) + if(isnull(desc)|| !user.can_perform_action(src)) return var/obj/machinery/teleport/station/target_station = targets[desc] if(!target_station || !target_station.teleporter_hub) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index f47948753ab..f0b3434ec85 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -107,15 +107,10 @@ return ITEM_INTERACT_BLOCKING return . -/obj/structure/frame/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . - +/obj/structure/frame/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(istype(tool, /obj/item/circuitboard)) // Install board will fail if passed an invalid circuitboard and give feedback return install_board(user, tool, by_hand = TRUE) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - - return . + return NONE /** * Installs the passed circuit board into the frame diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index c067fcfef0b..207a3f753ef 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -157,15 +157,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) to_chat(user, span_notice("You remove [src] from the wall.")) return TRUE -/obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/user) - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/machinery/defibrillator_mount/click_alt(mob/living/carbon/user) if(!defib) to_chat(user, span_warning("It'd be hard to remove a defib unit from a mount that has none.")) - return + return CLICK_ACTION_BLOCKING if(clamps_locked) to_chat(user, span_warning("You try to tug out [defib], but the mount's clamps are locked tight!")) - return + return CLICK_ACTION_BLOCKING if(!user.put_in_hands(defib)) to_chat(user, span_warning("You need a free hand!")) user.visible_message(span_notice("[user] unhooks [defib] from [src], dropping it on the floor."), \ @@ -174,6 +172,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) user.visible_message(span_notice("[user] unhooks [defib] from [src]."), \ span_notice("You slide out [defib] from [src] and unhook the charging cables.")) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + return CLICK_ACTION_SUCCESS /obj/machinery/defibrillator_mount/charging name = "PENLITE defibrillator mount" diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 61f12100de2..4f78fbf3a52 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -99,7 +99,7 @@ /obj/structure/barricade/wooden/crude name = "crude plank barricade" desc = "This space is blocked off by a crude assortment of planks." - icon_state = "woodenbarricade-old" + icon_state = "plankbarricade" drop_amount = 1 max_integrity = 50 proj_pass_rate = 65 @@ -107,7 +107,7 @@ /obj/structure/barricade/wooden/crude/snow desc = "This space is blocked off by a crude assortment of planks. It seems to be covered in a layer of snow." - icon_state = "woodenbarricade-snow-old" + icon_state = "plankbarricade_snow" max_integrity = 75 /obj/structure/barricade/wooden/make_debris() @@ -180,10 +180,9 @@ . = ..() . += span_notice("Alt-click to toggle modes.") -/obj/item/grenade/barrier/AltClick(mob/living/carbon/user) - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/item/grenade/barrier/click_alt(mob/living/carbon/user) toggle_mode(user) + return CLICK_ACTION_SUCCESS /obj/item/grenade/barrier/proc/toggle_mode(mob/user) switch(mode) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 81961ce7187..fc74b18c03c 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -9,6 +9,7 @@ density = FALSE circuit = /obj/item/circuitboard/machine/dish_drive pass_flags = PASSTABLE + interaction_flags_click = ALLOW_SILICON_REACH /// List of dishes the drive can hold var/list/collectable_items = list(/obj/item/trash/waffles, // SKYRAT EDIT CHANGE - non-static list /obj/item/trash/waffles, @@ -143,9 +144,9 @@ balloon_alert(user, "disposal signal sent") do_the_dishes(TRUE) -/obj/machinery/dish_drive/AltClick(mob/living/user) - if(user.can_perform_action(src, ALLOW_SILICON_REACH)) - do_the_dishes(TRUE) +/obj/machinery/dish_drive/click_alt(mob/living/user) + do_the_dishes(TRUE) + return CLICK_ACTION_SUCCESS /obj/machinery/dish_drive/proc/do_the_dishes(manual) if(!LAZYLEN(dish_drive_contents)) diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index 8275eb1e948..6c239089f5d 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -288,17 +288,17 @@ return FALSE return TRUE -/obj/machinery/dna_infuser/AltClick(mob/user) - . = ..() +/obj/machinery/dna_infuser/click_alt(mob/user) if(infusing) balloon_alert(user, "not while it's on!") - return + return CLICK_ACTION_BLOCKING if(!infusing_from) balloon_alert(user, "no sample to eject!") - return + return CLICK_ACTION_BLOCKING balloon_alert(user, "ejected sample") infusing_from.forceMove(get_turf(src)) infusing_from = null + return CLICK_ACTION_SUCCESS #undef INFUSING_TIME #undef SCREAM_TIME diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm index 4567959b844..c93a0e4f7ea 100644 --- a/code/game/machinery/fat_sucker.dm +++ b/code/game/machinery/fat_sucker.dm @@ -98,17 +98,16 @@ else to_chat(user, span_warning("The safety hatch has been disabled!")) -/obj/machinery/fat_sucker/AltClick(mob/living/user) - if(!user.can_perform_action(src)) - return +/obj/machinery/fat_sucker/click_alt(mob/living/user) if(user == occupant) to_chat(user, span_warning("You can't reach the controls from inside!")) - return + return CLICK_ACTION_BLOCKING if(!(obj_flags & EMAGGED) && !allowed(user)) to_chat(user, span_warning("You lack the required access.")) - return + return CLICK_ACTION_BLOCKING free_exit = !free_exit to_chat(user, span_notice("Safety hatch [free_exit ? "unlocked" : "locked"].")) + return CLICK_ACTION_SUCCESS /obj/machinery/fat_sucker/update_overlays() . = ..() diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 09599b0cbff..5fa999a690e 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -57,20 +57,16 @@ else if(!harvesting) open_machine() -/obj/machinery/harvester/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src)) - return +/obj/machinery/harvester/click_alt(mob/user) if(panel_open) output_dir = turn(output_dir, -90) to_chat(user, span_notice("You change [src]'s output settings, setting the output to [dir2text(output_dir)].")) - return - if(!can_interact(user)) - return - if(harvesting || !user || !isliving(user) || state_open) - return - if(can_harvest()) - start_harvest() + return CLICK_ACTION_SUCCESS + if(harvesting || state_open || !can_harvest()) + return CLICK_ACTION_BLOCKING + + start_harvest() + return CLICK_ACTION_SUCCESS /obj/machinery/harvester/proc/can_harvest() if(!powered() || state_open || !occupant || !iscarbon(occupant)) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 6244dcdd2db..91104abf681 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -207,15 +207,10 @@ else return ..() -/// Checks whether the IV drip transfer rate can be modified with AltClick -/obj/machinery/iv_drip/proc/can_use_alt_click(mob/user) - if(!can_interact(user)) - return FALSE -/obj/machinery/iv_drip/AltClick(mob/user) - if(!can_use_alt_click(user)) - return ..() +/obj/machinery/iv_drip/click_alt(mob/user) set_transfer_rate(transfer_rate > MIN_IV_TRANSFER_RATE ? MIN_IV_TRANSFER_RATE : MAX_IV_TRANSFER_RATE) + return CLICK_ACTION_SUCCESS /obj/machinery/iv_drip/on_deconstruction(disassembled = TRUE) new /obj/item/stack/sheet/iron(loc) diff --git a/code/game/machinery/machine_frame.dm b/code/game/machinery/machine_frame.dm index 4edb3215e2b..ccdcddc8705 100644 --- a/code/game/machinery/machine_frame.dm +++ b/code/game/machinery/machine_frame.dm @@ -389,7 +389,7 @@ balloon_alert(user, "can't add that!") return FALSE -/obj/structure/frame/machine/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/structure/frame/machine/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() if(. & ITEM_INTERACT_ANY_BLOCKER) return . @@ -416,11 +416,18 @@ if(istype(tool, /obj/item/storage/part_replacer)) return install_parts_from_part_replacer(user, tool) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - if(!user.combat_mode) - return add_part(user, tool) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - return . +// Override of base_item_interaction so we only try to add parts to the frame AFTER running item_interaction and all the tool_acts +/obj/structure/frame/machine/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(user.combat_mode) + return NONE + + return add_part(user, tool) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + /** * Attempt to finalize the construction of the frame into a machine * as according to our circuit and parts diff --git a/code/game/machinery/photobooth.dm b/code/game/machinery/photobooth.dm index d7775974269..321ae7efd6e 100644 --- a/code/game/machinery/photobooth.dm +++ b/code/game/machinery/photobooth.dm @@ -38,6 +38,7 @@ req_one_access = list(ACCESS_SECURITY) color = COLOR_LIGHT_GRAYISH_RED add_height_chart = TRUE + button_id = "photobooth_machine_security" /obj/machinery/photobooth/Initialize(mapload) . = ..() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index d9e3787fd9e..9e926d9a841 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -394,8 +394,6 @@ Buildable meters balloon_alert(user, "pipe layer set to [piping_layer]") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/pipe/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/item/pipe/trinary/flippable/examine(mob/user) . = ..() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 60c293c8a96..f2b1ba303eb 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -144,7 +144,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) ui.set_autoupdate(FALSE) ui.open() -/obj/machinery/requests_console/ui_act(action, params) +/obj/machinery/requests_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -213,7 +213,8 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) var/recipient = params["reply_recipient"] var/reply_message = reject_bad_text(tgui_input_text(usr, "Write a quick reply to [recipient]", "Awaiting Input"), ascii_only = FALSE) - + if(QDELETED(ui) || ui.status != UI_INTERACTIVE) + return if(!reply_message) has_mail_send_error = TRUE playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index f768381548a..33e255badb2 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -164,14 +164,12 @@ ui = new(user, src, "Sleeper", name) ui.open() -/obj/machinery/sleeper/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return +/obj/machinery/sleeper/click_alt(mob/user) if(state_open) close_machine() else open_machine() + return CLICK_ACTION_SUCCESS /obj/machinery/sleeper/examine(mob/user) . = ..() diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 51b0a5b6a5d..bb93b7d00f5 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -94,50 +94,56 @@ return ..() -/obj/machinery/computer/slot_machine/item_interaction(mob/living/user, obj/item/inserted, list/modifiers, is_right_clicking) +/obj/machinery/computer/slot_machine/item_interaction(mob/living/user, obj/item/inserted, list/modifiers) if(istype(inserted, /obj/item/coin)) var/obj/item/coin/inserted_coin = inserted if(paymode == COIN) if(prob(2)) if(!user.transferItemToLoc(inserted_coin, drop_location(), silent = FALSE)) - return + return ITEM_INTERACT_BLOCKING inserted_coin.throw_at(user, 3, 10) if(prob(10)) balance = max(balance - SPIN_PRICE, 0) to_chat(user, span_warning("[src] spits your coin back out!")) - + return ITEM_INTERACT_BLOCKING else if(!user.temporarilyRemoveItemFromInventory(inserted_coin)) - return + return ITEM_INTERACT_BLOCKING balloon_alert(user, "coin insterted") balance += inserted_coin.value qdel(inserted_coin) + return ITEM_INTERACT_SUCCESS else balloon_alert(user, "holochips only!") + return ITEM_INTERACT_BLOCKING - else if(istype(inserted, /obj/item/holochip)) + if(istype(inserted, /obj/item/holochip)) if(paymode == HOLOCHIP) var/obj/item/holochip/inserted_chip = inserted if(!user.temporarilyRemoveItemFromInventory(inserted_chip)) - return + return ITEM_INTERACT_BLOCKING balloon_alert(user, "[inserted_chip.credits] credit[inserted_chip.credits == 1 ? "" : "s"] inserted") balance += inserted_chip.credits qdel(inserted_chip) + return ITEM_INTERACT_SUCCESS else balloon_alert(user, "coins only!") + return ITEM_INTERACT_BLOCKING - else if(inserted.tool_behaviour == TOOL_MULTITOOL) - if(balance > 0) - visible_message("[src] says, 'ERROR! Please empty the machine balance before altering paymode'") //Prevents converting coins into holocredits and vice versa - else - if(paymode == HOLOCHIP) - paymode = COIN - balloon_alert(user, "now using coins") - else - paymode = HOLOCHIP - balloon_alert(user, "now using holochips") + return NONE + +/obj/machinery/computer/slot_machine/multitool_act(mob/living/user, obj/item/tool) + if(balance > 0) + visible_message("[src] says, 'ERROR! Please empty the machine balance before altering paymode'") //Prevents converting coins into holocredits and vice versa + return ITEM_INTERACT_BLOCKING + + if(paymode == HOLOCHIP) + paymode = COIN + balloon_alert(user, "now using coins") else - return ..() + paymode = HOLOCHIP + balloon_alert(user, "now using holochips") + return ITEM_INTERACT_SUCCESS /obj/machinery/computer/slot_machine/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index b8afa4d57d4..3f2bb0b0c9e 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -16,6 +16,7 @@ max_integrity = 250 armor_type = /datum/armor/machinery_space_heater circuit = /obj/item/circuitboard/machine/space_heater + interaction_flags_click = ALLOW_SILICON_REACH //We don't use area power, we always use the cell use_power = NO_POWER_USE ///The cell we spawn with @@ -308,6 +309,7 @@ panel_open = TRUE //This is always open - since we've injected wires in the panel //We inherit the cell from the heater prior cell = null + interaction_flags_click = FORBID_TELEKINESIS_REACH ///The beaker within the heater var/obj/item/reagent_containers/beaker = null ///How powerful the heating is, upgrades with parts. (ala chem_heater.dm's method, basically the same level of heating, but this is restricted) @@ -440,11 +442,9 @@ update_appearance() return TRUE -/obj/machinery/space_heater/improvised_chem_heater/AltClick(mob/living/user) - . = ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return +/obj/machinery/space_heater/improvised_chem_heater/click_alt(mob/living/user) replace_beaker(user) + return CLICK_ACTION_SUCCESS /obj/machinery/space_heater/improvised_chem_heater/update_icon_state() . = ..() diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index a8d4d62544b..9ef3d8e3a99 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -12,6 +12,7 @@ circuit = /obj/item/circuitboard/machine/stasis fair_market_price = 10 payment_department = ACCOUNT_MED + interaction_flags_click = ALLOW_SILICON_REACH var/stasis_enabled = TRUE var/last_stasis_sound = FALSE var/stasis_can_toggle = 0 @@ -36,19 +37,18 @@ playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) last_stasis_sound = _running -/obj/machinery/stasis/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(world.time >= stasis_can_toggle && user.can_perform_action(src, ALLOW_SILICON_REACH)) - stasis_enabled = !stasis_enabled - stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN - playsound(src, 'sound/machines/click.ogg', 60, TRUE) - user.visible_message(span_notice("\The [src] [stasis_enabled ? "powers on" : "shuts down"]."), \ - span_notice("You [stasis_enabled ? "power on" : "shut down"] \the [src]."), \ - span_hear("You hear a nearby machine [stasis_enabled ? "power on" : "shut down"].")) - play_power_sound() - update_appearance() +/obj/machinery/stasis/click_alt(mob/user) + if(world.time < stasis_can_toggle) + return CLICK_ACTION_BLOCKING + stasis_enabled = !stasis_enabled + stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN + playsound(src, 'sound/machines/click.ogg', 60, TRUE) + user.visible_message(span_notice("\The [src] [stasis_enabled ? "powers on" : "shuts down"]."), \ + span_notice("You [stasis_enabled ? "power on" : "shut down"] \the [src]."), \ + span_hear("You hear a nearby machine [stasis_enabled ? "power on" : "shut down"].")) + play_power_sound() + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/stasis/Exited(atom/movable/gone, direction) if(gone == occupant) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index 6cf18323105..abc2b7dbdbf 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -5,7 +5,6 @@ /obj/machinery/computer/telecomms/monitor name = "telecommunications monitoring console" desc = "Monitors the details of the telecommunications network it's synced with." - circuit = /obj/item/circuitboard/computer/comm_monitor icon_screen = "comm_monitor" diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index e4fc4592b79..e2ad3af956a 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -28,18 +28,6 @@ if(user_unbuckle_mob(buckled_mobs[1],user)) return TRUE -/atom/movable/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - if(!can_buckle || !istype(tool, /obj/item/riding_offhand) || !user.Adjacent(src)) - return ..() - - var/obj/item/riding_offhand/riding_item = tool - var/mob/living/carried_mob = riding_item.rider - if(carried_mob == user) //Piggyback user. - return ITEM_INTERACT_BLOCKING - user.unbuckle_mob(carried_mob) - carried_mob.forceMove(get_turf(src)) - return mouse_buckle_handling(carried_mob, user) ? ITEM_INTERACT_SUCCESS: ITEM_INTERACT_BLOCKING - //literally just the above extension of attack_hand(), but for silicons instead (with an adjacency check, since attack_robot() being called doesn't mean that you're adjacent to something) /atom/movable/attack_robot(mob/living/user) . = ..() diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index 214440b92c2..f1034c5541f 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -29,22 +29,29 @@ nearby.bioscramble(name) /obj/effect/anomaly/bioscrambler/move_anomaly() + update_target() + if (isnull(pursuit_target)) + return ..() + var/turf/step_turf = get_step(src, get_dir(src, pursuit_target.resolve())) + if (!HAS_TRAIT(step_turf, TRAIT_CONTAINMENT_FIELD)) + Move(step_turf) + +/// Select a new target if we need one +/obj/effect/anomaly/bioscrambler/proc/update_target() var/mob/living/current_target = pursuit_target?.resolve() if (QDELETED(current_target)) pursuit_target = null - if (isnull(pursuit_target) || prob(20)) - var/mob/living/new_target = find_nearest_target() - if (isnull(new_target)) - pursuit_target = null - else if (new_target != current_target) - current_target = new_target - pursuit_target = WEAKREF(new_target) - new_target.ominous_nosebleed() - if (isnull(pursuit_target)) + if (!isnull(pursuit_target) && prob(80)) return - var/turf/step_turf = get_step(src, get_dir(src, current_target)) - if (!HAS_TRAIT(step_turf, TRAIT_CONTAINMENT_FIELD)) - Move(step_turf) + var/mob/living/new_target = find_nearest_target() + if (isnull(new_target)) + pursuit_target = null + return + if (new_target == current_target) + return + current_target = new_target + pursuit_target = WEAKREF(new_target) + new_target.ominous_nosebleed() /// Returns the closest conscious carbon on our z level or null if there somehow isn't one /obj/effect/anomaly/bioscrambler/proc/find_nearest_target() @@ -53,8 +60,8 @@ for(var/mob/living/carbon/target in GLOB.player_list) if (target.z != z) continue - if (target.status_effects & GODMODE) - continue + if (target.status_flags & GODMODE) + continue if (target.stat >= UNCONSCIOUS) continue // Don't just haunt a corpse var/distance_from_target = get_dist(src, target) @@ -64,3 +71,9 @@ closest_target = target return closest_target + +/// A bioscrambler anomaly subtype which does not pursue people, for purposes of a space ruin +/obj/effect/anomaly/bioscrambler/docile + +/obj/effect/anomaly/bioscrambler/docile/update_target() + return diff --git a/code/game/objects/effects/posters/poster.dm b/code/game/objects/effects/posters/poster.dm index c4703d700c4..4ced5babbbf 100644 --- a/code/game/objects/effects/posters/poster.dm +++ b/code/game/objects/effects/posters/poster.dm @@ -184,12 +184,17 @@ /obj/structure/sign/poster/attack_hand(mob/user, list/modifiers) . = ..() - if(.) - return - if(ruined) + if(. || !check_tearability()) return tear_poster(user) +/// Check to see if this poster is tearable and gives the user feedback if it is not. +/obj/structure/sign/poster/proc/check_tearability(mob/user) + if(ruined) + balloon_alert(user, "already ruined!") + return FALSE + return TRUE + /obj/structure/sign/poster/proc/spring_trap(mob/user) var/obj/item/shard/payload = trap?.resolve() if (!payload) @@ -264,10 +269,10 @@ playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, TRUE) spring_trap(user) - var/obj/structure/sign/poster/ripped/R = new(loc) - R.pixel_y = pixel_y - R.pixel_x = pixel_x - R.add_fingerprint(user) + var/obj/structure/sign/poster/ripped/torn_poster = new(loc) + torn_poster.pixel_y = pixel_y + torn_poster.pixel_x = pixel_x + torn_poster.add_fingerprint(user) qdel(src) // Various possible posters follow diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 57600813df1..9bc73ba2592 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -225,6 +225,11 @@ /// A lazylist used for applying fantasy values, contains the actual modification applied to a variable. var/list/fantasy_modifications = null + /// Has the item been reskinned? + var/current_skin + ///// List of options to reskin. + var/list/unique_reskin + /obj/item/Initialize(mapload) if(attack_verb_continuous) attack_verb_continuous = string_list(attack_verb_continuous) @@ -261,6 +266,11 @@ if(LAZYLEN(embedding)) updateEmbedding() + if(unique_reskin) + RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) + register_context() + + /obj/item/Destroy(force) // This var exists as a weird proxy "owner" ref // It's used in a few places. Stop using it, and optimially replace all uses please @@ -275,6 +285,20 @@ return ..() + +/obj/item/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(!unique_reskin) + return + + if(current_skin && !(item_flags & INFINITE_RESKIN)) + return + + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reskin" + return CONTEXTUAL_SCREENTIP_SET + + /// Called when an action associated with our item is deleted /obj/item/proc/on_action_deleted(datum/source) SIGNAL_HANDLER @@ -1488,6 +1512,7 @@ wearer.regenerate_icons() // update that mf to_chat(M, "[src] is now skinned as '[pick].'") post_reskin(M) + return TRUE /// Automatically called after a reskin, for any extra variable changes. /obj/item/proc/post_reskin(mob/our_mob) diff --git a/code/game/objects/items/AI_modules/freeform.dm b/code/game/objects/items/AI_modules/freeform.dm index eb55d469318..a0a91f7185e 100644 --- a/code/game/objects/items/AI_modules/freeform.dm +++ b/code/game/objects/items/AI_modules/freeform.dm @@ -9,7 +9,7 @@ /obj/item/ai_module/core/freeformcore/attack_self(mob/user) var/targName = tgui_input_text(user, "Enter a new core law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) - if(!targName) + if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) to_chat(user, span_warning("Error: Law contains invalid text.")) @@ -34,11 +34,11 @@ /obj/item/ai_module/supplied/freeform/attack_self(mob/user) var/newpos = tgui_input_number(user, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority ", lawpos, 50, 15) - if(!newpos || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + if(!newpos || !user.is_holding(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return lawpos = newpos var/targName = tgui_input_text(user, "Enter a new law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) - if(!targName) + if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) to_chat(user, span_warning("Error: Law contains invalid text.")) // AI LAW 2 SAY U W U WITHOUT THE SPACES diff --git a/code/game/objects/items/AI_modules/full_lawsets.dm b/code/game/objects/items/AI_modules/full_lawsets.dm index 39eeefbcaac..52a24925646 100644 --- a/code/game/objects/items/AI_modules/full_lawsets.dm +++ b/code/game/objects/items/AI_modules/full_lawsets.dm @@ -58,7 +58,7 @@ /obj/item/ai_module/core/full/asimov/attack_self(mob/user as mob) var/targName = tgui_input_text(user, "Enter a new subject that Asimov is concerned with.", "Asimov", subject, MAX_NAME_LEN) - if(!targName) + if(!targName || !user.is_holding(src)) return subject = targName laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ @@ -73,7 +73,7 @@ /obj/item/ai_module/core/full/asimovpp/attack_self(mob/user) var/target_name = tgui_input_text(user, "Enter a new subject that Asimov++ is concerned with.", "Asimov++", subject, MAX_NAME_LEN) - if(!target_name) + if(!target_name || !user.is_holding(src)) return laws.Cut() var/datum/ai_laws/asimovpp/lawset = new diff --git a/code/game/objects/items/AI_modules/hacked.dm b/code/game/objects/items/AI_modules/hacked.dm index b9ddb5c65ed..81100d0ed15 100644 --- a/code/game/objects/items/AI_modules/hacked.dm +++ b/code/game/objects/items/AI_modules/hacked.dm @@ -5,7 +5,7 @@ /obj/item/ai_module/syndicate/attack_self(mob/user) var/targName = tgui_input_text(user, "Enter a new law for the AI", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) - if(!targName) + if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) // not even the syndicate can uwu to_chat(user, span_warning("Error: Law contains invalid text.")) @@ -77,4 +77,3 @@ /obj/item/ai_module/malf/display_laws() return - diff --git a/code/game/objects/items/AI_modules/supplied.dm b/code/game/objects/items/AI_modules/supplied.dm index dc1524687c2..b53e16a86b0 100644 --- a/code/game/objects/items/AI_modules/supplied.dm +++ b/code/game/objects/items/AI_modules/supplied.dm @@ -28,7 +28,7 @@ /obj/item/ai_module/supplied/safeguard/attack_self(mob/user) var/targName = tgui_input_text(user, "Subject to safeguard.", "Safeguard", user.name, MAX_NAME_LEN) - if(!targName) + if(!targName || !user.is_holding(src)) return targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." diff --git a/code/game/objects/items/AI_modules/zeroth.dm b/code/game/objects/items/AI_modules/zeroth.dm index 8d87c3b059d..74fc7ab8232 100644 --- a/code/game/objects/items/AI_modules/zeroth.dm +++ b/code/game/objects/items/AI_modules/zeroth.dm @@ -26,7 +26,7 @@ /obj/item/ai_module/zeroth/onehuman/attack_self(mob/user) var/targName = tgui_input_text(user, "Enter the subject who is the only human.", "One Human", user.real_name, MAX_NAME_LEN) - if(!targName) + if(!targName || !user.is_holding(src)) return targetName = targName laws[1] = "Only [targetName] is human" diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index c5bd01c196d..b78bdefd9b6 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -147,14 +147,16 @@ else return ..() -/obj/item/airlock_painter/AltClick(mob/user) - . = ..() - if(ink && user.can_perform_action(src)) - playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) - ink.forceMove(user.drop_location()) - user.put_in_hands(ink) - to_chat(user, span_notice("You remove [ink] from [src].")) - ink = null +/obj/item/airlock_painter/click_alt(mob/user) + if(!ink) + return CLICK_ACTION_BLOCKING + + playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) + ink.forceMove(user.drop_location()) + user.put_in_hands(ink) + to_chat(user, span_notice("You remove [ink] from [src].")) + ink = null + return CLICK_ACTION_SUCCESS /obj/item/airlock_painter/decal name = "decal painter" diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 8c9ef30687a..0d8874099e8 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -671,44 +671,45 @@ to_chat(user, span_notice("The provided account has been linked to this ID card. It contains [account.account_balance] credits.")) return TRUE -/obj/item/card/id/AltClick(mob/living/user) +/obj/item/card/id/click_alt(mob/living/user) if(!alt_click_can_use_id(user)) - return + return NONE if(registered_account.account_debt) var/choice = tgui_alert(user, "Choose An Action", "Bank Account", list("Withdraw", "Pay Debt")) if(!choice || QDELETED(user) || QDELETED(src) || !alt_click_can_use_id(user) || loc != user) - return + return CLICK_ACTION_BLOCKING if(choice == "Pay Debt") pay_debt(user) - return + return CLICK_ACTION_SUCCESS if (registered_account.being_dumped) registered_account.bank_card_talk(span_warning("内部服务器错误"), TRUE) - return + return CLICK_ACTION_SUCCESS if(loc != user) to_chat(user, span_warning("You must be holding the ID to continue!")) - return + return CLICK_ACTION_BLOCKING if(registered_account.replaceable && !registered_account.account_balance) var/choice = tgui_alert(user, "This card's account is unassigned. Would you like to link a bank account?", "Bank Account", list("Link Account", "Leave Unassigned")) if(!choice || QDELETED(user) || QDELETED(src) || !alt_click_can_use_id(user) || loc != user) - return + return CLICK_ACTION_BLOCKING if(choice == "Link Account") set_new_account(user) - return + return CLICK_ACTION_SUCCESS var/amount_to_remove = tgui_input_number(user, "How much do you want to withdraw? (Max: [registered_account.account_balance] cr)", "Withdraw Funds", max_value = registered_account.account_balance) if(!amount_to_remove || QDELETED(user) || QDELETED(src) || issilicon(user) || loc != user) - return + return CLICK_ACTION_BLOCKING if(!alt_click_can_use_id(user)) - return + return CLICK_ACTION_BLOCKING if(registered_account.adjust_money(-amount_to_remove, "System: Withdrawal")) var/obj/item/holochip/holochip = new (user.drop_location(), amount_to_remove) user.put_in_hands(holochip) to_chat(user, span_notice("You withdraw [amount_to_remove] credits into a holochip.")) SSblackbox.record_feedback("amount", "credits_removed", amount_to_remove) log_econ("[amount_to_remove] credits were removed from [src] owned by [src.registered_name]") - return + return CLICK_ACTION_SUCCESS else var/difference = amount_to_remove - registered_account.account_balance registered_account.bank_card_talk(span_warning("ERROR: The linked account requires [difference] more credit\s to perform that withdrawal."), TRUE) + return CLICK_ACTION_BLOCKING /obj/item/card/id/alt_click_secondary(mob/user) . = ..() @@ -923,8 +924,9 @@ department_name = ACCOUNT_CAR_NAME icon_state = "car_budget" //saving up for a new tesla -/obj/item/card/id/departmental_budget/AltClick(mob/living/user) +/obj/item/card/id/departmental_budget/click_alt(mob/living/user) registered_account.bank_card_talk(span_warning("Withdrawing is not compatible with this card design."), TRUE) //prevents the vault bank machine being useless and putting money from the budget to your card to go over personal crates + return CLICK_ACTION_BLOCKING /obj/item/card/id/advanced name = "identification card" diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 8d6c240ed0d..faf7c76e502 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -1236,11 +1236,10 @@ suction = !suction to_chat(user, span_notice("You [suction ? "enable" : "disable"] the board's suction function.")) -/obj/item/circuitboard/machine/dish_drive/AltClick(mob/living/user) - if(!user.Adjacent(src)) - return +/obj/item/circuitboard/machine/dish_drive/click_alt(mob/living/user) transmit = !transmit to_chat(user, span_notice("You [transmit ? "enable" : "disable"] the board's automatic disposal transmission.")) + return CLICK_ACTION_SUCCESS /obj/item/circuitboard/machine/gibber name = "Gibber" diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index bbb5e9e177d..42402c88e10 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -10,6 +10,7 @@ icon_state = "lipstick" inhand_icon_state = "lipstick" w_class = WEIGHT_CLASS_TINY + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING var/open = FALSE /// Actual color of the lipstick, also gets applied to the human var/lipstick_color = COLOR_RED @@ -45,15 +46,9 @@ colored_overlay.color = lipstick_color . += colored_overlay -/obj/item/lipstick/AltClick(mob/user) - . = ..() - if(.) - return TRUE - - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING)) - return FALSE - - return display_radial_menu(user) +/obj/item/lipstick/click_alt(mob/user) + display_radial_menu(user) + return CLICK_ACTION_SUCCESS /obj/item/lipstick/proc/display_radial_menu(mob/living/carbon/human/user) var/style_options = list( diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index ae0dca8d195..4cb077808a8 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -759,6 +759,7 @@ pre_noise = TRUE post_noise = FALSE + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS /obj/item/toy/crayon/spraycan/Initialize(mapload) . = ..() @@ -960,12 +961,13 @@ return SECONDARY_ATTACK_CONTINUE_CHAIN -/obj/item/toy/crayon/spraycan/AltClick(mob/user) - if(!has_cap || !user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/toy/crayon/spraycan/click_alt(mob/user) + if(!has_cap) + return CLICK_ACTION_BLOCKING is_capped = !is_capped balloon_alert(user, is_capped ? "capped" : "cap removed") update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/toy/crayon/spraycan/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) return is_capped diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm index 83e6165b91d..c9b6fe4a134 100644 --- a/code/game/objects/items/credit_holochip.dm +++ b/code/game/objects/items/credit_holochip.dm @@ -7,6 +7,8 @@ throwforce = 0 force = 0 w_class = WEIGHT_CLASS_TINY + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH + /// Amount on money on the card var/credits = 0 /obj/item/holochip/Initialize(mapload, amount = 1) @@ -101,23 +103,21 @@ update_appearance() qdel(H) -/obj/item/holochip/AltClick(mob/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) - return +/obj/item/holochip/click_alt(mob/user) if(loc != user) to_chat(user, span_warning("You must be holding the holochip to continue!")) - return FALSE + return CLICK_ACTION_BLOCKING var/split_amount = tgui_input_number(user, "How many credits do you want to extract from the holochip? (Max: [credits] cr)", "Holochip", max_value = credits) if(!split_amount || QDELETED(user) || QDELETED(src) || issilicon(user) || !usr.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH) || loc != user) - return + return CLICK_ACTION_BLOCKING var/new_credits = spend(split_amount, TRUE) - var/obj/item/holochip/H = new(user ? user : drop_location(), new_credits) + var/obj/item/holochip/chip = new(user ? user : drop_location(), new_credits) if(user) - if(!user.put_in_hands(H)) - H.forceMove(user.drop_location()) + if(!user.put_in_hands(chip)) + chip.forceMove(user.drop_location()) add_fingerprint(user) - H.add_fingerprint(user) to_chat(user, span_notice("You extract [split_amount] credits into a new holochip.")) + return CLICK_ACTION_SUCCESS /obj/item/holochip/emp_act(severity) . = ..() diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index 7a2efbcec7e..b7b693b999f 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -9,11 +9,18 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 2.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 5) - var/max_duration = 3000 - var/duration = 300 + interaction_flags_click = NEED_DEXTERITY + /// Max time this can be set + var/max_duration = 300 SECONDS + /// Currently set time + var/duration = 30 SECONDS + /// Last world time var/last_use = 0 + /// world.time + (world.time - last_use) var/next_use = 0 + /// The current space time rift var/obj/effect/abstract/sync_holder/sync_holder + /// Timer obj for calling resync var/resync_timer /obj/item/desynchronizer/attack_self(mob/living/user) @@ -32,14 +39,13 @@ . += span_notice("Alt-click to customize the duration. Current duration: [DisplayTimeText(duration)].") . += span_notice("Can be used again to interrupt the effect early. The recharge time is the same as the time spent in desync.") -/obj/item/desynchronizer/AltClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/desynchronizer/click_alt(mob/living/user) var/new_duration = tgui_input_number(user, "Set the duration", "Desynchronizer", duration / 10, max_duration, 5) if(!new_duration || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, NEED_DEXTERITY)) - return + return CLICK_ACTION_BLOCKING duration = new_duration to_chat(user, span_notice("You set the duration to [DisplayTimeText(duration)].")) + return CLICK_ACTION_SUCCESS /obj/item/desynchronizer/proc/desync(mob/living/user) if(sync_holder) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 6e152c33661..db2d0d820ba 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -110,12 +110,11 @@ to_chat(user, span_notice("[icon2html(src, user)] [isliving(target) ? "Subject" : "Target"] is free of radioactive contamination.")) -/obj/item/geiger_counter/AltClick(mob/living/user) - if(!istype(user) || !user.can_perform_action(src)) - return ..() +/obj/item/geiger_counter/click_alt(mob/living/user) if(!scanning) to_chat(usr, span_warning("[src] must be on to reset its radiation level!")) - return + return CLICK_ACTION_BLOCKING to_chat(usr, span_notice("You flush [src]'s radiation counts, resetting it to normal.")) last_perceived_radiation_danger = null update_appearance(UPDATE_ICON) + return CLICK_ACTION_SUCCESS diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 026e560cc97..225e914fbf6 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -80,14 +80,11 @@ diode = null return TRUE -/obj/item/laser_pointer/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . +/obj/item/laser_pointer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(isnull(crystal_lens)) - return . + return NONE if(tool_behaviour != TOOL_WIRECUTTER && tool_behaviour != TOOL_HEMOSTAT) - return . + return NONE tool.play_tool_sound(src) balloon_alert(user, "removed crystal lens") crystal_lens.forceMove(drop_location()) diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm index abffdcca4d5..34b83a62092 100644 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -10,6 +10,8 @@ righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' w_class = WEIGHT_CLASS_TINY obj_flags = UNIQUE_RENAME + interaction_flags_click = NEED_DEXTERITY + /// The linked quantum pad var/obj/machinery/quantumpad/qpad /// where the pad is located and what color the card will become @@ -40,13 +42,12 @@ else . += span_notice("Insert [src] into an active quantum pad to link it.") -/obj/item/quantum_keycard/AltClick(mob/living/user) - if(!istype(user) || !user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/quantum_keycard/click_alt(mob/living/user) to_chat(user, span_notice("You start pressing [src]'s unlink button...")) if(do_after(user, 4 SECONDS, target = src)) to_chat(user, span_notice("The keycard beeps twice and disconnects the quantum link.")) set_pad() + return CLICK_ACTION_SUCCESS /obj/item/quantum_keycard/proc/set_pad(obj/machinery/quantumpad/new_pad) qpad = new_pad diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 6bda55c8032..b9f2090eeb4 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -453,9 +453,9 @@ GLOBAL_LIST_INIT(channel_tokens, list( // And grant all the languages we definitely should know now grant_headset_languages(mob_loc) -/obj/item/radio/headset/AltClick(mob/living/user) - if(!istype(user) || !Adjacent(user) || user.incapacitated()) - return - if (command) - use_command = !use_command - to_chat(user, span_notice("You toggle high-volume mode [use_command ? "on" : "off"].")) +/obj/item/radio/headset/click_alt(mob/living/user) + if (!command) + return CLICK_ACTION_BLOCKING + use_command = !use_command + to_chat(user, span_notice("You toggle high-volume mode [use_command ? "on" : "off"].")) + return CLICK_ACTION_SUCCESS diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index 16f90489b20..c5d33b74226 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -13,7 +13,7 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2) custom_price = PAYCHECK_COMMAND -/obj/item/autopsy_scanner/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/autopsy_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!user.can_read(src) || user.is_blind()) diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index fcc9257e4b5..0898c73aa2e 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -17,10 +17,16 @@ tool_behaviour = TOOL_ANALYZER custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 0.3, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 0.2) grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) + interaction_flags_click = NEED_LITERACY|NEED_LIGHT + /// Boolean whether this has a CD var/cooldown = FALSE - var/cooldown_time = 250 - var/barometer_accuracy // 0 is the best accuracy. + /// The time in deciseconds + var/cooldown_time = 25 SECONDS + /// 0 is best accuracy + var/barometer_accuracy + /// Cached gasmix data from ui_interact var/list/last_gasmix_data + /// Max scan distance var/ranged_scan_distance = 1 /obj/item/analyzer/Initialize(mapload) @@ -53,19 +59,14 @@ user.visible_message(span_suicide("[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!")) return BRUTELOSS -/obj/item/analyzer/AltClick(mob/user) //Barometer output for measuring when the next storm happens - ..() - - if(!user.can_perform_action(src, NEED_LITERACY|NEED_LIGHT)) - return - +/obj/item/analyzer/click_alt(mob/user) //Barometer output for measuring when the next storm happens if(cooldown) to_chat(user, span_warning("[src]'s barometer function is preparing itself.")) - return + return CLICK_ACTION_BLOCKING var/turf/T = get_turf(user) if(!T) - return + return CLICK_ACTION_BLOCKING playsound(src, 'sound/effects/pop.ogg', 100) var/area/user_area = T.loc @@ -73,7 +74,7 @@ if(!user_area.outdoors) to_chat(user, span_warning("[src]'s barometer function won't work indoors!")) - return + return CLICK_ACTION_BLOCKING for(var/V in SSweather.processing) var/datum/weather/W = V @@ -84,7 +85,7 @@ if(ongoing_weather) if((ongoing_weather.stage == MAIN_STAGE) || (ongoing_weather.stage == WIND_DOWN_STAGE)) to_chat(user, span_warning("[src]'s barometer function can't trace anything while the storm is [ongoing_weather.stage == MAIN_STAGE ? "already here!" : "winding down."]")) - return + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("The next [ongoing_weather] will hit in [butchertime(ongoing_weather.next_hit_time - world.time)].")) if(ongoing_weather.aesthetic) @@ -98,6 +99,7 @@ to_chat(user, span_warning("[src]'s barometer function says a storm will land in approximately [butchertime(fixed)].")) cooldown = TRUE addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/analyzer, ping)), cooldown_time) + return CLICK_ACTION_SUCCESS /obj/item/analyzer/proc/ping() if(isliving(loc)) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 7f672e7d32a..1a264cf3924 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -20,8 +20,12 @@ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT *2) + interaction_flags_click = NEED_LITERACY|NEED_LIGHT + /// Verbose/condensed var/mode = SCANNER_VERBOSE + /// HEALTH/WOUND var/scanmode = SCANMODE_HEALTH + /// Advanced health analyzer var/advanced = FALSE custom_price = PAYCHECK_COMMAND /// If this analyzer will give a bonus to wound treatments apon woundscan. @@ -51,7 +55,7 @@ if(SCANMODE_WOUND) to_chat(user, span_notice("You switch the health analyzer to report extra info on wounds.")) -/obj/item/healthanalyzer/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/healthanalyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again- ORIGINAL: if(!user.can_read(src) || user.is_blind()) @@ -89,7 +93,7 @@ add_fingerprint(user) -/obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user) +/obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!user.can_read(src)) // SKYRAT EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(!user.can_read(src) || user.is_blind()) @@ -489,17 +493,13 @@ // we handled the last
    so we don't need handholding to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) -/obj/item/healthanalyzer/AltClick(mob/user) - ..() - - if(!user.can_perform_action(src, NEED_LITERACY|NEED_LIGHT) || user.is_blind()) - return - +/obj/item/healthanalyzer/click_alt(mob/user) if(mode == SCANNER_NO_MODE) - return + return CLICK_ACTION_BLOCKING mode = !mode to_chat(user, mode == SCANNER_VERBOSE ? "The scanner now shows specific limb damage." : "The scanner no longer shows limb damage.") + return CLICK_ACTION_SUCCESS /obj/item/healthanalyzer/advanced name = "advanced health analyzer" @@ -596,7 +596,7 @@ /obj/item/healthanalyzer/simple/proc/violence_damage(mob/living/user) user.adjustBruteLoss(4) -/obj/item/healthanalyzer/simple/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/healthanalyzer/simple/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL: if(!user.can_read(src) || user.is_blind()) diff --git a/code/game/objects/items/devices/scanners/sequence_scanner.dm b/code/game/objects/items/devices/scanners/sequence_scanner.dm index 3d212cbb771..3a45dae813b 100644 --- a/code/game/objects/items/devices/scanners/sequence_scanner.dm +++ b/code/game/objects/items/devices/scanners/sequence_scanner.dm @@ -29,7 +29,7 @@ if(LAZYLEN(genetic_makeup_buffer) > 0) . += span_notice("It has the genetic makeup of \"[genetic_makeup_buffer["name"]]\" stored inside its buffer") -/obj/item/sequence_scanner/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/sequence_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE @@ -46,7 +46,7 @@ user.visible_message(span_notice("[user] fails to analyze [interacting_with]'s genetic sequence."), span_warning("[interacting_with] has no readable genetic sequence!")) return ITEM_INTERACT_BLOCKING -/obj/item/sequence_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user) +/obj/item/sequence_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm index ee8567ac6cc..bf55265f783 100644 --- a/code/game/objects/items/devices/scanners/slime_scanner.dm +++ b/code/game/objects/items/devices/scanners/slime_scanner.dm @@ -13,7 +13,7 @@ throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.30, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 0.20) -/obj/item/slime_scanner/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/slime_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL : if(!user.can_read(src) || user.is_blind()) diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index e7a749fc978..6db67049174 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -8,9 +8,12 @@ item_flags = NOBLUDGEON lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - - var/cooldown = 300 + interaction_flags_click = NEED_DEXTERITY + /// Cooldown for usage + var/cooldown = 30 SECONDS + /// Next available time var/next_use = 0 + /// Swapper linked to this obj var/obj/item/swapper/linked_swapper /obj/item/swapper/Destroy() @@ -72,15 +75,14 @@ else . += span_notice("Not Linked. Use on another quantum spin inverter to establish a quantum link.") -/obj/item/swapper/AltClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/swapper/click_alt(mob/living/user) to_chat(user, span_notice("You break the current quantum link.")) if(!QDELETED(linked_swapper)) linked_swapper.linked_swapper = null linked_swapper.update_appearance() linked_swapper = null update_appearance() + return CLICK_ACTION_SUCCESS //Gets the topmost teleportable container /obj/item/swapper/proc/get_teleportable_container() diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index c686eeb04a7..d30f379197e 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -61,11 +61,9 @@ . += span_notice("The wire panel is [open_panel ? "opened" : "closed"]. The display reads:") . += "[readout()]" -/obj/item/taperecorder/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return +/obj/item/taperecorder/click_alt(mob/user) play() + return CLICK_ACTION_SUCCESS /obj/item/taperecorder/proc/update_available_icons() icons_available = list() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 8e8f2578fa4..7e6ee077fce 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -76,7 +76,7 @@ effective or pretty fucking useless. var/intensity = 10 // how much damage the radiation does var/wavelength = 10 // time it takes for the radiation to kick in, in seconds -/obj/item/healthanalyzer/rad_laser/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/healthanalyzer/rad_laser/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!stealth || !irradiate) . = ..() diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 141e242fc03..f197a9b5fdb 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -49,7 +49,7 @@ user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src].")) add_fingerprint(user) -/obj/item/card/emagfake/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/card/emagfake/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) return ITEM_INTERACT_SKIP_TO_ATTACK // So it does the attack animation. @@ -57,7 +57,7 @@ . = ..() type_blacklist = list(typesof(/obj/machinery/door/airlock) + typesof(/obj/machinery/door/window/) + typesof(/obj/machinery/door/firedoor) - typesof(/obj/machinery/door/airlock/tram)) //list of all typepaths that require a specialized emag to hack. -/obj/item/card/emag/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/card/emag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!can_emag(interacting_with, user)) return ITEM_INTERACT_BLOCKING log_combat(user, interacting_with, "attempted to emag") diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index 0a95e4bbc73..fe066bd1bf5 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -41,10 +41,10 @@ TurnOn() to_chat(user, span_notice("You turn the disco ball on!")) -/obj/structure/etherealball/AltClick(mob/living/carbon/human/user) - . = ..() +/obj/structure/etherealball/click_alt(mob/living/carbon/human/user) set_anchored(!anchored) to_chat(user, span_notice("You [anchored ? null : "un"]lock the disco ball.")) + return CLICK_ACTION_SUCCESS /obj/structure/etherealball/proc/TurnOn() TurnedOn = TRUE //Same diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 0b2daeb655d..c78242255a6 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -18,6 +18,7 @@ attack_verb_simple = list("slam", "whack", "bash", "thunk", "batter", "bludgeon", "thrash") dog_fashion = /datum/dog_fashion/back resistance_flags = FIRE_PROOF + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS /// The max amount of water this extinguisher can hold. var/max_water = 50 /// Does the welder extinguisher start with water. @@ -270,13 +271,12 @@ if(1 to 3) source.delay = 3 -/obj/item/extinguisher/AltClick(mob/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/extinguisher/click_alt(mob/user) if(!user.is_holding(src)) to_chat(user, span_notice("You must be holding the [src] in your hands do this!")) - return + return CLICK_ACTION_BLOCKING EmptyExtinguisher(user) + return CLICK_ACTION_SUCCESS /obj/item/extinguisher/proc/EmptyExtinguisher(mob/user) if(loc == user && reagents.total_volume) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 346b8597533..d2f4b0cfc71 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -20,6 +20,7 @@ light_range = 2 light_power = 2 light_on = FALSE + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS var/status = FALSE var/lit = FALSE //on or off var/operating = FALSE//cooldown @@ -158,12 +159,15 @@ /obj/item/flamethrower/attack_self(mob/user) toggle_igniter(user) -/obj/item/flamethrower/AltClick(mob/user) - if(ptank && isliving(user) && user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - user.put_in_hands(ptank) - ptank = null - to_chat(user, span_notice("You remove the plasma tank from [src]!")) - update_appearance() +/obj/item/flamethrower/click_alt(mob/user) + if(isnull(ptank)) + return NONE + + user.put_in_hands(ptank) + ptank = null + to_chat(user, span_notice("You remove the plasma tank from [src]!")) + update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/flamethrower/examine(mob/user) . = ..() @@ -219,10 +223,6 @@ sleep(0.1 SECONDS) previousturf = T operating = FALSE - for(var/mob/M in viewers(1, loc)) - if((M.client && M.machine == src)) - attack_self(M) - /obj/item/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05) //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 706fb29733d..0d0391126c9 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -10,6 +10,7 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL + interaction_flags_click = FORBID_TELEKINESIS_REACH ///The implant case currently inserted into the pad. var/obj/item/implantcase/inserted_case @@ -46,11 +47,9 @@ update_static_data_for_all_viewers() update_appearance(UPDATE_ICON) -/obj/item/implantpad/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return +/obj/item/implantpad/click_alt(mob/user) remove_implant(user) + return CLICK_ACTION_SUCCESS /obj/item/implantpad/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index 2f25e53c1fb..f96c1beb573 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -372,15 +372,16 @@ */ /obj/item/paper/fake_report/water grind_results = list(/datum/reagent/water = 5) + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS -/obj/item/paper/fake_report/water/AltClick(mob/living/user, obj/item/I) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/paper/fake_report/water/click_alt(mob/living/user) var/datum/action/innate/origami/origami_action = locate() in user.actions if(origami_action?.active) //Origami masters can fold water - make_plane(user, I, /obj/item/paperplane/syndicate) + make_plane(user, /obj/item/paperplane/syndicate) else if(do_after(user, 1 SECONDS, target = src, progress=TRUE)) var/turf/open/target = get_turf(src) target.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) to_chat(user, span_notice("As you try to fold [src] into the shape of a plane, it disintegrates into water!")) qdel(src) + + return CLICK_ACTION_SUCCESS diff --git a/code/game/objects/items/machine_wand.dm b/code/game/objects/items/machine_wand.dm index 71ea2fae1b6..c1dd0bf382d 100644 --- a/code/game/objects/items/machine_wand.dm +++ b/code/game/objects/items/machine_wand.dm @@ -63,14 +63,15 @@ if(controlling_machine_or_bot) return controlling_machine_or_bot.ui_act(action, params, ui, state) -/obj/item/machine_remote/AltClick(mob/user) - . = ..() +/obj/item/machine_remote/click_alt(mob/user) if(moving_bug) //we have a bug in transit, so let's kill it. QDEL_NULL(moving_bug) + return CLICK_ACTION_BLOCKING if(!controlling_machine_or_bot) - return + return CLICK_ACTION_BLOCKING say("Remote control over [controlling_machine_or_bot] stopped.") remove_old_machine() + return CLICK_ACTION_SUCCESS /obj/item/machine_remote/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() diff --git a/code/game/objects/items/paiwire.dm b/code/game/objects/items/paiwire.dm index fa5724ebb53..d590d4e9603 100644 --- a/code/game/objects/items/paiwire.dm +++ b/code/game/objects/items/paiwire.dm @@ -4,15 +4,15 @@ icon = 'icons/obj/stack_objects.dmi' icon_state = "wire1" item_flags = NOBLUDGEON - var/obj/machinery/machine //what machine we're currently hacking. + ///The current machine being hacked by the pAI cable. + var/obj/machinery/hacking_machine /obj/item/pai_cable/Destroy() - machine = null + hacking_machine = null return ..() - /obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) if(!user.transferItemToLoc(src, M)) return user.visible_message(span_notice("[user] inserts [src] into a data port on [M]."), span_notice("You insert [src] into a data port on [M]."), span_hear("You hear the satisfying click of a wire jack fastening into place.")) - machine = M + hacking_machine = M diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index bbbeb86602c..0d9b0909db2 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -66,9 +66,9 @@ open = TRUE update_appearance() -/obj/item/pet_carrier/AltClick(mob/living/user) - if(open || !user.can_perform_action(src)) - return +/obj/item/pet_carrier/click_alt(mob/living/user) + if(open) + return CLICK_ACTION_BLOCKING locked = !locked to_chat(user, span_notice("You flip the lock switch [locked ? "down" : "up"].")) if(locked) @@ -76,6 +76,7 @@ else playsound(user, 'sound/machines/boltsup.ogg', 30, TRUE) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/pet_carrier/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(user.combat_mode || !isliving(interacting_with)) diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index 1dad0a7fba5..659cc38f58b 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -102,16 +102,15 @@ if(pillow_trophy) . += span_notice("Alt-click to remove the tag!") -/obj/item/pillow/AltClick(mob/user) - . = ..() - if(!can_interact(user) || !user.can_hold_items(src)) - return +/obj/item/pillow/click_alt(mob/user) + if(!user.can_hold_items(src)) + return CLICK_ACTION_BLOCKING if(!pillow_trophy) balloon_alert(user, "no tag!") - return + return CLICK_ACTION_BLOCKING balloon_alert(user, "removing tag...") if(!do_after(user, 2 SECONDS, src)) - return + return CLICK_ACTION_BLOCKING if(last_fighter) pillow_trophy.desc = "A pillow tag taken from [last_fighter] after a gruesome pillow fight." user.put_in_hands(pillow_trophy) @@ -119,6 +118,7 @@ balloon_alert(user, "tag removed") playsound(user,'sound/items/poster_ripped.ogg', 50) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/pillow/update_appearance(updates) . = ..() diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index e5100d11c04..f8e38c5aadb 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -282,8 +282,9 @@ create_machine(target, user) -/obj/item/construction/plumbing/AltClick(mob/user) +/obj/item/construction/plumbing/click_alt(mob/user) ui_interact(user) + return CLICK_ACTION_SUCCESS /obj/item/construction/plumbing/proc/mouse_wheeled(mob/source, atom/A, delta_x, delta_y, params) SIGNAL_HANDLER diff --git a/code/game/objects/items/rcd/RWD.dm b/code/game/objects/items/rcd/RWD.dm index a20946e322f..0ee29e87a35 100644 --- a/code/game/objects/items/rcd/RWD.dm +++ b/code/game/objects/items/rcd/RWD.dm @@ -125,8 +125,7 @@ add_cable(user, cable) return TRUE -/obj/item/rwd/AltClick(mob/user) - . = ..() +/obj/item/rwd/click_alt(mob/user) if(!radial_menu) radial_menu = list( "Layer 1" = image(icon = 'icons/hud/radial.dmi', icon_state = "coil-red"), @@ -136,7 +135,7 @@ var/layer_result = show_radial_menu(user, src, radial_menu, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) if(!check_menu(user)) - return + return CLICK_ACTION_BLOCKING switch(layer_result) if("Layer 1") cable_layer = CABLE_LAYER_1 @@ -145,6 +144,7 @@ if("Layer 3") cable_layer = CABLE_LAYER_3 update_appearance(UPDATE_ICON_STATE) + return CLICK_ACTION_SUCCESS /obj/item/rwd/proc/check_menu(mob/living/user) if(!istype(user)) diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index 9cfdce50fe3..847807ee9f4 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -245,13 +245,12 @@ . += "Currently loaded: [selected_reagent ? "[selected_reagent]. [selected_reagent.description]" : "nothing."]" . += span_notice("Alt+Click to change transfer amount. Currently set to [amount_per_transfer_from_this]u.") -/obj/item/reagent_containers/borghypo/AltClick(mob/living/user) - . = ..() -/* SKYRAT REMOVAL START - Changing transfer amounts is now handled by the parent proc in modular files. - if(user.stat == DEAD || user != loc) - return //IF YOU CAN HEAR ME SET MY TRANSFER AMOUNT TO 1 - change_transfer_amount(user) -*/ // SKYRAT REMOVAL END +/* SKYRAT EDIT REMOVAL START - SEE master_files/code/modules/reagents/reagent_containers.dm +/obj/item/reagent_containers/borghypo/click_alt(mob/living/user) + + change_transfer_amount(user) + return CLICK_ACTION_SUCCESS +SKYRAT EDIT REMOVAL END */ /// Default Medborg Hypospray /obj/item/reagent_containers/borghypo/medical diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm index 01541df5a9c..2d91128adb6 100644 --- a/code/game/objects/items/robot/items/storage.dm +++ b/code/game/objects/items/robot/items/storage.dm @@ -50,10 +50,11 @@ stored.attack_self(user) //Alt click drops the stored item. -/obj/item/borg/apparatus/AltClick(mob/living/silicon/robot/user) +/obj/item/borg/apparatus/click_alt(mob/living/silicon/robot/user) if(!stored || !issilicon(user)) - return ..() + return CLICK_ACTION_BLOCKING stored.forceMove(user.drop_location()) + return CLICK_ACTION_SUCCESS /obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, params) if(stored) @@ -244,16 +245,16 @@ bag = mutable_appearance(icon, icon_state = "evidenceobj") // empty bag . += bag -/obj/item/borg/apparatus/organ_storage/AltClick(mob/living/silicon/robot/user) - . = ..() - if(stored) - var/obj/item/organ = stored - user.visible_message(span_notice("[user] dumps [organ] from [src]."), span_notice("You dump [organ] from [src].")) - cut_overlays() - organ.forceMove(get_turf(src)) - else +/obj/item/borg/apparatus/organ_storage/click_alt(mob/living/silicon/robot/user) + if(!stored) to_chat(user, span_notice("[src] is empty.")) - return + return CLICK_ACTION_BLOCKING + + var/obj/item/organ = stored + user.visible_message(span_notice("[user] dumps [organ] from [src]."), span_notice("You dump [organ] from [src].")) + cut_overlays() + organ.forceMove(get_turf(src)) + return CLICK_ACTION_SUCCESS ///Apparatus to allow Engineering/Sabo borgs to manipulate any material sheets. /obj/item/borg/apparatus/sheet_manipulator diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 3d1696cc303..885a97a9329 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -40,7 +40,10 @@ one_use = TRUE /obj/item/borg/upgrade/rename/attack_self(mob/user) - heldname = sanitize_name(tgui_input_text(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN), allow_numbers = TRUE) + var/new_heldname = sanitize_name(tgui_input_text(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN), allow_numbers = TRUE) + if(!new_heldname || !user.is_holding(src)) + return + heldname = new_heldname user.log_message("set \"[heldname]\" as a name in a cyborg reclassification board at [loc_name(user)]", LOG_GAME) /obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R, user = usr) diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 5590bfd3c2f..401ffd46934 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -160,13 +160,12 @@ . = ..() . += span_notice("Alt-click to set your war cry.") -/obj/item/spear/explosive/AltClick(mob/user) - if(user.can_perform_action(src)) - ..() - if(istype(user) && loc == user) - var/input = tgui_input_text(user, "What do you want your war cry to be? You will shout it when you hit someone in melee.", "War Cry", max_length = 50) - if(input) - src.war_cry = input +/obj/item/spear/explosive/click_alt(mob/user) + var/input = tgui_input_text(user, "What do you want your war cry to be? You will shout it when you hit someone in melee.", "War Cry", max_length = 50) + if(input) + war_cry = input + return CLICK_ACTION_SUCCESS + /obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) . = ..() diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 75c35eabb18..4e8a01971ba 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -67,6 +67,7 @@ icon = 'icons/obj/stack_objects.dmi' icon_state = "polycrystal" inhand_icon_state = null + gulag_valid = TRUE singular_name = "bluespace polycrystal" desc = "A stable polycrystal, made of fused-together bluespace crystals. You could probably break one off." mats_per_unit = list(/datum/material/bluespace=SHEET_MATERIAL_AMOUNT) @@ -74,7 +75,6 @@ attack_verb_simple = list("bluespace polybash", "bluespace polybatter", "bluespace polybludgeon", "bluespace polythrash", "bluespace polysmash") novariants = TRUE grind_results = list(/datum/reagent/bluespace = 20) - point_value = 90 merge_type = /obj/item/stack/sheet/bluespace_crystal material_type = /datum/material/bluespace var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 1f33384b393..59c65411805 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -35,7 +35,7 @@ /// Time it takes to assess injuries when looping healing var/assessing_injury_delay = 1 SECONDS -/obj/item/stack/medical/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/stack/medical/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE if(!begin_heal_loop(interacting_with, user)) @@ -419,11 +419,11 @@ return return ..() -/obj/item/stack/medical/mesh/AltClick(mob/living/user) +/obj/item/stack/medical/mesh/click_alt(mob/living/user) if(!is_open) balloon_alert(user, "open it first!") - return - return ..() + return CLICK_ACTION_BLOCKING + return CLICK_ACTION_SUCCESS /obj/item/stack/medical/mesh/attack_hand(mob/user, list/modifiers) if(!is_open && user.get_inactive_held_item() == src) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index d6bd65afe31..1f66b80cf55 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -27,7 +27,6 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ merge_type = /obj/item/stack/sheet/glass grind_results = list(/datum/reagent/silicon = 20) material_type = /datum/material/glass - point_value = 1 tableVariant = /obj/structure/table/glass matter_amount = 4 cost = SHEET_MATERIAL_AMOUNT @@ -159,7 +158,6 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10) - point_value = 12 matter_amount = 6 tableVariant = /obj/structure/table/reinforced/rglass @@ -197,7 +195,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ material_flags = NONE merge_type = /obj/item/stack/sheet/plasmarglass grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10) - point_value = 69 + gulag_valid = TRUE matter_amount = 8 tableVariant = /obj/structure/table/reinforced/plasmarglass diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 0620d82cd9b..1b3d66a7dae 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ sheettype = "diamond" mats_per_unit = list(/datum/material/diamond=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/carbon = 20) - point_value = 75 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/diamond material_type = /datum/material/diamond walltype = /turf/closed/wall/mineral/diamond @@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ sheettype = "uranium" mats_per_unit = list(/datum/material/uranium=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/uranium = 20) - point_value = 60 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/uranium material_type = /datum/material/uranium walltype = /turf/closed/wall/mineral/uranium @@ -157,7 +157,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ max_integrity = 100 mats_per_unit = list(/datum/material/plasma=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/toxin/plasma = 20) - point_value = 60 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/plasma material_type = /datum/material/plasma walltype = /turf/closed/wall/mineral/plasma @@ -192,7 +192,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ sheettype = "gold" mats_per_unit = list(/datum/material/gold=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/gold = 20) - point_value = 60 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/gold material_type = /datum/material/gold walltype = /turf/closed/wall/mineral/gold @@ -219,7 +219,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ sheettype = "silver" mats_per_unit = list(/datum/material/silver=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/silver = 20) - point_value = 60 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/silver material_type = /datum/material/silver tableVariant = /obj/structure/table/optable @@ -245,7 +245,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ sheettype = "bananium" mats_per_unit = list(/datum/material/bananium=SHEET_MATERIAL_AMOUNT) grind_results = list(/datum/reagent/consumable/banana = 20) - point_value = 150 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/bananium material_type = /datum/material/bananium walltype = /turf/closed/wall/mineral/bananium @@ -276,7 +276,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ throw_range = 3 sheettype = "titanium" mats_per_unit = list(/datum/material/titanium=SHEET_MATERIAL_AMOUNT) - point_value = 60 + gulag_valid = TRUE merge_type = /obj/item/stack/sheet/mineral/titanium material_type = /datum/material/titanium walltype = /turf/closed/wall/mineral/titanium @@ -308,7 +308,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ throw_range = 3 sheettype = "plastitanium" mats_per_unit = list(/datum/material/alloy/plastitanium=SHEET_MATERIAL_AMOUNT) - point_value = 135 + gulag_valid = TRUE material_type = /datum/material/alloy/plastitanium merge_type = /obj/item/stack/sheet/mineral/plastitanium material_flags = NONE @@ -482,7 +482,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( singular_name = "metal hydrogen sheet" w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF | INDESTRUCTIBLE - point_value = 300 + gulag_valid = TRUE mats_per_unit = list(/datum/material/metalhydrogen = SHEET_MATERIAL_AMOUNT) material_type = /datum/material/metalhydrogen merge_type = /obj/item/stack/sheet/mineral/metal_hydrogen @@ -497,7 +497,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( inhand_icon_state = "sheet-zaukerite" singular_name = "zaukerite crystal" w_class = WEIGHT_CLASS_NORMAL - point_value = 360 + gulag_valid = TRUE mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/mineral/zaukerite material_type = /datum/material/zaukerite diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4d02057d30a..280e009210c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -150,7 +150,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/iron grind_results = list(/datum/reagent/iron = 20) - point_value = 6 + gulag_valid = TRUE tableVariant = /obj/structure/table material_type = /datum/material/iron matter_amount = 4 @@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20) - point_value = 69 + gulag_valid = TRUE tableVariant = /obj/structure/table/reinforced material_flags = NONE matter_amount = 12 diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 530a3573f7c..8b81953528e 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -14,7 +14,10 @@ novariants = FALSE material_flags = MATERIAL_EFFECTS var/sheettype = null //this is used for girders in the creation of walls/false walls - var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity. + ///If true, this is worth points in the gulag labour stacker + var/gulag_valid = FALSE + ///Set to true if this is vended from a material storage + var/manufactured = FALSE ///What type of wall does this sheet spawn var/walltype /// whether this sheet can be sniffed by the material sniffer @@ -32,11 +35,24 @@ GLOB.sniffable_sheets -= src return ..() +/obj/item/stack/sheet/examine(mob/user) + . = ..() + if (manufactured && gulag_valid) + . += "It has been embossed with a manufacturer's mark of guaranteed quality." + /obj/item/stack/sheet/add(_amount) . = ..() if(sniffable && amount >= 10 && is_station_level(z)) GLOB.sniffable_sheets |= src +/obj/item/stack/sheet/merge(obj/item/stack/sheet/target_stack, limit) + . = ..() + manufactured = manufactured && target_stack.manufactured + +/obj/item/stack/sheet/copy_evidences(obj/item/stack/sheet/from) + . = ..() + manufactured = from.manufactured + /// removing from sniffable handled by the sniffer itself when it checks for targets /** diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index a6bbe3bfe19..dd1b74eb106 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -11,7 +11,7 @@ merge_type = /obj/item/stack/telecrystal novariants = FALSE -/obj/item/stack/telecrystal/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/stack/telecrystal/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(interacting_with != user) //You can't go around smacking people with crystals to find out if they have an uplink or not. return NONE diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 1354b57f16f..49bac7d2d6d 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -36,13 +36,14 @@ //Set layers to these colors, base then ribbon set_greyscale(colors = list(generated_base_color, generated_ribbon_color)) -/obj/item/stack/wrapping_paper/AltClick(mob/user, modifiers) +/obj/item/stack/wrapping_paper/click_alt(mob/user) var/new_base = input(user, "", "Select a base color", color) as color var/new_ribbon = input(user, "", "Select a ribbon color", color) as color - if(!user.can_perform_action(src)) - return + if(!new_base || !new_ribbon) + return CLICK_ACTION_BLOCKING + set_greyscale(colors = list(new_base, new_ribbon)) - return TRUE + return CLICK_ACTION_SUCCESS //preset wrapping paper meant to fill the original color configuration /obj/item/stack/wrapping_paper/xmas diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index d72a57f07f1..cc548be16d2 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -360,23 +360,30 @@ /obj/item/storage/bag/tray/Initialize(mapload) . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY //Plates are required bulky to keep them out of backpacks - atom_storage.set_holdable(list( - /obj/item/clothing/mask/cigarette, - /obj/item/food, - /obj/item/kitchen, - /obj/item/lighter, - /obj/item/organ, - /obj/item/plate, - /obj/item/reagent_containers/condiment, - /obj/item/reagent_containers/cup, - /obj/item/rollingpaper, - /obj/item/storage/box/gum, - /obj/item/storage/box/matches, - /obj/item/storage/fancy, - /obj/item/trash, - )) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools. + atom_storage.set_holdable( + can_hold_list = list( + /obj/item/clothing/mask/cigarette, + /obj/item/food, + /obj/item/kitchen, + /obj/item/lighter, + /obj/item/organ, + /obj/item/plate, + /obj/item/reagent_containers/condiment, + /obj/item/reagent_containers/cup, + /obj/item/rollingpaper, + /obj/item/storage/box/gum, + /obj/item/storage/box/matches, + /obj/item/storage/fancy, + /obj/item/trash, + ), + cant_hold_list = list( + /obj/item/plate/oven_tray, + /obj/item/reagent_containers/cup/soup_pot, + ), + ) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools. atom_storage.insert_preposition = "on" - atom_storage.max_slots = 7 + atom_storage.max_slots = 8 + atom_storage.max_total_storage = 16 /obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) . = ..() diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 451dc82c89c..ebfa73aa2f9 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -839,6 +839,7 @@ inhand_icon_state = "sheath" worn_icon_state = "sheath" w_class = WEIGHT_CLASS_BULKY + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS /obj/item/storage/belt/sabre/Initialize(mapload) . = ..() @@ -854,9 +855,7 @@ if(length(contents)) . += span_notice("Alt-click it to quickly draw the blade.") -/obj/item/storage/belt/sabre/AltClick(mob/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/storage/belt/sabre/click_alt(mob/user) if(length(contents)) var/obj/item/I = contents[1] user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src].")) @@ -864,6 +863,7 @@ update_appearance() else balloon_alert(user, "it's empty!") + return CLICK_ACTION_SUCCESS /obj/item/storage/belt/sabre/update_icon_state() icon_state = initial(inhand_icon_state) diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index de975d9dbfe..359f9c17c7b 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -24,10 +24,7 @@ /obj/item/storage/box/material/Initialize(mapload) . = ..() - atom_storage.allow_big_nesting = TRUE - atom_storage.max_slots = 99 atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC - atom_storage.max_total_storage = 99 /obj/item/storage/box/material/PopulateContents() //less uranium because radioactive var/static/items_inside = list( @@ -51,6 +48,11 @@ /obj/item/stack/sheet/plastic/fifty=1, /obj/item/stack/sheet/runed_metal/fifty=1, ) + //This needs to be done here and not in Initialize() because the stacks get merged and fall out when their weight updates if this is set after PopulateContents() + atom_storage.allow_big_nesting = TRUE + atom_storage.max_slots = 99 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC + atom_storage.max_total_storage = 99 generate_items_inside(items_inside,src) /obj/item/storage/box/debugtools diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 95eb304509f..1e6cd6432ca 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -240,13 +240,13 @@ . = ..() quick_remove_item(/obj/item/clothing/mask/cigarette, user) -/obj/item/storage/fancy/cigarettes/AltClick(mob/user) - . = ..() +/obj/item/storage/fancy/cigarettes/click_alt(mob/user) var/obj/item/lighter = locate(/obj/item/lighter) in contents if(lighter) quick_remove_item(lighter, user) else quick_remove_item(/obj/item/clothing/mask/cigarette, user) + return CLICK_ACTION_SUCCESS /// Removes an item from the packet if there is one /obj/item/storage/fancy/cigarettes/proc/quick_remove_item(obj/item/grabbies, mob/user) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 8e542ebcc44..3a0b15b7d28 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -121,13 +121,11 @@ if(!atom_storage.locked) . += span_notice("Alt-click to [open ? "close":"open"] it.") -/obj/item/storage/lockbox/medal/AltClick(mob/user) - if(!user.can_perform_action(src)) - return +/obj/item/storage/lockbox/medal/click_alt(mob/user) if(!atom_storage.locked) open = (open ? FALSE : TRUE) update_appearance() - ..() + return CLICK_ACTION_SUCCESS /obj/item/storage/lockbox/medal/PopulateContents() new /obj/item/clothing/accessory/medal/gold/captain(src) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 064a749521e..b21deb35581 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -7,12 +7,14 @@ * Emergency Oxygen * Generic */ +/obj/item/tank/internals + interaction_flags_click = FORBID_TELEKINESIS_REACH|NEED_HANDS + /// Allows carbon to toggle internals via AltClick of the equipped tank. -/obj/item/tank/internals/AltClick(mob/user) - ..() - if((loc == user) && user.can_perform_action(src, FORBID_TELEKINESIS_REACH|NEED_HANDS)) - toggle_internals(user) +/obj/item/tank/internals/click_alt(mob/user) + toggle_internals(user) + return CLICK_ACTION_SUCCESS /obj/item/tank/internals/examine(mob/user) . = ..() diff --git a/code/game/objects/items/tcg/tcg_machines.dm b/code/game/objects/items/tcg/tcg_machines.dm index 767592535f7..78854afdd5b 100644 --- a/code/game/objects/items/tcg/tcg_machines.dm +++ b/code/game/objects/items/tcg/tcg_machines.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_EMPTY(tcgcard_machine_radial_choices) /obj/machinery/trading_card_holder/attack_hand_secondary(mob/user) if(isnull(current_summon)) var/card_name = tgui_input_text(user, "Insert card name", "Blank Card Naming", "blank card", MAX_NAME_LEN) - if(isnull(card_name)) + if(isnull(card_name) || !user.can_perform_action(src)) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN current_summon = new /obj/structure/trading_card_summon/blank(locate(x + summon_offset_x, y + summon_offset_y, z)) icon_state = "card_holder_active" diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 31efb0ef273..1bb2ac365df 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -134,7 +134,7 @@ LAZYREMOVE(update_overlays_on_z, sparks) target.cut_overlay(sparks) -/obj/item/weldingtool/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/weldingtool/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ishuman(interacting_with)) return NONE if(user.combat_mode) @@ -163,10 +163,12 @@ if(!proximity) return - if(isOn()) + if(isOn() && ismovable(attacked_atom)) + use(1) + var/turf/location = get_turf(user) + location.hotspot_expose(700, 50, 1) . |= AFTERATTACK_PROCESSED_ITEM if (!QDELETED(attacked_atom) && isliving(attacked_atom)) // can't ignite something that doesn't exist - handle_fuel_and_temps(1, user) var/mob/living/attacked_mob = attacked_atom if(attacked_mob.ignite_mob()) message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(attacked_mob)] on fire with [src] at [AREACOORD(user)]") @@ -180,21 +182,6 @@ return . -/obj/item/weldingtool/attack_qdeleted(atom/attacked_atom, mob/user, proximity) - . = ..() - if(!proximity) - return - - if(isOn()) - handle_fuel_and_temps(1, user) - - if(!QDELETED(attacked_atom) && isliving(attacked_atom)) // can't ignite something that doesn't exist - var/mob/living/attacked_mob = attacked_atom - if(attacked_mob.ignite_mob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(attacked_mob)] on fire with [src] at [AREACOORD(user)].") - user.log_message("set [key_name(attacked_mob)] on fire with [src]", LOG_ATTACK) - - /obj/item/weldingtool/attack_self(mob/user) if(src.reagents.has_reagent(/datum/reagent/toxin/plasma)) message_admins("[ADMIN_LOOKUPFLW(user)] activated a rigged welder at [AREACOORD(user)].") @@ -204,11 +191,6 @@ update_appearance() -/obj/item/weldingtool/proc/handle_fuel_and_temps(used = 0, mob/living/user) - use(used) - var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) - /// Returns the amount of fuel in the welder /obj/item/weldingtool/proc/get_fuel() return reagents.get_reagent_amount(/datum/reagent/fuel) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 8ac1ee98994..6a5b6357a8f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1402,7 +1402,7 @@ //Add changing looks when i feel suicidal about making 20 inhands for these. /obj/item/toy/dummy/attack_self(mob/user) var/new_name = tgui_input_text(usr, "What would you like to name the dummy?", "Doll Name", doll_name, MAX_NAME_LEN) - if(!new_name) + if(!new_name || !user.is_holding(src)) return doll_name = new_name to_chat(user, span_notice("You name the dummy as \"[doll_name]\".")) diff --git a/code/game/objects/items_reskin.dm b/code/game/objects/items_reskin.dm new file mode 100644 index 00000000000..1a7c27e098d --- /dev/null +++ b/code/game/objects/items_reskin.dm @@ -0,0 +1,57 @@ +/// Called when alt clicked and the item has unique reskin options +/obj/item/proc/on_click_alt_reskin(datum/source, mob/user) + SIGNAL_HANDLER + + if(!user.can_perform_action(src, NEED_DEXTERITY)) + return NONE + + if(!(obj_flags & INFINITE_RESKIN) && current_skin) + return NONE + + INVOKE_ASYNC(src, PROC_REF(reskin_obj), user) + return CLICK_ACTION_SUCCESS + + +/** + * Reskins object based on a user's choice + * + * Arguments: + * * M The mob choosing a reskin option + */ +/obj/item/proc/reskin_obj(mob/user) + if(!LAZYLEN(unique_reskin)) + return + + var/list/items = list() + for(var/reskin_option in unique_reskin) + var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) + items += list("[reskin_option]" = item_image) + sort_list(items) + + var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_reskin_menu), user), radius = 38, require_near = TRUE) + if(!pick) + return + if(!unique_reskin[pick]) + return + current_skin = pick + icon_state = unique_reskin[pick] + to_chat(user, "[src] is now skinned as '[pick].'") + SEND_SIGNAL(src, COMSIG_OBJ_RESKIN, user, pick) + + +/** + * Checks if we are allowed to interact with a radial menu for reskins + * + * Arguments: + * * user The mob interacting with the menu + */ +/obj/item/proc/check_reskin_menu(mob/user) + if(QDELETED(src)) + return FALSE + if(!(obj_flags & INFINITE_RESKIN) && current_skin) + return FALSE + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + return TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e8797836bae..bfdd0f71426 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -27,9 +27,6 @@ /// A multiplier to an objecet's force when used against a stucture, vechicle, machine, or robot. var/demolition_mod = 1 - var/current_skin //Has the item been reskinned? - var/list/unique_reskin //List of options to reskin. - /// Custom fire overlay icon, will just use the default overlay if this is null var/custom_fire_overlay /// Particles this obj uses when burning, if any @@ -117,54 +114,6 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) else return null -/obj/proc/updateUsrDialog() - if(!(obj_flags & IN_USE)) - return - - var/is_in_use = FALSE - var/list/nearby = viewers(1, src) - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - is_in_use = TRUE - ui_interact(M) - if(issilicon(usr) || isAdminGhostAI(usr)) - if (!(usr in nearby)) - if (usr.client && usr.machine == src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. - is_in_use = TRUE - ui_interact(usr) - - // check for TK users - - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - if(!(usr in nearby)) - if(usr.client && usr.machine == src) - if(H.dna.check_mutation(/datum/mutation/human/telekinesis)) - is_in_use = TRUE - ui_interact(usr) - if (is_in_use) - obj_flags |= IN_USE - else - obj_flags &= ~IN_USE - -/obj/proc/updateDialog(update_viewers = TRUE,update_ais = TRUE) - // Check that people are actually using the machine. If not, don't update anymore. - if(obj_flags & IN_USE) - var/is_in_use = FALSE - if(update_viewers) - for(var/mob/M in viewers(1, src)) - if ((M.client && M.machine == src)) - is_in_use = TRUE - src.interact(M) - var/ai_in_use = FALSE - if(update_ais) - ai_in_use = AutoUpdateAI(src) - - if(update_viewers && update_ais) //State change is sure only if we check both - if(!ai_in_use && !is_in_use) - obj_flags &= ~IN_USE - - /obj/attack_ghost(mob/user) . = ..() if(.) @@ -172,33 +121,6 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) SEND_SIGNAL(src, COMSIG_ATOM_UI_INTERACT, user) ui_interact(user) -/mob/proc/unset_machine() - SIGNAL_HANDLER - if(!machine) - return - UnregisterSignal(machine, COMSIG_QDELETING) - machine.on_unset_machine(src) - machine = null - -//called when the user unsets the machine. -/atom/movable/proc/on_unset_machine(mob/user) - return - -/mob/proc/set_machine(obj/O) - if(QDELETED(src) || QDELETED(O)) - return - if(machine) - unset_machine() - machine = O - RegisterSignal(O, COMSIG_QDELETING, PROC_REF(unset_machine)) - if(istype(O)) - O.obj_flags |= IN_USE - -/obj/item/proc/updateSelfDialog() - var/mob/M = src.loc - if(istype(M) && M.client && M.machine == src) - src.attack_self(M) - /obj/singularity_pull(S, current_size) ..() if(move_resist == INFINITY) @@ -209,9 +131,6 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /obj/get_dumping_location() return get_turf(src) -/obj/proc/check_uplink_validity() - return 1 - /obj/vv_get_dropdown() . = ..() VV_DROPDOWN_OPTION("", "---") @@ -270,56 +189,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) . += span_notice(desc_controls) if(obj_flags & UNIQUE_RENAME) . += span_notice("Use a pen on it to rename it or change its description.") - if(unique_reskin && (!current_skin || (obj_flags & INFINITE_RESKIN))) - . += span_notice("Alt-click it to reskin it.") -/obj/AltClick(mob/user) - . = ..() - if(unique_reskin && (!current_skin || (obj_flags & INFINITE_RESKIN)) && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - -/** - * Reskins object based on a user's choice - * - * Arguments: - * * M The mob choosing a reskin option - */ -/obj/proc/reskin_obj(mob/user) - if(!LAZYLEN(unique_reskin)) - return - - var/list/items = list() - for(var/reskin_option in unique_reskin) - var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) - items += list("[reskin_option]" = item_image) - sort_list(items) - - var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_reskin_menu), user), radius = 38, require_near = TRUE) - if(!pick) - return - if(!unique_reskin[pick]) - return - current_skin = pick - icon_state = unique_reskin[pick] - to_chat(user, "[src] is now skinned as '[pick].'") - SEND_SIGNAL(src, COMSIG_OBJ_RESKIN, user, pick) - -/** - * Checks if we are allowed to interact with a radial menu for reskins - * - * Arguments: - * * user The mob interacting with the menu - */ -/obj/proc/check_reskin_menu(mob/user) - if(QDELETED(src)) - return FALSE - if(!(obj_flags & INFINITE_RESKIN) && current_skin) - return FALSE - if(!istype(user)) - return FALSE - if(user.incapacitated()) - return FALSE - return TRUE /obj/analyzer_act(mob/living/user, obj/item/analyzer/tool) if(atmos_scan(user=user, target=src, silent=FALSE)) @@ -331,6 +201,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) // Should move all contained objects to it's location. /obj/proc/dump_contents() + SHOULD_CALL_PARENT(FALSE) CRASH("Unimplemented.") /obj/handle_ricochet(obj/projectile/P) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 1654cecff45..77759c9e309 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -24,37 +24,39 @@ /obj/structure/bed/nest/wrench_act_secondary(mob/living/user, obj/item/weapon) return ITEM_INTERACT_BLOCKING -/obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) - if(has_buckled_mobs()) - for(var/buck in buckled_mobs) //breaking a nest releases all the buckled mobs, because the nest isn't holding them down anymore - var/mob/living/M = buck - if(user.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel)) - unbuckle_mob(M) - add_fingerprint(user) - return +/obj/structure/bed/nest/user_unbuckle_mob(mob/living/captive, mob/living/hero) + if(!length(buckled_mobs)) + return - if(M != user) - M.visible_message(span_notice("[user.name] pulls [M.name] free from the sticky nest!"),\ - span_notice("[user.name] pulls you free from the gelatinous resin."),\ - span_hear("You hear squelching...")) - else - M.visible_message(span_warning("[M.name] struggles to break free from the gelatinous resin!"),\ - span_notice("You struggle to break free from the gelatinous resin... (Stay still for about a minute and a half.)"),\ - span_hear("You hear squelching...")) - if(!do_after(M, 100 SECONDS, target = src)) - if(M?.buckled) - to_chat(M, span_warning("You fail to unbuckle yourself!")) - return - if(!M.buckled) - return - M.visible_message(span_warning("[M.name] breaks free from the gelatinous resin!"),\ - span_notice("You break free from the gelatinous resin!"),\ - span_hear("You hear squelching...")) + if(hero.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel)) + unbuckle_mob(captive) + add_fingerprint(hero) + return + if(captive != hero) + captive.visible_message(span_notice("[hero.name] pulls [captive.name] free from the sticky nest!"), + span_notice("[hero.name] pulls you free from the gelatinous resin."), + span_hear("You hear squelching...")) + unbuckle_mob(captive) + add_fingerprint(hero) + return + + captive.visible_message(span_warning("[captive.name] struggles to break free from the gelatinous resin!"), + span_notice("You struggle to break free from the gelatinous resin... (Stay still for about a minute and a half.)"), + span_hear("You hear squelching...")) - unbuckle_mob(M) - add_fingerprint(user) + if(!do_after(captive, 100 SECONDS, target = src, hidden = TRUE)) + if(captive.buckled) + to_chat(captive, span_warning("You fail to unbuckle yourself!")) + return + + captive.visible_message(span_warning("[captive.name] breaks free from the gelatinous resin!"), + span_notice("You break free from the gelatinous resin!"), + span_hear("You hear squelching...")) + + unbuckle_mob(captive) + add_fingerprint(hero) /obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated() || M.buckled ) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 5c5fac60eaa..0e3845d2efa 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -110,17 +110,14 @@ if(!isnull(foldable_type)) . += span_notice("You can fold it up with a Right-click.") -/obj/structure/bed/medical/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - +/obj/structure/bed/medical/click_alt(mob/user) if(has_buckled_mobs() && (user in buckled_mobs)) - return + return CLICK_ACTION_BLOCKING anchored = !anchored balloon_alert(user, "brakes [anchored ? "applied" : "released"]") update_appearance() + return CLICK_ACTION_SUCCESS /obj/structure/bed/medical/post_buckle_mob(mob/living/buckled) . = ..() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 92c955977e7..6e218c56b82 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -57,8 +57,6 @@ return . = ..() -/obj/structure/chair/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation ///allows each chair to request the electrified_buckle component with overlays that dont look ridiculous /obj/structure/chair/proc/electrify_self(obj/item/assembly/shock_kit/input_shock_kit, mob/user, list/overlays_from_child_procs) @@ -447,6 +445,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/bronze buildstackamount = 1 item_chair = null + interaction_flags_click = NEED_DEXTERITY + /// Total rotations made var/turns = 0 /obj/structure/chair/bronze/Initialize(mapload) @@ -464,10 +464,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) if(turns >= 8) STOP_PROCESSING(SSfastprocess, src) -/obj/structure/chair/bronze/AltClick(mob/user) +/obj/structure/chair/bronze/click_alt(mob/user) turns = 0 - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return if(!(datum_flags & DF_ISPROCESSING)) user.visible_message(span_notice("[user] spins [src] around, and the last vestiges of Ratvarian technology keeps it spinning FOREVER."), \ span_notice("Automated spinny chairs. The pinnacle of ancient Ratvarian technology.")) @@ -476,6 +474,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) user.visible_message(span_notice("[user] stops [src]'s uncontrollable spinning."), \ span_notice("You grab [src] and stop its wild spinning.")) STOP_PROCESSING(SSfastprocess, src) + return CLICK_ACTION_SUCCESS /obj/structure/chair/mime name = "invisible chair" diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 108ca3fe9b8..8b4fef65293 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -20,6 +20,7 @@ LINEN BINS w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE dying_key = DYE_REGISTRY_BEDSHEET + interaction_flags_click = NEED_DEXTERITY dog_fashion = /datum/dog_fashion/head/ghost /// Custom nouns to act as the subject of dreams @@ -133,11 +134,9 @@ LINEN BINS else return ..() -/obj/item/bedsheet/AltClick(mob/living/user) - // double check the canUseTopic args to make sure it's correct - if(!istype(user) || !user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/bedsheet/click_alt(mob/living/user) dir = REVERSE_DIR(dir) + return CLICK_ACTION_SUCCESS /obj/item/bedsheet/blue icon_state = "sheetblue" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 4a201cba5b8..acbd7bfa395 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -580,7 +580,11 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) else return open(user) -/obj/structure/closet/atom_deconstruct(disassembled = TRUE) +/obj/structure/closet/handle_deconstruct(disassembled) + dump_contents() + if(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION) + return + if(ispath(material_drop) && material_drop_amount) new material_drop(loc, material_drop_amount) if (secure) @@ -592,7 +596,6 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) electronics.accesses = req_access if(card_reader_installed) new /obj/item/stock_parts/card_reader(drop_location()) - dump_contents() /obj/structure/closet/atom_break(damage_flag) . = ..() diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index ef9f650e42a..6114a20158c 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -7,19 +7,17 @@ density = FALSE can_buckle = 1 -/obj/structure/sacrificealtar/AltClick(mob/living/user) - ..() - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/structure/sacrificealtar/click_alt(mob/living/user) if(!has_buckled_mobs()) - return + return CLICK_ACTION_BLOCKING var/mob/living/L = locate() in buckled_mobs if(!L) - return + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("Invoking the sacred ritual, you sacrifice [L].")) L.investigate_log("has been sacrificially gibbed on an altar.", INVESTIGATE_DEATHS) L.gib(DROP_ALL_REMAINS) message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].") + return CLICK_ACTION_SUCCESS /obj/structure/healingfountain name = "healing fountain" diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index e9f9eb5d11e..cace64a7101 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -91,9 +91,9 @@ qdel(src) return T -/obj/structure/falsewall/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/structure/falsewall/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!opening || !tool.tool_behaviour) - return ..() + return NONE to_chat(user, span_warning("You must wait until the door has stopped moving!")) return ITEM_INTERACT_BLOCKING diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 039735dc36f..7f3e4195810 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -143,7 +143,7 @@ span_notice("You struggle to break free from [src], exacerbating your wounds! (Stay still for two minutes.)"),\ span_hear("You hear a wet squishing noise..")) buckled_mob.adjustBruteLoss(30) - if(!do_after(buckled_mob, 2 MINUTES, target = src)) + if(!do_after(buckled_mob, 2 MINUTES, target = src, hidden = TRUE)) if(buckled_mob?.buckled) to_chat(buckled_mob, span_warning("You fail to free yourself!")) return diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index ed6602cb513..7ef40423e0d 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -167,14 +167,12 @@ playsound(src, 'sound/machines/click.ogg', 10, TRUE) -/obj/item/plunger/AltClick(mob/user) - if(!istype(user) || !user.can_perform_action(src)) - return - +/obj/item/plunger/click_alt(mob/user) var/new_layer = tgui_input_list(user, "Select a layer", "Layer", GLOB.plumbing_layers) - if(isnull(new_layer)) - return + if(isnull(new_layer) || !user.can_perform_action(src)) + return CLICK_ACTION_BLOCKING target_layer = GLOB.plumbing_layers[new_layer] + return CLICK_ACTION_SUCCESS ///A faster reinforced plunger /obj/item/plunger/reinforced diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm new file mode 100644 index 00000000000..aa13a1621d8 --- /dev/null +++ b/code/game/objects/structures/lavaland/gulag_vent.dm @@ -0,0 +1,42 @@ +/** + * A boulder-spawning structure superficially similar to an ore vent which doesnt share any of its behaviour + * Prisoners can haul boulders up out of it in case the actual mining area is totally spent + */ +/obj/structure/gulag_vent + name = "work pit" + desc = "A timeworn shaft, almost totally mined out. With a bit of effort you might be able to haul something up." + icon = 'icons/obj/mining_zones/terrain.dmi' + icon_state = "ore_vent_active" + move_resist = MOVE_FORCE_EXTREMELY_STRONG + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //This thing will take a beating. + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_REQUIRES_DEXTERITY + anchored = TRUE + density = TRUE + /// What kind of rock we got in there? + var/spawned_boulder = /obj/item/boulder/gulag + /// Prevents multiple people from hauling at a time + var/occupied = FALSE + +/obj/structure/gulag_vent/ice + icon_state = "ore_vent_ice_active" + +/obj/structure/gulag_vent/interact(mob/user) + . = ..() + if (!isliving(user)) + return + if (occupied) + balloon_alert(user, "occupied!") + return + var/mob/living/living_user = user + occupied = TRUE + living_user.balloon_alert_to_viewers("hauling...") + var/succeeded = do_after(living_user, 8 SECONDS, src) + occupied = FALSE + if (!succeeded) + return + living_user.mind?.adjust_experience(/datum/skill/fitness, 10) + living_user.apply_status_effect(/datum/status_effect/exercised) + new spawned_boulder(get_turf(living_user)) + living_user.visible_message(span_notice("[living_user] hauls a boulder out of [src].")) + living_user.apply_damage(120, STAMINA) + playsound(src, 'sound/weapons/genhit.ogg', vol = 50, vary = TRUE) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index a1deed332ab..59247b768a0 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -170,6 +170,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an icon_state = "morgue1" base_icon_state = "morgue" dir = EAST + interaction_flags_click = ALLOW_SILICON_REACH|ALLOW_RESTING connected = /obj/structure/tray/m_tray @@ -298,12 +299,10 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an . = ..() . += span_notice("The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it.") -/obj/structure/bodycontainer/morgue/AltClick(mob/user) - ..() - if(!user.can_perform_action(src, (ALLOW_SILICON_REACH|ALLOW_RESTING))) - return +/obj/structure/bodycontainer/morgue/click_alt(mob/user) beeper = !beeper to_chat(user, span_notice("You turn the speaker function [beeper ? "on" : "off"].")) + return CLICK_ACTION_SUCCESS /obj/structure/bodycontainer/morgue/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 95cf4fc58e5..2651684e39b 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -88,8 +88,6 @@ to_chat(user, span_warning("[src] is already in good condition!")) return -/obj/structure/railing/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) . = ..() diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 0d6799b0583..0700f19818a 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -79,10 +79,10 @@ P.decayedRange = max(P.decayedRange--, 0) return BULLET_ACT_FORCE_PIERCE -/obj/structure/reflector/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/structure/reflector/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(admin && tool.tool_behaviour) return ITEM_INTERACT_BLOCKING - return ..() + return NONE /obj/structure/reflector/screwdriver_act(mob/living/user, obj/item/tool) can_rotate = !can_rotate diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 298c6fd2294..c37be03652c 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -373,8 +373,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) deconstruct() return TRUE -/obj/structure/showerframe/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/effect/mist name = "mist" diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index f1c4516316d..29c93fcda25 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -862,12 +862,12 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/structure/rack/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. || (tool.item_flags & ABSTRACT) || user.combat_mode) - return . +/obj/structure/rack/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if((tool.item_flags & ABSTRACT) || user.combat_mode) + return NONE if(user.transferItemToLoc(tool, drop_location(), silent = FALSE)) return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/structure/rack/attack_paw(mob/living/user, list/modifiers) attack_hand(user, modifiers) diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index fd0d8bb0c8f..c2f4d3a18ae 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -20,6 +20,7 @@ can_buckle = TRUE buckle_lying = 0 max_integrity = 200 + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|ALLOW_RESTING ///Is the machine moving? Setting this to FALSE will automatically call stop_moving() var/moving = FALSE ///The distance the machine is allowed to roam from its starting point @@ -174,21 +175,19 @@ attached_item.throw_at(destination, 4, 1) on_attached_delete() -/obj/structure/training_machine/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|ALLOW_RESTING)) - return +/obj/structure/training_machine/click_alt(mob/user) if(has_buckled_mobs()) user_unbuckle_mob(buckled_mobs[1], user) - return + return CLICK_ACTION_SUCCESS if (!attached_item) - return + return NONE if (obj_flags & EMAGGED) to_chat(user, span_warning("The toolbox is somehow stuck on! It won't budge!")) - return + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("You remove \the [attached_item] from the training device.")) remove_attached_item(user) playsound(src, SFX_RUSTLE, 50, TRUE) + return CLICK_ACTION_SUCCESS /** * Toggle the machine's movement @@ -396,12 +395,10 @@ if (!.) check_hit(hit_atom) -/obj/item/training_toolbox/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return +/obj/item/training_toolbox/click_alt(mob/user) to_chat(user, span_notice("You push the 'Lap' button on the toolbox's display.")) lap_hits = initial(lap_hits) + return CLICK_ACTION_SUCCESS /obj/item/training_toolbox/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm index 44952801ec7..e6b0f30225c 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm @@ -51,8 +51,6 @@ qdel(src) return TRUE -/obj/structure/c_transit_tube/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation // transit tube station /obj/structure/c_transit_tube/station diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 0a56c6add69..3437e2a5ae0 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -327,8 +327,6 @@ qdel(src) -/obj/structure/windoor_assembly/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation //Flips the windoor assembly, determines whather the door opens to the left or the right /obj/structure/windoor_assembly/verb/flip() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 2acac966f23..818e3c43499 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -188,11 +188,11 @@ return return ..() -/obj/structure/window/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/structure/window/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!can_be_reached(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // Guess you get to hit it add_fingerprint(user) - return ..() + return NONE /obj/structure/window/welder_act(mob/living/user, obj/item/tool) if(atom_integrity >= max_integrity) @@ -277,8 +277,6 @@ add_fingerprint(user) return ..() -/obj/structure/window/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/window/set_anchored(anchorvalue) ..() diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 1253d156a2c..60462cafbd1 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -96,6 +96,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/list/old_baseturfs = baseturfs var/old_type = type + var/datum/weakref/old_ref = weak_reference + weak_reference = null var/list/post_change_callbacks = list() SEND_SIGNAL(src, COMSIG_TURF_CHANGE, path, new_baseturfs, flags, post_change_callbacks) @@ -142,6 +144,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( lattice_underneath = old_lattice_underneath + new_turf.weak_reference = old_ref + if(SSlighting.initialized) // Space tiles should never have lighting objects if(!space_lit) diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 974042ce7c8..5bcd8a6a4a8 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -177,9 +177,8 @@ ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return TRUE -/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - SHOULD_CALL_PARENT(FALSE) - return NONE // Fuck you +/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return user.combat_mode ? ITEM_INTERACT_SKIP_TO_ATTACK : ITEM_INTERACT_BLOCKING // Fuck you //reinforced plating deconstruction states #define PLATE_INTACT 0 diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 4786e0ad7c1..d697537c6df 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -51,10 +51,13 @@ return edit_emitter(user) -/obj/effect/sound_emitter/AltClick(mob/user) - if(check_rights_for(user.client, R_SOUND)) - activate(user) - to_chat(user, span_notice("Sound emitter activated."), confidential = TRUE) +/obj/effect/sound_emitter/click_alt(mob/user) + if(!check_rights_for(user.client, R_SOUND)) + return CLICK_ACTION_BLOCKING + + activate(user) + to_chat(user, span_notice("Sound emitter activated."), confidential = TRUE) + return CLICK_ACTION_SUCCESS /obj/effect/sound_emitter/proc/edit_emitter(mob/user) var/dat = "" diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index 07e8dad2aa6..2fb5d526045 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -48,7 +48,7 @@ icon_state = "gizmo_scan" to_chat(user, span_notice("You switch the device to [mode == GIZMO_SCAN? "SCAN": "MARK"] MODE")) -/obj/item/abductor/gizmo/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/abductor/gizmo/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ScientistCheck(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // So you slap them with it if(!console) @@ -110,7 +110,7 @@ icon_state = "silencer" inhand_icon_state = "gizmo" -/obj/item/abductor/silencer/interact_with_atom(atom/interacting_with, mob/living/user) +/obj/item/abductor/silencer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!AbductorCheck(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // So you slap them with it @@ -285,8 +285,8 @@
    Congratulations! You are now trained for invasive xenobiology research!"} -/obj/item/paper/guides/antag/abductor/AltClick() - return //otherwise it would fold into a paperplane. +/obj/item/paper/guides/antag/abductor/click_alt() + return CLICK_ACTION_BLOCKING //otherwise it would fold into a paperplane. /obj/item/melee/baton/abductor name = "advanced baton" diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm index af4350427b5..3d791dbce44 100644 --- a/code/modules/antagonists/cult/rune_spawn_action.dm +++ b/code/modules/antagonists/cult/rune_spawn_action.dm @@ -42,7 +42,7 @@ var/chosen_keyword if(initial(rune_type.req_keyword)) chosen_keyword = tgui_input_text(owner, "Enter a keyword for the new rune.", "Words of Power", max_length = MAX_NAME_LEN) - if(!chosen_keyword) + if(!chosen_keyword || !turf_check(T)) return //the outer ring is always the same across all runes var/obj/effect/temp_visual/cult/rune_spawn/R1 = new(T, scribe_time, rune_color) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index aa979ff7814..cc4a80d980f 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -491,7 +491,7 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated() || !actual_selected_rune) + if(!Adjacent(user) || QDELETED(src) || user.incapacitated() || !actual_selected_rune) fail_invoke() return diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index a4758eb9e11..f050528bd3b 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -569,10 +569,12 @@ current_canvas = null update_appearance() -/obj/structure/sign/painting/AltClick(mob/user) - . = ..() - if(current_canvas?.can_select_frame(user)) - INVOKE_ASYNC(current_canvas, TYPE_PROC_REF(/obj/item/canvas, select_new_frame), user) +/obj/structure/sign/painting/click_alt(mob/user) + if(!current_canvas?.can_select_frame(user)) + return CLICK_ACTION_BLOCKING + + INVOKE_ASYNC(current_canvas, TYPE_PROC_REF(/obj/item/canvas, select_new_frame), user) + return CLICK_ACTION_SUCCESS /obj/structure/sign/painting/proc/frame_canvas(mob/user, obj/item/canvas/new_canvas) if(!(new_canvas.type in accepted_canvas_types)) diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 428bb5d8e06..8ed46a5bf81 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -44,8 +44,6 @@ return return ..() -/obj/structure/statue/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/statue/atom_deconstruct(disassembled = TRUE) var/amount_mod = disassembled ? 0 : -2 diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 23c329894e7..28ab16f63d7 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -37,16 +37,14 @@ update_appearance() return secured -/obj/item/assembly/health/AltClick(mob/living/user) - if(!can_interact(user)) - return - +/obj/item/assembly/health/click_alt(mob/living/user) if(alarm_health == HEALTH_THRESHOLD_CRIT) alarm_health = HEALTH_THRESHOLD_DEAD to_chat(user, span_notice("You toggle [src] to \"detect death\" mode.")) else alarm_health = HEALTH_THRESHOLD_CRIT to_chat(user, span_notice("You toggle [src] to \"detect critical state\" mode.")) + return CLICK_ACTION_SUCCESS /obj/item/assembly/health/process() //not ready yet diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 70f116b3e3e..5f50618e77d 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -141,8 +141,6 @@ return ..() -/obj/item/assembly_holder/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/item/assembly_holder/screwdriver_act(mob/user, obj/item/tool) if(..()) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index b5c847a78ab..8dd4573fcfd 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -35,8 +35,6 @@ buffer_turf = null return ..() -/obj/item/assembly/infra/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/item/assembly/infra/examine(mob/user) . = ..() diff --git a/code/modules/asset_cache/assets/icon_ref_map.dm b/code/modules/asset_cache/assets/icon_ref_map.dm new file mode 100644 index 00000000000..2f7f8463099 --- /dev/null +++ b/code/modules/asset_cache/assets/icon_ref_map.dm @@ -0,0 +1,28 @@ +/// Maps icon names to ref values +/datum/asset/json/icon_ref_map + name = "icon_ref_map" + early = TRUE + +/datum/asset/json/icon_ref_map/generate() + var/list/data = list() //"icons/obj/drinks.dmi" => "[0xc000020]" + + //var/start = "0xc000000" + var/value = 0 + + while(TRUE) + value += 1 + var/ref = "\[0xc[num2text(value,6,16)]\]" + var/mystery_meat = locate(ref) + + if(isicon(mystery_meat)) + if(!isfile(mystery_meat)) // Ignore the runtime icons for now + continue + var/path = get_icon_dmi_path(mystery_meat) //Try to get the icon path + if(path) + data[path] = ref + else if(mystery_meat) + continue; //Some other non-icon resource, ogg/json/whatever + else //Out of resources end this, could also try to end this earlier as soon as runtime generated icons appear but eh + break; + + return data diff --git a/code/modules/asset_cache/transports/asset_transport.dm b/code/modules/asset_cache/transports/asset_transport.dm index 19e40fb4884..3dbcc301843 100644 --- a/code/modules/asset_cache/transports/asset_transport.dm +++ b/code/modules/asset_cache/transports/asset_transport.dm @@ -82,11 +82,15 @@ /// asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum. /// Returns TRUE if any assets were sent. /datum/asset_transport/proc/send_assets(client/client, list/asset_list) +#if defined(UNIT_TESTS) + return +#endif + if (!istype(client)) if (ismob(client)) - var/mob/M = client - if (M.client) - client = M.client + var/mob/our_mob = client + if (our_mob.client) + client = our_mob.client else //no stacktrace because this will mainly happen because the client went away return else diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index d8d0ed3b47e..d152cf09e71 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -607,11 +607,6 @@ animate(our_client, pixel_x = 0, pixel_y = 0, time = 0.05 SECONDS) our_client.move_delay = world.time + 0.05 SECONDS -/obj/machinery/atmospherics/AltClick(mob/living/L) - if(vent_movement & VENTCRAWL_ALLOWED && istype(L)) - L.handle_ventcrawl(src) - return - return ..() /** * Getter of a list of pipenets diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index c06863ba092..fe6f9423b43 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -38,13 +38,15 @@ Passive gate is similar to the regular pump except: update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/passive_gate/AltClick(mob/user) - if(can_interact(user)) - target_pressure = MAX_OUTPUT_PRESSURE - investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "pressure output set to [target_pressure] kPa") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/passive_gate/click_alt(mob/user) + if(target_pressure == MAX_OUTPUT_PRESSURE) + return CLICK_ACTION_BLOCKING + + target_pressure = MAX_OUTPUT_PRESSURE + investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "pressure output set to [target_pressure] kPa") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/passive_gate/update_icon_nopipes() cut_overlays() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index 93192073275..c3313322135 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -30,13 +30,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/pressure_valve/AltClick(mob/user) - if(can_interact(user)) - target_pressure = MAX_OUTPUT_PRESSURE - investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "target pressure set to [target_pressure] kPa") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/pressure_valve/click_alt(mob/user) + if(target_pressure == MAX_OUTPUT_PRESSURE) + return CLICK_ACTION_BLOCKING + + target_pressure = MAX_OUTPUT_PRESSURE + investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "target pressure set to [target_pressure] kPa") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/pressure_valve/update_icon_nopipes() if(on && is_operational && is_gas_flowing) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 3c1ba634cae..035f3a0f996 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -43,13 +43,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/pump/AltClick(mob/user) - if(can_interact(user)) - target_pressure = MAX_OUTPUT_PRESSURE - investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "pressure output set to [target_pressure] kPa") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/pump/click_alt(mob/user) + if(target_pressure == MAX_OUTPUT_PRESSURE) + return CLICK_ACTION_BLOCKING + + target_pressure = MAX_OUTPUT_PRESSURE + investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "pressure output set to [target_pressure] kPa") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/pump/update_icon_nopipes() icon_state = (on && is_operational) ? "pump_on-[set_overlay_offset(piping_layer)]" : "pump_off-[set_overlay_offset(piping_layer)]" diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index bbe788bac53..d1202dbec94 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -35,13 +35,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/temperature_gate/AltClick(mob/user) - if(can_interact(user)) - target_temperature = max_temperature - investigate_log("was set to [target_temperature] K by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "target temperature set to [target_temperature] K") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/temperature_gate/click_alt(mob/user) + if(target_temperature == max_temperature) + return CLICK_ACTION_BLOCKING + + target_temperature = max_temperature + investigate_log("was set to [target_temperature] K by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "target temperature set to [target_temperature] K") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/temperature_gate/examine(mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index 0fdb5aca6a3..2615b964ed8 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -30,13 +30,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/temperature_pump/AltClick(mob/user) - if(can_interact(user) && !(heat_transfer_rate == max_heat_transfer_rate)) - heat_transfer_rate = max_heat_transfer_rate - investigate_log("was set to [heat_transfer_rate]% by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "transfer rate set to [heat_transfer_rate]%") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/temperature_pump/click_alt(mob/user) + if(heat_transfer_rate == max_heat_transfer_rate) + return CLICK_ACTION_BLOCKING + + heat_transfer_rate = max_heat_transfer_rate + investigate_log("was set to [heat_transfer_rate]% by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "transfer rate set to [heat_transfer_rate]%") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/temperature_pump/update_icon_nopipes() icon_state = "tpump_[on && is_operational ? "on" : "off"]-[set_overlay_offset(piping_layer)]" diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 139cbe71b36..41dc549b858 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -41,13 +41,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/volume_pump/AltClick(mob/user) - if(can_interact(user)) - transfer_rate = MAX_TRANSFER_RATE - investigate_log("was set to [transfer_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "volume output set to [transfer_rate] L/s") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/binary/volume_pump/click_alt(mob/user) + if(transfer_rate == MAX_TRANSFER_RATE) + return CLICK_ACTION_BLOCKING + + transfer_rate = MAX_TRANSFER_RATE + investigate_log("was set to [transfer_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "volume output set to [transfer_rate] L/s") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/binary/volume_pump/update_icon_nopipes() icon_state = on && is_operational ? "volpump_on-[set_overlay_offset(piping_layer)]" : "volpump_off-[set_overlay_offset(piping_layer)]" diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 0ab8427c0ae..56ee3c6039d 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -187,14 +187,12 @@ return return ..() -/obj/machinery/electrolyzer/AltClick(mob/user) - . = ..() +/obj/machinery/electrolyzer/click_alt(mob/user) if(panel_open) balloon_alert(user, "close panel!") - return - if(!can_interact(user)) - return + return CLICK_ACTION_BLOCKING toggle_power(user) + return CLICK_ACTION_SUCCESS /obj/machinery/electrolyzer/proc/toggle_power(mob/user) if(!anchored && !cell) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 1727d4877b5..c6b4bd43be4 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -32,13 +32,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/trinary/filter/AltClick(mob/user) - if(can_interact(user)) - transfer_rate = MAX_TRANSFER_RATE - investigate_log("was set to [transfer_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "volume output set to [transfer_rate] L/s") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/trinary/filter/click_alt(mob/user) + if(transfer_rate == MAX_TRANSFER_RATE) + return CLICK_ACTION_BLOCKING + + transfer_rate = MAX_TRANSFER_RATE + investigate_log("was set to [transfer_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "volume output set to [transfer_rate] L/s") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/trinary/filter/update_overlays() . = ..() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 862fbc65c89..f832adcb4ea 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -35,13 +35,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/trinary/mixer/AltClick(mob/user) - if(can_interact(user)) - target_pressure = MAX_OUTPUT_PRESSURE - investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "pressure output on set to [target_pressure] kPa") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/trinary/mixer/click_alt(mob/user) + if(target_pressure == MAX_OUTPUT_PRESSURE) + return CLICK_ACTION_BLOCKING + + target_pressure = MAX_OUTPUT_PRESSURE + investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "pressure output on set to [target_pressure] kPa") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/trinary/mixer/update_overlays() . = ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 71610f05f40..ac88174dbc4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -645,14 +645,13 @@ balloon_alert(user, "turned [on ? "on" : "off"]") return ..() -/obj/machinery/cryo_cell/AltClick(mob/user) - if(can_interact(user)) - if(state_open) - close_machine() - else - open_machine() - balloon_alert(user, "door [state_open ? "opened" : "closed"]") - return ..() +/obj/machinery/cryo_cell/click_alt(mob/user) + if(state_open) + close_machine() + else + open_machine() + balloon_alert(user, "door [state_open ? "opened" : "closed"]") + return CLICK_ACTION_SUCCESS /obj/machinery/cryo_cell/get_remote_view_fullscreens(mob/user) user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 4161a30ed7d..771301b60e4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -62,13 +62,15 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/unary/outlet_injector/AltClick(mob/user) - if(can_interact(user)) - volume_rate = MAX_TRANSFER_RATE - investigate_log("was set to [volume_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) - balloon_alert(user, "volume output set to [volume_rate] L/s") - update_appearance() - return ..() +/obj/machinery/atmospherics/components/unary/outlet_injector/click_alt(mob/user) + if(volume_rate == MAX_TRANSFER_RATE) + return CLICK_ACTION_BLOCKING + + volume_rate = MAX_TRANSFER_RATE + investigate_log("was set to [volume_rate] L/s by [key_name(user)]", INVESTIGATE_ATMOS) + balloon_alert(user, "volume output set to [volume_rate] L/s") + update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/unary/outlet_injector/update_icon_nopipes() cut_overlays() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index 17f6c761f12..4ac0e959e40 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -12,6 +12,8 @@ pipe_state = "pvent" has_cap_visuals = TRUE vent_movement = VENTCRAWL_ALLOWED | VENTCRAWL_CAN_SEE | VENTCRAWL_ENTRANCE_ALLOWED + interaction_flags_click = NEED_VENTCRAWL + /obj/machinery/atmospherics/components/unary/passive_vent/update_icon_nopipes() cut_overlays() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 0af962ac0f3..01def672bf7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -144,12 +144,10 @@ . += span_notice("Heat capacity at [heat_capacity] Joules per Kelvin.") . += span_notice("Temperature range [min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C).") -/obj/machinery/atmospherics/components/unary/thermomachine/AltClick(mob/living/user) +/obj/machinery/atmospherics/components/unary/thermomachine/click_alt(mob/living/user) if(panel_open) balloon_alert(user, "close panel!") - return - if(!can_interact(user)) - return + return CLICK_ACTION_BLOCKING if(target_temperature == T20C) target_temperature = max_temperature @@ -161,6 +159,7 @@ investigate_log("was set to [target_temperature] K by [key_name(user)]", INVESTIGATE_ATMOS) balloon_alert(user, "temperature reset to [target_temperature] K") update_appearance() + return CLICK_ACTION_SUCCESS /// Performs heat calculation for the freezer. /// We just equalize the gasmix with an object at temp = var/target_temperature and heat cap = var/heat_capacity diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm index 4d876fd4586..c8bfd8628e9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm @@ -17,6 +17,12 @@ ..() update_appearance() + +/obj/machinery/atmospherics/components/unary/click_alt(mob/living/beno) + beno.handle_ventcrawl(src) + return CLICK_ACTION_SUCCESS + + /obj/machinery/atmospherics/components/unary/proc/assign_uid_vents() uid = num2text(gl_uid++) return uid diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 2220f640541..02f0d203544 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -18,6 +18,7 @@ vent_movement = VENTCRAWL_ALLOWED | VENTCRAWL_CAN_SEE | VENTCRAWL_ENTRANCE_ALLOWED // vents are more complex machinery and so are less resistant to damage max_integrity = 100 + interaction_flags_click = NEED_VENTCRAWL ///Direction of pumping the gas (ATMOS_DIRECTION_RELEASING or ATMOS_DIRECTION_SIPHONING) var/pump_direction = ATMOS_DIRECTION_RELEASING diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 54704dcb5b6..0871053106f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -15,6 +15,7 @@ has_cap_visuals = TRUE vent_movement = VENTCRAWL_ALLOWED | VENTCRAWL_CAN_SEE | VENTCRAWL_ENTRANCE_ALLOWED processing_flags = NONE + interaction_flags_click = NEED_VENTCRAWL ///The mode of the scrubber (ATMOS_DIRECTION_SCRUBBING or ATMOS_DIRECTION_SIPHONING) var/scrubbing = ATMOS_DIRECTION_SCRUBBING diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 3d4e2b02e1f..3713958fbaa 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -8,6 +8,7 @@ armor_type = /datum/armor/machinery_portable_atmospherics anchored = FALSE layer = ABOVE_OBJ_LAYER + interaction_flags_click = NEED_DEXTERITY ///Stores the gas mixture of the portable component. Don't access this directly, use return_air() so you support the temporary processing it provides var/datum/gas_mixture/air_contents @@ -162,14 +163,12 @@ update_appearance() return TRUE -/obj/machinery/portable_atmospherics/AltClick(mob/living/user) - . = ..() - if(!istype(user) || !user.can_perform_action(src, NEED_DEXTERITY) || !can_interact(user)) - return +/obj/machinery/portable_atmospherics/click_alt(mob/living/user) if(!holding) - return + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("You remove [holding] from [src].")) replace_tank(user, TRUE) + return CLICK_ACTION_SUCCESS /obj/machinery/portable_atmospherics/examine(mob/user) . = ..() diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 2b8d4e80663..cc35b4a79ef 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -369,7 +369,7 @@ /obj/structure/barricade/wooden/snowed name = "crude plank barricade" desc = "This space is blocked off by a wooden barricade. It seems to be covered in a layer of snow." - icon_state = "woodenbarricade-snow" + icon_state = "woodenbarricade_snow" max_integrity = 125 /obj/item/clothing/under/syndicate/coldres diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index d6b44a60518..6e166d5eb7f 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -48,7 +48,7 @@ names += initial(thing.name) var/choice = tgui_input_list(user, message = "Select an ability", title = "Bitrunning Program", items = names) - if(isnull(choice)) + if(isnull(choice) || !user.is_holding(src)) return for(var/datum/action/thing as anything in selectable_actions) @@ -105,7 +105,7 @@ names += initial(thing.name) var/choice = tgui_input_list(user, message = "Select an ability", title = "Bitrunning Program", items = names) - if(isnull(choice)) + if(isnull(choice) || !user.is_holding(src)) return for(var/obj/thing as anything in selectable_items) diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 47f45eeb5ab..54f8a5feba6 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -11,6 +11,7 @@ hitsound = null attack_verb_continuous = list("attacks") attack_verb_simple = list("attack") + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH /// The amount of time it takes to shuffle var/shuffle_time = DECK_SHUFFLE_TIME /// Deck shuffling cooldown. @@ -145,13 +146,13 @@ attack_hand(user, modifiers, flip_card = TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/toy/cards/deck/AltClick(mob/living/user) - if(user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) - if(HAS_TRAIT(src, TRAIT_WIELDED)) - shuffle_cards(user) - else - to_chat(user, span_notice("You must hold the [src] with both hands to shuffle.")) - return ..() +/obj/item/toy/cards/deck/click_alt(mob/living/user) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + to_chat(user, span_notice("You must hold the [src] with both hands to shuffle.")) + return CLICK_ACTION_BLOCKING + + shuffle_cards(user) + return CLICK_ACTION_SUCCESS /obj/item/toy/cards/deck/update_icon_state() switch(count_cards()) diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index 169715c51d9..e03c5800346 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -14,6 +14,7 @@ throw_range = 7 attack_verb_continuous = list("attacks") attack_verb_simple = list("attack") + interaction_flags_click = NEED_DEXTERITY|FORBID_TELEKINESIS_REACH /// Artistic style of the deck var/deckstyle = "nanotrasen" /// If the cards in the deck have different icon states (blank and CAS decks do not) @@ -237,8 +238,7 @@ if(isturf(src.loc)) // only display tihs message when flipping in a visible spot like on a table user.balloon_alert_to_viewers("flips a card") -/obj/item/toy/singlecard/AltClick(mob/living/carbon/human/user) - if(user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) - transform = turn(transform, 90) +/obj/item/toy/singlecard/click_alt(mob/living/carbon/human/user) + transform = turn(transform, 90) // use the simple_rotation component to make this turn with Alt+RMB & Alt+LMB at some point in the future - TimT - return ..() + return CLICK_ACTION_SUCCESS diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 999e7d76eec..8f1166002de 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -9,9 +9,14 @@ w_class = WEIGHT_CLASS_SMALL armor_type = /datum/armor/supplypod_beacon resistance_flags = FIRE_PROOF + interaction_flags_click = ALLOW_SILICON_REACH + /// The linked console var/obj/machinery/computer/cargo/express/express_console + /// If linked var/linked = FALSE + /// If this is ready to launch var/ready = FALSE + /// If it's been launched var/launched = FALSE /datum/armor/supplypod_beacon @@ -90,13 +95,12 @@ update_status(SP_READY) to_chat(user, span_notice("[src] linked to [C].")) -/obj/item/supplypod_beacon/AltClick(mob/user) - if (!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return - if (express_console) - unlink_console() - else +/obj/item/supplypod_beacon/click_alt(mob/user) + if(!express_console) to_chat(user, span_alert("There is no linked console.")) + return CLICK_ACTION_BLOCKING + unlink_console() + return CLICK_ACTION_SUCCESS /obj/item/supplypod_beacon/attackby(obj/item/W, mob/user) if(!istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 68fe533959a..80a821a1f5e 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -129,15 +129,15 @@ payments_acc = null to_chat(user, span_notice("You clear the registered account.")) -/obj/item/universal_scanner/AltClick(mob/user) - . = ..() +/obj/item/universal_scanner/click_alt(mob/user) if(!scanning_mode == SCAN_SALES_TAG) - return + return CLICK_ACTION_BLOCKING var/potential_cut = input("How much would you like to pay out to the registered card?","Percentage Profit ([round(cut_min*100)]% - [round(cut_max*100)]%)") as num|null if(!potential_cut) cut_multiplier = initial(cut_multiplier) cut_multiplier = clamp(round(potential_cut/100, cut_min), cut_min, cut_max) to_chat(user, span_notice("[round(cut_multiplier*100)]% profit will be received if a package with a barcode is sold.")) + return CLICK_ACTION_SUCCESS /obj/item/universal_scanner/examine(mob/user) . = ..() diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 45ccda8b92b..3272620a865 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -194,8 +194,6 @@ var/list/spell_tabs = list() ///A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call [/atom/proc/examine_more] instead of [/atom/proc/examine] on them when examining var/list/recent_examines - ///Our object window datum. It stores info about and handles behavior for the object tab - var/datum/object_window_info/obj_window var/list/parallax_layers var/list/parallax_layers_cached @@ -266,3 +264,6 @@ /// Does this client have typing indicators enabled? var/typing_indicators = FALSE + + /// Loot panel for the client + var/datum/lootpanel/loot_panel diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4a81fa96ffa..b3e18ce5b0c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -549,6 +549,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if (!interviewee) initialize_menus() + loot_panel = new(src) + view_size = new(src, getScreenSize(prefs.read_preference(/datum/preference/toggle/widescreen))) view_size.resetFormat() view_size.setZoomMode() @@ -589,8 +591,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( SSserver_maint.UpdateHubStatus() if(credits) QDEL_LIST(credits) - if(obj_window) - QDEL_NULL(obj_window) if(holder) adminGreet(1) holder.owner = null @@ -621,6 +621,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( QDEL_NULL(void) QDEL_NULL(tooltips) QDEL_NULL(open_loadout_ui) //SKYRAT EDIT ADDITION + QDEL_NULL(loot_panel) seen_messages = null Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 81e87e84baa..c44d5be4ef8 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -65,23 +65,19 @@ H.set_eye_blur_if_lower(10 SECONDS) eyes.apply_organ_damage(5) -/obj/item/clothing/glasses/AltClick(mob/user) - . = ..() //SKYRAT EDIT ADDITION - if(glass_colour_type && !forced_glass_color && ishuman(user)) - var/mob/living/carbon/human/human_user = user +/obj/item/clothing/glasses/click_alt(mob/user) + if(isnull(glass_colour_type) || forced_glass_color || !ishuman(user)) + return NONE + var/mob/living/carbon/human/human_user = user - if (human_user.glasses != src) - return ..() - - if (HAS_TRAIT_FROM(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT)) - REMOVE_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) - to_chat(human_user, span_notice("You will no longer see glasses colors.")) - else - ADD_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) - to_chat(human_user, span_notice("You will now see glasses colors.")) - human_user.update_glasses_color(src, TRUE) + if (HAS_TRAIT_FROM(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT)) + REMOVE_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) + to_chat(human_user, span_notice("You will no longer see glasses colors.")) else - return ..() + ADD_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) + to_chat(human_user, span_notice("You will now see glasses colors.")) + human_user.update_glasses_color(src, TRUE) + return CLICK_ACTION_SUCCESS /obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type) var/old_colour_type = glass_colour_type @@ -664,18 +660,19 @@ var/datum/atom_hud/our_hud = GLOB.huds[hud] our_hud.hide_from(user) -/obj/item/clothing/glasses/debug/AltClick(mob/user) - . = ..() - if(ishuman(user)) - if(xray) - vision_flags &= ~SEE_MOBS|SEE_OBJS - REMOVE_TRAIT(user, TRAIT_XRAY_VISION, GLASSES_TRAIT) - else - vision_flags |= SEE_MOBS|SEE_OBJS - ADD_TRAIT(user, TRAIT_XRAY_VISION, GLASSES_TRAIT) - xray = !xray - var/mob/living/carbon/human/human_user = user - human_user.update_sight() +/obj/item/clothing/glasses/debug/click_alt(mob/user) + if(!ishuman(user)) + return CLICK_ACTION_BLOCKING + if(xray) + vision_flags &= ~SEE_MOBS|SEE_OBJS + REMOVE_TRAIT(user, TRAIT_XRAY_VISION, GLASSES_TRAIT) + else + vision_flags |= SEE_MOBS|SEE_OBJS + ADD_TRAIT(user, TRAIT_XRAY_VISION, GLASSES_TRAIT) + xray = !xray + var/mob/living/carbon/human/human_user = user + human_user.update_sight() + return CLICK_ACTION_SUCCESS /obj/item/clothing/glasses/regular/kim name = "binoclard lenses" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 67ecc0d4859..b300ff99179 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -173,6 +173,8 @@ armor_type = /datum/armor/fedora_det_hat icon_state = "detective" inhand_icon_state = "det_hat" + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + /// Cooldown for retrieving precious candy corn on alt click var/candy_cooldown = 0 dog_fashion = /datum/dog_fashion/head/detective ///Path for the flask that spawns inside their hat roundstart @@ -198,17 +200,16 @@ . = ..() . += span_notice("Alt-click to take a candy corn.") -/obj/item/clothing/head/fedora/det_hat/AltClick(mob/user) - . = ..() - if(loc != user || !user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return - if(candy_cooldown < world.time) - var/obj/item/food/candy_corn/CC = new /obj/item/food/candy_corn(src) - user.put_in_hands(CC) - to_chat(user, span_notice("You slip a candy corn from your hat.")) - candy_cooldown = world.time+1200 - else +/obj/item/clothing/head/fedora/det_hat/click_alt(mob/user) + if(candy_cooldown >= world.time) to_chat(user, span_warning("You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.")) + return CLICK_ACTION_BLOCKING + + var/obj/item/food/candy_corn/CC = new /obj/item/food/candy_corn(src) + user.put_in_hands(CC) + to_chat(user, span_notice("You slip a candy corn from your hat.")) + candy_cooldown = world.time+1200 + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/fedora/det_hat/minor flask_path = /obj/item/reagent_containers/cup/glass/flask/det/minor @@ -221,6 +222,7 @@ icon_state = "detective" inhand_icon_state = "det_hat" dog_fashion = /datum/dog_fashion/head/detective + interaction_flags_click = FORBID_TELEKINESIS_REACH ///prefix our phrases must begin with var/prefix = "go go gadget" ///an assoc list of phrase = item (like gun = revolver) @@ -277,7 +279,7 @@ return var/input = tgui_input_text(user, "What is the activation phrase?", "Activation phrase", "gadget", max_length = 26) - if(!input) + if(!input || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return if(input in items_by_phrase) balloon_alert(user, "already used!") @@ -293,16 +295,16 @@ /obj/item/clothing/head/fedora/inspector_hat/attack_self(mob/user) . = ..() var/phrase = tgui_input_list(user, "What item do you want to remove by phrase?", "Item Removal", items_by_phrase) - if(!phrase) + if(!phrase || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return user.put_in_inactive_hand(items_by_phrase[phrase]) -/obj/item/clothing/head/fedora/inspector_hat/AltClick(mob/user) - . = ..() +/obj/item/clothing/head/fedora/inspector_hat/click_alt(mob/user) var/new_prefix = tgui_input_text(user, "What should be the new prefix?", "Activation prefix", prefix, max_length = 24) - if(!new_prefix) - return + if(!new_prefix || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + return CLICK_ACTION_BLOCKING prefix = new_prefix + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/fedora/inspector_hat/Exited(atom/movable/gone, direction) . = ..() diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 0b0a6fb4d50..92517d4a7dd 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -5,11 +5,14 @@ worn_icon = 'icons/mob/clothing/head/hats.dmi' icon_state = "cargosoft" inhand_icon_state = "greyscale_softcap" //todo wip + interaction_flags_click = NEED_DEXTERITY + /// For setting icon archetype var/soft_type = "cargo" + /// If there is a suffix to append var/soft_suffix = "soft" dog_fashion = /datum/dog_fashion/head/cargo_tech - + /// Whether this is on backwards... Woah, cool var/flipped = FALSE /obj/item/clothing/head/soft/dropped() @@ -24,10 +27,9 @@ flip(usr) -/obj/item/clothing/head/soft/AltClick(mob/user) - ..() - if(user.can_perform_action(src, NEED_DEXTERITY)) - flip(user) +/obj/item/clothing/head/soft/click_alt(mob/user) + flip(user) + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/soft/proc/flip(mob/user) diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index c2013b99177..5df5c6738d8 100644 --- a/code/modules/clothing/masks/animal_masks.dm +++ b/code/modules/clothing/masks/animal_masks.dm @@ -46,11 +46,12 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( if(clothing_flags & VOICEBOX_TOGGLABLE) . += span_notice("Its voicebox is currently [clothing_flags & VOICEBOX_DISABLED ? "disabled" : "enabled"]. Alt-click to toggle it.") -/obj/item/clothing/mask/animal/AltClick(mob/user) - . = ..() - if(clothing_flags & VOICEBOX_TOGGLABLE) - clothing_flags ^= VOICEBOX_DISABLED - to_chat(user, span_notice("You [clothing_flags & VOICEBOX_DISABLED ? "disabled" : "enabled"] [src]'s voicebox.")) +/obj/item/clothing/mask/animal/click_alt(mob/user) + if(!(clothing_flags & VOICEBOX_TOGGLABLE)) + return NONE + clothing_flags ^= VOICEBOX_DISABLED + to_chat(user, span_notice("You [clothing_flags & VOICEBOX_DISABLED ? "disabled" : "enabled"] [src]'s voicebox.")) + return CLICK_ACTION_SUCCESS /obj/item/clothing/mask/animal/proc/make_cursed() //apply cursed effects. ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index 4a97384fa39..cd4b3980e55 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -53,34 +53,36 @@ worn_icon_state = initial(worn_icon_state) undyeable = initial(undyeable) -/obj/item/clothing/mask/bandana/AltClick(mob/user) - . = ..() - if(iscarbon(user)) - var/mob/living/carbon/char = user - var/matrix/widen = matrix() - if((char.get_item_by_slot(ITEM_SLOT_NECK) == src) || (char.get_item_by_slot(ITEM_SLOT_MASK) == src) || (char.get_item_by_slot(ITEM_SLOT_HEAD) == src)) - to_chat(user, span_warning("You can't tie [src] while wearing it!")) - return - else if(slot_flags & ITEM_SLOT_HEAD) - to_chat(user, span_warning("You must undo [src] before you can tie it into a neckerchief!")) - return - else if(!user.is_holding(src)) - to_chat(user, span_warning("You must be holding [src] in order to tie it!")) - return +/obj/item/clothing/mask/bandana/click_alt(mob/user) + if(!iscarbon(user)) + return NONE - if(slot_flags & ITEM_SLOT_MASK) - undyeable = TRUE - slot_flags = ITEM_SLOT_NECK - worn_y_offset = -3 - widen.Scale(1.25, 1) - transform = widen - user.visible_message(span_notice("[user] ties [src] up like a neckerchief."), span_notice("You tie [src] up like a neckerchief.")) - else - undyeable = initial(undyeable) - slot_flags = initial(slot_flags) - worn_y_offset = initial(worn_y_offset) - transform = initial(transform) - user.visible_message(span_notice("[user] unties the neckercheif."), span_notice("You untie the neckercheif.")) + var/mob/living/carbon/char = user + var/matrix/widen = matrix() + if((char.get_item_by_slot(ITEM_SLOT_NECK) == src) || (char.get_item_by_slot(ITEM_SLOT_MASK) == src) || (char.get_item_by_slot(ITEM_SLOT_HEAD) == src)) + to_chat(user, span_warning("You can't tie [src] while wearing it!")) + return CLICK_ACTION_BLOCKING + else if(slot_flags & ITEM_SLOT_HEAD) + to_chat(user, span_warning("You must undo [src] before you can tie it into a neckerchief!")) + return CLICK_ACTION_BLOCKING + else if(!user.is_holding(src)) + to_chat(user, span_warning("You must be holding [src] in order to tie it!")) + return CLICK_ACTION_BLOCKING + + if(slot_flags & ITEM_SLOT_MASK) + undyeable = TRUE + slot_flags = ITEM_SLOT_NECK + worn_y_offset = -3 + widen.Scale(1.25, 1) + transform = widen + user.visible_message(span_notice("[user] ties [src] up like a neckerchief."), span_notice("You tie [src] up like a neckerchief.")) + else + undyeable = initial(undyeable) + slot_flags = initial(slot_flags) + worn_y_offset = initial(worn_y_offset) + transform = initial(transform) + user.visible_message(span_notice("[user] unties the neckercheif."), span_notice("You untie the neckercheif.")) + return CLICK_ACTION_SUCCESS /obj/item/clothing/mask/bandana/red name = "red bandana" @@ -229,14 +231,16 @@ greyscale_config_inhand_left = /datum/greyscale_config/facescarf/inhands_left greyscale_config_inhand_right = /datum/greyscale_config/facescarf/inhands_right flags_1 = IS_PLAYER_COLORABLE_1 + interaction_flags_click = NEED_DEXTERITY /obj/item/clothing/mask/facescarf/attack_self(mob/user) adjustmask(user) -/obj/item/clothing/mask/facescarf/AltClick(mob/user) - ..() - if(user.can_perform_action(src, NEED_DEXTERITY)) - adjustmask(user) + +/obj/item/clothing/mask/facescarf/click_alt(mob/user) + adjustmask(user) + return CLICK_ACTION_SUCCESS + /obj/item/clothing/mask/facescarf/examine(mob/user) . = ..() diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 8ba15fe521d..0249f0b1321 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -12,6 +12,7 @@ flags_cover = MASKCOVERSMOUTH visor_flags_cover = MASKCOVERSMOUTH resistance_flags = NONE + interaction_flags_click = NEED_DEXTERITY /datum/armor/mask_breath bio = 50 @@ -23,10 +24,9 @@ /obj/item/clothing/mask/breath/attack_self(mob/user) adjustmask(user) -/obj/item/clothing/mask/breath/AltClick(mob/user) - ..() - if(user.can_perform_action(src, NEED_DEXTERITY)) - adjustmask(user) +/obj/item/clothing/mask/breath/click_alt(mob/user) + adjustmask(user) + return CLICK_ACTION_SUCCESS /obj/item/clothing/mask/breath/examine(mob/user) . = ..() diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index 893455dcdd0..626d8ce4a65 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -12,14 +12,6 @@ "Pleading" = "pleading" ) -/obj/item/clothing/mask/joy/Initialize(mapload) - . = ..() - register_context() - -/obj/item/clothing/mask/joy/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - context[SCREENTIP_CONTEXT_ALT_LMB] = "Change Emotion" - return CONTEXTUAL_SCREENTIP_SET /obj/item/clothing/mask/joy/reskin_obj(mob/user) . = ..() diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 6d5e328b0d6..48c85ac57aa 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -73,10 +73,9 @@ else . += span_notice("The tie can be untied with Alt-Click.") -/obj/item/clothing/neck/tie/AltClick(mob/user) - . = ..() +/obj/item/clothing/neck/tie/click_alt(mob/user) if(clip_on) - return + return NONE to_chat(user, span_notice("You concentrate as you begin [is_tied ? "untying" : "tying"] [src]...")) var/tie_timer_actual = tie_timer // Mirrors give you a boost to your tying speed. I realize this stacks and I think that's hilarious. @@ -88,11 +87,11 @@ // Tie/Untie our tie if(!do_after(user, tie_timer_actual)) to_chat(user, span_notice("Your fingers fumble away from [src] as your concentration breaks.")) - return + return CLICK_ACTION_BLOCKING // Clumsy & Dumb people have trouble tying their ties. if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) to_chat(user, span_notice("You just can't seem to get a proper grip on [src]!")) - return + return CLICK_ACTION_BLOCKING // Success! is_tied = !is_tied user.visible_message( @@ -101,6 +100,7 @@ ) update_appearance(UPDATE_ICON) user.update_clothing(ITEM_SLOT_NECK) + return CLICK_ACTION_SUCCESS /obj/item/clothing/neck/tie/update_icon() . = ..() diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 02db0145ae7..e30dfc2f5ac 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -181,8 +181,7 @@ adjust_laces(SHOES_UNTIED, user) else // if they're someone else's shoes, go knot-wards - var/mob/living/L = user - if(istype(L) && L.body_position == STANDING_UP) + if(istype(living_user) && living_user.body_position == STANDING_UP) to_chat(user, span_warning("You must be on the floor to interact with [src]!")) return if(tied == SHOES_KNOTTED) @@ -196,11 +195,11 @@ to_chat(user, span_notice("You quietly set to work [tied ? "untying" : "knotting"] [loc]'s [src.name]...")) if(HAS_TRAIT(user, TRAIT_CLUMSY)) // based clowns trained their whole lives for this mod_time *= 0.75 - // SKYRAT EDIT START + // SKYRAT EDIT ADDITION START if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) // Clowns with thieving gloves will be a menace mod_time *= 0.5 - // SKYRAT EDIT END - if(do_after(user, mod_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy))) + // SKYRAT EDIT ADDITION END + if(do_after(user, mod_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy), hidden = TRUE)) to_chat(user, span_notice("You [tied ? "untie" : "knot"] the laces on [loc]'s [src.name].")) if(tied == SHOES_UNTIED) adjust_laces(SHOES_KNOTTED, user) @@ -210,12 +209,12 @@ user.visible_message(span_danger("[our_guy] stamps on [user]'s hand, mid-shoelace [tied ? "knotting" : "untying"]!"), span_userdanger("Ow! [our_guy] stamps on your hand!"), list(our_guy)) to_chat(our_guy, span_userdanger("You stamp on [user]'s hand! What the- [user.p_they()] [user.p_were()] [tied ? "knotting" : "untying"] your shoelaces!")) user.emote("scream") - if(istype(L)) - var/obj/item/bodypart/ouchie = L.get_bodypart(pick(GLOB.arm_zones)) + if(istype(living_user)) + var/obj/item/bodypart/ouchie = living_user.get_bodypart(pick(GLOB.arm_zones)) if(ouchie) ouchie.receive_damage(brute = 10) - L.adjustStaminaLoss(40) - L.Paralyze(10) + living_user.adjustStaminaLoss(40) + living_user.Paralyze(10) ///checking to make sure we're still on the person we're supposed to be, for lacing do_after's /obj/item/clothing/shoes/proc/still_shoed(mob/living/carbon/our_guy) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 58cbf7e88e5..785ec9e26f9 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -58,11 +58,17 @@ equip_delay_other = 80 resistance_flags = NONE actions_types = list(/datum/action/item_action/toggle_spacesuit) - var/temperature_setting = BODYTEMP_NORMAL /// The default temperature setting - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high /// If this is a path, this gets created as an object in Initialize. - var/cell_cover_open = FALSE /// Status of the cell cover on the suit - var/thermal_on = FALSE /// Status of the thermal regulator - var/show_hud = TRUE /// If this is FALSE the batery status UI will be disabled. This is used for suits that don't use bateries like the changeling's flesh suit mutation. + interaction_flags_click = NEED_DEXTERITY + /// The default temperature setting + var/temperature_setting = BODYTEMP_NORMAL + /// If this is a path, this gets created as an object in Initialize. + var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high + /// Status of the cell cover on the suit + var/cell_cover_open = FALSE + /// Status of the thermal regulator + var/thermal_on = FALSE + /// If this is FALSE the batery status UI will be disabled. This is used for suits that don't use bateries like the changeling's flesh suit mutation. + var/show_hud = TRUE /datum/armor/suit_space bio = 100 @@ -190,10 +196,9 @@ return /// Open the cell cover when ALT+Click on the suit -/obj/item/clothing/suit/space/AltClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return ..() +/obj/item/clothing/suit/space/click_alt(mob/living/user) toggle_spacesuit_cell(user) + return CLICK_ACTION_SUCCESS /// Remove the cell whent he cover is open on CTRL+Click /obj/item/clothing/suit/space/CtrlClick(mob/living/user) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index ce21351c885..02a54f194ea 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -87,9 +87,9 @@ else . += span_notice("There's nothing placed on the helmet.") -/obj/item/clothing/head/helmet/space/plasmaman/AltClick(mob/user) - if(user.can_perform_action(src)) - toggle_welding_screen(user) +/obj/item/clothing/head/helmet/space/plasmaman/click_alt(mob/user) + toggle_welding_screen(user) + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/helmet/space/plasmaman/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/toggle_welding_screen)) diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index aaa233f0d35..a92811b0fe7 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -47,12 +47,7 @@ . += span_notice("Alt-click to [zipped ? "un" : ""]zip.") -/obj/item/clothing/suit/hooded/wintercoat/AltClick(mob/user) - . = ..() - - if (. == FALSE) // Direct check for FALSE, because that's the specific case we want to propagate, not just null. - return FALSE - +/obj/item/clothing/suit/hooded/wintercoat/click_alt(mob/user) zipped = !zipped worn_icon_state = "[initial(icon_state)][zipped ? "_t" : ""]" balloon_alert(user, "[zipped ? "" : "un"]zipped") @@ -60,6 +55,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/wearer = loc wearer.update_worn_oversuit() + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/hooded/winterhood name = "winter hood" diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 2d6b3a21b65..7194046b196 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -51,33 +51,37 @@ if(random_sensor) //make the sensor mode favor higher levels, except coords. sensor_mode = pick(SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_LIVING, SENSOR_LIVING, SENSOR_COORDS, SENSOR_COORDS, SENSOR_OFF) - register_context() + if(!unique_reskin) // Already registered via unique reskin + register_context() AddElement(/datum/element/update_icon_updates_onmob, flags = ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING, body = TRUE) -/obj/item/clothing/under/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) - . = NONE +/obj/item/clothing/under/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + . = ..() + + var/changed = FALSE if(isnull(held_item) && has_sensor == HAS_SENSORS) context[SCREENTIP_CONTEXT_RMB] = "Toggle suit sensors" - . = CONTEXTUAL_SCREENTIP_SET + changed = TRUE if(istype(held_item, /obj/item/clothing/accessory) && length(attached_accessories) < max_number_of_accessories) context[SCREENTIP_CONTEXT_LMB] = "Attach accessory" - . = CONTEXTUAL_SCREENTIP_SET + changed = TRUE if(LAZYLEN(attached_accessories)) context[SCREENTIP_CONTEXT_ALT_RMB] = "Remove accessory" - . = CONTEXTUAL_SCREENTIP_SET + changed = TRUE if(istype(held_item, /obj/item/stack/cable_coil) && has_sensor == BROKEN_SENSORS) context[SCREENTIP_CONTEXT_LMB] = "Repair suit sensors" - . = CONTEXTUAL_SCREENTIP_SET + changed = TRUE if(can_adjust && adjusted != DIGITIGRADE_STYLE) context[SCREENTIP_CONTEXT_ALT_LMB] = "Wear [adjusted == ALT_STYLE ? "normally" : "casually"]" - . = CONTEXTUAL_SCREENTIP_SET + changed = TRUE + + return changed ? CONTEXTUAL_SCREENTIP_SET : NONE - return . /obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) . = ..() @@ -349,17 +353,14 @@ return TRUE -/obj/item/clothing/under/AltClick(mob/user) - . = ..() - if(.) - return - +/obj/item/clothing/under/click_alt(mob/user) if(!can_adjust) balloon_alert(user, "can't be adjusted!") - return + return CLICK_ACTION_BLOCKING if(!can_use(user)) - return + return NONE rolldown() + return CLICK_ACTION_SUCCESS /obj/item/clothing/under/alt_click_secondary(mob/user) . = ..() diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 7f99a45c8b6..b09aaa34104 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -239,6 +239,7 @@ "Black" = "black_mech_suit", ) + /obj/item/clothing/under/costume/russian_officer name = "\improper Russian officer's uniform" desc = "The latest in fashionable russian outfits." diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 6ce6b0e67a6..82c77839da7 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -218,20 +218,20 @@ /proc/get_timestamp() return time2text(world.time + 432000, ":ss") -/obj/item/detective_scanner/AltClick(mob/living/user) - // Best way for checking if a player can use while not incapacitated, etc - if(!user.can_perform_action(src)) - return +/obj/item/detective_scanner/click_alt(mob/living/user) if(!LAZYLEN(log)) balloon_alert(user, "no logs!") - return + return CLICK_ACTION_BLOCKING if(scanner_busy) balloon_alert(user, "scanner busy!") - return + return CLICK_ACTION_BLOCKING balloon_alert(user, "deleting logs...") - if(do_after(user, 3 SECONDS, target = src)) - balloon_alert(user, "logs cleared") - log = list() + if(!do_after(user, 3 SECONDS, target = src)) + return CLICK_ACTION_BLOCKING + balloon_alert(user, "logs cleared") + log = list() + return CLICK_ACTION_SUCCESS + /obj/item/detective_scanner/examine(mob/user) . = ..() diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index e2d460e3903..b153c5157ea 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -238,6 +238,7 @@ /datum/component/experiment_handler/proc/configure_experiment(datum/source, mob/user) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(ui_interact), user) + return CLICK_ACTION_SUCCESS /** * Attempts to show the user the experiment configuration panel diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index fe281d7e511..8a719c16f70 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -159,10 +159,7 @@ if(panel_open && reagents.total_volume) . += span_notice("You can use a plunger to empty the feed storage.") -/obj/structure/aquarium/AltClick(mob/living/user) - . = ..() - if(!user.can_perform_action(src)) - return +/obj/structure/aquarium/click_alt(mob/living/user) panel_open = !panel_open balloon_alert(user, "panel [panel_open ? "open" : "closed"]") if(panel_open) @@ -170,6 +167,7 @@ else reagents.flags &= ~(TRANSPARENT|REFILLABLE) update_appearance() + return CLICK_ACTION_SUCCESS /obj/structure/aquarium/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index b54a470897f..e0c45e6c9af 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -63,6 +63,7 @@ /obj/machinery/griddle/attackby(obj/item/I, mob/user, params) + if(griddled_objects.len >= max_items) to_chat(user, span_notice("[src] can't fit more items!")) return @@ -79,6 +80,43 @@ else return ..() +/obj/machinery/griddle/item_interaction_secondary(mob/living/user, obj/item/item, list/modifiers) + if(isnull(item.atom_storage)) + return NONE + + for(var/obj/tray_item in griddled_objects) + item.atom_storage.attempt_insert(tray_item, user, TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/griddle/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(isnull(item.atom_storage)) + return NONE + + if(length(contents) >= max_items) + balloon_alert(user, "it's full!") + return ITEM_INTERACT_BLOCKING + + if(!istype(item, /obj/item/storage/bag/tray)) + // Non-tray dumping requires a do_after + to_chat(user, span_notice("You start dumping out the contents of [item] into [src]...")) + if(!do_after(user, 2 SECONDS, target = item)) + return ITEM_INTERACT_BLOCKING + + var/loaded = 0 + for(var/obj/tray_item in item) + if(!IS_EDIBLE(tray_item)) + continue + if(length(contents) >= max_items) + break + if(item.atom_storage.attempt_remove(tray_item, src)) + loaded++ + AddToGrill(tray_item, user) + if(loaded) + to_chat(user, span_notice("You insert [loaded] item\s into [src].")) + update_appearance() + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + /obj/machinery/griddle/attack_hand(mob/user, list/modifiers) . = ..() toggle_mode() diff --git a/code/modules/food_and_drinks/machinery/grill.dm b/code/modules/food_and_drinks/machinery/grill.dm index 3d9acdde0ba..8d0aa921a7b 100644 --- a/code/modules/food_and_drinks/machinery/grill.dm +++ b/code/modules/food_and_drinks/machinery/grill.dm @@ -125,15 +125,15 @@ grill_fuel += boost update_appearance(UPDATE_ICON_STATE) -/obj/machinery/grill/item_interaction(mob/living/user, obj/item/weapon, list/modifiers, is_right_clicking) +/obj/machinery/grill/item_interaction(mob/living/user, obj/item/weapon, list/modifiers) if(user.combat_mode || (weapon.item_flags & ABSTRACT) || (weapon.flags_1 & HOLOGRAM_1) || (weapon.resistance_flags & INDESTRUCTIBLE)) - return ..() + return NONE if(istype(weapon, /obj/item/stack/sheet/mineral/coal) || istype(weapon, /obj/item/stack/sheet/mineral/wood)) if(!QDELETED(grilled_item)) - return ..() + return NONE if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "anchor it first!") return ITEM_INTERACT_BLOCKING //required for amount subtypes @@ -150,7 +150,7 @@ if(!istype(stored, target_type)) continue if(stored.amount == MAX_STACK_SIZE) - to_chat(user, span_warning("No space for [weapon]")) + balloon_alert(user, "no space!") return ITEM_INTERACT_BLOCKING target.merge(stored) merged = TRUE @@ -158,7 +158,7 @@ if(!merged) weapon.forceMove(src) - to_chat(user, span_notice("You add [src] to the fuel stack")) + to_chat(user, span_notice("You add [src] to the fuel stack.")) if(!grill_fuel) burn_stack() begin_processing() @@ -167,9 +167,9 @@ if(is_reagent_container(weapon) && weapon.is_open_container()) var/obj/item/reagent_containers/container = weapon if(!QDELETED(grilled_item)) - return ..() + return NONE if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "anchor it first!") return ITEM_INTERACT_BLOCKING var/transfered_amount = weapon.reagents.trans_to(src, container.amount_per_transfer_from_this) @@ -202,11 +202,11 @@ update_appearance(UPDATE_ICON_STATE) //feedback - to_chat(user, span_notice("You transfer [transfered_amount]u to the fuel source")) + to_chat(user, span_notice("You transfer [transfered_amount]u to the fuel source.")) return ITEM_INTERACT_SUCCESS - else - to_chat(user, span_warning("No fuel was transfered")) - return ITEM_INTERACT_BLOCKING + + balloon_alert(user, "no fuel transfered!") + return ITEM_INTERACT_BLOCKING if(IS_EDIBLE(weapon)) //sanity checks @@ -218,10 +218,10 @@ if(!QDELETED(grilled_item)) balloon_alert(user, "remove item first!") return ITEM_INTERACT_BLOCKING - else if(grill_fuel <= 0) + if(grill_fuel <= 0) balloon_alert(user, "no fuel!") return ITEM_INTERACT_BLOCKING - else if(!user.transferItemToLoc(weapon, src)) + if(!user.transferItemToLoc(weapon, src)) balloon_alert(user, "[weapon] is stuck in your hand!") return ITEM_INTERACT_BLOCKING @@ -236,7 +236,7 @@ grill_loop.start() return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/machinery/grill/wrench_act(mob/living/user, obj/item/tool) if(user.combat_mode) diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index d4de5991995..cae1b260249 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -154,13 +154,12 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/obj/machinery/icecream_vat/AltClick(mob/user) - if(!user.can_interact_with(src)) - return FALSE - if(custom_ice_cream_beaker) - balloon_alert(user, "removed beaker") - try_put_in_hand(custom_ice_cream_beaker, user) - return ..() +/obj/machinery/icecream_vat/click_alt(mob/user) + if(!custom_ice_cream_beaker) + return CLICK_ACTION_BLOCKING + balloon_alert(user, "removed beaker") + try_put_in_hand(custom_ice_cream_beaker, user) + return CLICK_ACTION_SUCCESS /obj/machinery/icecream_vat/interact(mob/living/user) . = ..() diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index dfb6ac9b2de..55509886a3a 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -31,6 +31,7 @@ light_color = LIGHT_COLOR_DIM_YELLOW light_power = 3 anchored_tabletop_offset = 6 + interaction_flags_click = ALLOW_SILICON_REACH /// Is its function wire cut? var/wire_disabled = FALSE /// Wire cut to run mode backwards @@ -364,21 +365,15 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(operating) - return + return ITEM_INTERACT_SKIP_TO_ATTACK // Don't use tools if we're dirty if(dirty >= MAX_MICROWAVE_DIRTINESS) - return - - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . - + return ITEM_INTERACT_SKIP_TO_ATTACK // Don't insert items if we're dirty if(panel_open && is_wire_tool(tool)) wires.interact(user) return ITEM_INTERACT_SUCCESS - - return . + return NONE /obj/machinery/microwave/attackby(obj/item/item, mob/living/user, params) if(operating) @@ -473,16 +468,16 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/microwave/AltClick(mob/user, list/modifiers) - if(user.can_perform_action(src, ALLOW_SILICON_REACH)) - if(!vampire_charging_capable) - return +/obj/machinery/microwave/click_alt(mob/user, list/modifiers) + if(!vampire_charging_capable) + return NONE - vampire_charging_enabled = !vampire_charging_enabled - balloon_alert(user, "set to [vampire_charging_enabled ? "charge" : "cook"]") - playsound(src, 'sound/machines/twobeep_high.ogg', 50, FALSE) - if(HAS_SILICON_ACCESS(user)) - visible_message(span_notice("[user] sets \the [src] to [vampire_charging_enabled ? "charge" : "cook"]."), blind_message = span_notice("You hear \the [src] make an informative beep!")) + vampire_charging_enabled = !vampire_charging_enabled + balloon_alert(user, "set to [vampire_charging_enabled ? "charge" : "cook"]") + playsound(src, 'sound/machines/twobeep_high.ogg', 50, FALSE) + if(HAS_SILICON_ACCESS(user)) + visible_message(span_notice("[user] sets \the [src] to [vampire_charging_enabled ? "charge" : "cook"]."), blind_message = span_notice("You hear \the [src] make an informative beep!")) + return CLICK_ACTION_SUCCESS /obj/machinery/microwave/CtrlClick(mob/user) . = ..() diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 8135dd8308f..ef9aac9a410 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -99,15 +99,24 @@ update_appearance() use_energy(active_power_usage) - -/obj/machinery/oven/attackby(obj/item/I, mob/user, params) - if(open && !used_tray && istype(I, /obj/item/plate/oven_tray)) - if(user.transferItemToLoc(I, src, silent = FALSE)) - to_chat(user, span_notice("You put [I] in [src].")) - add_tray_to_oven(I, user) - else +/obj/machinery/oven/attackby(obj/item/item, mob/user, params) + if(!open || used_tray || !istype(item, /obj/item/plate/oven_tray)) return ..() + if(user.transferItemToLoc(item, src, silent = FALSE)) + to_chat(user, span_notice("You put [item] in [src].")) + add_tray_to_oven(item, user) + +/obj/machinery/oven/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(open && used_tray && item.atom_storage) + return used_tray.item_interaction(user, item, modifiers) + return NONE + +/obj/machinery/oven/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + if(open && used_tray && tool.atom_storage) + return used_tray.item_interaction_secondary(user, tool, modifiers) + return NONE + ///Adds a tray to the oven, making sure the shit can get baked. /obj/machinery/oven/proc/add_tray_to_oven(obj/item/plate/oven_tray, mob/baker) used_tray = oven_tray @@ -243,6 +252,43 @@ max_items = 6 biggest_w_class = WEIGHT_CLASS_BULKY +/obj/item/plate/oven_tray/item_interaction_secondary(mob/living/user, obj/item/item, list/modifiers) + if(isnull(item.atom_storage)) + return NONE + + for(var/obj/tray_item in src) + item.atom_storage.attempt_insert(tray_item, user, TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/item/plate/oven_tray/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(isnull(item.atom_storage)) + return NONE + + if(length(contents >= max_items)) + balloon_alert(user, "it's full!") + return ITEM_INTERACT_BLOCKING + + if(!istype(item, /obj/item/storage/bag/tray)) + // Non-tray dumping requires a do_after + to_chat(user, span_notice("You start dumping out the contents of [item] into [src]...")) + if(!do_after(user, 2 SECONDS, target = item)) + return ITEM_INTERACT_BLOCKING + + var/loaded = 0 + for(var/obj/tray_item in item) + if(!IS_EDIBLE(tray_item)) + continue + if(length(contents) >= max_items) + break + if(item.atom_storage.attempt_remove(tray_item, src)) + loaded++ + AddToPlate(tray_item, user) + if(loaded) + to_chat(user, span_notice("You insert [loaded] item\s into [src].")) + update_appearance() + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + #undef OVEN_SMOKE_STATE_NONE #undef OVEN_SMOKE_STATE_GOOD #undef OVEN_SMOKE_STATE_NEUTRAL diff --git a/code/modules/food_and_drinks/machinery/stove.dm b/code/modules/food_and_drinks/machinery/stove.dm index 38f98cfa8a8..6cc0ec52789 100644 --- a/code/modules/food_and_drinks/machinery/stove.dm +++ b/code/modules/food_and_drinks/machinery/stove.dm @@ -115,6 +115,34 @@ . = ..() LAZYREMOVE(added_ingredients, gone) +/** + * Adds items to a soup pot without invoking any procs that call sleep() when using in a component. + * + * Args: + * * transfer_from: The container that's being used to add items to the soup pot. Must not be null. + * * user: the entity adding ingredients via a container to a soup pot. Must not be null. + */ +/obj/item/reagent_containers/cup/soup_pot/proc/transfer_from_container_to_pot(obj/item/transfer_from, mob/user) + if(!transfer_from.atom_storage) + return + + var/obj/item/storage/tray = transfer_from + var/loaded = 0 + + for(var/obj/tray_item in tray.contents) + if(!can_add_ingredient(tray_item)) + continue + if(LAZYLEN(added_ingredients) >= max_ingredients) + balloon_alert(user, "it's full!") + return TRUE + if(tray.atom_storage.attempt_remove(tray_item, src)) + loaded++ + LAZYADD(added_ingredients, tray_item) + if(loaded) + to_chat(user, span_notice("You insert [loaded] items into \the [src].")) + update_appearance(UPDATE_OVERLAYS) + return TRUE + /obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, params) . = ..() if(.) @@ -140,6 +168,12 @@ update_appearance(UPDATE_OVERLAYS) return TRUE +/obj/item/reagent_containers/cup/soup_pot/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + return NONE + + return transfer_from_container_to_pot(item, user) + /obj/item/reagent_containers/cup/soup_pot/attack_hand_secondary(mob/user, list/modifiers) if(!LAZYLEN(added_ingredients)) return SECONDARY_ATTACK_CALL_NORMAL diff --git a/code/modules/food_and_drinks/machinery/stove_component.dm b/code/modules/food_and_drinks/machinery/stove_component.dm index 1a39c3b2057..76a70f0f22a 100644 --- a/code/modules/food_and_drinks/machinery/stove_component.dm +++ b/code/modules/food_and_drinks/machinery/stove_component.dm @@ -128,6 +128,14 @@ /datum/component/stove/proc/on_attackby(obj/machinery/source, obj/item/attacking_item, mob/user, params) SIGNAL_HANDLER + if(istype(source, /obj/machinery/oven/range) && istype(attacking_item, /obj/item/storage/bag/tray) && container) + var/obj/machinery/oven/range/range = source + var/obj/item/reagent_containers/cup/soup_pot/soup_pot = container + + if(!range.open) + soup_pot.transfer_from_container_to_pot(attacking_item, user) + return COMPONENT_NO_AFTERATTACK + if(!attacking_item.is_open_container()) return if(!isnull(container)) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index c557f75a631..bada60cd548 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -280,8 +280,8 @@ reaction_flags = REACTION_INSTANT /datum/chemical_reaction/food/martian_batter - results = list(/datum/reagent/consumable/martian_batter = 2) - required_reagents = list(/datum/reagent/consumable/flour = 1, /datum/reagent/consumable/nutriment/soup/dashi = 1) + results = list(/datum/reagent/consumable/martian_batter = 10) + required_reagents = list(/datum/reagent/consumable/flour = 5, /datum/reagent/consumable/nutriment/soup/dashi = 5) mix_message = "A smooth batter forms." reaction_flags = REACTION_INSTANT diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 3e54c134106..51e09f8ab9a 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -8,9 +8,8 @@ /turf/open/floor/holofloor/attackby(obj/item/I, mob/living/user) return // HOLOFLOOR DOES NOT GIVE A FUCK -/turf/open/floor/holofloor/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - SHOULD_CALL_PARENT(FALSE) - return NONE // Fuck you +/turf/open/floor/holofloor/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return ITEM_INTERACT_BLOCKING // Fuck you /turf/open/floor/holofloor/burn_tile() return //you can't burn a hologram! diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 260c4042a0a..35bf611b506 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -13,6 +13,7 @@ density = TRUE circuit = /obj/item/circuitboard/machine/biogenerator processing_flags = START_PROCESSING_MANUALLY + interaction_flags_click = FORBID_TELEKINESIS_REACH /// Whether the biogenerator is currently processing biomass or not. var/processing = FALSE /// The reagent container that is currently inside of the biomass generator. Can be null. @@ -272,10 +273,9 @@ to_chat(user, span_warning("You cannot put \the [attacking_item] in \the [src]!")) -/obj/machinery/biogenerator/AltClick(mob/living/user) - . = ..() - if(user.can_perform_action(src, FORBID_TELEKINESIS_REACH) && can_interact(user)) - eject_beaker(user) +/obj/machinery/biogenerator/click_alt(mob/living/user) + eject_beaker(user) + return CLICK_ACTION_SUCCESS /// Activates biomass processing and converts all inserted food products into biomass diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index d32795e90c3..181a6fd9971 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1099,8 +1099,6 @@ set_self_sustaining(!self_sustaining) to_chat(user, span_notice("You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")) -/obj/machinery/hydroponics/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/machinery/hydroponics/attack_hand_secondary(mob/user, list/modifiers) . = ..() diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 5f5f01ea33f..53d220da80a 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -69,9 +69,9 @@ . = ..() var/crime_name = new_prisoner.client?.prefs?.read_preference(/datum/preference/choiced/prisoner_crime) - if(!crime_name) - return var/datum/prisoner_crime/crime = GLOB.prisoner_crimes[crime_name] + if (isnull(crime)) + return var/list/limbs_to_tat = new_prisoner.bodyparts.Copy() for(var/i in 1 to crime.tattoos) if(!length(SSpersistence.prison_tattoos_to_use) || visualsOnly) diff --git a/code/modules/lootpanel/_lootpanel.dm b/code/modules/lootpanel/_lootpanel.dm new file mode 100644 index 00000000000..339a79d77fa --- /dev/null +++ b/code/modules/lootpanel/_lootpanel.dm @@ -0,0 +1,75 @@ +/** + * ## Loot panel + * A datum that stores info containing the contents of a turf. + * Handles opening the lootpanel UI and searching the turf for items. + */ +/datum/lootpanel + /// The owner of the panel + var/client/owner + /// The list of all search objects indexed. + var/list/datum/search_object/contents = list() + /// The list of search_objects needing processed + var/list/datum/search_object/to_image = list() + /// We've been notified about client version + var/notified = FALSE + /// The turf being searched + var/turf/source_turf + + +/datum/lootpanel/New(client/owner) + . = ..() + + src.owner = owner + + +/datum/lootpanel/Destroy(force) + reset_contents() + owner = null + source_turf = null + + return ..() + + +/datum/lootpanel/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "LootPanel") + ui.set_autoupdate(FALSE) + ui.open() + + +/datum/lootpanel/ui_close(mob/user) + . = ..() + + source_turf = null + reset_contents() + + +/datum/lootpanel/ui_data(mob/user) + var/list/data = list() + + data["contents"] = get_contents() + data["searching"] = length(to_image) + + return data + + +/datum/lootpanel/ui_status(mob/user, datum/ui_state/state) + if(user.incapacitated()) + return UI_DISABLED + + return UI_INTERACTIVE + + +/datum/lootpanel/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("grab") + return grab(usr, params) + if("refresh") + return populate_contents() + + return FALSE diff --git a/code/modules/lootpanel/contents.dm b/code/modules/lootpanel/contents.dm new file mode 100644 index 00000000000..4bb255b1561 --- /dev/null +++ b/code/modules/lootpanel/contents.dm @@ -0,0 +1,49 @@ +/// Adds the item to contents and to_image (if needed) +/datum/lootpanel/proc/add_to_index(datum/search_object/index) + RegisterSignal(index, COMSIG_QDELETING, PROC_REF(on_searchable_deleted)) + if(isnull(index.icon)) + to_image += index + + contents += index + + +/// Used to populate contents and start generating if needed +/datum/lootpanel/proc/populate_contents() + if(length(contents)) + reset_contents() + + // Add source turf first + var/datum/search_object/source = new(owner, source_turf) + add_to_index(source) + + for(var/atom/thing as anything in source_turf.contents) + // validate + if(thing.mouse_opacity == MOUSE_OPACITY_TRANSPARENT) + continue + if(thing.IsObscured()) + continue + if(thing.invisibility > owner.mob.see_invisible) + continue + + // convert + var/datum/search_object/index = new(owner, thing) + add_to_index(index) + + var/datum/tgui/window = SStgui.get_open_ui(owner.mob, src) + window?.send_update() + + if(length(to_image)) + SSlooting.backlog += src + + +/// For: Resetting to empty. Ignores the searchable qdel event +/datum/lootpanel/proc/reset_contents() + for(var/datum/search_object/index as anything in contents) + contents -= index + to_image -= index + + if(QDELETED(index)) + continue + + UnregisterSignal(index, COMSIG_QDELETING) + qdel(index) diff --git a/code/modules/lootpanel/handlers.dm b/code/modules/lootpanel/handlers.dm new file mode 100644 index 00000000000..40a76974ed4 --- /dev/null +++ b/code/modules/lootpanel/handlers.dm @@ -0,0 +1,19 @@ +/// On contents change, either reset or update +/datum/lootpanel/proc/on_searchable_deleted(datum/search_object/source) + SIGNAL_HANDLER + + contents -= source + to_image -= source + + var/datum/tgui/window = SStgui.get_open_ui(owner.mob, src) +#if !defined(UNIT_TESTS) // we dont want to delete contents if we're testing + if(isnull(window)) + reset_contents() + return +#endif + + if(isturf(source.item)) + populate_contents() + return + + window?.send_update() diff --git a/code/modules/lootpanel/misc.dm b/code/modules/lootpanel/misc.dm new file mode 100644 index 00000000000..6e8448b8205 --- /dev/null +++ b/code/modules/lootpanel/misc.dm @@ -0,0 +1,48 @@ +/// Helper to open the panel +/datum/lootpanel/proc/open(turf/tile) + source_turf = tile + +#if !defined(OPENDREAM) && !defined(UNIT_TESTS) + if(!notified) + var/build = owner.byond_build + var/version = owner.byond_version + if(build < 515 || (build == 515 && version < 1635)) + to_chat(owner.mob, examine_block(span_info("\ + Your version of Byond doesn't support fast image loading.\n\ + Detected: [version].[build]\n\ + Required version for this feature: 515.1635 or later.\n\ + Visit
    BYOND's website to get the latest version of BYOND.\n\ + "))) + + notified = TRUE +#endif + + populate_contents() + ui_interact(owner.mob) + + +/** + * Called by SSlooting whenever this datum is added to its backlog. + * Iterates over to_image list to create icons, then removes them. + * Returns boolean - whether this proc has finished the queue or not. + */ +/datum/lootpanel/proc/process_images() + for(var/datum/search_object/index as anything in to_image) + to_image -= index + + if(QDELETED(index) || index.icon) + continue + + index.generate_icon(owner) + + if(TICK_CHECK) + break + + var/datum/tgui/window = SStgui.get_open_ui(owner.mob, src) + if(isnull(window)) + reset_contents() + return TRUE + + window.send_update() + + return !length(to_image) diff --git a/code/modules/lootpanel/search_object.dm b/code/modules/lootpanel/search_object.dm new file mode 100644 index 00000000000..520228e465e --- /dev/null +++ b/code/modules/lootpanel/search_object.dm @@ -0,0 +1,84 @@ +/** + * ## Search Object + * An object for content lists. Compacted item data. + */ +/datum/search_object + /// Item we're indexing + var/atom/item + /// Url to the image of the object + var/icon + /// Icon state, for inexpensive icons + var/icon_state + /// Name of the original object + var/name + /// Typepath of the original object for ui grouping + var/path + + +/datum/search_object/New(client/owner, atom/item) + . = ..() + + src.item = item + name = item.name + if(isobj(item)) + path = item.type + + if(isturf(item)) + RegisterSignal(item, COMSIG_TURF_CHANGE, PROC_REF(on_turf_change)) + else + RegisterSignals(item, list( + COMSIG_ITEM_PICKUP, + COMSIG_MOVABLE_MOVED, + COMSIG_QDELETING, + ), PROC_REF(on_item_moved)) + + // Icon generation conditions ////////////// + // Condition 1: Icon is complex + if(ismob(item) || length(item.overlays) > 2) + return + + // Condition 2: Can't get icon path + if(!isfile(item.icon) || !length("[item.icon]")) + return + + // Condition 3: Using opendream +#if defined(OPENDREAM) || defined(UNIT_TESTS) + return +#endif + + // Condition 4: Using older byond version + var/build = owner.byond_build + var/version = owner.byond_version + if(build < 515 || (build == 515 && version < 1635)) + return + + icon = "[item.icon]" + icon_state = item.icon_state + + +/datum/search_object/Destroy(force) + item = null + + return ..() + + +/// Generates the icon for the search object. This is the expensive part. +/datum/search_object/proc/generate_icon(client/owner) + if(ismob(item) || length(item.overlays) > 2) + icon = costly_icon2html(item, owner, sourceonly = TRUE) + else // our pre 515.1635 fallback for normal items + icon = icon2html(item, owner, sourceonly = TRUE) + + +/// Parent item has been altered, search object no longer valid +/datum/search_object/proc/on_item_moved(atom/source) + SIGNAL_HANDLER + + qdel(src) + + +/// Parent tile has been altered, entire search needs reset +/datum/search_object/proc/on_turf_change(turf/source, path, list/new_baseturfs, flags, list/post_change_callbacks) + SIGNAL_HANDLER + + post_change_callbacks += CALLBACK(src, GLOBAL_PROC_REF(qdel), src) diff --git a/code/modules/lootpanel/ss_looting.dm b/code/modules/lootpanel/ss_looting.dm new file mode 100644 index 00000000000..cf0882fa890 --- /dev/null +++ b/code/modules/lootpanel/ss_looting.dm @@ -0,0 +1,39 @@ + +/// Queues image generation for search objects without icons +SUBSYSTEM_DEF(looting) + name = "Loot Icon Generation" + init_order = INIT_ORDER_LOOT + priority = FIRE_PRIORITY_PROCESS + wait = 0.5 SECONDS + /// Backlog of items. Gets put into processing + var/list/datum/lootpanel/backlog = list() + /// Actively processing items + var/list/datum/lootpanel/processing = list() + + +/datum/controller/subsystem/looting/stat_entry(msg) + msg = "P:[length(backlog)]" + return ..() + + +/datum/controller/subsystem/looting/fire(resumed) + if(!length(backlog)) + return + + if(!resumed) + processing = backlog + backlog = list() + + while(length(processing)) + var/datum/lootpanel/panel = processing[length(processing)] + if(QDELETED(panel) || !length(panel.to_image)) + processing.len-- + continue + + if(!panel.process_images()) + backlog += panel + + if(MC_TICK_CHECK) + return + + processing.len-- diff --git a/code/modules/lootpanel/ui.dm b/code/modules/lootpanel/ui.dm new file mode 100644 index 00000000000..c7f0cf2358d --- /dev/null +++ b/code/modules/lootpanel/ui.dm @@ -0,0 +1,42 @@ +/// UI helper for converting the associative list to a list of lists +/datum/lootpanel/proc/get_contents() + var/list/items = list() + + for(var/datum/search_object/index as anything in contents) + UNTYPED_LIST_ADD(items, list( + "icon_state" = index.icon_state, + "icon" = index.icon, + "name" = index.name, + "path" = index.path, + "ref" = REF(index), + )) + + return items + + +/// Clicks an object from the contents. Validates the object and the user +/datum/lootpanel/proc/grab(mob/user, list/params) + var/ref = params["ref"] + if(isnull(ref)) + return FALSE + + var/datum/search_object/index = locate(ref) in contents + var/atom/thing = index?.item + if(QDELETED(index) || QDELETED(thing)) // Obj is gone + return FALSE + + if(thing != source_turf && !(locate(thing) in source_turf.contents)) + qdel(index) // Item has moved + return TRUE + + var/modifiers = "" + if(params["ctrl"]) + modifiers += "ctrl=1;" + if(params["middle"]) + modifiers += "middle=1;" + if(params["shift"]) + modifiers += "shift=1;" + + user.ClickOn(thing, modifiers) + + return TRUE diff --git a/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm b/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm index ba311d44a2a..f290c06d78f 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/anomalyresearch.dm @@ -17,7 +17,7 @@ /obj/effect/anomaly/flux, /obj/effect/anomaly/bluespace, /obj/effect/anomaly/hallucination, - /obj/effect/anomaly/bioscrambler + /obj/effect/anomaly/bioscrambler/docile ) ///Do we anchor the anomaly? Set to true if you don't want anomalies drifting away (like if theyre in space or something) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index b61e14e8916..c699b25666e 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -363,20 +363,21 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) if(get_dist(get_turf(src), get_turf(user)) <= 1) promptExit(user) -/turf/closed/indestructible/hoteldoor/AltClick(mob/user) - . = ..() - if(get_dist(get_turf(src), get_turf(user)) <= 1) - to_chat(user, span_notice("You peak through the door's bluespace peephole...")) - user.reset_perspective(parentSphere) - var/datum/action/peephole_cancel/PHC = new - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) - PHC.Grant(user) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/atom/, check_eye), user) +/turf/closed/indestructible/hoteldoor/click_alt(mob/user) + to_chat(user, span_notice("You peak through the door's bluespace peephole...")) + user.reset_perspective(parentSphere) + var/datum/action/peephole_cancel/PHC = new + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) + PHC.Grant(user) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_eye)) + return CLICK_ACTION_SUCCESS -/turf/closed/indestructible/hoteldoor/check_eye(mob/user) - if(get_dist(get_turf(src), get_turf(user)) >= 2) - for(var/datum/action/peephole_cancel/PHC in user.actions) - INVOKE_ASYNC(PHC, TYPE_PROC_REF(/datum/action/peephole_cancel, Trigger)) +/turf/closed/indestructible/hoteldoor/proc/check_eye(mob/user, atom/oldloc, direction) + SIGNAL_HANDLER + if(get_dist(get_turf(src), get_turf(user)) < 2) + return + for(var/datum/action/peephole_cancel/PHC in user.actions) + INVOKE_ASYNC(PHC, TYPE_PROC_REF(/datum/action/peephole_cancel, Trigger)) /datum/action/peephole_cancel name = "Cancel View" diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 5022dac212c..0b029bc3b63 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -60,10 +60,9 @@ return ..() -/obj/structure/closet/crate/secure/loot/AltClick(mob/living/user) - if(!user.can_perform_action(src)) - return - return attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom. +/obj/structure/closet/crate/secure/loot/click_alt(mob/living/user) + attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom. + return CLICK_ACTION_SUCCESS /obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user) if(locked) diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index f30fd24ae6c..5795eed1d74 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -244,9 +244,9 @@ return FALSE -/obj/machinery/bouldertech/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/bouldertech/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(panel_open || user.combat_mode) - return ..() + return NONE if(istype(tool, /obj/item/boulder)) var/obj/item/boulder/my_boulder = tool @@ -276,7 +276,7 @@ to_chat(user, span_notice("You claim [amount] mining points from \the [src] to [id_card].")) return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/machinery/bouldertech/wrench_act(mob/living/user, obj/item/tool) . = ITEM_INTERACT_BLOCKING diff --git a/code/modules/mining/boulder_processing/boulder_types.dm b/code/modules/mining/boulder_processing/boulder_types.dm index 08ed961404c..1ffce8737bd 100644 --- a/code/modules/mining/boulder_processing/boulder_types.dm +++ b/code/modules/mining/boulder_processing/boulder_types.dm @@ -44,7 +44,7 @@ /datum/material/uranium = 3, ) - set_custom_materials(list(pick_weight(gulag_minerals) = SHEET_MATERIAL_AMOUNT * rand(1, 3))) + set_custom_materials(list(pick_weight(gulag_minerals) = SHEET_MATERIAL_AMOUNT)) ///Boulders usually spawned in lavaland labour camp area but with bluespace material /obj/item/boulder/gulag_expanded @@ -66,7 +66,7 @@ /datum/material/uranium = 3, ) - set_custom_materials(list(pick_weight(expanded_gulag_minerals) = SHEET_MATERIAL_AMOUNT * rand(1, 3))) + set_custom_materials(list(pick_weight(expanded_gulag_minerals) = SHEET_MATERIAL_AMOUNT)) ///lowgrade boulder, most commonly spawned /obj/item/boulder/shabby diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 10ba871176f..4845b0f9c00 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -131,24 +131,25 @@ hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS -/obj/item/clothing/suit/hooded/cloak/goliath/AltClick(mob/user) - . = ..() - if(iscarbon(user)) - var/mob/living/carbon/char = user - if((char.get_item_by_slot(ITEM_SLOT_NECK) == src) || (char.get_item_by_slot(ITEM_SLOT_OCLOTHING) == src)) - to_chat(user, span_warning("You can't adjust [src] while wearing it!")) - return - if(!user.is_holding(src)) - to_chat(user, span_warning("You must be holding [src] in order to adjust it!")) - return - if(slot_flags & ITEM_SLOT_OCLOTHING) - slot_flags = ITEM_SLOT_NECK - set_armor(/datum/armor/none) - user.visible_message(span_notice("[user] adjusts their [src] for ceremonial use."), span_notice("You adjust your [src] for ceremonial use.")) - else - slot_flags = initial(slot_flags) - set_armor(initial(armor_type)) - user.visible_message(span_notice("[user] adjusts their [src] for defensive use."), span_notice("You adjust your [src] for defensive use.")) +/obj/item/clothing/suit/hooded/cloak/goliath/click_alt(mob/user) + if(!iscarbon(user)) + return NONE + var/mob/living/carbon/char = user + if((char.get_item_by_slot(ITEM_SLOT_NECK) == src) || (char.get_item_by_slot(ITEM_SLOT_OCLOTHING) == src)) + to_chat(user, span_warning("You can't adjust [src] while wearing it!")) + return CLICK_ACTION_BLOCKING + if(!user.is_holding(src)) + to_chat(user, span_warning("You must be holding [src] in order to adjust it!")) + return CLICK_ACTION_BLOCKING + if(slot_flags & ITEM_SLOT_OCLOTHING) + slot_flags = ITEM_SLOT_NECK + set_armor(/datum/armor/none) + user.visible_message(span_notice("[user] adjusts their [src] for ceremonial use."), span_notice("You adjust your [src] for ceremonial use.")) + else + slot_flags = initial(slot_flags) + set_armor(initial(armor_type)) + user.visible_message(span_notice("[user] adjusts their [src] for defensive use."), span_notice("You adjust your [src] for defensive use.")) + return CLICK_ACTION_SUCCESS /datum/armor/cloak_goliath melee = 35 diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 9a7913278e8..c33181dd806 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -59,16 +59,15 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( var/obj/structure/marker_beacon/M = new(user.loc, picked_color) transfer_fingerprints_to(M) -/obj/item/stack/marker_beacon/AltClick(mob/living/user) - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/item/stack/marker_beacon/click_alt(mob/living/user) var/input_color = tgui_input_list(user, "Choose a color", "Beacon Color", GLOB.marker_beacon_colors) if(isnull(input_color)) - return - if(!istype(user) || !user.can_perform_action(src)) - return + return CLICK_ACTION_BLOCKING + if(!user.can_perform_action(src)) + return CLICK_ACTION_BLOCKING picked_color = input_color update_appearance() + return CLICK_ACTION_SUCCESS /obj/structure/marker_beacon name = "marker beacon" @@ -154,17 +153,15 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( return return ..() -/obj/structure/marker_beacon/AltClick(mob/living/user) - ..() - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/structure/marker_beacon/click_alt(mob/living/user) var/input_color = tgui_input_list(user, "Choose a color", "Beacon Color", GLOB.marker_beacon_colors) if(isnull(input_color)) - return - if(!istype(user) || !user.can_perform_action(src)) - return + return CLICK_ACTION_BLOCKING + if(!user.can_perform_action(src)) + return NONE picked_color = input_color update_appearance() + return CLICK_ACTION_SUCCESS /* Preset marker beacon types, for mapping */ diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 2c8a6af7864..4fdd997fcab 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -372,7 +372,7 @@ var/atom/throw_target = get_edge_target_turf(target_mob, get_dir(user, get_step_away(target_mob, user))) target_mob.throw_at(throw_target, 2, 2, user, gentle = TRUE) target_mob.Knockdown(2 SECONDS) - var/body_zone = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/body_zone = pick(GLOB.all_body_zones) user.apply_damage(force / recoil_factor, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE)) to_chat(user, span_danger("The weight of the Big Slappy recoils!")) log_combat(user, user, "recoiled Big Slappy into") diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 8a7ffeec88f..f46c7ecebb9 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST(labor_sheet_values) +#define SHEET_POINT_VALUE 33 /**********************Prisoners' Console**************************/ @@ -22,14 +22,6 @@ GLOBAL_LIST(labor_sheet_values) if(!stacking_machine) return INITIALIZE_HINT_QDEL - if(!GLOB.labor_sheet_values) - var/sheet_list = list() - for(var/obj/item/stack/sheet/sheet as anything in subtypesof(/obj/item/stack/sheet)) - if(!initial(sheet.point_value) || (initial(sheet.merge_type) && initial(sheet.merge_type) != sheet)) //ignore no-value sheets and x/fifty subtypes - continue - sheet_list += list(list("ore" = initial(sheet.name), "value" = initial(sheet.point_value))) - GLOB.labor_sheet_values = sort_list(sheet_list, GLOBAL_PROC_REF(cmp_sheet_list)) - /obj/machinery/mineral/labor_claim_console/Destroy() QDEL_NULL(security_radio) if(stacking_machine) @@ -46,11 +38,6 @@ GLOBAL_LIST(labor_sheet_values) ui = new(user, src, "LaborClaimConsole", name) ui.open() -/obj/machinery/mineral/labor_claim_console/ui_static_data(mob/user) - var/list/data = list() - data["ores"] = GLOB.labor_sheet_values - return data - /obj/machinery/mineral/labor_claim_console/ui_data(mob/user) var/list/data = list() var/can_go_home = FALSE @@ -155,8 +142,9 @@ GLOBAL_LIST(labor_sheet_values) labor_console = null return ..() -/obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp) - points += inp.point_value * inp.amount +/obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/input) + if (input.manufactured && input.gulag_valid) + points += SHEET_POINT_VALUE * input.amount return ..() /obj/machinery/mineral/stacking_machine/laborstacker/attackby(obj/item/weapon, mob/user, params) @@ -190,3 +178,5 @@ GLOBAL_LIST(labor_sheet_values) say("ID: [prisoner_id.registered_name].") say("Points Collected: [prisoner_id.points] / [prisoner_id.goal].") say("Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release.") + +#undef SHEET_POINT_VALUE diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 11a941c4098..61318f63b92 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -143,6 +143,8 @@ var/datum/proximity_monitor/proximity_monitor ///Material container for materials var/datum/component/material_container/materials + /// What can be input into the machine? + var/accepted_type = /obj/item/stack /obj/machinery/mineral/processing_unit/Initialize(mapload) . = ..() @@ -153,7 +155,7 @@ SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_EXAMINE, \ - allowed_items = /obj/item/stack \ + allowed_items = accepted_type \ ) if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]) GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] = new /datum/techweb/autounlocking/smelter @@ -166,7 +168,7 @@ stored_research = null return ..() -/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O) +/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/O) if(QDELETED(O)) return var/material_amount = materials.get_item_material_amount(O) @@ -225,7 +227,7 @@ /obj/machinery/mineral/processing_unit/pickup_item(datum/source, atom/movable/target, direction) if(QDELETED(target)) return - if(istype(target, /obj/item/stack/ore)) + if(istype(target, accepted_type)) process_ore(target) /obj/machinery/mineral/processing_unit/process(seconds_per_tick) @@ -282,4 +284,8 @@ var/O = new P(src) unload_mineral(O) +/// Only accepts ore, for the work camp +/obj/machinery/mineral/processing_unit/gulag + accepted_type = /obj/item/stack/ore + #undef SMELT_AMOUNT diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 0b9b7895c6b..14460cffb1b 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -203,18 +203,16 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/mineral/ore_redemption/AltClick(mob/living/user) - . = ..() - if(!user.can_perform_action(src)) - return - if(panel_open) - input_dir = turn(input_dir, -90) - output_dir = turn(output_dir, -90) - to_chat(user, span_notice("You change [src]'s I/O settings, setting the input to [dir2text(input_dir)] and the output to [dir2text(output_dir)].")) - unregister_input_turf() // someone just rotated the input and output directions, unregister the old turf - register_input_turf() // register the new one - update_appearance(UPDATE_OVERLAYS) - return TRUE +/obj/machinery/mineral/ore_redemption/click_alt(mob/living/user) + if(!panel_open) + return CLICK_ACTION_BLOCKING + input_dir = turn(input_dir, -90) + output_dir = turn(output_dir, -90) + to_chat(user, span_notice("You change [src]'s I/O settings, setting the input to [dir2text(input_dir)] and the output to [dir2text(output_dir)].")) + unregister_input_turf() // someone just rotated the input and output directions, unregister the old turf + register_input_turf() // register the new one + update_appearance(UPDATE_OVERLAYS) + return CLICK_ACTION_SUCCESS /obj/machinery/mineral/ore_redemption/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 286317a5d74..1f9a29a6e37 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -137,26 +137,26 @@ if (input_dir == output_dir) rotate(input) -/obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/inp) - if(QDELETED(inp)) +/obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/input) + if(QDELETED(input)) return // Dump the sheets to the silo if attached if(materials.silo && !materials.on_hold()) - var/matlist = inp.custom_materials & materials.mat_container.materials + var/matlist = input.custom_materials & materials.mat_container.materials if (length(matlist)) - materials.mat_container.insert_item(inp, context = src) + materials.insert_item(input) return // No silo attached process to internal storage - var/key = inp.merge_type + var/key = input.merge_type var/obj/item/stack/sheet/storage = stack_list[key] if(!storage) //It's the first of this sheet added - stack_list[key] = storage = new inp.type(src, 0) - storage.amount += inp.amount //Stack the sheets - qdel(inp) + stack_list[key] = storage = new input.type(src, 0) + storage.amount += input.amount //Stack the sheets + qdel(input) while(storage.amount >= stack_amt) //Get rid of excessive stackage - var/obj/item/stack/sheet/out = new inp.type(null, stack_amt) + var/obj/item/stack/sheet/out = new input.type(null, stack_amt) unload_mineral(out) storage.amount -= stack_amt diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 3e262468298..98a771a06a9 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -121,6 +121,7 @@ return apply_atmos_requirements(mapload) apply_temperature_requirements(mapload) + apply_target_randomisation() /mob/living/basic/proc/on_ssair_init(datum/source) SIGNAL_HANDLER @@ -142,6 +143,11 @@ return AddElement(/datum/element/body_temp_sensitive, minimum_survivable_temperature, maximum_survivable_temperature, unsuitable_cold_damage, unsuitable_heat_damage, mapload) +/mob/living/basic/proc/apply_target_randomisation() + if (basic_mob_flags & PRECISE_ATTACK_ZONES) + return + AddElement(/datum/element/attack_zone_randomiser) + /mob/living/basic/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() if(staminaloss > 0) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index c86160db025..ccd4b0d617f 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -41,6 +41,7 @@ GLOBAL_LIST_INIT(command_strings, list( light_power = 0.6 speed = 3 req_one_access = list(ACCESS_ROBOTICS) + interaction_flags_click = ALLOW_SILICON_REACH ///The Robot arm attached to this robot - has a 50% chance to drop on death. var/robot_arm = /obj/item/bodypart/arm/right/robot ///The inserted (if any) pAI in this bot. @@ -362,13 +363,9 @@ GLOBAL_LIST_INIT(command_strings, list( ui = new(user, src, "SimpleBot", name) ui.open() -/mob/living/basic/bot/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return +/mob/living/basic/bot/click_alt(mob/user) unlock_with_id(user) + return CLICK_ACTION_SUCCESS /mob/living/basic/bot/proc/unlock_with_id(mob/living/user) if(bot_access_flags & BOT_COVER_EMAGGED) diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 26e549cbcf9..3361330915f 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -203,12 +203,12 @@ combat_overlay.color = selected_color update_appearance() -/mob/living/basic/mining_drone/AltClick(mob/living/user) - . = ..() +/mob/living/basic/mining_drone/click_alt(mob/living/user) if(user.combat_mode) - return + return CLICK_ACTION_BLOCKING set_combat_mode(!combat_mode) balloon_alert(user, "now [combat_mode ? "attacking wildlife" : "collecting loose ore"]") + return CLICK_ACTION_SUCCESS /mob/living/basic/mining_drone/RangedAttack(atom/target) if(!combat_mode) diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index a80d6847a8a..a6087f08589 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -38,6 +38,9 @@ if(!isnull(limb)) register_to_limb(limb) +/mob/living/basic/living_limb_flesh/apply_target_randomisation() + AddElement(/datum/element/attack_zone_randomiser, GLOB.limb_zones) + /mob/living/basic/living_limb_flesh/Destroy(force) . = ..() if(current_bodypart) @@ -71,6 +74,8 @@ if(!victim.CanReach(movable)) continue candidates += movable + if(!length(candidates)) + return var/atom/movable/candidate = pick(candidates) if(isnull(candidate)) return @@ -123,9 +128,9 @@ part_type = /obj/item/bodypart/leg/right/flesh target.visible_message(span_danger("[src] [target_part ? "tears off and attaches itself" : "attaches itself"] to where [target][target.p_s()] limb used to be!")) - var/obj/item/bodypart/new_bodypart = new part_type(TRUE) //dont_spawn_flesh, we cant use named arguments here - new_bodypart.replace_limb(target, TRUE) + var/obj/item/bodypart/new_bodypart = new part_type() forceMove(new_bodypart) + new_bodypart.replace_limb(target, TRUE) register_to_limb(new_bodypart) /mob/living/basic/living_limb_flesh/proc/owner_shocked(datum/source, shock_damage, shock_source, siemens_coeff, flags) diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm index 51379ce88a0..c0fb9b67e7f 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm @@ -55,6 +55,7 @@ AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/door_pryer, pry_time = 5 SECONDS, interaction_key = REGALRAT_INTERACTION) + AddElement(/datum/element/poster_tearer, interaction_key = REGALRAT_INTERACTION) AddComponent(\ /datum/component/ghost_direct_control,\ poll_candidates = poll_ghosts,\ diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 266e7b5b414..21943d39d3d 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -204,7 +204,7 @@ ShiftClickOn(A) return if(LAZYACCESS(modifiers, ALT_CLICK)) - AltClickNoInteract(src, A) + base_click_alt(A) return if(LAZYACCESS(modifiers, RIGHT_CLICK)) ranged_secondary_attack(A, modifiers) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index a59e5021948..9df1697e400 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -75,17 +75,16 @@ GLOBAL_VAR(posibrain_notify_cooldown) update_appearance() addtimer(CALLBACK(src, PROC_REF(check_success)), ask_delay) -/obj/item/mmi/posibrain/AltClick(mob/living/user) - if(!istype(user) || !user.can_perform_action(src)) - return +/obj/item/mmi/posibrain/click_alt(mob/living/user) var/input_seed = tgui_input_text(user, "Enter a personality seed", "Enter seed", ask_role, MAX_NAME_LEN) if(isnull(input_seed)) - return - if(!istype(user) || !user.can_perform_action(src)) + return CLICK_ACTION_BLOCKING + if(!user.can_perform_action(src)) return to_chat(user, span_notice("You set the personality seed to \"[input_seed]\".")) ask_role = input_seed update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/mmi/posibrain/proc/check_success() searching = FALSE diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a88002321d8..8a524d5e222 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -240,25 +240,34 @@ return TRUE return FALSE + /mob/living/carbon/resist_buckle() - if(HAS_TRAIT(src, TRAIT_RESTRAINED)) - changeNext_move(CLICK_CD_BREAKOUT) - last_special = world.time + CLICK_CD_BREAKOUT - var/buckle_cd = 60 SECONDS - if(handcuffed) - var/obj/item/restraints/O = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED) - buckle_cd = O.breakouttime - visible_message(span_warning("[src] attempts to unbuckle [p_them()]self!"), \ - span_notice("You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)")) - if(do_after(src, buckle_cd, target = src, timed_action_flags = IGNORE_HELD_ITEM)) - if(!buckled) - return - buckled.user_unbuckle_mob(src,src) - else - if(src && buckled) - to_chat(src, span_warning("You fail to unbuckle yourself!")) - else - buckled.user_unbuckle_mob(src,src) + if(!HAS_TRAIT(src, TRAIT_RESTRAINED)) + buckled.user_unbuckle_mob(src, src) + return + + changeNext_move(CLICK_CD_BREAKOUT) + last_special = world.time + CLICK_CD_BREAKOUT + var/buckle_cd = 1 MINUTES + + if(handcuffed) + var/obj/item/restraints/cuffs = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED) + buckle_cd = cuffs.breakouttime + + visible_message(span_warning("[src] attempts to unbuckle [p_them()]self!"), + span_notice("You attempt to unbuckle yourself... \ + (This will take around [DisplayTimeText(buckle_cd)] and you must stay still.)")) + + if(!do_after(src, buckle_cd, target = src, timed_action_flags = IGNORE_HELD_ITEM, hidden = TRUE)) + if(buckled) + to_chat(src, span_warning("You fail to unbuckle yourself!")) + return + + if(QDELETED(src) || isnull(buckled)) + return + + buckled.user_unbuckle_mob(src, src) + /mob/living/carbon/resist_fire() return !!apply_status_effect(/datum/status_effect/stop_drop_roll) @@ -282,34 +291,40 @@ cuff_resist(I) -/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 1 MINUTES, cuff_break = 0) - if((cuff_break != INSTANT_CUFFBREAK) && (SEND_SIGNAL(src, COMSIG_MOB_REMOVING_CUFFS, I) & COMSIG_MOB_BLOCK_CUFF_REMOVAL)) +/** + * Helper to break the cuffs from hands + * @param {obj/item} cuffs - The cuffs to break + * @param {number} breakouttime - The time it takes to break the cuffs. Use SECONDS/MINUTES defines + * @param {number} cuff_break - Speed multiplier, 0 is default, see _DEFINES\combat.dm + */ +/mob/living/carbon/proc/cuff_resist(obj/item/cuffs, breakouttime = 1 MINUTES, cuff_break = 0) + if((cuff_break != INSTANT_CUFFBREAK) && (SEND_SIGNAL(src, COMSIG_MOB_REMOVING_CUFFS, cuffs) & COMSIG_MOB_BLOCK_CUFF_REMOVAL)) return //The blocking object should sent a fluff-appropriate to_chat about cuff removal being blocked - if(I.item_flags & BEING_REMOVED) - to_chat(src, span_warning("You're already attempting to remove [I]!")) + if(cuffs.item_flags & BEING_REMOVED) + to_chat(src, span_warning("You're already attempting to remove [cuffs]!")) return - I.item_flags |= BEING_REMOVED - breakouttime = I.breakouttime + cuffs.item_flags |= BEING_REMOVED + breakouttime = cuffs.breakouttime if(!cuff_break) - visible_message(span_warning("[src] attempts to remove [I]!")) - to_chat(src, span_notice("You attempt to remove [I]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)")) - if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_HELD_ITEM)) - . = clear_cuffs(I, cuff_break) + visible_message(span_warning("[src] attempts to remove [cuffs]!")) + to_chat(src, span_notice("You attempt to remove [cuffs]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)")) + if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_HELD_ITEM, hidden = TRUE)) + . = clear_cuffs(cuffs, cuff_break) else - to_chat(src, span_warning("You fail to remove [I]!")) + to_chat(src, span_warning("You fail to remove [cuffs]!")) else if(cuff_break == FAST_CUFFBREAK) - breakouttime = 50 - visible_message(span_warning("[src] is trying to break [I]!")) - to_chat(src, span_notice("You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)")) + breakouttime = 5 SECONDS + visible_message(span_warning("[src] is trying to break [cuffs]!")) + to_chat(src, span_notice("You attempt to break [cuffs]... (This will take around 5 seconds and you need to stand still.)")) if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_HELD_ITEM)) - . = clear_cuffs(I, cuff_break) + . = clear_cuffs(cuffs, cuff_break) else - to_chat(src, span_warning("You fail to break [I]!")) + to_chat(src, span_warning("You fail to break [cuffs]!")) else if(cuff_break == INSTANT_CUFFBREAK) - . = clear_cuffs(I, cuff_break) - I.item_flags &= ~BEING_REMOVED + . = clear_cuffs(cuffs, cuff_break) + cuffs.item_flags &= ~BEING_REMOVED /mob/living/carbon/proc/uncuff() if (handcuffed) @@ -410,6 +425,9 @@ if((HAS_TRAIT(src, TRAIT_NOHUNGER) || HAS_TRAIT(src, TRAIT_TOXINLOVER)) && !force) return TRUE + if(!force && HAS_TRAIT(src, TRAIT_STRONG_STOMACH)) + lost_nutrition *= 0.5 + SEND_SIGNAL(src, COMSIG_CARBON_VOMITED, distance, force) // cache some stuff that we'll need later (at least multiple times) @@ -426,7 +444,10 @@ span_userdanger("You try to throw up, but there's nothing in your stomach!"), ) if(stun) - Stun(20 SECONDS) + var/stun_time = 20 SECONDS + if(HAS_TRAIT(src, TRAIT_STRONG_STOMACH)) + stun_time *= 0.5 + Stun(stun_time) if(knockdown) Knockdown(20 SECONDS) return TRUE @@ -449,11 +470,14 @@ add_mood_event("vomit", /datum/mood_event/vomit) if(stun) - Stun(8 SECONDS) + var/stun_time = 8 SECONDS + if(!blood && HAS_TRAIT(src, TRAIT_STRONG_STOMACH)) + stun_time *= 0.5 + Stun(stun_time) if(knockdown) Knockdown(8 SECONDS) - playsound(get_turf(src), 'sound/effects/splat.ogg', 50, TRUE) + playsound(src, 'sound/effects/splat.ogg', 50, TRUE) var/need_mob_update = FALSE var/turf/location = get_turf(src) diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index f74c2c1ca21..41a958518c5 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -1,5 +1,5 @@ /mob/living/carbon/death(gibbed) - if(stat == DEAD || HAS_TRAIT(src, TRAIT_NODEATH) && !gibbed) + if(stat == DEAD) return losebreath = 0 diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index cf843c43b00..f63e692a118 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) new /obj/effect/decal/remains/human(loc) /mob/living/carbon/human/death(gibbed) - if(stat == DEAD || HAS_TRAIT(src, TRAIT_NODEATH) && !gibbed) + if(stat == DEAD) return stop_sound_channel(CHANNEL_HEARTBEAT) var/obj/item/organ/internal/heart/human_heart = get_organ_slot(ORGAN_SLOT_HEART) diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index 41a00b59359..b2dce5234b4 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -222,7 +222,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( source.log_message("is being pickpocketed of [item] by [key_name(user)] ([pocket_side])", LOG_VICTIM, color="orange", log_globally=FALSE) item.add_fingerprint(src) - var/result = start_unequip_mob(item, source, user, POCKET_STRIP_DELAY) + var/result = start_unequip_mob(item, source, user, strip_delay = POCKET_STRIP_DELAY, hidden = TRUE) if (!(result || HAS_TRAIT(user, TRAIT_STICKY_FINGERS))) //SKYRAT EDIT ADDITION original if (!result) warn_owner(source) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index a1c3a245034..5a1c632acd7 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -731,10 +731,13 @@ to_chat(telepath, span_warning("You don't see anyone to send your thought to.")) return var/mob/living/recipient = tgui_input_list(telepath, "Choose a telepathic message recipient", "Telepathy", sort_names(recipient_options)) - if(isnull(recipient)) + if(isnull(recipient) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) return var/msg = tgui_input_text(telepath, title = "Telepathy") - if(isnull(msg)) + if(isnull(msg) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) + return + if(!(recipient in oview(telepath))) + to_chat(telepath, span_warning("You can't see [recipient] anymore!")) return if(recipient.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) to_chat(telepath, span_warning("As you reach into [recipient]'s mind, you are stopped by a mental blockage. It seems you've been foiled.")) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 0819c285d9a..51fb86d73ad 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -108,7 +108,6 @@ INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "deathgasp") set_stat(DEAD) - unset_machine() timeofdeath = world.time station_timestamp_timeofdeath = station_time_timestamp() var/turf/death_turf = get_turf(src) diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index ed496c0c84b..b8f1e60a612 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -157,7 +157,6 @@ /mob/living/proc/on_ui_blocked_trait_gain(datum/source) SIGNAL_HANDLER mobility_flags &= ~(MOBILITY_UI) - unset_machine() update_mob_action_buttons() /// Called when [TRAIT_UI_BLOCKED] is removed from the mob. diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 35866514b79..dd7e8a17c9b 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -66,9 +66,6 @@ handle_wounds(seconds_per_tick, times_fired) - if(machine) - machine.check_eye(src) - if(stat != DEAD) return 1 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7dcdfe54496..e37981d038a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1405,9 +1405,14 @@ var/datum/dna/mob_DNA = has_dna() if(!mob_DNA || !mob_DNA.check_mutation(/datum/mutation/human/telekinesis) || !tkMaxRangeCheck(src, target)) - to_chat(src, span_warning("You are too far away!")) + if(!(action_bitflags & SILENT_ADJACENCY)) + to_chat(src, span_warning("You are too far away!")) return FALSE + if((action_bitflags & NEED_VENTCRAWL) && !HAS_TRAIT(src, TRAIT_VENTCRAWLER_NUDE) && !HAS_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS)) + to_chat(src, span_warning("You wouldn't fit!")) + return FALSE + if((action_bitflags & NEED_DEXTERITY) && !ISADVANCEDTOOLUSER(src)) to_chat(src, span_warning("You don't have the dexterity to do this!")) return FALSE @@ -1851,7 +1856,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(registered_z && old_level_new_clients == 0) for(var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[registered_z]) controller.set_ai_status(AI_STATUS_OFF) - + //Check the amount of clients exists on the Z level we're moving towards, excluding ourselves. var/new_level_old_clients = SSmobs.clients_by_zlevel[new_z].len diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5f7571186be..292b0f1d7c1 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1,17 +1,5 @@ #define CALL_BOT_COOLDOWN 900 -//Not sure why this is necessary... -/proc/AutoUpdateAI(obj/subject) - var/is_in_use = 0 - if (subject != null) - for(var/A in GLOB.ai_list) - var/mob/living/silicon/ai/M = A - if ((M.client && M.machine == subject)) - is_in_use = 1 - subject.attack_ai(M) - return is_in_use - - /mob/living/silicon/ai name = "AI" real_name = "AI" @@ -645,7 +633,6 @@ /mob/living/silicon/ai/proc/ai_network_change() set category = "AI Commands" set name = "Jump To Network" - unset_machine() ai_tracking_tool.reset_tracking() var/cameralist[0] diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index e8c1919b020..98a2e629776 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -202,7 +202,6 @@ current = null if(ai_tracking_tool) ai_tracking_tool.reset_tracking() - unset_machine() if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) to_chat(src, "ERROR: Eyeobj not found. Creating new eye...") diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 76f5c2eec93..b11f125d38c 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -12,9 +12,6 @@ if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) view_core() - if(machine) - machine.check_eye(src) - // Handle power damage (oxy) if(aiRestorePowerRoutine) // Lost power diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 27bbec88292..ec204dbc82b 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -29,6 +29,7 @@ light_power = 0.6 del_on_death = TRUE req_one_access = list(ACCESS_ROBOTICS) + interaction_flags_click = ALLOW_SILICON_REACH ///Cooldown between salutations for commissioned bots COOLDOWN_DECLARE(next_salute_check) @@ -411,13 +412,9 @@ ui = new(user, src, "SimpleBot", name) ui.open() -/mob/living/simple_animal/bot/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return +/mob/living/simple_animal/bot/click_alt(mob/user) unlock_with_id(user) + return CLICK_ACTION_SUCCESS /mob/living/simple_animal/bot/proc/unlock_with_id(mob/user) if(bot_cover_flags & BOT_COVER_EMAGGED) diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index faa7d3a9edb..ae1c52d1652 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -140,7 +140,7 @@ return data // Actions received from TGUI -/mob/living/simple_animal/bot/floorbot/ui_act(action, params) +/mob/living/simple_animal/bot/floorbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) return @@ -161,7 +161,7 @@ tilestack.forceMove(drop_location()) if("line_mode") var/setdir = tgui_input_list(usr, "Select construction direction", "Direction", list("north", "east", "south", "west", "disable")) - if(isnull(setdir)) + if(isnull(setdir) || QDELETED(ui) || ui.status != UI_INTERACTIVE) return switch(setdir) if("north") diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index b8ceb33a37d..cf937e42bb7 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -2,7 +2,6 @@ SEND_SIGNAL(src, COMSIG_MOB_LOGOUT) log_message("[key_name(src)] is no longer owning mob [src]([src.type])", LOG_OWNERSHIP) SStgui.on_logout(src) - unset_machine() remove_from_player_list() ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6527205c2c7..4018207b6fa 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -30,7 +30,6 @@ else if(ckey) stack_trace("Mob without client but with associated ckey, [ckey], has been deleted.") - unset_machine() remove_from_mob_list() remove_from_dead_mob_list() remove_from_alive_mob_list() @@ -902,7 +901,6 @@ set name = "Cancel Camera View" set category = "OOC" reset_perspective(null) - unset_machine() //suppress the .click/dblclick macros so people can't use them to identify the location of items or aimbot /mob/verb/DisClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num) @@ -1199,6 +1197,10 @@ * * FORBID_TELEKINESIS_REACH - If telekinesis is forbidden to perform action from a distance (ex. canisters are blacklisted from telekinesis manipulation) * * ALLOW_SILICON_REACH - If silicons are allowed to perform action from a distance (silicons can operate airlocks from far away) * * ALLOW_RESTING - If resting on the floor is allowed to perform action () + * * ALLOW_VENTCRAWL - Mobs with ventcrawl traits can alt-click this to vent + * + * silence_adjacency: Sometimes we want to use this proc to check interaction without allowing it to throw errors for base case adjacency + * Alt click uses this, as otherwise you can detect what is interactable from a distance via the error message **/ /mob/proc/can_perform_action(atom/movable/target, action_bitflags) return @@ -1616,9 +1618,6 @@ /mob/vv_edit_var(var_name, var_value) switch(var_name) - if(NAMEOF(src, machine)) - set_machine(var_value) - . = TRUE if(NAMEOF(src, focus)) set_focus(var_value) . = TRUE diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 44d0db90355..2a5be377ecd 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -79,9 +79,6 @@ var/computer_id = null var/list/logging = list() - /// The machine the mob is interacting with (this is very bad old code btw) - var/obj/machinery/machine = null - /// Tick time the mob can next move var/next_move = null diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 634b1dd648f..c3d5040c815 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -191,6 +191,8 @@ /obj/item/clothing/neck/link_scryer/attack_self(mob/user, modifiers) var/new_label = reject_bad_text(tgui_input_text(user, "Change the visible name", "Set Name", label, MAX_NAME_LEN)) + if(!user.is_holding(src)) + return if(!new_label) balloon_alert(user, "invalid name!") return diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index c63441124ae..c7369724ee4 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -223,19 +223,18 @@ /obj/item/modular_computer/get_cell() return internal_cell -/obj/item/modular_computer/AltClick(mob/user) - . = ..() +/obj/item/modular_computer/click_alt(mob/user) if(issilicon(user)) - return FALSE - if(!user.can_perform_action(src)) - return FALSE + return NONE if(RemoveID(user)) - return TRUE + return CLICK_ACTION_SUCCESS if(istype(inserted_pai)) // Remove pAI remove_pai(user) - return TRUE + return CLICK_ACTION_SUCCESS + + return CLICK_ACTION_BLOCKING // Gets IDs/access levels from card slot. Would be useful when/if PDAs would become modular PCs. //guess what /obj/item/modular_computer/GetAccess() diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 3bf46f16d1b..b55fb6d2ee6 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -91,14 +91,11 @@ toggle_open(user) -/obj/item/modular_computer/laptop/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - if(screen_on) // Close it. - try_toggle_open(user) - else - return ..() +/obj/item/modular_computer/laptop/click_alt(mob/user) + if(!screen_on) + return CLICK_ACTION_BLOCKING + try_toggle_open(user) // Close it. + return CLICK_ACTION_SUCCESS /obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null) if(screen_on) diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 37ef56a0626..b6efa629d5e 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -161,12 +161,6 @@ inserted_item = attacking_item playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) -/obj/item/modular_computer/pda/AltClick(mob/user) - . = ..() - if(.) - return - - remove_pen(user) /obj/item/modular_computer/pda/CtrlClick(mob/user) . = ..() diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 0e17f012453..6f0050534cc 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -116,11 +116,11 @@ SIGNAL_HANDLER return update_icon(updates) -/obj/machinery/modular_computer/AltClick(mob/user) - . = ..() +/obj/machinery/modular_computer/click_alt(mob/user) if(CPU_INTERACTABLE(user) || !can_interact(user)) - return - cpu.AltClick(user) + return NONE + cpu.click_alt(user) + return CLICK_ACTION_SUCCESS //ATTACK HAND IGNORING PARENT RETURN VALUE // On-click handling. Turns on the computer if it's off and opens the GUI. diff --git a/code/modules/pai/door_jack.dm b/code/modules/pai/door_jack.dm index 182cdc10027..36220ecface 100644 --- a/code/modules/pai/door_jack.dm +++ b/code/modules/pai/door_jack.dm @@ -104,17 +104,17 @@ /mob/living/silicon/pai/proc/hack_door() if(!hacking_cable) return FALSE - if(!hacking_cable.machine) + if(!hacking_cable.hacking_machine) balloon_alert(src, "nothing connected") return FALSE playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, TRUE) balloon_alert(src, "overriding...") // Now begin hacking - if(!do_after(src, 15 SECONDS, hacking_cable.machine, timed_action_flags = NONE, progress = TRUE)) + if(!do_after(src, 15 SECONDS, hacking_cable.hacking_machine, timed_action_flags = NONE, progress = TRUE)) balloon_alert(src, "failed! retracting...") QDEL_NULL(hacking_cable) return FALSE - var/obj/machinery/door/door = hacking_cable.machine + var/obj/machinery/door/door = hacking_cable.hacking_machine balloon_alert(src, "success") door.open() QDEL_NULL(hacking_cable) diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 1dfe4ea7821..9c8ec0b8640 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -20,11 +20,11 @@ return . += span_notice("Right-click to tear off the carbon-copy (you must use both hands).") -/obj/item/paper/carbon/AltClick(mob/living/user) +/obj/item/paper/carbon/click_alt(mob/living/user) if(!copied) to_chat(user, span_notice("Take off the carbon copy first.")) - return - return ..() + return CLICK_ACTION_BLOCKING + return CLICK_ACTION_SUCCESS /obj/item/paper/carbon/proc/removecopy(mob/living/user) if(copied) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 7285aa3172d..8b475ed6324 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -71,13 +71,16 @@ pen = null update_icon() -/obj/item/clipboard/AltClick(mob/user) - ..() - if(pen) - if(integrated_pen) - to_chat(user, span_warning("You can't seem to find a way to remove [src]'s [pen].")) - else - remove_pen(user) +/obj/item/clipboard/click_alt(mob/user) + if(isnull(pen)) + return CLICK_ACTION_BLOCKING + + if(integrated_pen) + to_chat(user, span_warning("You can't seem to find a way to remove [src]'s [pen].")) + return CLICK_ACTION_BLOCKING + + remove_pen(user) + return CLICK_ACTION_SUCCESS /obj/item/clipboard/update_overlays() . = ..() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index e4ac04a22b6..d89d74d7f8e 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -107,12 +107,9 @@ to_chat(user, span_notice("You turn off [src].")) return TRUE -/obj/item/hand_labeler/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(. & ITEM_INTERACT_ANY_BLOCKER) - return . +/obj/item/hand_labeler/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!istype(tool, /obj/item/hand_labeler_refill)) - return . + return NONE balloon_alert(user, "refilled") qdel(tool) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 5aac6d93bc3..e1bddd6feff 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -30,6 +30,7 @@ grind_results = list(/datum/reagent/cellulose = 3) color = COLOR_WHITE item_flags = SKIP_FANTASY_ON_SPAWN + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS /// Lazylist of raw, unsanitised, unparsed text inputs that have been made to the paper. var/list/datum/paper_input/raw_text_inputs @@ -359,13 +360,13 @@ return TRUE return ..() -/obj/item/paper/AltClick(mob/living/user) - . = ..() - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/paper/click_alt(mob/living/user) if(HAS_TRAIT(user, TRAIT_PAPER_MASTER)) - return make_plane(user, /obj/item/paperplane/syndicate) - return make_plane(user, /obj/item/paperplane) + make_plane(user, /obj/item/paperplane/syndicate) + return CLICK_ACTION_SUCCESS + make_plane(user, /obj/item/paperplane) + return CLICK_ACTION_SUCCESS + /** @@ -374,9 +375,9 @@ * * Arguments: * * mob/living/user - who's folding - * * obj/item/paperplane/plane_type - what it will be folded into (path) + * * plane_type - what it will be folded into (path) */ -/obj/item/paper/proc/make_plane(mob/living/user, obj/item/paperplane/plane_type = /obj/item/paperplane) +/obj/item/paper/proc/make_plane(mob/living/user, plane_type = /obj/item/paperplane) balloon_alert(user, "folded into a plane") user.temporarilyRemoveItemFromInventory(src) var/obj/item/paperplane/new_plane = new plane_type(loc, src) diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index ae93a1daad8..8e4fedf2fda 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -141,16 +141,14 @@ return ..() -/obj/item/papercutter/AltClick(mob/user) - if(!user.Adjacent(src)) - return ..() - +/obj/item/papercutter/click_alt(mob/user) // can only remove one at a time; paper goes first, as its most likely what players will want to be taking out if(!isnull(stored_paper)) user.put_in_hands(stored_paper) else if(!isnull(stored_blade) && !blade_secured) user.put_in_hands(stored_blade) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/papercutter/attack_hand_secondary(mob/user, list/modifiers) if(!stored_blade) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 2a9e78e2489..ec71eda2e46 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -44,6 +44,7 @@ dart_insert_projectile_icon_state, \ CALLBACK(src, PROC_REF(get_dart_var_modifiers))\ ) + AddElement(/datum/element/tool_renaming) RegisterSignal(src, COMSIG_DART_INSERT_ADDED, PROC_REF(on_inserted_into_dart)) RegisterSignal(src, COMSIG_DART_INSERT_REMOVED, PROC_REF(on_removed_from_dart)) @@ -179,6 +180,7 @@ if(current_skin) desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." + /obj/item/pen/fountain/captain/proc/reskin_dart_insert(datum/component/dart_insert/insert_comp) if(!istype(insert_comp)) //You really shouldn't be sending this signal from anything other than a dart_insert component return @@ -209,54 +211,6 @@ log_combat(user, M, "stabbed", src) return TRUE -/obj/item/pen/afterattack(obj/O, mob/living/user, proximity) - . = ..() - - if (!proximity) - return . - - . |= AFTERATTACK_PROCESSED_ITEM - - //Changing name/description of items. Only works if they have the UNIQUE_RENAME object flag set - if(isobj(O) && (O.obj_flags & UNIQUE_RENAME)) - var/penchoice = tgui_input_list(user, "What would you like to edit?", "Pen Setting", list("Rename", "Description", "Reset")) - if(QDELETED(O) || !user.can_perform_action(O)) - return - if(penchoice == "Rename") - var/input = tgui_input_text(user, "What do you want to name [O]?", "Object Name", "[O.name]", MAX_NAME_LEN) - var/oldname = O.name - if(QDELETED(O) || !user.can_perform_action(O)) - return - if(input == oldname || !input) - to_chat(user, span_notice("You changed [O] to... well... [O].")) - else - O.AddComponent(/datum/component/rename, input, O.desc) - to_chat(user, span_notice("You have successfully renamed \the [oldname] to [O].")) - ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) - O.update_appearance(UPDATE_ICON) - - if(penchoice == "Description") - var/input = tgui_input_text(user, "Describe [O]", "Description", "[O.desc]", 280) - var/olddesc = O.desc - if(QDELETED(O) || !user.can_perform_action(O)) - return - if(input == olddesc || !input) - to_chat(user, span_notice("You decide against changing [O]'s description.")) - else - O.AddComponent(/datum/component/rename, O.name, input) - to_chat(user, span_notice("You have successfully changed [O]'s description.")) - ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) - O.update_appearance(UPDATE_ICON) - - if(penchoice == "Reset") - if(QDELETED(O) || !user.can_perform_action(O)) - return - - qdel(O.GetComponent(/datum/component/rename)) - to_chat(user, span_notice("You have successfully reset [O]'s name and description.")) - REMOVE_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) - O.update_appearance(UPDATE_ICON) - /obj/item/pen/get_writing_implement_details() return list( interaction_mode = MODE_WRITING, diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index a0a51da165f..35462a24d86 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -72,10 +72,9 @@ picture_size_y = min(clamp(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) return TRUE -/obj/item/camera/AltClick(mob/user) - if(!user.can_perform_action(src)) - return +/obj/item/camera/click_alt(mob/user) adjust_zoom(user) + return CLICK_ACTION_SUCCESS /obj/item/camera/attack(mob/living/carbon/human/M, mob/user) return @@ -251,11 +250,11 @@ to_chat(user, span_notice("[pictures_left] photos left.")) if(can_customise) - var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) + var/customise = user.is_holding(new_photo) && tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No")) if(customise == "Yes") - var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32) - var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128) - var/caption = tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256) + var/name1 = user.is_holding(new_photo) && tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32) + var/desc1 = user.is_holding(new_photo) && tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128) + var/caption = user.is_holding(new_photo) && tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256) if(name1) picture.picture_name = name1 if(desc1) diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index 33073ae910f..a7990f65ce5 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -343,9 +343,13 @@ All the important duct code: /obj/item/stack/ducts/attack_self(mob/user) var/new_layer = tgui_input_list(user, "Select a layer", "Layer", GLOB.plumbing_layers, duct_layer) + if(!user.is_holding(src)) + return if(new_layer) duct_layer = new_layer var/new_color = tgui_input_list(user, "Select a color", "Color", GLOB.pipe_paint_colors, duct_color) + if(!user.is_holding(src)) + return if(new_color) duct_color = new_color add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index 132d882dbee..8baf59508b8 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -26,8 +26,6 @@ . = ..() . += span_notice("The maximum volume display reads: [reagents.maximum_volume] units.") -/obj/machinery/plumbing/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm index 633f70830f0..c4df35164f0 100644 --- a/code/modules/plumbing/plumbers/filter.dm +++ b/code/modules/plumbing/plumbers/filter.dm @@ -30,7 +30,7 @@ data["right"] = english_right return data -/obj/machinery/plumbing/filter/ui_act(action, params) +/obj/machinery/plumbing/filter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -42,6 +42,8 @@ var/selected_reagent = tgui_input_list(usr, "Select [which] reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) return TRUE + if(QDELETED(ui) || ui.status != UI_INTERACTIVE) + return FALSE var/datum/reagent/chem_id = GLOB.name2reagent[selected_reagent] if(!chem_id) @@ -69,5 +71,3 @@ if(english_right.Find(chem_name)) english_right -= chem_name right -= chem_id - - diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index 7ed187929df..f9a5ae47598 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -29,8 +29,6 @@ reagents.expose(get_turf(src), TOUCH) //splash on the floor reagents.clear_reagents() -/obj/machinery/iv_drip/plumbing/can_use_alt_click(mob/user) - return FALSE //Alt click is used for rotation /obj/machinery/iv_drip/plumbing/wrench_act(mob/living/user, obj/item/tool) if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index 72caa603767..9bdac2f98b2 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -107,6 +107,8 @@ var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) return FALSE + if(QDELETED(ui) || ui.status != UI_INTERACTIVE) + return FALSE var/datum/reagent/input_reagent = GLOB.name2reagent[selected_reagent] if(!input_reagent) diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index 00d3fc7a538..6a8835cd5b7 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -1,10 +1,7 @@ //attack with an item - open/close cover, insert cell, or (un)lock interface -/obj/machinery/power/apc/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - . = ..() - if(.) - return . - +/obj/machinery/power/apc/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE if(HAS_TRAIT(tool, TRAIT_APC_SHOCKING)) . = fork_outlet_act(user, tool) if(.) @@ -17,7 +14,7 @@ if(istype(tool, /obj/item/stock_parts/cell)) . = cell_act(user, tool) else if(istype(tool, /obj/item/stack/cable_coil)) - . = cable_act(user, tool, is_right_clicking) + . = cable_act(user, tool, LAZYACCESS(modifiers, RIGHT_CLICK)) else if(istype(tool, /obj/item/electronics/apc)) . = electronics_act(user, tool) else if(istype(tool, /obj/item/electroadaptive_pseudocircuit)) @@ -26,7 +23,7 @@ . = wallframe_act(user, tool) if(.) return . - + if(panel_open && !opened && is_wire_tool(tool)) wires.interact(user) return ITEM_INTERACT_SUCCESS @@ -73,44 +70,59 @@ update_appearance() return ITEM_INTERACT_SUCCESS +/// Checks if we can place a terminal on the APC +/obj/machinery/power/apc/proc/can_place_terminal(mob/living/user, obj/item/stack/cable_coil/installing_cable, silent = TRUE) + if(!opened) + return FALSE + var/turf/host_turf = get_turf(src) + if(host_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + if(!silent && user) + balloon_alert(user, "remove the floor plating!") + return FALSE + if(!isnull(terminal)) + if(!silent && user) + balloon_alert(user, "already wired!") + return FALSE + if(!has_electronics) + if(!silent && user) + balloon_alert(user, "no board to wire!") + return FALSE + if(panel_open) + if(!silent && user) + balloon_alert(user, "wires prevent placing a terminal!") + return FALSE + if(installing_cable.get_amount() < 10) + if(!silent && user) + balloon_alert(user, "need ten lengths of cable!") + return FALSE + return TRUE + /// Called when we interact with the APC with a cable, attempts to wire the APC and create a terminal /obj/machinery/power/apc/proc/cable_act(mob/living/user, obj/item/stack/cable_coil/installing_cable, is_right_clicking) if(!opened) return NONE - - var/turf/host_turf = get_turf(src) - if(!host_turf) - CRASH("cable_act on APC when it's not on a turf") - if(host_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) - balloon_alert(user, "remove the floor plating!") - return ITEM_INTERACT_BLOCKING - if(terminal) - balloon_alert(user, "already wired!") - return ITEM_INTERACT_BLOCKING - if(!has_electronics) - balloon_alert(user, "no board to wire!") - return ITEM_INTERACT_BLOCKING - - if(installing_cable.get_amount() < 10) - balloon_alert(user, "need ten lengths of cable!") + if(!can_place_terminal(user, installing_cable, silent = FALSE)) return ITEM_INTERACT_BLOCKING var/terminal_cable_layer = cable_layer // Default to machine's cable layer if(is_right_clicking) var/choice = tgui_input_list(user, "Select Power Input Cable Layer", "Select Cable Layer", GLOB.cable_name_to_layer) - if(isnull(choice)) + if(isnull(choice) \ + || !user.is_holding(installing_cable) \ + || !user.Adjacent(src) \ + || user.incapacitated() \ + || !can_place_terminal(user, installing_cable, silent = TRUE) \ + ) return ITEM_INTERACT_BLOCKING terminal_cable_layer = GLOB.cable_name_to_layer[choice] - user.visible_message(span_notice("[user.name] adds cables to the APC frame.")) - balloon_alert(user, "adding cables to the frame...") - playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + user.visible_message(span_notice("[user.name] starts addding cables to the APC frame.")) + balloon_alert(user, "adding cables...") + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) if(!do_after(user, 2 SECONDS, target = src)) return ITEM_INTERACT_BLOCKING - if(installing_cable.get_amount() < 10 || !installing_cable) - return ITEM_INTERACT_BLOCKING - if(terminal || !opened || !has_electronics) + if(!can_place_terminal(user, installing_cable, silent = TRUE)) return ITEM_INTERACT_BLOCKING var/turf/our_turf = get_turf(src) var/obj/structure/cable/cable_node = our_turf.get_cable_node(terminal_cable_layer) @@ -118,7 +130,8 @@ do_sparks(5, TRUE, src) return ITEM_INTERACT_BLOCKING installing_cable.use(10) - balloon_alert(user, "cables added to the frame") + user.visible_message(span_notice("[user.name] adds cables to the APC frame.")) + balloon_alert(user, "cables added") make_terminal(terminal_cable_layer) terminal.connect_to_network() return ITEM_INTERACT_SUCCESS @@ -127,7 +140,7 @@ /obj/machinery/power/apc/proc/electronics_act(mob/living/user, obj/item/electronics/apc/installing_board) if(!opened) return NONE - + if(has_electronics) balloon_alert(user, "there is already a board!") return ITEM_INTERACT_BLOCKING diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index 2a41c70bdfe..7f1ef8fc2e3 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -163,10 +163,9 @@ By design, d1 is the smallest direction and d2 is the highest stored.color = colorC stored.update_appearance() -/obj/structure/pipe_cleaner/AltClick(mob/living/user) - if(!user.can_perform_action(src)) - return +/obj/structure/pipe_cleaner/click_alt(mob/living/user) cut_pipe_cleaner(user) + return CLICK_ACTION_SUCCESS /////////////////////////////////////////////// // The pipe cleaner coil object, used for laying pipe cleaner diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index a360fc12145..38f18d7d627 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -346,8 +346,6 @@ return return ..() -/obj/machinery/power/emitter/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/machinery/power/emitter/proc/integrate(obj/item/gun/energy/energy_gun, mob/user) if(!istype(energy_gun, /obj/item/gun/energy)) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index c6fa9274cb3..2aa5247451d 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -112,55 +112,42 @@ //building and linking a terminal if(istype(item, /obj/item/stack/cable_coil)) - var/dir = get_dir(user,src) - if(dir & (dir-1))//we don't want diagonal click - return - - if(terminal) //is there already a terminal ? - to_chat(user, span_warning("This SMES already has a power terminal!")) - return - - if(!panel_open) //is the panel open ? - to_chat(user, span_warning("You must open the maintenance panel first!")) - return - - var/turf/turf = get_turf(user) - if (turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) //can we get to the underfloor? - to_chat(user, span_warning("You must first remove the floor plating!")) - return - - - var/obj/item/stack/cable_coil/cable = item - if(cable.get_amount() < 10) - to_chat(user, span_warning("You need more wires!")) + if(!can_place_terminal(user, item, silent = FALSE)) return var/terminal_cable_layer if(LAZYACCESS(params2list(params), RIGHT_CLICK)) var/choice = tgui_input_list(user, "Select Power Input Cable Layer", "Select Cable Layer", GLOB.cable_name_to_layer) - if(isnull(choice)) + if(isnull(choice) \ + || !user.is_holding(item) \ + || !user.Adjacent(src) \ + || user.incapacitated() \ + || !can_place_terminal(user, item, silent = TRUE) \ + ) return terminal_cable_layer = GLOB.cable_name_to_layer[choice] - to_chat(user, span_notice("You start building the power terminal...")) - playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE) + user.visible_message(span_notice("[user.name] starts adding cables to [src].")) + balloon_alert(user, "adding cables...") + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - if(do_after(user, 2 SECONDS, target = src)) - if(cable.get_amount() < 10 || !cable) - return - var/obj/structure/cable/connected_cable = turf.get_cable_node(terminal_cable_layer) //get the connecting node cable, if there's one - if (prob(50) && electrocute_mob(user, connected_cable, connected_cable, 1, TRUE)) //animate the electrocution if uncautious and unlucky - do_sparks(5, TRUE, src) - return - if(!terminal) - cable.use(10) - user.visible_message(span_notice("[user.name] builds a power terminal."),\ - span_notice("You build the power terminal.")) - - //build the terminal and link it to the network - make_terminal(turf, terminal_cable_layer) - terminal.connect_to_network() - connect_to_network() + if(!do_after(user, 2 SECONDS, target = src)) + return + if(!can_place_terminal(user, item, silent = TRUE)) + return + var/obj/item/stack/cable_coil/cable = item + var/turf/turf = get_turf(user) + var/obj/structure/cable/connected_cable = turf.get_cable_node(terminal_cable_layer) //get the connecting node cable, if there's one + if (prob(50) && electrocute_mob(user, connected_cable, connected_cable, 1, TRUE)) //animate the electrocution if uncautious and unlucky + do_sparks(5, TRUE, src) + return + cable.use(10) + user.visible_message(span_notice("[user.name] adds cables to [src]")) + balloon_alert(user, "cables added") + //build the terminal and link it to the network + make_terminal(turf, terminal_cable_layer) + terminal.connect_to_network() + connect_to_network() return //crowbarring it ! @@ -175,6 +162,31 @@ return ..() +/// Checks if we're in a valid state to place a terminal +/obj/machinery/power/smes/proc/can_place_terminal(mob/living/user, obj/item/stack/cable_coil/installing_cable, silent = TRUE) + var/set_dir = get_dir(user, src) + if(set_dir & (set_dir - 1))//we don't want diagonal click + return FALSE + + var/turf/terminal_turf = get_turf(user) + if(!panel_open) + if(!silent && user) + balloon_alert(user, "open the maintenance panel!") + return FALSE + if(terminal_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + if(!silent && user) + balloon_alert(user, "remove the floor plating!") + return FALSE + if(terminal) + if(!silent && user) + balloon_alert(user, "already wired!") + return FALSE + if(installing_cable.get_amount() < 10) + if(!silent && user) + balloon_alert(user, "need ten lengths of cable!") + return FALSE + return TRUE + /obj/machinery/power/smes/wirecutter_act(mob/living/user, obj/item/item) //disassembling the terminal . = ..() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 456577d3981..b206e1977f4 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -496,18 +496,16 @@ update_weight_class(w_class - I.w_class) return ..() -/obj/item/gun/ballistic/AltClick(mob/user) - if (unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - return - if(loc == user) - if(suppressed && can_unsuppress) - var/obj/item/suppressor/S = suppressed - if(!user.is_holding(src)) - return ..() - balloon_alert(user, "[S.name] removed") - user.put_in_hands(S) - clear_suppressor() +/obj/item/gun/ballistic/click_alt(mob/user) + if(!suppressed || !can_unsuppress) + return CLICK_ACTION_BLOCKING + var/obj/item/suppressor/S = suppressed + if(!user.is_holding(src)) + return CLICK_ACTION_BLOCKING + balloon_alert(user, "[S.name] removed") + user.put_in_hands(S) + clear_suppressor() + return CLICK_ACTION_SUCCESS ///Prefire empty checks for the bolt drop /obj/item/gun/ballistic/proc/prefire_empty_checks() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 3d6940692d8..8c6e2ae7cbd 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -260,13 +260,12 @@ . += span_notice("It seems like you could use an empty hand to remove the magazine.") -/obj/item/gun/ballistic/automatic/l6_saw/AltClick(mob/user) - if(!user.can_perform_action(src)) - return +/obj/item/gun/ballistic/automatic/l6_saw/click_alt(mob/user) cover_open = !cover_open balloon_alert(user, "cover [cover_open ? "opened" : "closed"]") playsound(src, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/gun/ballistic/automatic/l6_saw/update_icon_state() . = ..() diff --git a/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/code/modules/projectiles/guns/ballistic/bows/_bow.dm index c356d5b266c..86094d0fe17 100644 --- a/code/modules/projectiles/guns/ballistic/bows/_bow.dm +++ b/code/modules/projectiles/guns/ballistic/bows/_bow.dm @@ -29,13 +29,14 @@ . = ..() icon_state = chambered ? "[base_icon_state]_[drawn ? "drawn" : "nocked"]" : "[base_icon_state]" -/obj/item/gun/ballistic/bow/AltClick(mob/user) +/obj/item/gun/ballistic/bow/click_alt(mob/user) if(isnull(chambered)) - return ..() + return CLICK_ACTION_BLOCKING user.put_in_hands(chambered) chambered = magazine.get_round() update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/gun/ballistic/bow/proc/drop_arrow() chambered.forceMove(drop_location()) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 373607e53dd..e142616cbd4 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -37,9 +37,9 @@ ..() chamber_round() -/obj/item/gun/ballistic/revolver/AltClick(mob/user) - ..() +/obj/item/gun/ballistic/revolver/click_alt(mob/user) spin() + return CLICK_ACTION_SUCCESS /obj/item/gun/ballistic/revolver/fire_sounds() var/frequency_to_use = sin((90/magazine?.max_ammo) * get_ammo(TRUE, FALSE)) // fucking REVOLVERS diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 37990971138..c584359b8ce 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -85,6 +85,7 @@ w_class = WEIGHT_CLASS_HUGE semi_auto = TRUE accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/tube + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS /// If defined, the secondary tube is this type, if you want different shell loads var/alt_mag_type /// If TRUE, we're drawing from the alternate_magazine @@ -131,10 +132,9 @@ else balloon_alert(user, "switched to tube A") -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/AltClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return +/obj/item/gun/ballistic/shotgun/automatic/dual_tube/click_alt(mob/living/user) rack() + return CLICK_ACTION_SUCCESS // Bulldog shotgun // @@ -288,10 +288,6 @@ can_be_sawn_off = TRUE pb_knockback = 3 // it's a super shotgun! -/obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) /obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user) . = ..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7850dd59f46..1d53eff0f9b 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1204,7 +1204,6 @@ var/turf/startloc = get_turf(src) var/obj/projectile/bullet = new projectile_type(startloc) bullet.starting = startloc - var/list/ignore = list() for (var/atom/thing as anything in ignore_targets) bullet.impacted[WEAKREF(thing)] = TRUE bullet.firer = firer || src diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 80afcc534b0..6984c042f55 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -458,7 +458,7 @@ return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING -/obj/machinery/chem_dispenser/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/chem_dispenser/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) //SKYRAT EDIT ADDITION START - CHEMISTRY QOL var/obj/item/reagent_containers/container = tool @@ -467,12 +467,12 @@ transferAmounts = container.possible_transfer_amounts //SKYRAT EDIT ADDITION END if(!user.transferItemToLoc(tool, src)) - return ..() + return ITEM_INTERACT_BLOCKING replace_beaker(user, tool) ui_interact(user) return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/machinery/chem_dispenser/get_cell() return cell @@ -569,8 +569,6 @@ /obj/machinery/chem_dispenser/attack_ai_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) -/obj/machinery/chem_dispenser/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/machinery/chem_dispenser/drinks name = "soda dispenser" diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 857cd5bd221..76b2dbf7f96 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -94,9 +94,9 @@ heater_coefficient *= micro_laser.tier -/obj/machinery/chem_heater/item_interaction(mob/living/user, obj/item/held_item, list/modifiers, is_right_clicking) +/obj/machinery/chem_heater/item_interaction(mob/living/user, obj/item/held_item, list/modifiers) if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) - return ..() + return NONE if(QDELETED(beaker)) if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) @@ -110,7 +110,7 @@ balloon_alert(user, "beaker added") return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/machinery/chem_heater/wrench_act(mob/living/user, obj/item/tool) . = ITEM_INTERACT_BLOCKING diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index 298fe259814..ca75736db03 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -147,9 +147,9 @@ for(var/datum/stock_part/micro_laser/laser in component_parts) cms_coefficient /= laser.tier -/obj/machinery/chem_mass_spec/item_interaction(mob/living/user, obj/item/item, list/modifiers, is_right_clicking) +/obj/machinery/chem_mass_spec/item_interaction(mob/living/user, obj/item/item, list/modifiers) if((item.item_flags & ABSTRACT) || (item.flags_1 & HOLOGRAM_1) || !can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return ..() + return NONE if(is_reagent_container(item) && item.is_open_container()) if(processing_reagents) @@ -160,13 +160,14 @@ if(!user.transferItemToLoc(beaker, src)) return ITEM_INTERACT_BLOCKING + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) replace_beaker(user, !is_right_clicking, beaker) to_chat(user, span_notice("You add [beaker] to [is_right_clicking ? "output" : "input"] slot.")) update_appearance() ui_interact(user) return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/machinery/chem_mass_spec/wrench_act(mob/living/user, obj/item/tool) . = ITEM_INTERACT_BLOCKING @@ -433,14 +434,12 @@ replace_beaker(ui.user, FALSE) return TRUE -/obj/machinery/chem_mass_spec/AltClick(mob/living/user) - . = ..() - if(!can_interact(user)) - return +/obj/machinery/chem_mass_spec/click_alt(mob/living/user) if(processing_reagents) balloon_alert(user, "still processing!") - return ..() + return CLICK_ACTION_BLOCKING replace_beaker(user, TRUE) + return CLICK_ACTION_SUCCESS /obj/machinery/chem_mass_spec/alt_click_secondary(mob/living/user) . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index fa3448c392f..9f210e12ee4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -174,9 +174,9 @@ ) return containers -/obj/machinery/chem_master/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/chem_master/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1) || !can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) - return ..() + return NONE if(is_reagent_container(tool) && tool.is_open_container()) replace_beaker(user, tool) @@ -186,7 +186,7 @@ else return ITEM_INTERACT_BLOCKING - return ..() + return NONE /obj/machinery/chem_master/wrench_act(mob/living/user, obj/item/tool) if(user.combat_mode) @@ -406,7 +406,7 @@ return FALSE //use energy - if(!use_energy(active_power_usage)) + if(!use_energy(active_power_usage, force = FALSE)) return FALSE //do the operation @@ -518,7 +518,9 @@ return //use power - if(!use_energy(active_power_usage)) + if(!use_energy(active_power_usage, force = FALSE)) + is_printing = FALSE + update_appearance(UPDATE_OVERLAYS) return //print the stuff diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm index a6113d2f0c6..25a7eecbd37 100644 --- a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -9,6 +9,7 @@ slot_flags = ITEM_SLOT_BELT custom_price = PAYCHECK_CREW * 10 custom_premium_price = PAYCHECK_CREW * 14 + interaction_flags_click = FORBID_TELEKINESIS_REACH ///Creating an empty slot for a beaker that can be added to dispense into var/obj/item/reagent_containers/beaker @@ -105,14 +106,14 @@ /obj/item/storage/portable_chem_mixer/ex_act(severity, target) return severity > EXPLODE_LIGHT ? ..() : FALSE -/obj/item/storage/portable_chem_mixer/item_interaction(mob/living/user, obj/item/weapon, list/modifiers, is_right_clicking) +/obj/item/storage/portable_chem_mixer/item_interaction(mob/living/user, obj/item/weapon, list/modifiers) if (!atom_storage.locked || \ (weapon.item_flags & ABSTRACT) || \ (weapon.flags_1 & HOLOGRAM_1) || \ !is_reagent_container(weapon) || \ !weapon.is_open_container() \ ) - return ..() + return NONE replace_beaker(user, weapon) update_appearance() @@ -250,15 +251,14 @@ var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) -/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) +/obj/item/storage/portable_chem_mixer/click_alt(mob/living/user) if(!atom_storage.locked) balloon_alert(user, "lock first to use alt eject!") - return ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return + return CLICK_ACTION_BLOCKING replace_beaker(user) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) if(atom_storage.locked == STORAGE_FULLY_LOCKED) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index f02d0d47deb..e206ffebbc9 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -211,9 +211,9 @@ return items_transfered -/obj/machinery/reagentgrinder/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/reagentgrinder/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1) || !can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH)) - return ..() + return NONE //add the beaker if (is_reagent_container(tool) && tool.is_open_container()) @@ -262,7 +262,7 @@ to_chat(user, span_warning("You must drag & dump contents of [tool] into [src].")) return ITEM_INTERACT_BLOCKING - return ..() + return NONE /obj/machinery/reagentgrinder/wrench_act(mob/living/user, obj/item/tool) if(user.combat_mode) diff --git a/code/modules/reagents/reagent_containers/chem_pack.dm b/code/modules/reagents/reagent_containers/chem_pack.dm index 3345f1e99ef..98ffa2e596e 100644 --- a/code/modules/reagents/reagent_containers/chem_pack.dm +++ b/code/modules/reagents/reagent_containers/chem_pack.dm @@ -8,23 +8,29 @@ spillable = TRUE obj_flags = UNIQUE_RENAME resistance_flags = ACID_PROOF - var/sealed = FALSE fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) has_variable_transfer_amount = FALSE + interaction_flags_click = NEED_DEXTERITY + /// Whether this has been sealed shut + var/sealed = FALSE -/obj/item/reagent_containers/chem_pack/AltClick(mob/living/user) - if(user.can_perform_action(src, NEED_DEXTERITY) && !sealed) - if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))) - to_chat(user, span_warning("Uh... whoops! You accidentally spill the content of the bag onto yourself.")) - SplashReagents(user) - return +/obj/item/reagent_containers/chem_pack/click_alt(mob/living/user) + if(sealed) + balloon_alert(user, "sealed!") + return CLICK_ACTION_BLOCKING - reagents.flags = NONE - reagent_flags = DRAWABLE | INJECTABLE //To allow for sabotage or ghetto use. - reagents.flags = reagent_flags - spillable = FALSE - sealed = TRUE - to_chat(user, span_notice("You seal the bag.")) + if(iscarbon(user) && (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))) + to_chat(user, span_warning("Uh... whoops! You accidentally spill the content of the bag onto yourself.")) + SplashReagents(user) + return CLICK_ACTION_BLOCKING + + reagents.flags = NONE + reagent_flags = DRAWABLE | INJECTABLE //To allow for sabotage or ghetto use. + reagents.flags = reagent_flags + spillable = FALSE + sealed = TRUE + balloon_alert(user, "sealed") + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/chem_pack/examine() . = ..() diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index a6e4dd42885..ea0eaf989dd 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -481,11 +481,13 @@ spillable = TRUE var/obj/item/grinded -/obj/item/reagent_containers/cup/mortar/AltClick(mob/user) - if(grinded) - grinded.forceMove(drop_location()) - grinded = null - to_chat(user, span_notice("You eject the item inside.")) +/obj/item/reagent_containers/cup/mortar/click_alt(mob/user) + if(!grinded) + return CLICK_ACTION_BLOCKING + grinded.forceMove(drop_location()) + grinded = null + balloon_alert(user, "ejected") + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/mortar/attackby(obj/item/I, mob/living/carbon/human/user) ..() diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm index 1e4466da8c3..75bc79c5a6a 100644 --- a/code/modules/reagents/reagent_containers/cups/bottle.dm +++ b/code/modules/reagents/reagent_containers/cups/bottle.dm @@ -513,7 +513,7 @@ return TRUE -/obj/item/reagent_containers/cup/bottle/syrup_bottle/AltClick(mob/user) +/obj/item/reagent_containers/cup/bottle/syrup_bottle/click_alt(mob/user) cap_on = !cap_on if(!cap_on) icon_state = "syrup_open" @@ -522,7 +522,7 @@ icon_state = "syrup" balloon_alert(user, "put pump cap on") update_icon_state() - return ..() + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/bottle/syrup_bottle/proc/rename(mob/user, obj/item/writing_instrument) if(!user.can_write(writing_instrument)) diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index adcd2ff79fa..7441614682c 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -35,7 +35,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...) . = ..() if(!length(reagents.reagent_list)) - REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) //so new drinks can rename the glass + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) //so new drinks can rename the glass // Having our icon state change removes fill thresholds /obj/item/reagent_containers/cup/glass/drinkingglass/on_cup_change(datum/glass_style/style) @@ -58,7 +58,7 @@ return REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, SHAKER_LABEL_TRAIT) - REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) name = initial(name) desc = initial(desc) update_appearance(UPDATE_NAME | UPDATE_DESC) diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index cba2f937da4..5a3ed446f60 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -122,10 +122,10 @@ . += span_notice("Alt-click to toggle cup lid.") return -/obj/item/reagent_containers/cup/glass/coffee/AltClick(mob/user) +/obj/item/reagent_containers/cup/glass/coffee/click_alt(mob/user) lid_open = !lid_open update_icon_state() - return ..() + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/glass/coffee/update_icon_state() if(lid_open) @@ -248,11 +248,10 @@ else . += span_notice("The cap has been taken off. Alt-click to put a cap on.") -/obj/item/reagent_containers/cup/glass/waterbottle/AltClick(mob/user) - . = ..() +/obj/item/reagent_containers/cup/glass/waterbottle/click_alt(mob/user) if(cap_lost) to_chat(user, span_warning("The cap seems to be missing! Where did it go?")) - return + return CLICK_ACTION_BLOCKING var/fumbled = HAS_TRAIT(user, TRAIT_CLUMSY) && prob(5) if(cap_on || fumbled) @@ -270,6 +269,7 @@ spillable = FALSE to_chat(user, span_notice("You put the cap on [src].")) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/glass/waterbottle/is_refillable() if(cap_on) @@ -436,6 +436,7 @@ amount_per_transfer_from_this = 10 volume = 100 isGlass = FALSE + interaction_flags_click = NEED_HANDS|FORBID_TELEKINESIS_REACH /// Whether or not poured drinks should use custom names and descriptions var/using_custom_drinks = FALSE /// Name custom drinks will have @@ -463,34 +464,30 @@ . += span_notice("Drinks poured from this shaker will have the following name: [custom_drink_name]") . += span_notice("Drinks poured from this shaker will have the following description: [custom_drink_desc]") -/obj/item/reagent_containers/cup/glass/shaker/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) - return - +/obj/item/reagent_containers/cup/glass/shaker/click_alt(mob/user) if(using_custom_drinks) using_custom_drinks = FALSE disable_custom_drinks() balloon_alert(user, "custom drinks disabled") - return + return CLICK_ACTION_BLOCKING var/new_name = reject_bad_text(tgui_input_text(user, "Drink name", "Set drink name", custom_drink_name, 45, FALSE), 64) if(!new_name) balloon_alert(user, "invalid drink name!") using_custom_drinks = FALSE - return + return CLICK_ACTION_BLOCKING if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) - return + return CLICK_ACTION_BLOCKING var/new_desc = reject_bad_text(tgui_input_text(user, "Drink description", "Set drink description", custom_drink_desc, 64, TRUE), 128) if(!new_desc) balloon_alert(user, "invalid drink description!") using_custom_drinks = FALSE - return + return CLICK_ACTION_BLOCKING if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) - return + return CLICK_ACTION_BLOCKING using_custom_drinks = TRUE custom_drink_name = new_name @@ -498,6 +495,7 @@ enable_custom_drinks() balloon_alert(user, "now pouring custom drinks") + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/glass/shaker/proc/enable_custom_drinks() RegisterSignal(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, PROC_REF(handle_transfer)) diff --git a/code/modules/reagents/reagent_containers/medigel.dm b/code/modules/reagents/reagent_containers/medigel.dm index e6836c7a4c2..f6d7b116eff 100644 --- a/code/modules/reagents/reagent_containers/medigel.dm +++ b/code/modules/reagents/reagent_containers/medigel.dm @@ -32,6 +32,7 @@ "Purple" = "medigel_purple" ) + /obj/item/reagent_containers/medigel/mode_change_message(mob/user) var/squirt_mode = amount_per_transfer_from_this == initial(amount_per_transfer_from_this) to_chat(user, span_notice("You will now apply the medigel's contents in [squirt_mode ? "extended sprays":"short bursts"]. You'll now use [amount_per_transfer_from_this] units per use.")) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index ee512224184..98ba3a13ed2 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -314,6 +314,12 @@ list_reagents = list(/datum/reagent/gravitum = 5) rename_with_volume = TRUE +/obj/item/reagent_containers/pill/ondansetron + name = "ondansetron pill" + desc = "Alleviates nausea. May cause drowsiness." + icon_state = "pill11" + list_reagents = list(/datum/reagent/medicine/ondansetron = 10) + // Pill styles for chem master /obj/item/reagent_containers/pill/style diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index a554dca6a84..350f51492cf 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -437,9 +437,14 @@ "Yellow" = "sprayer_med_yellow", "Blue" = "sprayer_med_blue") -/obj/item/reagent_containers/spray/medical/AltClick(mob/user) - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) + +/obj/item/reagent_containers/spray/medical/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(!current_skin) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reskin" + return CONTEXTUAL_SCREENTIP_SET + /obj/item/reagent_containers/spray/medical/reskin_obj(mob/M) ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index d9ce792f1a0..a25b3936a35 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -454,8 +454,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 . = ..() AddComponent(/datum/component/simple_rotation) -/obj/structure/reagent_dispensers/plumbed/storage/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/structure/reagent_dispensers/plumbed/storage/update_overlays() . = ..() diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 4b8fef12924..903a59a9305 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -95,8 +95,6 @@ pipe_type = initial(temp.flip_type) update_appearance() -/obj/structure/disposalconstruct/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation // construction/deconstruction // wrench: (un)anchor diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index f11ad91e002..2497af7e54c 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -400,10 +400,10 @@ payments_acc = null to_chat(user, span_notice("You clear the registered account.")) -/obj/item/sales_tagger/AltClick(mob/user) - . = ..() +/obj/item/sales_tagger/click_alt(mob/user) var/potential_cut = input("How much would you like to pay out to the registered card?","Percentage Profit ([round(cut_min*100)]% - [round(cut_max*100)]%)") as num|null if(!potential_cut) cut_multiplier = initial(cut_multiplier) cut_multiplier = clamp(round(potential_cut/100, cut_min), cut_min, cut_max) to_chat(user, span_notice("[round(cut_multiplier*100)]% profit will be received if a package with a barcode is sold.")) + return CLICK_ACTION_SUCCESS diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index bd063dea439..1531d07f5ea 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -341,7 +341,7 @@ else times_dry_fired = 0 var/turf/target_turf = get_offset_target_turf(get_ranged_target_turf(owner, owner.dir, 7), dx = rand(-1, 1), dy = rand(-1, 1)) - held_gun.process_fire(target_turf, owner, TRUE, null, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) + held_gun.process_fire(target_turf, owner, TRUE, null, pick(GLOB.all_body_zones)) held_gun.semicd = FALSE /datum/action/cooldown/spell/charged/psychic_booster diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index 6b8d7f474fc..e34fc5166c8 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -190,6 +190,19 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE +/datum/design/soup_pot + name = "Soup Pot" + id = "souppot" + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*4) + category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) + build_path = /obj/item/reagent_containers/cup/soup_pot + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + /datum/design/bowl name = "Bowl" id = "bowl" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 03fffcec8ca..021c282958d 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -53,9 +53,9 @@ addtimer(CALLBACK(src, PROC_REF(finish_loading)), 1 SECONDS) return TRUE -/obj/machinery/rnd/destructive_analyzer/AltClick(mob/user) - . = ..() +/obj/machinery/rnd/destructive_analyzer/click_alt(mob/user) unload_item() + return CLICK_ACTION_SUCCESS /obj/machinery/rnd/destructive_analyzer/update_icon_state() icon_state = "[base_icon_state][loaded_item ? "_l" : null]" @@ -115,11 +115,11 @@ say("Destructive analysis failed!") return TRUE -//Let emags in on a right click -/obj/machinery/rnd/destructive_analyzer/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) - if(is_right_clicking && istype(tool, /obj/item/card/emag)) - return NONE - return ..() +/obj/machinery/rnd/destructive_analyzer/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + // Cringe way to let emags insert on RMB because we still use attackby to insert + if(istype(tool, /obj/item/card/emag)) + return ITEM_INTERACT_SKIP_TO_ATTACK + return NONE //This allows people to put syndicate screwdrivers in the machine. Secondary act still passes. /obj/machinery/rnd/destructive_analyzer/screwdriver_act(mob/living/user, obj/item/tool) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 8ed6ef04df0..c7a7b320345 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -452,12 +452,12 @@ drop_direction = direction balloon_alert(usr, "dropping [dir2text(drop_direction)]") -/obj/machinery/rnd/production/AltClick(mob/user) - . = ..() - if(!drop_direction || !can_interact(user)) - return +/obj/machinery/rnd/production/click_alt(mob/user) + if(drop_direction == 0) + return CLICK_ACTION_BLOCKING if(busy) balloon_alert(user, "busy printing!") - return + return CLICK_ACTION_BLOCKING balloon_alert(user, "drop direction reset") drop_direction = 0 + return CLICK_ACTION_SUCCESS diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index 7afe201f360..5e44c2dc703 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -250,8 +250,6 @@ SIGNAL_HANDLER set_light_on(!(machine_stat & NOPOWER)) -/obj/machinery/doppler_array/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/machinery/doppler_array/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index e446672bc33..1bd0d3560be 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -154,17 +154,16 @@ if(HDD_OVERLOADED) . += "The front panel is dangling open. The hdd inside is destroyed and the wires are all burned." -/obj/machinery/rnd/server/master/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) +/obj/machinery/rnd/server/master/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!tool.tool_behaviour) - return ..() - // Only antags are given the training and knowledge to disassemble this thing. - if(is_special_character(user)) - return ..() - if(user.combat_mode) return NONE - - balloon_alert(user, "you can't find an obvious maintenance hatch!") - return ITEM_INTERACT_BLOCKING + // Only antags are given the training and knowledge to disassemble this thing. + if(!is_special_character(user)) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + balloon_alert(user, "you can't find an obvious maintenance hatch!") + return ITEM_INTERACT_BLOCKING + return NONE /obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/computer_disk/hdd_theft)) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 7b01536034c..7d64e1878b8 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -106,6 +106,7 @@ "slime_scanner", "solar_panel", "solar_tracker", + "souppot", "space_heater", "spoon", "status_display_frame", diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 172959153aa..9724bd776d8 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -360,9 +360,9 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo // Alternate clicks for slime, monkey and open turf if using a xenobio console -/mob/living/basic/slime/AltClick(mob/user) +/mob/living/basic/slime/click_alt(mob/user) SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src) - ..() + return CLICK_ACTION_SUCCESS /mob/living/basic/slime/ShiftClick(mob/user) SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 3d4d9bc4b45..7f87a08b85b 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -705,10 +705,9 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Set potion offer reason" return CONTEXTUAL_SCREENTIP_SET -/obj/item/slimepotion/slime/sentience/AltClick(mob/living/user) - if(!can_interact(user)) - return +/obj/item/slimepotion/slime/sentience/click_alt(mob/living/user) potion_reason = tgui_input_text(user, "Enter reason for offering potion", "Intelligence Potion", potion_reason, multiline = TRUE) + return CLICK_ACTION_SUCCESS /obj/item/slimepotion/slime/sentience/attack(mob/living/dumb_mob, mob/user) if(being_used || !isliving(dumb_mob)) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index ff2da672213..28f344873ff 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -201,9 +201,11 @@ shuttle.setTimer(shuttle.timeLeft(1) + hijack_flight_time_increase) //give the guy more time to hijack if it's already in flight. return shuttle.hijack_status -/obj/machinery/computer/emergency_shuttle/AltClick(user) - if(isliving(user)) - attempt_hijack_stage(user) +/obj/machinery/computer/emergency_shuttle/click_alt(mob/living/user) + if(!isliving(user)) + return NONE + attempt_hijack_stage(user) + return CLICK_ACTION_SUCCESS /obj/machinery/computer/emergency_shuttle/proc/attempt_hijack_stage(mob/living/user) if(!user.CanReach(src)) @@ -826,10 +828,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/pod, 32) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/obj/item/storage/pod/AltClick(mob/user) - if(!can_interact(user)) - return - return ..() +/obj/item/storage/pod/click_alt(mob/user) + return CLICK_ACTION_SUCCESS /obj/item/storage/pod/can_interact(mob/user) if(!..()) diff --git a/code/modules/spells/spell_types/jaunt/shadow_walk.dm b/code/modules/spells/spell_types/jaunt/shadow_walk.dm index c5a47cd1740..c869fb19913 100644 --- a/code/modules/spells/spell_types/jaunt/shadow_walk.dm +++ b/code/modules/spells/spell_types/jaunt/shadow_walk.dm @@ -45,7 +45,7 @@ exit_jaunt(cast_on) return - playsound(get_turf(owner), 'sound/magic/ethereal_enter.ogg', 50, TRUE, -1) + playsound(get_turf(owner), 'sound/effects/nightmare_poof.ogg', 50, TRUE, -1, ignore_walls = FALSE) cast_on.visible_message(span_boldwarning("[cast_on] melts into the shadows!")) cast_on.SetAllImmobility(0) cast_on.setStaminaLoss(0, FALSE) @@ -107,7 +107,7 @@ reveal_turf.visible_message(span_boldwarning("[jaunter] is revealed by the light!")) else reveal_turf.visible_message(span_boldwarning("[jaunter] emerges from the darkness!")) - playsound(reveal_turf, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(reveal_turf, 'sound/effects/nightmare_reappear.ogg', 50, TRUE, -1, ignore_walls = FALSE) return ..() diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index b1d613f4091..abf3575f39e 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -771,14 +771,14 @@ if(owner == new_owner) return FALSE //`null` is a valid option, so we need to use a num var to make it clear no change was made. - SEND_SIGNAL(src, COMSIG_BODYPART_CHANGED_OWNER, new_owner, owner) - if(owner) . = owner //return value is old owner clear_ownership(owner) if(new_owner) apply_ownership(new_owner) + SEND_SIGNAL(src, COMSIG_BODYPART_CHANGED_OWNER, new_owner, owner) + refresh_bleed_rate() return . diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 6e83c413216..9d1453e2123 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -377,7 +377,7 @@ /mob/living/carbon/proc/regenerate_limbs(list/excluded_zones = list()) SEND_SIGNAL(src, COMSIG_CARBON_REGENERATE_LIMBS, excluded_zones) - var/list/zone_list = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/zone_list = GLOB.all_body_zones.Copy() var/list/dismembered_by_copy = body_zone_dismembered_by?.Copy() diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 126bd3db33a..fb0647d0fb5 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -83,7 +83,7 @@ /mob/living/carbon/proc/get_missing_limbs() RETURN_TYPE(/list) - var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/full = GLOB.all_body_zones.Copy() for(var/zone in full) if(get_bodypart(zone)) full -= zone @@ -100,7 +100,7 @@ return list() /mob/living/carbon/get_disabled_limbs() - var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/full = GLOB.all_body_zones.Copy() var/list/disabled = list() for(var/zone in full) var/obj/item/bodypart/affecting = get_bodypart(zone) diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index a5569d803b0..9cbb786d7e6 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -584,38 +584,34 @@ limb_id = BODYPART_ID_MEAT should_draw_greyscale = FALSE -/obj/item/bodypart/arm/left/flesh/Initialize(mapload, dont_spawn_flesh = FALSE) +/obj/item/bodypart/arm/left/flesh/Initialize(mapload) . = ..() - if(!dont_spawn_flesh) - new /mob/living/basic/living_limb_flesh(src, src) ADD_TRAIT(src, TRAIT_IGNORED_BY_LIVING_FLESH, BODYPART_TRAIT) + AddElement(/datum/element/living_limb_initialiser) /obj/item/bodypart/arm/right/flesh limb_id = BODYPART_ID_MEAT should_draw_greyscale = FALSE -/obj/item/bodypart/arm/right/flesh/Initialize(mapload, dont_spawn_flesh = FALSE) +/obj/item/bodypart/arm/right/flesh/Initialize(mapload) . = ..() - if(!dont_spawn_flesh) - new /mob/living/basic/living_limb_flesh(src, src) ADD_TRAIT(src, TRAIT_IGNORED_BY_LIVING_FLESH, BODYPART_TRAIT) + AddElement(/datum/element/living_limb_initialiser) /obj/item/bodypart/leg/left/flesh limb_id = BODYPART_ID_MEAT should_draw_greyscale = FALSE -/obj/item/bodypart/leg/left/flesh/Initialize(mapload, dont_spawn_flesh = FALSE) +/obj/item/bodypart/leg/left/flesh/Initialize(mapload) . = ..() - if(!dont_spawn_flesh) - new /mob/living/basic/living_limb_flesh(src, src) ADD_TRAIT(src, TRAIT_IGNORED_BY_LIVING_FLESH, BODYPART_TRAIT) + AddElement(/datum/element/living_limb_initialiser) /obj/item/bodypart/leg/right/flesh limb_id = BODYPART_ID_MEAT should_draw_greyscale = FALSE -/obj/item/bodypart/leg/right/flesh/Initialize(mapload, dont_spawn_flesh = FALSE) +/obj/item/bodypart/leg/right/flesh/Initialize(mapload) . = ..() - if(!dont_spawn_flesh) - new /mob/living/basic/living_limb_flesh(src, src) ADD_TRAIT(src, TRAIT_IGNORED_BY_LIVING_FLESH, BODYPART_TRAIT) + AddElement(/datum/element/living_limb_initialiser) diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 64bd496f2bb..754335494f9 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -118,6 +118,8 @@ /datum/asset/simple/namespaced/fontawesome)) flush_queue |= window.send_asset(get_asset_datum( /datum/asset/simple/namespaced/tgfont)) + flush_queue |= window.send_asset(get_asset_datum( + /datum/asset/json/icon_ref_map)) for(var/datum/asset/asset in src_object.ui_assets(user)) flush_queue |= window.send_asset(asset) if (flush_queue) diff --git a/code/modules/transport/tram/tram_remote.dm b/code/modules/transport/tram/tram_remote.dm index 4176117d8b2..3a45ec4e665 100644 --- a/code/modules/transport/tram/tram_remote.dm +++ b/code/modules/transport/tram/tram_remote.dm @@ -107,12 +107,9 @@ SEND_SIGNAL(src, COMSIG_TRANSPORT_REQUEST, specific_transport_id, destination, options) -/obj/item/assembly/control/transport/remote/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return - +/obj/item/assembly/control/transport/remote/click_alt(mob/user) link_tram(user) + return CLICK_ACTION_SUCCESS /obj/item/assembly/control/transport/remote/proc/link_tram(mob/user) specific_transport_id = null diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index 88f18d2cb7d..eb648666030 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -169,20 +169,16 @@ obj_flags |= EMAGGED return TRUE -/obj/machinery/transport/crossing_signal/AltClick(mob/living/user) - . = ..() - if(!can_interact(user)) - return - +/obj/machinery/transport/crossing_signal/click_alt(mob/living/user) var/obj/item/tool = user.get_active_held_item() if(!panel_open || tool?.tool_behaviour != TOOL_WRENCH) - return FALSE + return CLICK_ACTION_BLOCKING tool.play_tool_sound(src, 50) setDir(turn(dir,-90)) - to_chat(user, span_notice("You rotate [src].")) + balloon_alert(user, "rotated") find_uplink() - return TRUE + return CLICK_ACTION_SUCCESS /obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, params) . = ..() diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index be41b619ed6..fb82c4fd748 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -117,6 +117,7 @@ #include "closets.dm" #include "clothing_under_armor_subtype_check.dm" #include "combat.dm" +#include "combat_welder.dm" #include "component_tests.dm" #include "confusion.dm" #include "connect_loc.dm" @@ -168,6 +169,7 @@ #include "ling_decap.dm" #include "liver.dm" #include "load_map_security.dm" +#include "lootpanel.dm" #include "lungs.dm" #include "machine_disassembly.dm" #include "mafia.dm" diff --git a/code/modules/unit_tests/combat_welder.dm b/code/modules/unit_tests/combat_welder.dm new file mode 100644 index 00000000000..2fa9052d6fb --- /dev/null +++ b/code/modules/unit_tests/combat_welder.dm @@ -0,0 +1,26 @@ +/datum/unit_test/welder_combat + +/datum/unit_test/welder_combat/Run() + var/mob/living/carbon/human/tider = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + var/mob/living/carbon/human/victim = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + var/obj/item/weldingtool/weapon = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + + tider.put_in_active_hand(weapon, forced = TRUE) + tider.set_combat_mode(TRUE) + weapon.attack_self(tider) + weapon.melee_attack_chain(tider, victim) + + TEST_ASSERT_NOTEQUAL(victim.getFireLoss(), 0, "Victim did not get burned by welder.") + TEST_ASSERT_EQUAL(weapon.get_fuel(), weapon.max_fuel - 1, "Welder did not consume fuel on attacking a mob") + + var/obj/structure/blob/blobby = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + weapon.melee_attack_chain(tider, blobby) + + TEST_ASSERT_NOTEQUAL(blobby.get_integrity(), blobby.max_integrity, "Blob did not get burned by welder.") + TEST_ASSERT_EQUAL(weapon.get_fuel(), weapon.max_fuel - 2, "Welder did not consume fuel on attacking a blob") + + weapon.force = 999 + weapon.melee_attack_chain(tider, blobby) + + TEST_ASSERT(QDELETED(blobby), "Blob was not destroyed by welder.") + TEST_ASSERT_EQUAL(weapon.get_fuel(), weapon.max_fuel - 3, "Welder did not consume fuel on deleting a blob") diff --git a/code/modules/unit_tests/lootpanel.dm b/code/modules/unit_tests/lootpanel.dm new file mode 100644 index 00000000000..c0bec13288c --- /dev/null +++ b/code/modules/unit_tests/lootpanel.dm @@ -0,0 +1,34 @@ +/datum/unit_test/lootpanel + abstract_type = /datum/unit_test/lootpanel + +/datum/unit_test/lootpanel/contents/Run() + var/datum/client_interface/mock_client = new() + var/datum/lootpanel/panel = new(mock_client) + var/mob/living/carbon/human/labrat = allocate(/mob/living/carbon/human/consistent) + mock_client.mob = labrat + var/turf/one_over = locate(run_loc_floor_bottom_left.x + 1, run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z) + var/obj/item/storage/toolbox/box = allocate(/obj/item/storage/toolbox, one_over) + + panel.open(one_over) + TEST_ASSERT_EQUAL(length(panel.contents), 2, "Contents should populate on open") + TEST_ASSERT_EQUAL(length(panel.to_image), 2, "to_image should've populated (unit testing)") + TEST_ASSERT_EQUAL(panel.contents[1].item, one_over, "First item should be the source turf") + + var/datum/search_object/searchable = panel.contents[2] + TEST_ASSERT_EQUAL(searchable.item, box, "Second item should be the box") + + qdel(box) + TEST_ASSERT_EQUAL(length(panel.contents), 1, "Contents should update on searchobj deleted") + TEST_ASSERT_EQUAL(length(panel.to_image), 1, "to_image should update on searchobj deleted") + + var/obj/item/storage/toolbox/new_box = allocate(/obj/item/storage/toolbox, one_over) + TEST_ASSERT_EQUAL(length(panel.contents), 1, "Contents shouldn't update, we're dumb") + TEST_ASSERT_EQUAL(length(panel.to_image), 1, "to_image shouldn't update, we're dumb") + + panel.populate_contents() // this also calls reset_contents bc length(contents) + TEST_ASSERT_EQUAL(length(panel.contents), 2, "Contents should repopulate with the new toolbox") + + panel.populate_contents() + TEST_ASSERT_EQUAL(length(panel.contents), 2, "Panel shouldnt dupe searchables if reopened") + + mock_client.mob = null diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 7cee1b6541c..995764e0bb7 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -272,7 +272,7 @@ /// If the former occupants get polymorphed, mutated, chestburstered, /// or otherwise replaced by another mob, that mob is no longer in .occupants /// and gets deleted with the mech. However, they do remain in .contents - var/list/potential_occupants = contents ^ occupants + var/list/potential_occupants = contents | occupants for(var/mob/buggy_ejectee in potential_occupants) mob_exit(buggy_ejectee, silent = TRUE) diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 9fea0ebe82f..2dce26624ad 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -127,14 +127,12 @@ if(panel_open) . += span_notice("Alt-click to rotate the output direction.") -/obj/machinery/mecha_part_fabricator/AltClick(mob/user) - . = ..() - if(!user.can_perform_action(src)) - return - if(panel_open) - dir = turn(dir, -90) - balloon_alert(user, "rotated to [dir2text(dir)].") - return TRUE +/obj/machinery/mecha_part_fabricator/click_alt(mob/user) + if(!panel_open) + return CLICK_ACTION_BLOCKING + dir = turn(dir, -90) + balloon_alert(user, "rotated to [dir2text(dir)].") + return CLICK_ACTION_SUCCESS /** * Updates the `final_sets` and `buildable_parts` for the current mecha fabricator. diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index 2b410bd60c7..d544c829667 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -91,14 +91,15 @@ chassis.toggle_strafe() -/obj/vehicle/sealed/mecha/AltClick(mob/living/user) - if(!(user in occupants) || !user.can_perform_action(src)) - return +/obj/vehicle/sealed/mecha/click_alt(mob/living/user) + if(!(user in occupants)) + return CLICK_ACTION_BLOCKING if(!(user in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE))) to_chat(user, span_warning("You're in the wrong seat to control movement.")) - return + return CLICK_ACTION_BLOCKING toggle_strafe() + return CLICK_ACTION_SUCCESS /obj/vehicle/sealed/mecha/proc/toggle_strafe() if(!(mecha_flags & CAN_STRAFE)) diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 33f81184e9a..52c7924d72f 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -5,6 +5,7 @@ buckle_lying = 0 pass_flags_self = PASSTABLE COOLDOWN_DECLARE(message_cooldown) + interaction_flags_click = NEED_DEXTERITY /obj/vehicle/ridden/examine(mob/user) . = ..() @@ -39,16 +40,17 @@ inserted_key.forceMove(drop_location()) inserted_key = I -/obj/vehicle/ridden/AltClick(mob/user) - if(!inserted_key || !user.can_perform_action(src, NEED_DEXTERITY)) - return ..() +/obj/vehicle/ridden/click_alt(mob/user) + if(!inserted_key) + return CLICK_ACTION_BLOCKING if(!is_occupant(user)) to_chat(user, span_warning("You must be riding the [src] to remove [src]'s key!")) - return + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("You remove \the [inserted_key] from \the [src].")) inserted_key.forceMove(drop_location()) user.put_in_hands(inserted_key) inserted_key = null + return CLICK_ACTION_SUCCESS /obj/vehicle/ridden/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) if(!in_range(user, src) || !in_range(M, src)) diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index e7b3d9b3a56..92fcb995f76 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -63,8 +63,6 @@ qdel(src) return ITEM_INTERACT_SUCCESS -/obj/vehicle/ridden/wheelchair/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation /obj/vehicle/ridden/wheelchair/update_overlays() . = ..() diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index ad03867b89b..b46dad3673f 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -71,9 +71,9 @@ */ /obj/item/circuit_component/controller/proc/send_alternate_signal(atom/source, mob/user) SIGNAL_HANDLER - if(!user.Adjacent(source)) - return + handle_trigger(source, user, "alternate", alt) + return CLICK_ACTION_SUCCESS /** diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 85367e1c47b570a2512ed4d6542520610275638a..1bb6689becf401fc9e63ea5f0bf95f8c0eb6228e 100644 GIT binary patch literal 83526 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
  • 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 literal 211058 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

    ux!mR?c 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 to toggle remote piping.") -/obj/item/pipe_dispenser/bluespace/AltClick(mob/user) - . = ..() - if(. == FALSE) - return // too far away +/obj/item/pipe_dispenser/bluespace/click_alt(mob/user) remote_piping_toggle = !remote_piping_toggle balloon_alert(user, "remote piping [remote_piping_toggle ? "on" : "off"]") playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + return CLICK_ACTION_SUCCESS /obj/item/pipe_dispenser/bluespace/afterattack(atom/target, mob/user, prox) if(prox || !remote_piping_toggle) // If we are in proximity to the target or have our safety on, don't use charge and don't call this shitcode. diff --git a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm b/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm index c5e0916f5e9..2efccbe8174 100644 --- a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm +++ b/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm @@ -32,10 +32,11 @@ GLOBAL_LIST_EMPTY(cargo_marks) spawned_marker.parent_item = src marker_children += spawned_marker -/obj/item/cargo_teleporter/AltClick(mob/user) +/obj/item/cargo_teleporter/click_alt(mob/user) if(length(marker_children)) for(var/obj/effect/decal/cleanable/cargo_mark/destroy_children in marker_children) qdel(destroy_children) + return CLICK_ACTION_SUCCESS /obj/item/cargo_teleporter/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!proximity_flag) diff --git a/modular_skyrat/modules/cellguns/code/cellguns.dm b/modular_skyrat/modules/cellguns/code/cellguns.dm index eaeaee29cc2..cce7b4435ef 100644 --- a/modular_skyrat/modules/cellguns/code/cellguns.dm +++ b/modular_skyrat/modules/cellguns/code/cellguns.dm @@ -72,10 +72,10 @@ charge_overlay.pixel_y = ammo_y_offset * (i - 1) . += new /mutable_appearance(charge_overlay) -/obj/item/gun/energy/cell_loaded/AltClick(mob/user, modifiers) +/obj/item/gun/energy/cell_loaded/click_alt(mob/user, modifiers) if(!installedcells.len) //Checks to see if there is a cell inside of the gun, before removal. to_chat(user, span_notice("The [src] has no cells inside")) - return ..() + return CLICK_ACTION_BLOCKING to_chat(user, span_notice("You remove a cell")) var/obj/item/last_cell = installedcells[installedcells.len] @@ -87,6 +87,7 @@ installedcells -= last_cell ammo_type.len-- select_fire(user) + return CLICK_ACTION_SUCCESS /// A cellgun used for debug, it is able to use any weaponcell. /obj/item/gun/energy/cell_loaded/alltypes diff --git a/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm b/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm index a1464e08d3e..9b488fd561f 100644 --- a/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm +++ b/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm @@ -47,8 +47,6 @@ if(machine_stat & (NOPOWER|BROKEN|MAINT)) return - usr.set_machine(src) - var/selected_goal = href_list["selected_goal"] if(href_list["close"]) @@ -62,4 +60,4 @@ SSstation.goals_by_type[iterating_goal] = goal_to_set goal_assigned = TRUE break - updateUsrDialog() + SStgui.update_uis(src) diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm index a7efee044b8..c600019f7de 100644 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm @@ -18,7 +18,6 @@ "portable_lil_pump", "portable_scrubbs", "survival_knife", // I just don't want to make a whole new node for this one sorry - "soup_pot", // This one too "water_synth", "hydro_synth", "frontier_sustenance_dispenser", diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm index 067b0084046..d2c0f8887f2 100644 --- a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm +++ b/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm @@ -12,16 +12,8 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE -/datum/design/soup_pot - name = "Soup Pot" - id = "soup_pot" - build_type = COLONY_FABRICATOR - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, - ) - build_path = /obj/item/reagent_containers/cup/soup_pot - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN, - ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE +// Lets colony fabricators make soup pots, removes bluespace crystal requirement. +/datum/design/soup_pot/New() + build_type |= COLONY_FABRICATOR + materials -= /datum/material/bluespace + return ..() diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm index 66e4e209dab..6d692728674 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -107,7 +107,6 @@ if(isAI(user) && (machine_stat & NOPOWER)) return - usr.set_machine(src) // What does this even do?? switch(choice) if(RADIAL_CHOICE_EJECT) eject_contents() diff --git a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm b/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm index 550de51f205..a5306c96bd2 100644 --- a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm +++ b/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm @@ -53,10 +53,11 @@ current_sort += target.type to_chat(user, span_notice("[target] has been added to [src]'s sorting list.")) -/obj/item/conveyor_sorter/AltClick(mob/user) +/obj/item/conveyor_sorter/click_alt(mob/user) visible_message("[src] pings, resetting its sorting list!") playsound(src, 'sound/machines/ping.ogg', 30, TRUE) current_sort = list() + return CLICK_ACTION_SUCCESS /obj/effect/decal/conveyor_sorter name = "conveyor sorter" @@ -122,10 +123,11 @@ else return ..() -/obj/effect/decal/conveyor_sorter/AltClick(mob/user) +/obj/effect/decal/conveyor_sorter/click_alt(mob/user) visible_message("[src] pings, resetting its sorting list!") playsound(src, 'sound/machines/ping.ogg', 30, TRUE) sorting_list = list() + return CLICK_ACTION_SUCCESS /obj/effect/decal/conveyor_sorter/CtrlClick(mob/user) visible_message("[src] begins to ping violently!") diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm b/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm index e141f569004..b9ff2f16cc8 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm @@ -57,7 +57,6 @@ /obj/item/clothing/mask/paper/Initialize(mapload) . = ..() - register_context() if(wear_hair_over) alternate_worn_layer = BACK_LAYER diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm index 75c95556f6d..0135ef01d82 100644 --- a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm +++ b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm @@ -103,12 +103,12 @@ . = ..() AddComponent(/datum/component/toggle_icon, toggle_noun = "scarf") -/obj/item/clothing/neck/face_scarf/AltClick(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip - . = ..() +/obj/item/clothing/neck/face_scarf/click_alt(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip if(icon_state != "face_scarf_t") flags_inv = HIDEFACIALHAIR | HIDESNOUT else flags_inv = HIDEFACIALHAIR + return CLICK_ACTION_SUCCESS /obj/item/clothing/neck/maid_neck_cover name = "maid neck cover" diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm b/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm index fa4052d1119..322e438374c 100644 --- a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm +++ b/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm @@ -7,6 +7,7 @@ worn_icon_state = "crusader_belt" inhand_icon_state = "utility" w_class = WEIGHT_CLASS_BULKY //Cant fit a sheath in your bag + interaction_flags_click = NEED_DEXTERITY /obj/item/storage/belt/crusader/Initialize(mapload) . = ..() @@ -64,9 +65,7 @@ atom_storage.show_contents(user) return -/obj/item/storage/belt/crusader/AltClick(mob/user) //This is basically the same as the normal sheath, but because there's always an item locked in the first slot it uses the second slot for swords - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/storage/belt/crusader/click_alt(mob/user) //This is basically the same as the normal sheath, but because there's always an item locked in the first slot it uses the second slot for swords if(contents.len == 2) var/obj/item/drawn_item = contents[2] add_fingerprint(user) @@ -74,12 +73,12 @@ if(!user.put_in_hands(drawn_item)) to_chat(user, span_notice("You fumble for [drawn_item] and it falls on the floor.")) update_appearance() - return + return CLICK_ACTION_SUCCESS user.visible_message(span_notice("[user] takes [drawn_item] out of [src]."), span_notice("You take [drawn_item] out of [src].")) update_appearance() else to_chat(user, span_warning("[src] is empty!")) - . = ..() + return CLICK_ACTION_SUCCESS /obj/item/storage/belt/crusader/update_icon(updates) if(contents.len == 2) //Checks for a sword/rod in the sheath slot, changes the sprite accordingly diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm index e8688a96b1a..b68119246c1 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -280,14 +280,14 @@ visor_flags_inv = HIDEFACE | HIDESNOUT w_class = WEIGHT_CLASS_SMALL tint = 0 + interaction_flags_click = NEED_DEXTERITY /obj/item/clothing/mask/gas/nightlight/attack_self(mob/user) adjustmask(user) -/obj/item/clothing/mask/gas/nightlight/AltClick(mob/user) - ..() - if(user.can_perform_action(src, NEED_DEXTERITY)) - adjustmask(user) +/obj/item/clothing/mask/gas/nightlight/click_alt(mob/user) + adjustmask(user) + return CLICK_ACTION_SUCCESS /obj/item/clothing/mask/gas/nightlight/examine(mob/user) . = ..() @@ -798,7 +798,6 @@ worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi' icon_state = "emissionhelm" - // Donation reward for CandleJax /obj/item/clothing/head/helmet/space/plasmaman/candlejax2 name = "azulean's environment helmet" diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm index 6455bba4255..4cd4695d2fb 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm @@ -256,11 +256,11 @@ else icon_state = "catear_headphone[song?.playing ? "_on" : null]" -/obj/item/instrument/piano_synth/headphones/catear_headphone/AltClick(mob/user) - . = ..() +/obj/item/instrument/piano_synth/headphones/catear_headphone/click_alt(mob/user) catTailToggled = !catTailToggled user.update_worn_head() update_icon(UPDATE_OVERLAYS) + return CLICK_ACTION_SUCCESS /obj/item/instrument/piano_synth/headphones/catear_headphone/update_overlays() . = ..() diff --git a/modular_skyrat/modules/electric_welder/code/electric_welder.dm b/modular_skyrat/modules/electric_welder/code/electric_welder.dm index a3426e2cf78..c61e8333ef9 100644 --- a/modular_skyrat/modules/electric_welder/code/electric_welder.dm +++ b/modular_skyrat/modules/electric_welder/code/electric_welder.dm @@ -71,10 +71,6 @@ /obj/item/weldingtool/electric/use(used = 0) return isOn() -// This is what starts fires. Overriding it stops it starting fires -/obj/item/weldingtool/electric/handle_fuel_and_temps(used = 0, mob/living/user) - return - /obj/item/weldingtool/electric/examine() . = ..() . += "[src] is currently [powered ? "powered" : "unpowered"]." diff --git a/modular_skyrat/modules/exp_corps/code/clothing.dm b/modular_skyrat/modules/exp_corps/code/clothing.dm index 66e5422f012..d932d13b3ad 100644 --- a/modular_skyrat/modules/exp_corps/code/clothing.dm +++ b/modular_skyrat/modules/exp_corps/code/clothing.dm @@ -240,12 +240,9 @@ current_user.remove_client_colour(/datum/client_colour/glass_colour/lightgreen) current_user.update_sight() -/obj/item/clothing/head/helmet/expeditionary_corps/AltClick(mob/user) - . = ..() +/obj/item/clothing/head/helmet/expeditionary_corps/click_alt(mob/user) if(!current_user) return - if(!can_interact(user)) - return nightvision = !nightvision if(nightvision) @@ -255,6 +252,7 @@ to_chat(user, span_notice("You flip the NV goggles up.")) disable_nv() update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/clothing/head/helmet/expeditionary_corps/dropped(mob/user) . = ..() diff --git a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm index 82f55eabd24..ba8ea2defbb 100644 --- a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm +++ b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm @@ -392,11 +392,11 @@ ), ) -/obj/item/clothing/neck/security_cape/AltClick(mob/user) - . = ..() +/obj/item/clothing/neck/security_cape/click_alt(mob/user) swapped = !swapped to_chat(user, span_notice("You swap which arm [src] will lay over.")) update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/clothing/neck/security_cape/update_appearance(updates) . = ..() diff --git a/modular_skyrat/modules/hev_suit/code/hev_suit.dm b/modular_skyrat/modules/hev_suit/code/hev_suit.dm index 1dbce983d32..eff170f0c7a 100644 --- a/modular_skyrat/modules/hev_suit/code/hev_suit.dm +++ b/modular_skyrat/modules/hev_suit/code/hev_suit.dm @@ -843,9 +843,11 @@ acid_static_cooldown = PCV_COOLDOWN_ACID suit_name = "PCV MARK II" -/obj/item/clothing/suit/space/hev_suit/pcv/AltClick(mob/living/user) - reskin_obj(user) +/obj/item/clothing/suit/space/hev_suit/pcv/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() + if(!current_skin) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reskin" + return CONTEXTUAL_SCREENTIP_SET #undef HEV_COLOR_GREEN #undef HEV_COLOR_RED diff --git a/modular_skyrat/modules/inflatables/code/inflatable.dm b/modular_skyrat/modules/inflatables/code/inflatable.dm index f58b4dde172..47cfef36777 100644 --- a/modular_skyrat/modules/inflatables/code/inflatable.dm +++ b/modular_skyrat/modules/inflatables/code/inflatable.dm @@ -53,11 +53,9 @@ return return ..() -/obj/structure/inflatable/AltClick(mob/user) - . = ..() - if(!user.can_interact_with(src)) - return +/obj/structure/inflatable/click_alt(mob/user) deflate(FALSE) + return CLICK_ACTION_SUCCESS /obj/structure/inflatable/play_attack_sound(damage_amount, damage_type, damage_flag) playsound(src, hit_sound, 75, TRUE) diff --git a/modular_skyrat/modules/knives/knives.dm b/modular_skyrat/modules/knives/knives.dm index 4a7439d3e76..d177a3a24d9 100644 --- a/modular_skyrat/modules/knives/knives.dm +++ b/modular_skyrat/modules/knives/knives.dm @@ -24,25 +24,26 @@ slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE + interaction_flags_click = NEED_DEXTERITY /obj/item/storage/belt/bowie_sheath/Initialize(mapload) . = ..() atom_storage.max_slots = 1 atom_storage.max_total_storage = WEIGHT_CLASS_BULKY atom_storage.set_holdable(list( - /obj/item/knife/bowie + /obj/item/knife/bowie, )) -/obj/item/storage/belt/bowie_sheath/AltClick(mob/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/item/storage/belt/bowie_sheath/click_alt(mob/user) if(length(contents)) var/obj/item/knife = contents[1] user.visible_message(span_notice("[user] takes [knife] out of [src]."), span_notice("You take [knife] out of [src].")) user.put_in_hands(knife) update_appearance() + return CLICK_ACTION_SUCCESS else to_chat(user, span_warning("[src] is empty!")) + return CLICK_ACTION_BLOCKING /obj/item/storage/belt/bowie_sheath/update_icon_state() icon_state = initial(icon_state) diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm b/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm index 17d6c87f284..c97f06140c0 100644 --- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm +++ b/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm @@ -8,6 +8,7 @@ max_integrity = 500 anchored = FALSE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + interaction_flags_click = NEED_DEXTERITY /// How many reagents at maximum can it hold var/max_volume = 10000 /// Whether spewing reagents out, instead of siphoning them @@ -33,12 +34,11 @@ to_chat(user, span_notice("You turn [src] [turned_on ? "off" : "on"].")) toggle_working() -/obj/structure/liquid_pump/AltClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return +/obj/structure/liquid_pump/click_alt(mob/living/user) to_chat(user, span_notice("You flick [src]'s spewing mode [spewing_mode ? "off" : "on"].")) spewing_mode = !spewing_mode update_icon() + return CLICK_ACTION_SUCCESS /obj/structure/liquid_pump/examine(mob/user) . = ..() diff --git a/modular_skyrat/modules/medical/code/anesthetic_machine.dm b/modular_skyrat/modules/medical/code/anesthetic_machine.dm index 69b1bab7b70..eb42dda946e 100644 --- a/modular_skyrat/modules/medical/code/anesthetic_machine.dm +++ b/modular_skyrat/modules/medical/code/anesthetic_machine.dm @@ -78,10 +78,9 @@ attached_tank = attacking_item update_icon() -/obj/machinery/anesthetic_machine/AltClick(mob/user) - . = ..() +/obj/machinery/anesthetic_machine/click_alt(mob/user) if(!attached_tank) - return + return CLICK_ACTION_BLOCKING attached_tank.forceMove(loc) to_chat(user, span_notice("You remove the [attached_tank].")) @@ -89,6 +88,7 @@ update_icon() if(mask_out) retract_mask() + return CLICK_ACTION_SUCCESS ///Retracts the attached_mask back into the machine /obj/machinery/anesthetic_machine/proc/retract_mask() diff --git a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm index dfa8c97adea..6dce4269ef8 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm @@ -263,13 +263,12 @@ playsound(src, 'sound/items/crowbar.ogg', 70, TRUE) remove_emitter() -/obj/item/gun/microfusion/AltClick(mob/user) - . = ..() - if(can_interact(user)) - var/obj/item/microfusion_gun_attachment/to_remove = input(user, "Please select what part you'd like to remove.", "Remove attachment") as null|obj in sort_names(attachments) - if(!to_remove) - return - remove_attachment(to_remove, user) +/obj/item/gun/microfusion/click_alt(mob/user) + var/obj/item/microfusion_gun_attachment/to_remove = input(user, "Please select what part you'd like to remove.", "Remove attachment") as null|obj in sort_names(attachments) + if(!to_remove) + return CLICK_ACTION_BLOCKING + remove_attachment(to_remove, user) + return CLICK_ACTION_SUCCESS /obj/item/gun/microfusion/proc/remove_all_attachments() if(attachments.len) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm index 9d2fae9d311..ef18300ddab 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm @@ -72,20 +72,17 @@ "cyan" = image(icon = src.icon, icon_state = "mask_cyan_off")) // Using multitool on pole -/obj/item/clothing/mask/gas/bdsm_mask/AltClick(mob/user) +/obj/item/clothing/mask/gas/bdsm_mask/click_alt(mob/user) if(color_changed == FALSE) - if(.) - return var/choice = show_radial_menu(user, src, mask_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_mask_color = choice update_icon_state() update_icon() update_mob_action_buttonss() color_changed = TRUE - return - . = ..() + return CLICK_ACTION_SUCCESS // To check if we can change mask's model /obj/item/clothing/mask/gas/bdsm_mask/proc/check_menu(mob/living/user) @@ -321,6 +318,7 @@ volume = 50 possible_transfer_amounts = list(1, 2, 3, 4, 5, 10, 25, 50) list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 50) + interaction_flags_click = NEED_DEXTERITY // Standard initialize code for filter /obj/item/reagent_containers/cup/lewd_filter/Initialize(mapload) @@ -337,11 +335,7 @@ addtimer(CALLBACK(reagents, TYPE_PROC_REF(/datum/reagents, trans_to), user, amount_per_transfer_from_this, TRUE, TRUE, FALSE, user, FALSE, INGEST), 0.5 SECONDS) // I just wanted to add 2th color variation. Because. -/obj/item/reagent_containers/cup/lewd_filter/AltClick(mob/user) - // Catch first AltClick and open reskin menu - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - return +/obj/item/reagent_containers/cup/lewd_filter/click_alt(mob/user) // After reskin all clicks go normal, but we can't change the flow rate if mask on and equipped var/obj/item/clothing/mask/gas/bdsm_mask/worn_mask = user.get_item_by_slot(ITEM_SLOT_MASK) if(worn_mask) @@ -350,8 +344,8 @@ if(worn_mask.mask_on == TRUE) if(istype(src, /obj/item/reagent_containers/cup/lewd_filter)) to_chat(user, span_warning("You can't change the flow rate of the valve while the mask is on!")) - return - . = ..() + return CLICK_ACTION_BLOCKING + return ..() // Filter click handling /obj/item/reagent_containers/cup/lewd_filter/attack_hand(mob/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm index 821e056bb94..f537d9166f8 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm @@ -17,10 +17,11 @@ /// Has it been laced tightly? var/laced_tight = FALSE -/obj/item/clothing/suit/corset/AltClick(mob/user) +/obj/item/clothing/suit/corset/click_alt(mob/user) laced_tight = !laced_tight to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe.")) play_lewd_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE) + . = CLICK_ACTION_SUCCESS if(laced_tight) slowdown = TIGHT_SLOWDOWN return diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm index a6188a546e4..7bcad0d4879 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm @@ -129,20 +129,18 @@ "tealn" = image(icon = src.icon, icon_state = "dephelmet_tealn")) // To change model -/obj/item/clothing/head/deprivation_helmet/AltClick(mob/user) +/obj/item/clothing/head/deprivation_helmet/click_alt(mob/user) if(color_changed == FALSE) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, helmet_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_helmet_color = choice update_icon() update_mob_action_buttonss() color_changed = TRUE + return CLICK_ACTION_SUCCESS else - return + return CLICK_ACTION_BLOCKING /obj/item/clothing/head/deprivation_helmet/proc/update_mob_action_buttonss() var/datum/action/item_action/action_button diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm index 554cfab890c..5150f7a539b 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm @@ -58,18 +58,16 @@ "teal" = image(icon = src.icon, icon_state = "hypnogoggles_teal")) //to change model -/obj/item/clothing/glasses/hypno/AltClick(mob/user) +/obj/item/clothing/glasses/hypno/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, hypnogoggles_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_hypnogoggles_color = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS //to check if we can change kinkphones's model /obj/item/clothing/glasses/hypno/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm index aa8ff23f1b6..025d267680e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm @@ -35,10 +35,7 @@ body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK w_class = WEIGHT_CLASS_SMALL - /// What the name on the tag is - var/tagname = null - /// Item path of on-init creation in the collar's storage - var/treat_path = /obj/item/food/cookie + interaction_flags_click = NEED_DEXTERITY unique_reskin = list("Cyan" = "collar_cyan", "Yellow" = "collar_yellow", "Green" = "collar_green", @@ -50,6 +47,10 @@ "Black" = "collar_black", "Black-teal" = "collar_tealblack", "Spike" = "collar_spike") + /// What the name on the tag is + var/tagname = null + /// Item path of on-init creation in the collar's storage + var/treat_path = /obj/item/food/cookie //spawn thing in collar @@ -66,13 +67,6 @@ var/obj/item/key/kink_collar/collar_key = key collar_key.key_id = id -//reskin code - -/obj/item/clothing/neck/kink_collar/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - //rename collar code /obj/item/clothing/neck/kink_collar/attack_self(mob/user) @@ -90,10 +84,7 @@ worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi' icon_state = "lock_collar_cyan" treat_path = /obj/item/key/kink_collar - /// If the collar is currently locked - var/locked = FALSE - /// If the collar has been broken or not - var/broken = FALSE + interaction_flags_click = NEED_DEXTERITY unique_reskin = list("Cyan" = "lock_collar_cyan", "Yellow" = "lock_collar_yellow", "Green" = "lock_collar_green", @@ -105,6 +96,10 @@ "Black" = "lock_collar_black", "Black-teal" = "lock_collar_tealblack", "Spike" = "lock_collar_spike") + /// If the collar is currently locked + var/locked = FALSE + /// If the collar has been broken or not + var/broken = FALSE /obj/item/clothing/neck/kink_collar/locked/Initialize(mapload) . = ..() @@ -112,13 +107,6 @@ //spawn thing in collar -//reskin code - -/obj/item/clothing/neck/kink_collar/locked/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - //locking or unlocking collar code /obj/item/clothing/neck/kink_collar/locked/proc/IsLocked(to_lock, mob/user) @@ -176,6 +164,7 @@ icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi' icon_state = "collar_key_metal" base_icon_state = "collar_key" + interaction_flags_click = NEED_DEXTERITY /// The name inscribed on the key var/keyname = null /// The ID of the key to pair with a collar. Will normally be the ref of the collar @@ -192,12 +181,6 @@ "Metal" = "collar_key_metal", "Black-teal" = "collar_key_tealblack") -//changing color of key in case if we using multiple collars -/obj/item/key/kink_collar/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) - //changing name of key in case if we using multiple collars with same color /obj/item/key/kink_collar/attack_self(mob/user) keyname = stripped_input(user, "Would you like to change the name on the key?", "Renaming key", "Key", MAX_NAME_LEN) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm index 40a716f3175..6e1674fc87f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm @@ -22,19 +22,16 @@ "teal" = image(icon = src.icon, icon_state = "kblindfold_teal")) //to change model -/obj/item/clothing/glasses/blindfold/kinky/AltClick(mob/user) +/obj/item/clothing/glasses/blindfold/kinky/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, kinkfold_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_kinkfold_color = choice update_icon() color_changed = TRUE - + return CLICK_ACTION_SUCCESS /// to check if we can change kinkphones's model /obj/item/clothing/glasses/blindfold/kinky/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm index eb4ed5bf142..8e73ea7d434 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm @@ -28,18 +28,16 @@ "teal" = image(icon = src.icon, icon_state = "kinkphones_teal_on")) //to change model -/obj/item/clothing/ears/kinky_headphones/AltClick(mob/user) +/obj/item/clothing/ears/kinky_headphones/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, kinkphones_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_kinkphones_color = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /// to check if we can change kinkphones's model /obj/item/clothing/ears/kinky_headphones/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm index 2f1588738cb..43e2ea0c904 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm @@ -48,23 +48,21 @@ "deflated" = image(icon = src.icon, icon_state = "sleepbag_teal_deflated_folded")) //to change model -/obj/item/clothing/suit/straight_jacket/kinky_sleepbag/AltClick(mob/user) +/obj/item/clothing/suit/straight_jacket/kinky_sleepbag/click_alt(mob/user) var/mob/living/carbon/human/clicking_human = user if(istype(clicking_human.wear_suit, /obj/item/clothing/suit/straight_jacket/kinky_sleepbag)) to_chat(user, span_warning("Your hands are stuck, you can't do this!")) - return FALSE + return CLICK_ACTION_BLOCKING switch(color_changed) if(FALSE) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, bag_colors, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING bag_color = choice update_icon() update_icon_state() color_changed = TRUE + return CLICK_ACTION_SUCCESS if(TRUE) if(bag_state == "deflated") @@ -72,8 +70,10 @@ to_chat(user, span_notice("The sleeping bag now is [bag_fold? "folded." : "unfolded."]")) update_icon() update_icon_state() + return CLICK_ACTION_SUCCESS else to_chat(user, span_notice("You can't fold the bag while it's inflated!")) + return CLICK_ACTION_BLOCKING /obj/item/clothing/suit/straight_jacket/kinky_sleepbag/proc/check_menu(mob/living/user) if(!istype(user)) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm index 00caec39977..53b01b6699e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm @@ -48,18 +48,16 @@ "yellow" = image (icon = src.icon, icon_state = "lewdapron_yellow")) //to change model -/obj/item/clothing/accessory/lewdapron/AltClick(mob/user) +/obj/item/clothing/accessory/lewdapron/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, apron_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /// to check if we can change kinkphones's model /obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm index e062af59494..5201bb02a35 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm @@ -33,19 +33,17 @@ "metal" = image (icon = src.icon, icon_state = "shackles_metal")) //to change model -/obj/item/clothing/suit/straight_jacket/shackles/AltClick(mob/user) - if(color_changed == FALSE) - . = ..() - if(.) - return - var/choice = show_radial_menu(user, src, shackles_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) - if(!choice) - return FALSE - current_color = choice - update_icon() - color_changed = TRUE - else - return +/obj/item/clothing/suit/straight_jacket/shackles/click_alt(mob/user) + if(color_changed) + return CLICK_ACTION_BLOCKING + + var/choice = show_radial_menu(user, src, shackles_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) + if(!choice) + return CLICK_ACTION_BLOCKING + current_color = choice + update_icon() + color_changed = TRUE + return CLICK_ACTION_SUCCESS //to check if we can change shackles' model /obj/item/clothing/suit/straight_jacket/shackles/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm index b248a0aca88..866526dea48 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm @@ -60,13 +60,12 @@ . = ..() AddElement(/datum/element/update_icon_updates_onmob) -/obj/item/clothing/under/shibari/AltClick(mob/user) - . = ..() +/obj/item/clothing/under/shibari/click_alt(mob/user) if(!ishuman(loc)) - return + return CLICK_ACTION_BLOCKING var/mob/living/carbon/human/hooman = loc if(user == hooman) - return + return CLICK_ACTION_BLOCKING switch(tightness) if(SHIBARI_TIGHTNESS_LOW) tightness = SHIBARI_TIGHTNESS_MED @@ -74,6 +73,7 @@ tightness = SHIBARI_TIGHTNESS_HIGH if(SHIBARI_TIGHTNESS_HIGH) tightness = SHIBARI_TIGHTNESS_LOW + return CLICK_ACTION_SUCCESS /obj/item/clothing/under/shibari/process(seconds_per_tick) if(!ishuman(loc)) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm index ec2fc7c0d9b..a7e1182d324 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm @@ -23,19 +23,16 @@ "human" = image (icon = src.icon, icon_state = "strapon_human")) //to change model -/obj/item/clothing/strapon/AltClick(mob/user) - if(type_changed == FALSE) - . = ..() - if(.) - return - var/choice = show_radial_menu(user, src, strapon_types, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) - if(!choice) - return FALSE - strapon_type = choice - update_icon() - type_changed = TRUE - else - return +/obj/item/clothing/strapon/click_alt(mob/user) + if(type_changed) + return CLICK_ACTION_BLOCKING + var/choice = show_radial_menu(user, src, strapon_types, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) + if(!choice) + return CLICK_ACTION_BLOCKING + strapon_type = choice + update_icon() + type_changed = TRUE + return CLICK_ACTION_SUCCESS //Check if we can change strapon's model /obj/item/clothing/strapon/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm index 545748165c4..f2de5f7f900 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm @@ -11,6 +11,7 @@ can_adjust = FALSE icon_state = "stripper_cyan" inhand_icon_state = "b_suit" + interaction_flags_click = NEED_DEXTERITY unique_reskin = list("Cyan" = "stripper_cyan", "Yellow" = "stripper_yellow", "Green" = "stripper_green", @@ -21,8 +22,3 @@ "Purple" = "stripper_purple", "Black" = "stripper_black", "Black-teal" = "stripper_tealblack") - -/obj/item/clothing/under/stripper_outfit/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY)) - reskin_obj(user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm index 13423a26016..1db92a08430 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm @@ -39,11 +39,8 @@ "pink" = image(icon = src.icon, icon_state = "[initial(base_icon_state)]_pink_low[(istype(src, /obj/item/clothing/sextoy/eggvib/signalvib)) ? "_on" : ""]"), "teal" = image(icon = src.icon, icon_state = "[initial(base_icon_state)]_teal_low[(istype(src, /obj/item/clothing/sextoy/eggvib/signalvib)) ? "_on" : ""]")) -/obj/item/clothing/sextoy/eggvib/AltClick(mob/user) +/obj/item/clothing/sextoy/eggvib/click_alt(mob/user) if(!color_changed) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, vib_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) return FALSE @@ -63,6 +60,7 @@ to_chat(user, span_notice("You turn off the vibrating egg. Fun time's over.")) update_icon() update_icon_state() + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/eggvib/Initialize(mapload) . = ..() @@ -190,18 +188,18 @@ //arousal stuff -/obj/item/clothing/sextoy/eggvib/signalvib/AltClick(mob/user) +/obj/item/clothing/sextoy/eggvib/signalvib/click_alt(mob/user) if(!color_changed) var/choice = show_radial_menu(user, src, vib_designs, custom_check = CALLBACK(src, /obj/item/clothing/sextoy/proc/check_menu, user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() color_changed = TRUE else if(!toy_on) - to_chat(usr, span_notice("You can't switch modes while the vibrating egg is turned off!")) - return + to_chat(user, span_notice("You can't switch modes while the vibrating egg is turned off!")) + return CLICK_ACTION_BLOCKING toggle_mode() soundloop1.stop() soundloop2.stop() @@ -218,6 +216,7 @@ soundloop3.start() update_icon() update_icon_state() + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/eggvib/signalvib/receive_signal(datum/signal/signal) if(!signal || signal.data["code"] != code) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm index 7297472b8da..5bcc5129e03 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm @@ -40,31 +40,27 @@ "medium" = image(icon = src.icon, icon_state = "buttplug_pink_medium"), "big" = image(icon = src.icon, icon_state = "buttplug_pink_big")) -/obj/item/clothing/sextoy/buttplug/AltClick(mob/user) +/obj/item/clothing/sextoy/buttplug/click_alt(mob/user) if(!color_changed) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, buttplug_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() if(choice == "green") set_light(0.25) update_light() color_changed = TRUE + return CLICK_ACTION_SUCCESS else if(form_changed == FALSE) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, buttplug_forms, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_size = choice update_icon() form_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/buttplug/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm index c7256be1610..9feeb963a09 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm @@ -41,18 +41,16 @@ "human" = image(icon = src.icon, icon_state = "[base_icon_state]_human"), "tentacle" = image(icon = src.icon, icon_state = "[base_icon_state]_tentacle")) -/obj/item/clothing/sextoy/dildo/AltClick(mob/user) +/obj/item/clothing/sextoy/dildo/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, dildo_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_type = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/dildo/Initialize(mapload) . = ..() @@ -209,23 +207,22 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors "medium" = image(icon = src.icon, icon_state = "[base_icon_state]_medium"), "big" = image(icon = src.icon, icon_state = "[base_icon_state]_big")) -/obj/item/clothing/sextoy/dildo/custom_dildo/AltClick(mob/living/user) +/obj/item/clothing/sextoy/dildo/custom_dildo/click_alt(mob/living/user) if(!size_changed) var/choice = show_radial_menu(user, src, dildo_sizes, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING poly_size = choice update_icon() size_changed = TRUE - else if(color_changed) - return + return CLICK_ACTION_BLOCKING if(!istype(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return + return CLICK_ACTION_BLOCKING customize(user) color_changed = TRUE - return TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/dildo/custom_dildo/Initialize(mapload) . = ..() @@ -292,8 +289,8 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors /obj/item/clothing/sextoy/dildo/double_dildo/populate_dildo_designs() return -/obj/item/clothing/sextoy/dildo/double_dildo/AltClick(mob/user) - return +/obj/item/clothing/sextoy/dildo/double_dildo/click_alt(mob/user) + return NONE /obj/item/clothing/sextoy/dildo/double_dildo/lewd_equipped(mob/living/carbon/human/user, slot, initial) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm index 3099ce8c3d2..02b25ecefd4 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm @@ -39,18 +39,16 @@ icon_state = "[base_icon_state]_[current_color]" inhand_icon_state = "[base_icon_state]_[current_color]" -/obj/item/clothing/sextoy/fleshlight/AltClick(mob/user) +/obj/item/clothing/sextoy/fleshlight/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, fleshlight_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/fleshlight/attack(mob/living/carbon/human/target, mob/living/carbon/human/user) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm index 6e67c51fe34..21328dcea3a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm @@ -69,8 +69,9 @@ to_chat(user, span_notice("You install a cell in [src].")) update_appearance() -/obj/item/kinky_shocker/AltClick(mob/user) +/obj/item/kinky_shocker/click_alt(mob/user) tryremovecell(user) + return CLICK_ACTION_SUCCESS /obj/item/kinky_shocker/proc/tryremovecell(mob/user) if(!(cell && can_remove_cell)) @@ -81,6 +82,7 @@ to_chat(user, span_notice("You remove the cell from [src].")) shocker_on = FALSE update_appearance() + return CLICK_ACTION_SUCCESS /obj/item/kinky_shocker/attack_self(mob/user) toggle_shocker(user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm index 83ac7d1ca0b..83beedd5605 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm @@ -88,32 +88,27 @@ update_overlays() //to change color -/obj/item/clothing/mask/leatherwhip/AltClick(mob/user) +/obj/item/clothing/mask/leatherwhip/click_alt(mob/user) if(!color_changed) - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, whip_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_whip_color = choice update_icon() update_icon_state() color_changed = TRUE - + return CLICK_ACTION_SUCCESS else if(form_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, whip_forms, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_whip_form = choice update_icon() update_icon_state() form_changed = TRUE + return CLICK_ACTION_SUCCESS /// A check to see if the radial menu can be used /obj/item/clothing/mask/leatherwhip/proc/check_menu(mob/living/user) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm index dcab8ba06e4..facf60ea273 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm @@ -43,19 +43,17 @@ icon_state = "[base_icon_state]_[current_color]" inhand_icon_state = "[base_icon_state]_[current_color]" -/obj/item/spanking_pad/AltClick(mob/user) +/obj/item/spanking_pad/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, spankpad_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon_state() update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/spanking_pad/attack(mob/living/carbon/human/target, mob/living/carbon/human/user) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm index fe0582abea5..3d24a3b649e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm @@ -108,23 +108,24 @@ open_flame() update_brightness() -/obj/item/bdsm_candle/AltClick(mob/user) - . = ..() +/obj/item/bdsm_candle/click_alt(mob/user) if(!lit) if(color_changed) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, candle_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice light_color = candlelights[choice] update_icon() update_brightness() color_changed = TRUE + return CLICK_ACTION_SUCCESS else if(!put_out_candle()) - return + return CLICK_ACTION_BLOCKING user.visible_message(span_notice("[user] snuffs [src].")) + return CLICK_ACTION_SUCCESS /* * WAX DROPPING diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm index c8174fe64e5..35b8ce8855e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm @@ -42,19 +42,17 @@ "yellow" = image(icon = src.icon, icon_state = "vibrator_yellow_low"), "green" = image(icon = src.icon, icon_state = "vibrator_green_low")) -/obj/item/clothing/sextoy/vibrator/AltClick(mob/user) +/obj/item/clothing/sextoy/vibrator/click_alt(mob/user) if(color_changed) return - . = ..() - if(.) - return var/choice = show_radial_menu(user, src, vibrator_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon_state() update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/vibrator/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm index dd531231d24..03b1ca6ade5 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm @@ -36,18 +36,16 @@ "pink" = image(icon = src.icon, icon_state = "vibroring_pink_off"), "teal" = image(icon = src.icon, icon_state = "vibroring_teal_off")) -/obj/item/clothing/sextoy/vibroring/AltClick(mob/user) +/obj/item/clothing/sextoy/vibroring/click_alt(mob/user) if(color_changed) - return - . = ..() - if(.) - return + return CLICK_ACTION_BLOCKING var/choice = show_radial_menu(user, src, vibroring_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() color_changed = TRUE + return CLICK_ACTION_SUCCESS /obj/item/clothing/sextoy/vibroring/Initialize(mapload) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index fb6f72e832e..3833fdb8edb 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -310,7 +310,7 @@ return FALSE replace_beaker(user, used_container) - updateUsrDialog() + SStgui.update_uis(src) return TRUE // Beaker change handler @@ -586,7 +586,7 @@ data["current_vagina"] = current_vagina = null data["machine_color"] = machine_color - updateUsrDialog() + SStgui.update_uis(src) return data // User action handler in the interface diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm index e88b76206b9..6ba55958fe6 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm @@ -31,7 +31,8 @@ "green" = COLOR_GREEN, "white" = COLOR_WHITE, ) - + /// Is the pole in use currently? + var/pole_in_use /obj/structure/stripper_pole/examine(mob/user) . = ..() @@ -65,13 +66,14 @@ // Alt-click to turn the lights on or off. -/obj/structure/stripper_pole/AltClick(mob/user) +/obj/structure/stripper_pole/click_alt(mob/user) lights_enabled = !lights_enabled balloon_alert(user, "lights [lights_enabled ? "on" : "off"]") playsound(user, lights_enabled ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) update_icon_state() update_icon() update_brightness() + return CLICK_ACTION_SUCCESS /obj/structure/stripper_pole/Initialize(mapload) @@ -98,17 +100,17 @@ . = ..() if(.) return - if(obj_flags & IN_USE) + if(pole_in_use) balloon_alert(user, "already in use!") return - obj_flags |= IN_USE + pole_in_use = TRUE dancer = user user.setDir(SOUTH) user.Stun(10 SECONDS) user.forceMove(loc) user.visible_message(pick(span_purple("[user] dances on [src]!"), span_purple("[user] flexes their hip-moving skills on [src]!"))) dance_animate(user) - obj_flags &= ~IN_USE + pole_in_use = FALSE user.pixel_y = 0 user.pixel_z = pseudo_z_axis //incase we are off it when we jump on! dancer = null diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm index 0ac4d57fafb..7ee77500f7a 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm @@ -34,32 +34,28 @@ "square" = image (icon = src.icon, icon_state = "pillow_pink_square"), "round" = image(icon = src.icon, icon_state = "pillow_pink_round")) -/obj/item/fancy_pillow/AltClick(mob/user) - if(color_changed == FALSE) - . = ..() - if(.) - return +/obj/item/fancy_pillow/click_alt(mob/user) + if(!color_changed) var/choice = show_radial_menu(user, src, pillow_colors, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) if(!choice) - return FALSE + return CLICK_ACTION_BLOCKING current_color = choice update_icon() color_changed = TRUE update_icon_state() - if(color_changed == TRUE) - if(form_changed == FALSE) - . = ..() - if(.) - return - var/choice = show_radial_menu(user, src, pillow_forms, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) - if(!choice) - return FALSE - current_form = choice - update_icon() - form_changed = TRUE - update_icon_state() + return CLICK_ACTION_SUCCESS else - return + if(form_changed) + return CLICK_ACTION_BLOCKING + var/choice = show_radial_menu(user, src, pillow_forms, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE) + if(!choice) + return CLICK_ACTION_BLOCKING + current_form = choice + update_icon() + form_changed = TRUE + update_icon_state() + return CLICK_ACTION_SUCCESS + //to check if we can change pillow's model /obj/item/fancy_pillow/proc/check_menu(mob/living/user) @@ -185,7 +181,7 @@ //picking up the pillow -/obj/structure/bed/pillow_tiny/AltClick(mob/user) +/obj/structure/bed/pillow_tiny/click_alt(mob/user) to_chat(user, span_notice("You pick up [src].")) var/obj/item/fancy_pillow/taken_pillow = new() user.put_in_hands(taken_pillow) @@ -198,6 +194,7 @@ taken_pillow.update_icon_state() taken_pillow.update_icon() qdel(src) + return CLICK_ACTION_SUCCESS //when we lay on it @@ -308,7 +305,7 @@ icon_state = "[base_icon_state]_[current_color]" //Removing pillow from a pile -/obj/structure/chair/pillow_small/AltClick(mob/user) +/obj/structure/chair/pillow_small/click_alt(mob/user) to_chat(user, span_notice("You take [src] from the pile.")) var/obj/item/fancy_pillow/taken_pillow = new() var/obj/structure/bed/pillow_tiny/pillow_pile = new(get_turf(src)) @@ -330,6 +327,7 @@ pillow_pile.update_icon_state() pillow_pile.update_icon() qdel(src) + return CLICK_ACTION_SUCCESS //Upgrading pillow pile to a PILLOW PILE! /obj/structure/chair/pillow_small/attackby(obj/item/used_item, mob/living/user, params) @@ -437,7 +435,7 @@ icon_state = "[base_icon_state]_[current_color]" //Removing pillow from a pile -/obj/structure/bed/pillow_large/AltClick(mob/user) +/obj/structure/bed/pillow_large/click_alt(mob/user) to_chat(user, span_notice("You take [src] from the pile.")) var/obj/item/fancy_pillow/taken_pillow = new() var/obj/structure/chair/pillow_small/pillow_pile = new(get_turf(src)) @@ -464,3 +462,4 @@ pillow_pile.update_icon_state() pillow_pile.update_icon() qdel(src) + return CLICK_ACTION_SUCCESS diff --git a/modular_skyrat/modules/modular_weapons/code/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/gunsets.dm index 7373e0fa729..09b523f2c86 100644 --- a/modular_skyrat/modules/modular_weapons/code/gunsets.dm +++ b/modular_skyrat/modules/modular_weapons/code/gunsets.dm @@ -30,10 +30,10 @@ else icon_state = initial(icon_state) -/obj/item/storage/toolbox/guncase/skyrat/AltClick(mob/user) - . = ..() +/obj/item/storage/toolbox/guncase/skyrat/click_alt(mob/user) opened = !opened update_icon() + return CLICK_ACTION_SUCCESS /obj/item/storage/toolbox/guncase/skyrat/attack_self(mob/user) . = ..() diff --git a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm b/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm index d631246666c..01eda1e746d 100644 --- a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm +++ b/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm @@ -171,11 +171,9 @@ update_positioning() -/obj/machinery/mounted_machine_gun/AltClick(mob/user) - . = ..() - if(!can_interact(user)) - return +/obj/machinery/mounted_machine_gun/click_alt(mob/user) toggle_cover(user) + return CLICK_ACTION_SUCCESS /obj/machinery/mounted_machine_gun/attack_hand_secondary(mob/living/user, list/modifiers) . = ..() diff --git a/modular_skyrat/modules/mutants/code/mutant_cure.dm b/modular_skyrat/modules/mutants/code/mutant_cure.dm index 5bdff67d152..59fdca63325 100644 --- a/modular_skyrat/modules/mutants/code/mutant_cure.dm +++ b/modular_skyrat/modules/mutants/code/mutant_cure.dm @@ -219,8 +219,6 @@ if(machine_stat & (NOPOWER|BROKEN|MAINT)) return - usr.set_machine(src) - var/operation = href_list["function"] var/obj/item/process = locate(href_list["item"]) in src @@ -230,7 +228,7 @@ else if(operation == "eject") ejectItem() else if(operation == "refresh") - updateUsrDialog() + SStgui.update_uis(src) else if(status != STATUS_IDLE) to_chat(usr, span_warning("[src] is currently recombinating!")) @@ -246,7 +244,7 @@ recombinate_start() use_energy(3000 JOULES) - updateUsrDialog() + SStgui.update_uis(src) /obj/machinery/rnd/rna_recombinator/proc/ejectItem() if(loaded_item) diff --git a/modular_skyrat/modules/pollution/code/perfumes.dm b/modular_skyrat/modules/pollution/code/perfumes.dm index 2f07404ae76..80ccf1c253e 100644 --- a/modular_skyrat/modules/pollution/code/perfumes.dm +++ b/modular_skyrat/modules/pollution/code/perfumes.dm @@ -34,8 +34,9 @@ if(has_cap) . += span_notice("Alt-click [src] to [ cap ? "take the cap off" : "put the cap on"].") -/obj/item/perfume/AltClick(mob/user) +/obj/item/perfume/click_alt(mob/user) toggle_cap(user) + return CLICK_ACTION_SUCCESS /obj/item/perfume/attack_self(mob/user, modifiers) toggle_cap(user) diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm index 4860aed6331..282369b1e85 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm @@ -33,13 +33,14 @@ drop_everything_contained() return ..() -/obj/structure/large_mortar/AltClick(mob/user) +/obj/structure/large_mortar/click_alt(mob/user) if(!length(contents)) balloon_alert(user, "nothing inside") - return + return CLICK_ACTION_BLOCKING drop_everything_contained() balloon_alert(user, "removed all items") + return CLICK_ACTION_SUCCESS /// Drops all contents at the mortar /obj/structure/large_mortar/proc/drop_everything_contained() diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm b/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm index a71e4c7d35a..e677a617817 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm @@ -57,13 +57,14 @@ drop_everything_contained() return ..() -/obj/item/cutting_board/AltClick(mob/user) +/obj/item/cutting_board/click_alt(mob/user) if(!length(contents)) balloon_alert(user, "nothing on board") - return + return CLICK_ACTION_BLOCKING drop_everything_contained() balloon_alert(user, "cleared board") + return CLICK_ACTION_SUCCESS ///Drops all contents at the turf of the item /obj/item/cutting_board/proc/drop_everything_contained() diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm b/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm index 57b5d23e385..76a21851856 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm @@ -51,13 +51,14 @@ transfer_fingerprints_to(stone) return ..() -/obj/structure/millstone/AltClick(mob/user) +/obj/structure/millstone/click_alt(mob/user) if(!length(contents)) - balloon_alert(user, "nothing inside") - return + balloon_alert(user, "nothing inside!") + return CLICK_ACTION_BLOCKING drop_everything_contained() balloon_alert(user, "removed all items") + return CLICK_ACTION_SUCCESS /obj/structure/millstone/CtrlShiftClick(mob/user) set_anchored(!anchored) diff --git a/modular_skyrat/modules/primitive_production/code/glassblowing.dm b/modular_skyrat/modules/primitive_production/code/glassblowing.dm index ed7b4a31ff8..59198aa1112 100644 --- a/modular_skyrat/modules/primitive_production/code/glassblowing.dm +++ b/modular_skyrat/modules/primitive_production/code/glassblowing.dm @@ -227,7 +227,6 @@ if(!Adjacent(usr)) return add_fingerprint(usr) - usr.set_machine(src) var/obj/item/glassblowing/molten_glass/glass = glass_ref?.resolve() var/actioning_speed = usr.mind.get_skill_modifier(/datum/skill/production, SKILL_SPEED_MODIFIER) * DEFAULT_TIMED diff --git a/modular_skyrat/modules/salon/code/hair_tie.dm b/modular_skyrat/modules/salon/code/hair_tie.dm index 2b490ec749b..73b1a28d93b 100644 --- a/modular_skyrat/modules/salon/code/hair_tie.dm +++ b/modular_skyrat/modules/salon/code/hair_tie.dm @@ -86,16 +86,16 @@ user.set_hairstyle(actual_hairstyle, update = TRUE) actual_hairstyle = null -/obj/item/clothing/head/hair_tie/AltClick(mob/living/user) - . = ..() +/obj/item/clothing/head/hair_tie/click_alt(mob/living/user) if(!(user.get_slot_by_item(src) == ITEM_SLOT_HANDS)) balloon_alert(user, "hold in-hand!") - return + return CLICK_ACTION_BLOCKING user.visible_message( span_danger("[user.name] puts [src] around [user.p_their()] fingers, beginning to flick it!"), span_notice("You try to flick [src]!"), ) flick_hair_tie(user) + return CLICK_ACTION_SUCCESS ///This proc flicks the hair tie out of the player's hand, tripping the target hit for 1 second /obj/item/clothing/head/hair_tie/proc/flick_hair_tie(mob/living/user) @@ -143,7 +143,7 @@ ) build_path = /obj/item/clothing/head/hair_tie/plastic_beads category = list( - RND_CATEGORY_INITIAL, + RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm index e3b61e0f3e2..fb54222abdb 100644 --- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm +++ b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm @@ -80,15 +80,15 @@ . = ..() . += span_notice("ALT-Click to turn ON when closed.") -/obj/machinery/self_actualization_device/AltClick(mob/user) - . = ..() +/obj/machinery/self_actualization_device/click_alt(mob/user) if(!powered() || !occupant || state_open) - return FALSE + return CLICK_ACTION_BLOCKING to_chat(user, "You power on [src].") addtimer(CALLBACK(src, PROC_REF(eject_new_you)), processing_time, TIMER_OVERRIDE|TIMER_UNIQUE) processing = TRUE update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/self_actualization_device/container_resist_act(mob/living/user) if(state_open) diff --git a/modular_skyrat/modules/specialist_armor/code/sacrificial.dm b/modular_skyrat/modules/specialist_armor/code/sacrificial.dm index 45643140f83..71bbf99db4d 100644 --- a/modular_skyrat/modules/specialist_armor/code/sacrificial.dm +++ b/modular_skyrat/modules/specialist_armor/code/sacrificial.dm @@ -79,8 +79,9 @@ QDEL_NULL(face_shield) return ..() -/obj/item/clothing/head/helmet/sf_sacrificial/AltClick(mob/user) +/obj/item/clothing/head/helmet/sf_sacrificial/click_alt(mob/user) remove_face_shield(user) + return CLICK_ACTION_SUCCESS /// Attached the passed face shield to the helmet. /obj/item/clothing/head/helmet/sf_sacrificial/proc/add_face_shield(mob/living/carbon/human/user, obj/shield_in_question) diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm index 3a909a7d87a..abb7437d6f6 100644 --- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm +++ b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm @@ -13,6 +13,7 @@ var/last_stasis_sound = FALSE fair_market_price = 10 payment_department = ACCOUNT_MED + interaction_flags_click = ALLOW_SILICON_REACH /obj/machinery/stasissleeper/Destroy() . = ..() @@ -53,9 +54,7 @@ playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) last_stasis_sound = _running -/obj/machinery/stasissleeper/AltClick(mob/user) - if(!user.can_perform_action(src, ALLOW_SILICON_REACH)) - return +/obj/machinery/stasissleeper/click_alt(mob/user) if(!panel_open) user.visible_message(span_notice("\The [src] [state_open ? "hisses as it seals shut." : "hisses as it swings open."]."), \ span_notice("You [state_open ? "close" : "open"] \the [src]."), \ @@ -65,6 +64,8 @@ else open_machine() + return CLICK_ACTION_SUCCESS + /obj/machinery/stasissleeper/Exited(atom/movable/AM, atom/newloc) if(!state_open && AM == occupant) container_resist_act(AM) diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_skyrat/modules/stone/code/stone.dm index 0ae23c39c45..ac36480ac79 100644 --- a/modular_skyrat/modules/stone/code/stone.dm +++ b/modular_skyrat/modules/stone/code/stone.dm @@ -11,7 +11,6 @@ resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/mineral/stone grind_results = null - point_value = 0 material_type = /datum/material/stone matter_amount = 0 source = null diff --git a/modular_skyrat/modules/time_clock/code/console.dm b/modular_skyrat/modules/time_clock/code/console.dm index 2d4891366a1..8b399d94dec 100644 --- a/modular_skyrat/modules/time_clock/code/console.dm +++ b/modular_skyrat/modules/time_clock/code/console.dm @@ -77,14 +77,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/time_clock, 28) playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) return TRUE -/obj/machinery/time_clock/AltClick(mob/user) - . = ..() - if(!Adjacent(user)) - to_chat(user, span_warning("You are out of range of the [src]!")) - return FALSE - +/obj/machinery/time_clock/click_alt(mob/user) if(!eject_inserted_id(user)) - return FALSE + return CLICK_ACTION_BLOCKING + + return CLICK_ACTION_SUCCESS ///Ejects the ID stored inside of the parent machine, if there is one. /obj/machinery/time_clock/proc/eject_inserted_id(mob/recepient) diff --git a/modular_skyrat/modules/wargame_projectors/code/projectors.dm b/modular_skyrat/modules/wargame_projectors/code/projectors.dm index 49c3d46847a..fe34b3a68af 100644 --- a/modular_skyrat/modules/wargame_projectors/code/projectors.dm +++ b/modular_skyrat/modules/wargame_projectors/code/projectors.dm @@ -86,7 +86,7 @@ /obj/item/wargame_projector/attack_self(mob/user) select_hologram(user) -/obj/item/wargame_projector/AltClick(mob/user) +/obj/item/wargame_projector/click_alt(mob/user) var/selected_color = tgui_input_list(user, "Select a color", "Color Selection", color_options) if(isnull(selected_color)) balloon_alert(user, "no color change") @@ -95,6 +95,7 @@ holosign_color = color_to_set_to balloon_alert(user, "color changed") set_greyscale(holosign_color) + return CLICK_ACTION_SUCCESS /obj/item/wargame_projector/CtrlClick(mob/user) if(tgui_alert(usr,"Clear all currently active holograms?", "Hologram Removal", list("Yes", "No")) == "Yes") diff --git a/sound/attributions.txt b/sound/attributions.txt index 39f206e982a..be8df17c535 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -143,3 +143,7 @@ where refinery and wooping_teleport are modifications of that same electric dril paper_flip.ogg is made by gynation from Freesound.org, CC0 https://freesound.org/people/gynation/sounds/82378/ + +nightmare_poof.ogg and nightmare_reappear.ogg are comprised of breath_01.wav by Nightflame (CC0) and slide-click.wav by Qat (CC0) +https://freesound.org/people/Qat/sounds/108332/ +https://freesound.org/people/Nightflame/sounds/368615/ diff --git a/sound/effects/nightmare_poof.ogg b/sound/effects/nightmare_poof.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8b44685ba43819bce614b2f7cf88495ca0203d1 GIT binary patch literal 15537 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 S_e{LSsmXWM&ijP#0sJo=Ii@H8 literal 0 HcmV?d00001 diff --git a/sound/effects/nightmare_reappear.ogg b/sound/effects/nightmare_reappear.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3dec20064602a8b79bae109336eeea2a9c49d375 GIT binary patch literal 18238 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: (input: T, index: number, collection: T[]) => boolean) => - (collection: T[]): T[] => { - if (collection === null || collection === undefined) { - return collection; - } - if (Array.isArray(collection)) { - const result: T[] = []; - for (let i = 0; i < collection.length; i++) { - const item = collection[i]; - if (iterateeFn(item, i, collection)) { - result.push(item); - } +export const filter = ( + collection: T[], + iterateeFn: (input: T, index: number, collection: T[]) => boolean, +): T[] => { + if (collection === null || collection === undefined) { + return collection; + } + if (Array.isArray(collection)) { + const result: T[] = []; + for (let i = 0; i < collection.length; i++) { + const item = collection[i]; + if (iterateeFn(item, i, collection)) { + result.push(item); } - return result; } - throw new Error(`filter() can't iterate on type ${typeof collection}`); - }; + return result; + } + throw new Error(`filter() can't iterate on type ${typeof collection}`); +}; type MapFunction = { ( + collection: T[], iterateeFn: (value: T, index: number, collection: T[]) => U, - ): (collection: T[]) => U[]; + ): U[]; ( + collection: Record, iterateeFn: (value: T, index: K, collection: Record) => U, - ): (collection: Record) => U[]; + ): U[]; }; /** @@ -49,44 +52,30 @@ type MapFunction = { * If collection is 'null' or 'undefined', it will be returned "as is" * without emitting any errors (which can be useful in some cases). */ -export const map: MapFunction = - (iterateeFn) => - (collection: T[]): U[] => { - if (collection === null || collection === undefined) { - return collection; - } - - if (Array.isArray(collection)) { - return collection.map(iterateeFn); - } - - if (typeof collection === 'object') { - return Object.entries(collection).map(([key, value]) => { - return iterateeFn(value, key, collection); - }); - } - - throw new Error(`map() can't iterate on type ${typeof collection}`); - }; - -/** - * Given a collection, will run each element through an iteratee function. - * Will then filter out undefined values. - */ -export const filterMap = ( - collection: T[], - iterateeFn: (value: T) => U | undefined, -): U[] => { - const finalCollection: U[] = []; - - for (const value of collection) { - const output = iterateeFn(value); - if (output !== undefined) { - finalCollection.push(output); - } +export const map: MapFunction = (collection, iterateeFn) => { + if (collection === null || collection === undefined) { + return collection; } - return finalCollection; + if (Array.isArray(collection)) { + const result: unknown[] = []; + for (let i = 0; i < collection.length; i++) { + result.push(iterateeFn(collection[i], i, collection)); + } + return result; + } + + if (typeof collection === 'object') { + const result: unknown[] = []; + for (let i in collection) { + if (Object.prototype.hasOwnProperty.call(collection, i)) { + result.push(iterateeFn(collection[i], i, collection)); + } + } + return result; + } + + throw new Error(`map() can't iterate on type ${typeof collection}`); }; const COMPARATOR = (objA, objB) => { @@ -112,39 +101,38 @@ const COMPARATOR = (objA, objB) => { * * Iteratees are called with one argument (value). */ -export const sortBy = - (...iterateeFns: ((input: T) => unknown)[]) => - (array: T[]): T[] => { - if (!Array.isArray(array)) { - return array; - } - let length = array.length; - // Iterate over the array to collect criteria to sort it by - let mappedArray: { - criteria: unknown[]; - value: T; - }[] = []; - for (let i = 0; i < length; i++) { - const value = array[i]; - mappedArray.push({ - criteria: iterateeFns.map((fn) => fn(value)), - value, - }); - } - // Sort criteria using the base comparator - mappedArray.sort(COMPARATOR); +export const sortBy = ( + array: T[], + ...iterateeFns: ((input: T) => unknown)[] +): T[] => { + if (!Array.isArray(array)) { + return array; + } + let length = array.length; + // Iterate over the array to collect criteria to sort it by + let mappedArray: { + criteria: unknown[]; + value: T; + }[] = []; + for (let i = 0; i < length; i++) { + const value = array[i]; + mappedArray.push({ + criteria: iterateeFns.map((fn) => fn(value)), + value, + }); + } + // Sort criteria using the base comparator + mappedArray.sort(COMPARATOR); - // Unwrap values - const values: T[] = []; - while (length--) { - values[length] = mappedArray[length].value; - } - return values; - }; + // Unwrap values + const values: T[] = []; + while (length--) { + values[length] = mappedArray[length].value; + } + return values; +}; -export const sort = sortBy(); - -export const sortStrings = sortBy(); +export const sort = (array: T[]): T[] => sortBy(array); /** * Returns a range of numbers from start to end, exclusively. @@ -153,12 +141,34 @@ export const sortStrings = sortBy(); export const range = (start: number, end: number): number[] => new Array(end - start).fill(null).map((_, index) => index + start); +type ReduceFunction = { + ( + array: T[], + reducerFn: ( + accumulator: U, + currentValue: T, + currentIndex: number, + array: T[], + ) => U, + initialValue: U, + ): U; + ( + array: T[], + reducerFn: ( + accumulator: T, + currentValue: T, + currentIndex: number, + array: T[], + ) => T, + ): T; +}; + /** * A fast implementation of reduce. */ -export const reduce = (reducerFn, initialValue) => (array) => { +export const reduce: ReduceFunction = (array, reducerFn, initialValue?) => { const length = array.length; - let i; + let i: number; let result; if (initialValue === undefined) { i = 1; @@ -184,15 +194,16 @@ export const reduce = (reducerFn, initialValue) => (array) => { * is determined by the order they occur in the array. The iteratee is * invoked with one argument: value. */ -export const uniqBy = - (iterateeFn?: (value: T) => unknown) => - (array: T[]): T[] => { - const { length } = array; - const result: T[] = []; - const seen: unknown[] = iterateeFn ? [] : result; - let index = -1; - // prettier-ignore - outer: +export const uniqBy = ( + array: T[], + iterateeFn?: (value: T) => unknown, +): T[] => { + const { length } = array; + const result: T[] = []; + const seen: unknown[] = iterateeFn ? [] : result; + let index = -1; + // prettier-ignore + outer: while (++index < length) { let value: T | 0 = array[index]; const computed = iterateeFn ? iterateeFn(value) : value; @@ -214,10 +225,10 @@ export const uniqBy = result.push(value); } } - return result; - }; + return result; +}; -export const uniq = uniqBy(); +export const uniq = (array: T[]): T[] => uniqBy(array); type Zip = { [I in keyof T]: T[I] extends (infer U)[] ? U : never; @@ -247,17 +258,6 @@ export const zip = (...arrays: T): Zip => { return result; }; -/** - * This method is like "zip" except that it accepts iteratee to - * specify how grouped values should be combined. The iteratee is - * invoked with the elements of each group. - */ -export const zipWith = - (iterateeFn: (...values: T[]) => U) => - (...arrays: T[][]): U[] => { - return map((values: T[]) => iterateeFn(...values))(zip(...arrays)); - }; - const binarySearch = ( getKey: (value: T) => U, collection: readonly T[], @@ -293,13 +293,15 @@ const binarySearch = ( return compare > insertingKey ? middle : middle + 1; }; -export const binaryInsertWith = - (getKey: (value: T) => U) => - (collection: readonly T[], value: T) => { - const copy = [...collection]; - copy.splice(binarySearch(getKey, collection, value), 0, value); - return copy; - }; +export const binaryInsertWith = ( + collection: readonly T[], + value: T, + getKey: (value: T) => U, +): T[] => { + const copy = [...collection]; + copy.splice(binarySearch(getKey, collection, value), 0, value); + return copy; +}; /** * This method takes a collection of items and a number, returning a collection @@ -325,7 +327,8 @@ export const paginate = (collection: T[], maxPerPage: number): T[][] => { return pages; }; -const isObject = (obj: unknown) => typeof obj === 'object' && obj !== null; +const isObject = (obj: unknown): obj is object => + typeof obj === 'object' && obj !== null; // Does a deep merge of two objects. DO NOT FEED CIRCULAR OBJECTS!! export const deepMerge = (...objects: any[]): any => { diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js index ba7df09d407..675e98d807e 100644 --- a/tgui/packages/common/fp.js +++ b/tgui/packages/common/fp.js @@ -23,27 +23,3 @@ export const flow = (...funcs) => (input, ...rest) => { } return output; }; - -/** - * Composes single-argument functions from right to left. - * - * All functions might accept a context in form of additional arguments. - * If the resulting function is called with more than 1 argument, rest of - * the arguments are passed to all functions unchanged. - * - * @param {...Function} funcs The functions to compose - * @returns {Function} A function obtained by composing the argument functions - * from right to left. For example, compose(f, g, h) is identical to doing - * (input, ...rest) => f(g(h(input, ...rest), ...rest), ...rest) - */ -export const compose = (...funcs) => { - if (funcs.length === 0) { - return (arg) => arg; - } - if (funcs.length === 1) { - return funcs[0]; - } - // prettier-ignore - return funcs.reduce((a, b) => (value, ...rest) => - a(b(value, ...rest), ...rest)); -}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js deleted file mode 100644 index b1f85f7429d..00000000000 --- a/tgui/packages/common/vector.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * N-dimensional vector manipulation functions. - * - * Vectors are plain number arrays, i.e. [x, y, z]. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { map, reduce, zipWith } from './collections'; - -const ADD = (a, b) => a + b; -const SUB = (a, b) => a - b; -const MUL = (a, b) => a * b; -const DIV = (a, b) => a / b; - -export const vecAdd = (...vecs) => { - return reduce((a, b) => zipWith(ADD)(a, b))(vecs); -}; - -export const vecSubtract = (...vecs) => { - return reduce((a, b) => zipWith(SUB)(a, b))(vecs); -}; - -export const vecMultiply = (...vecs) => { - return reduce((a, b) => zipWith(MUL)(a, b))(vecs); -}; - -export const vecDivide = (...vecs) => { - return reduce((a, b) => zipWith(DIV)(a, b))(vecs); -}; - -export const vecScale = (vec, n) => { - return map((x) => x * n)(vec); -}; - -export const vecInverse = (vec) => { - return map((x) => -x)(vec); -}; - -export const vecLength = (vec) => { - return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec))); -}; - -export const vecNormalize = (vec) => { - return vecDivide(vec, vecLength(vec)); -}; diff --git a/tgui/packages/common/vector.ts b/tgui/packages/common/vector.ts new file mode 100644 index 00000000000..c91715a8f99 --- /dev/null +++ b/tgui/packages/common/vector.ts @@ -0,0 +1,51 @@ +/** + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { map, reduce, zip } from './collections'; + +const ADD = (a: number, b: number): number => a + b; +const SUB = (a: number, b: number): number => a - b; +const MUL = (a: number, b: number): number => a * b; +const DIV = (a: number, b: number): number => a / b; + +export type Vector = number[]; + +export const vecAdd = (...vecs: Vector[]): Vector => { + return map(zip(...vecs), (x) => reduce(x, ADD)); +}; + +export const vecSubtract = (...vecs: Vector[]): Vector => { + return map(zip(...vecs), (x) => reduce(x, SUB)); +}; + +export const vecMultiply = (...vecs: Vector[]): Vector => { + return map(zip(...vecs), (x) => reduce(x, MUL)); +}; + +export const vecDivide = (...vecs: Vector[]): Vector => { + return map(zip(...vecs), (x) => reduce(x, DIV)); +}; + +export const vecScale = (vec: Vector, n: number): Vector => { + return map(vec, (x) => x * n); +}; + +export const vecInverse = (vec: Vector): Vector => { + return map(vec, (x) => -x); +}; + +export const vecLength = (vec: Vector): number => { + return Math.sqrt(reduce(vecMultiply(vec, vec), ADD)); +}; + +export const vecNormalize = (vec: Vector): Vector => { + const length = vecLength(vec); + return map(vec, (c) => c / length); +}; diff --git a/tgui/packages/tgui-panel/chat/selectors.ts b/tgui/packages/tgui-panel/chat/selectors.ts index 2908f661264..3c1e0b4f429 100644 --- a/tgui/packages/tgui-panel/chat/selectors.ts +++ b/tgui/packages/tgui-panel/chat/selectors.ts @@ -9,7 +9,7 @@ import { map } from 'common/collections'; export const selectChat = (state) => state.chat; export const selectChatPages = (state) => - map((id: string) => state.chat.pageById[id])(state.chat.pages); + map(state.chat.pages, (id: string) => state.chat.pageById[id]); export const selectCurrentChatPage = (state) => state.chat.pageById[state.chat.currentPageId]; diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index c85d5153210..9190d74dbe2 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -274,10 +274,6 @@ type BackendState = { shared: Record; suspending: boolean; suspended: boolean; - debug?: { - debugLayout: boolean; - kitchenSink: boolean; - }; }; /** diff --git a/tgui/packages/tgui/components/Autofocus.tsx b/tgui/packages/tgui/components/Autofocus.tsx index a0b3f6f7659..403dbe2e965 100644 --- a/tgui/packages/tgui/components/Autofocus.tsx +++ b/tgui/packages/tgui/components/Autofocus.tsx @@ -1,17 +1,23 @@ -import { createRef, PropsWithChildren, useEffect } from 'react'; +import { PropsWithChildren, useEffect, useRef } from 'react'; -export const Autofocus = (props: PropsWithChildren) => { - const ref = createRef(); +/** Used to force the window to steal focus on load. Children optional */ +export function Autofocus(props: PropsWithChildren) { + const { children } = props; + const ref = useRef(null); useEffect(() => { - setTimeout(() => { + const timer = setTimeout(() => { ref.current?.focus(); }, 1); + + return () => { + clearTimeout(timer); + }; }, []); return (

    ); -}; +} diff --git a/tgui/packages/tgui/components/Chart.tsx b/tgui/packages/tgui/components/Chart.tsx index 205dc6fbec1..bc33ff90606 100644 --- a/tgui/packages/tgui/components/Chart.tsx +++ b/tgui/packages/tgui/components/Chart.tsx @@ -4,7 +4,7 @@ * @license MIT */ -import { map, zipWith } from 'common/collections'; +import { map, zip } from 'common/collections'; import { Component, createRef, RefObject } from 'react'; import { Box, BoxProps } from './Box'; @@ -37,8 +37,8 @@ const normalizeData = ( return []; } - const min = zipWith(Math.min)(...data); - const max = zipWith(Math.max)(...data); + const min = map(zip(...data), (p) => Math.min(...p)); + const max = map(zip(...data), (p) => Math.max(...p)); if (rangeX !== undefined) { min[0] = rangeX[0]; @@ -50,11 +50,12 @@ const normalizeData = ( max[1] = rangeY[1]; } - const normalized = map((point: Point) => { - return zipWith((value: number, min: number, max: number, scale: number) => { - return ((value - min) / (max - min)) * scale; - })(point, min, max, scale); - })(data); + const normalized = map(data, (point) => + map( + zip(point, min, max, scale), + ([value, min, max, scale]) => ((value - min) / (max - min)) * scale, + ), + ); return normalized; }; diff --git a/tgui/packages/tgui/components/DmIcon.tsx b/tgui/packages/tgui/components/DmIcon.tsx new file mode 100644 index 00000000000..fb6816576ac --- /dev/null +++ b/tgui/packages/tgui/components/DmIcon.tsx @@ -0,0 +1,72 @@ +import { ReactNode, useEffect, useState } from 'react'; + +import { resolveAsset } from '../assets'; +import { fetchRetry } from '../http'; +import { BoxProps } from './Box'; +import { Image } from './Image'; + +enum Direction { + NORTH = 1, + SOUTH = 2, + EAST = 4, + WEST = 8, + NORTHEAST = NORTH | EAST, + NORTHWEST = NORTH | WEST, + SOUTHEAST = SOUTH | EAST, + SOUTHWEST = SOUTH | WEST, +} + +type Props = { + /** Required: The path of the icon */ + icon: string; + /** Required: The state of the icon */ + icon_state: string; +} & Partial<{ + /** Facing direction. See direction enum. Default is South */ + direction: Direction; + /** Fallback icon. */ + fallback: ReactNode; + /** Frame number. Default is 1 */ + frame: number; + /** Movement state. Default is false */ + movement: boolean; +}> & + BoxProps; + +let refMap: Record | undefined; + +export function DmIcon(props: Props) { + const { + className, + direction = Direction.SOUTH, + fallback, + frame = 1, + icon_state, + icon, + movement = false, + ...rest + } = props; + + const [iconRef, setIconRef] = useState(''); + + const query = `${iconRef}?state=${icon_state}&dir=${direction}&movement=${movement}&frame=${frame}`; + + useEffect(() => { + async function fetchRefMap() { + const response = await fetchRetry(resolveAsset('icon_ref_map.json')); + const data = await response.json(); + refMap = data; + setIconRef(data[icon]); + } + + if (!refMap) { + fetchRefMap(); + } else { + setIconRef(refMap[icon]); + } + }, []); + + if (!iconRef) return fallback; + + return ; +} diff --git a/tgui/packages/tgui/components/Grid.jsx b/tgui/packages/tgui/components/Grid.jsx deleted file mode 100644 index f5593c9e00a..00000000000 --- a/tgui/packages/tgui/components/Grid.jsx +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { Table } from './Table'; - -/** @deprecated */ -export const Grid = (props) => { - const { children, ...rest } = props; - return ( - - {children} -
    - ); -}; - -/** @deprecated */ -export const GridColumn = (props) => { - const { size = 1, style, ...rest } = props; - return ( - - ); -}; - -Grid.Column = GridColumn; diff --git a/tgui/packages/tgui/components/Grid.tsx b/tgui/packages/tgui/components/Grid.tsx new file mode 100644 index 00000000000..91c9256753b --- /dev/null +++ b/tgui/packages/tgui/components/Grid.tsx @@ -0,0 +1,44 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { PropsWithChildren } from 'react'; + +import { logger } from '../logging'; +import { BoxProps } from './Box'; +import { Table } from './Table'; + +/** @deprecated Do not use. Use stack instead. */ +export function Grid(props: PropsWithChildren) { + const { children, ...rest } = props; + logger.error('Grid component is deprecated. Use a Stack instead.'); + return ( + + {children} +
    + ); +} + +type Props = Partial<{ + /** Width of the column in percentage. */ + size: number; +}> & + BoxProps; + +/** @deprecated Do not use. Use stack instead. */ +export function GridColumn(props: Props) { + const { size = 1, style, ...rest } = props; + return ( + + ); +} + +Grid.Column = GridColumn; diff --git a/tgui/packages/tgui/components/Image.tsx b/tgui/packages/tgui/components/Image.tsx index 3e1519bfbbf..5d3a943feb0 100644 --- a/tgui/packages/tgui/components/Image.tsx +++ b/tgui/packages/tgui/components/Image.tsx @@ -1,12 +1,14 @@ -import { ReactNode } from 'react'; +import { useRef } from 'react'; import { BoxProps, computeBoxProps } from './Box'; -import { Tooltip } from './Tooltip'; type Props = Partial<{ - fixBlur: boolean; // true is default, this is an ie thing - objectFit: 'contain' | 'cover'; // fill is default - tooltip: ReactNode; + /** True is default, this fixes an ie thing */ + fixBlur: boolean; + /** False by default. Good if you're fetching images on UIs that do not auto update. This will attempt to fix the 'x' icon 5 times. */ + fixErrors: boolean; + /** Fill is default. */ + objectFit: 'contain' | 'cover'; }> & IconUnion & BoxProps; @@ -22,16 +24,18 @@ type IconUnion = src?: string; }; +const maxAttempts = 5; + /** Image component. Use this instead of Box as="img". */ -export const Image = (props: Props) => { +export function Image(props: Props) { const { - className, fixBlur = true, + fixErrors = false, objectFit = 'fill', src, - tooltip, ...rest } = props; + const attempts = useRef(0); const computedProps = computeBoxProps(rest); computedProps['style'] = { @@ -40,11 +44,20 @@ export const Image = (props: Props) => { objectFit, }; - let content = ; + return ( + { + if (fixErrors && attempts.current < maxAttempts) { + const imgElement = event.currentTarget; - if (tooltip) { - content = {content}; - } - - return content; -}; + setTimeout(() => { + imgElement.src = `${src}?attempt=${attempts.current}`; + attempts.current++; + }, 1000); + } + }} + src={src} + {...computedProps} + /> + ); +} diff --git a/tgui/packages/tgui/components/Table.tsx b/tgui/packages/tgui/components/Table.tsx index 87edfbb8fc9..f4dcf6f3f52 100644 --- a/tgui/packages/tgui/components/Table.tsx +++ b/tgui/packages/tgui/components/Table.tsx @@ -64,6 +64,8 @@ type CellProps = Partial<{ colSpan: number; /** Whether this is a header cell. */ header: boolean; + /** Rows for this cell to expand, assuming there is room. */ + rowSpan: number; }> & BoxProps; diff --git a/tgui/packages/tgui/components/index.ts b/tgui/packages/tgui/components/index.ts index 1a5f477d256..fdeb475ed3b 100644 --- a/tgui/packages/tgui/components/index.ts +++ b/tgui/packages/tgui/components/index.ts @@ -17,6 +17,7 @@ export { ColorBox } from './ColorBox'; export { Dialog } from './Dialog'; export { Dimmer } from './Dimmer'; export { Divider } from './Divider'; +export { DmIcon } from './DmIcon'; export { DraggableControl } from './DraggableControl'; export { Dropdown } from './Dropdown'; export { FitText } from './FitText'; diff --git a/tgui/packages/tgui/debug/KitchenSink.jsx b/tgui/packages/tgui/debug/KitchenSink.jsx index d215ab777d8..19044ca98d0 100644 --- a/tgui/packages/tgui/debug/KitchenSink.jsx +++ b/tgui/packages/tgui/debug/KitchenSink.jsx @@ -4,11 +4,12 @@ * @license MIT */ -import { useLocalState } from '../backend'; +import { useState } from 'react'; + import { Flex, Section, Tabs } from '../components'; import { Pane, Window } from '../layouts'; -const r = require.context('../stories', false, /\.stories\.js$/); +const r = require.context('../stories', false, /\.stories\.jsx$/); /** * @returns {{ @@ -22,8 +23,8 @@ const getStories = () => r.keys().map((path) => r(path)); export const KitchenSink = (props) => { const { panel } = props; - const [theme] = useLocalState('kitchenSinkTheme'); - const [pageIndex, setPageIndex] = useLocalState('pageIndex', 0); + const [theme] = useState(null); + const [pageIndex, setPageIndex] = useState(0); const stories = getStories(); const story = stories[pageIndex]; const Layout = panel ? Pane : Window; diff --git a/tgui/packages/tgui/drag.ts b/tgui/packages/tgui/drag.ts index 584666a97a6..0884b1b0bd7 100644 --- a/tgui/packages/tgui/drag.ts +++ b/tgui/packages/tgui/drag.ts @@ -209,7 +209,7 @@ export const dragStartHandler = (event) => { dragPointOffset = vecSubtract( [event.screenX, event.screenY], getWindowPosition(), - ); + ) as [number, number]; // Focus click target (event.target as HTMLElement)?.focus(); document.addEventListener('mousemove', dragMoveHandler); @@ -234,7 +234,10 @@ const dragMoveHandler = (event: MouseEvent) => { } event.preventDefault(); setWindowPosition( - vecSubtract([event.screenX, event.screenY], dragPointOffset), + vecSubtract([event.screenX, event.screenY], dragPointOffset) as [ + number, + number, + ], ); }; @@ -247,7 +250,7 @@ export const resizeStartHandler = dragPointOffset = vecSubtract( [event.screenX, event.screenY], getWindowPosition(), - ); + ) as [number, number]; initialSize = getWindowSize(); // Focus click target (event.target as HTMLElement)?.focus(); @@ -278,7 +281,10 @@ const resizeMoveHandler = (event: MouseEvent) => { ); const delta = vecSubtract(currentOffset, dragPointOffset); // Extra 1x1 area is added to ensure the browser can see the cursor - size = vecAdd(initialSize, vecMultiply(resizeMatrix, delta), [1, 1]); + size = vecAdd(initialSize, vecMultiply(resizeMatrix, delta), [1, 1]) as [ + number, + number, + ]; // Sane window size values size[0] = Math.max(size[0], 150 * pixelRatio); size[1] = Math.max(size[1], 50 * pixelRatio); diff --git a/tgui/packages/tgui/interfaces/AirlockElectronics.tsx b/tgui/packages/tgui/interfaces/AirlockElectronics.tsx index 7e0ebba0bb4..b90e8ac3b57 100644 --- a/tgui/packages/tgui/interfaces/AirlockElectronics.tsx +++ b/tgui/packages/tgui/interfaces/AirlockElectronics.tsx @@ -1,21 +1,31 @@ import { BooleanLike } from 'common/react'; import { useBackend } from '../backend'; -import { Button, Input, LabeledList, Section } from '../components'; +import { Button, Input, LabeledList, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { AccessConfig } from './common/AccessConfig'; +import { AccessConfig, Region } from './common/AccessConfig'; type Data = { - oneAccess: BooleanLike; - unres_direction: number; - passedName: string; - passedCycleId: number; - regions: string[]; accesses: string[]; + oneAccess: BooleanLike; + passedCycleId: number; + passedName: string; + regions: Region[]; shell: BooleanLike; + unres_direction: number; }; -export const AirLockMainSection = (props) => { +export function AirlockElectronics(props) { + return ( + + + + + + ); +} + +export function AirLockMainSection(props) { const { act, data } = useBackend(); const { accesses = [], @@ -28,123 +38,125 @@ export const AirLockMainSection = (props) => { } = data; return ( -
    - - - { - act('set_shell', { on: !shell }); - }} - tooltip="Whether this airlock can have an integrated circuit placed inside of it or not." - /> - - -
    + + +
    + + + { + act('set_shell', { on: !shell }); + }} + tooltip="Whether this airlock can have an integrated circuit placed inside of it or not." + > + Shell + + + + + + + + + + + + + + act('passedName', { + passedName: value, + }) + } + /> + + + + act('passedCycleId', { + passedCycleId: value, + }) + } + /> + + +
    +
    + + + act('set', { + access: ref, + }) + } + grantAll={() => act('grant_all')} + denyAll={() => act('clear_all')} + grantDep={(ref) => + act('grant_region', { + region: ref, + }) + } + denyDep={(ref) => + act('deny_region', { + region: ref, + }) + } + /> + +
    ); -}; - -export const AirlockElectronics = (props) => { - return ( - - - - - - ); -}; +} diff --git a/tgui/packages/tgui/interfaces/ApcControl.jsx b/tgui/packages/tgui/interfaces/ApcControl.jsx index acf46f9f0b8..fb29c78032d 100644 --- a/tgui/packages/tgui/interfaces/ApcControl.jsx +++ b/tgui/packages/tgui/interfaces/ApcControl.jsx @@ -160,18 +160,21 @@ const ApcControlScene = (props) => { const [sortByField] = useLocalState('sortByField', 'name'); const apcs = flow([ - map((apc, i) => ({ - ...apc, - // Generate a unique id - id: apc.name + i, - })), - sortByField === 'name' && sortBy((apc) => apc.name), - sortByField === 'charge' && sortBy((apc) => -apc.charge), + (apcs) => + map(apcs, (apc, i) => ({ + ...apc, + // Generate a unique id + id: apc.name + i, + })), + sortByField === 'name' && ((apcs) => sortBy(apcs, (apc) => apc.name)), + sortByField === 'charge' && ((apcs) => sortBy(apcs, (apc) => -apc.charge)), sortByField === 'draw' && - sortBy( - (apc) => -powerRank(apc.load), - (apc) => -parseFloat(apc.load), - ), + ((apcs) => + sortBy( + apcs, + (apc) => -powerRank(apc.load), + (apc) => -parseFloat(apc.load), + )), ])(data.apcs); return ( @@ -255,14 +258,11 @@ const ApcControlScene = (props) => { const LogPanel = (props) => { const { data } = useBackend(); - const logs = flow([ - map((line, i) => ({ - ...line, - // Generate a unique id - id: line.entry + i, - })), - (logs) => logs.reverse(), - ])(data.logs); + const logs = map(data.logs, (line, i) => ({ + ...line, + // Generate a unique id + id: line.entry + i, + })).reverse(); return ( {logs.map((line) => ( diff --git a/tgui/packages/tgui/interfaces/AtmosControlPanel.jsx b/tgui/packages/tgui/interfaces/AtmosControlPanel.jsx index 84d0ff08def..c39778c410f 100644 --- a/tgui/packages/tgui/interfaces/AtmosControlPanel.jsx +++ b/tgui/packages/tgui/interfaces/AtmosControlPanel.jsx @@ -1,5 +1,4 @@ import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend } from '../backend'; import { Box, Button, Flex, Section, Table } from '../components'; @@ -7,14 +6,14 @@ import { Window } from '../layouts'; export const AtmosControlPanel = (props) => { const { act, data } = useBackend(); - const groups = flow([ - map((group, i) => ({ + const groups = sortBy( + map(data.excited_groups, (group, i) => ({ ...group, // Generate a unique id id: group.area + i, })), - sortBy((group) => group.id), - ])(data.excited_groups); + (group) => group.id, + ); return (
    diff --git a/tgui/packages/tgui/interfaces/BluespaceSender.tsx b/tgui/packages/tgui/interfaces/BluespaceSender.tsx index 24e88f6ef5d..c8c9e47b0c7 100644 --- a/tgui/packages/tgui/interfaces/BluespaceSender.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceSender.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { multiline } from 'common/string'; @@ -43,10 +42,10 @@ export const BluespaceSender = (props) => { const { act, data } = useBackend(); const { gas_transfer_rate, credits, bluespace_network_gases = [], on } = data; - const gases: Gas[] = flow([ - filter((gas) => gas.amount >= 0.01), - sortBy((gas) => -gas.amount), - ])(bluespace_network_gases); + const gases: Gas[] = sortBy( + filter(bluespace_network_gases, (gas) => gas.amount >= 0.01), + (gas) => -gas.amount, + ); const gasMax = Math.max(1, ...gases.map((gas) => gas.amount)); diff --git a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx index 3ba8289356b..6ce242e4e48 100644 --- a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { multiline } from 'common/string'; @@ -50,10 +49,10 @@ export const BluespaceVendor = (props) => { tank_full, } = data; - const gases: Gas[] = flow([ - filter((gas) => gas.amount >= 0.01), - sortBy((gas) => -gas.amount), - ])(bluespace_network_gases); + const gases: Gas[] = sortBy( + filter(bluespace_network_gases, (gas) => gas.amount >= 0.01), + (gas) => -gas.amount, + ); const gasMax = Math.max(1, ...gases.map((gas) => gas.amount)); diff --git a/tgui/packages/tgui/interfaces/CameraConsole.tsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx index adad4f8748e..3dafe1240df 100644 --- a/tgui/packages/tgui/interfaces/CameraConsole.tsx +++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx @@ -1,5 +1,4 @@ -import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; +import { filter, sort } from 'common/collections'; import { BooleanLike, classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -68,15 +67,17 @@ const prevNextCamera = ( * Filters cameras, applies search terms and sorts the alphabetically. */ const selectCameras = (cameras: Camera[], searchText = ''): Camera[] => { - const testSearch = createSearch(searchText, (camera: Camera) => camera.name); + let queriedCameras = filter(cameras, (camera: Camera) => !!camera.name); + if (searchText) { + const testSearch = createSearch( + searchText, + (camera: Camera) => camera.name, + ); + queriedCameras = filter(queriedCameras, testSearch); + } + queriedCameras = sort(queriedCameras); - return flow([ - filter((camera: Camera) => !!camera.name), - // Optional search term - searchText && filter(testSearch), - // Slightly expensive, but way better than sorting in BYOND - sortBy((camera: Camera) => camera), - ])(cameras); + return queriedCameras; }; export const CameraConsole = (props) => { diff --git a/tgui/packages/tgui/interfaces/Cargo.jsx b/tgui/packages/tgui/interfaces/Cargo.jsx index f160970bc51..cbc0f5b112b 100644 --- a/tgui/packages/tgui/interfaces/Cargo.jsx +++ b/tgui/packages/tgui/interfaces/Cargo.jsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend, useSharedState } from '../backend'; import { @@ -169,16 +168,17 @@ const CargoStatus = (props) => { const searchForSupplies = (supplies, search) => { search = search.toLowerCase(); - return flow([ - (categories) => categories.flatMap((category) => category.packs), + const queriedSupplies = sortBy( filter( + supplies.flatMap((category) => category.packs), (pack) => pack.name?.toLowerCase().includes(search.toLowerCase()) || pack.desc?.toLowerCase().includes(search.toLowerCase()), ), - sortBy((pack) => pack.name), - (packs) => packs.slice(0, 25), - ])(supplies); + (pack) => pack.name, + ); + + return queriedSupplies.slice(0, 25); }; export const CargoCatalog = (props) => { diff --git a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx index 0c81311a431..f37414a86f5 100644 --- a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx +++ b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx @@ -3,11 +3,11 @@ import { BooleanLike } from 'common/react'; import { useBackend } from '../backend'; import { Button, LabeledList } from '../components'; import { Window } from '../layouts'; -import { AccessConfig } from './common/AccessConfig'; +import { AccessConfig, Region } from './common/AccessConfig'; type Data = { oneAccess: BooleanLike; - regions: string[]; + regions: Region[]; accesses: string[]; }; @@ -28,8 +28,8 @@ export const CircuitAccessChecker = (props) => { act('set', { access: ref, diff --git a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx index 6e9eef57d87..7acb39b8713 100644 --- a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx +++ b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx @@ -7,10 +7,10 @@ import { Button, Collapsible, Divider, - Grid, Icon, ProgressBar, Section, + Stack, Table, } from '../components'; import { TableRow } from '../components/Table'; @@ -311,12 +311,12 @@ const ClockworkOverviewStat = (props) => { const { title, iconName, amount, maxAmount, unit, overrideText } = props; return ( - - + + - - {title} - + + {title} + { > {overrideText ? overrideText : amount + ' ' + unit} - - + + ); }; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx index b6dc5ac272f..0a1306a19d6 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx @@ -29,10 +29,12 @@ const SWIPE_NEEDED = 'SWIPE_NEEDED'; const EMAG_SHUTTLE_NOTICE = 'This shuttle is deemed significantly dangerous to the crew, and is only supplied by the Syndicate.'; -const sortShuttles = sortBy( - (shuttle) => !shuttle.emagOnly, - (shuttle) => shuttle.initial_cost, -); +const sortShuttles = (shuttles) => + sortBy( + shuttles, + (shuttle) => !shuttle.emagOnly, + (shuttle) => shuttle.initial_cost, + ); const AlertButton = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/CrewConsole.jsx b/tgui/packages/tgui/interfaces/CrewConsole.jsx index 8ed7efa5c11..ef3f8c31a38 100644 --- a/tgui/packages/tgui/interfaces/CrewConsole.jsx +++ b/tgui/packages/tgui/interfaces/CrewConsole.jsx @@ -86,7 +86,7 @@ export const CrewConsole = () => { const CrewTable = (props) => { const { act, data } = useBackend(); - const sensors = sortBy((s) => s.ijob)(data.sensors ?? []); + const sensors = sortBy(data.sensors ?? [], (s) => s.ijob); return ( diff --git a/tgui/packages/tgui/interfaces/DestinationTagger.tsx b/tgui/packages/tgui/interfaces/DestinationTagger.tsx index b1acfe192a7..5326f93e01b 100644 --- a/tgui/packages/tgui/interfaces/DestinationTagger.tsx +++ b/tgui/packages/tgui/interfaces/DestinationTagger.tsx @@ -1,5 +1,4 @@ import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend } from '../backend'; import { Button, Section, Stack } from '../components'; @@ -25,13 +24,17 @@ type DestinationInfo = { * @returns The alphetically sorted list of destinations. */ const sortDestinations = (locations: string[]): DestinationInfo[] => { - return flow([ - map((name, index) => ({ - name: name.toUpperCase(), - sorting_id: index + 1, - })), - sortBy((dest) => dest.name), - ])(locations); + return sortBy( + map( + locations, + (name, index) => + ({ + name: name.toUpperCase(), + sorting_id: index + 1, + }) as DestinationInfo, + ), + (dest) => dest.name, + ); }; export const DestinationTagger = (props) => { diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx index 43c22b321a0..681b4f211d7 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx @@ -211,7 +211,7 @@ const StorageButtons = (props) => { const StorageChromosomes = (props) => { const { data, act } = useBackend(); const chromos = data.chromoStorage ?? []; - const uniqueChromos = uniqBy((chromo) => chromo.Name)(chromos); + const uniqueChromos = uniqBy(chromos, (chromo) => chromo.Name); const chromoName = data.view.storageChromoName; const chromo = chromos.find((chromo) => chromo.Name === chromoName); diff --git a/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx b/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx index 89a1468d953..2629a029fa8 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx @@ -1,5 +1,4 @@ import { filter, uniqBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend } from '../../backend'; import { @@ -122,10 +121,10 @@ export const MutationInfo = (props) => { isSameMutation(x, mutation), ); const savedToDisk = diskMutations.find((x) => isSameMutation(x, mutation)); - const combinedMutations = flow([ - uniqBy((mutation) => mutation.Name), - filter((x) => x.Name !== mutation.Name), - ])([...diskMutations, ...mutationStorage]); + const combinedMutations = filter( + uniqBy([...diskMutations, ...mutationStorage], (mutation) => mutation.Name), + (x) => x.Name !== mutation.Name, + ); return ( <> diff --git a/tgui/packages/tgui/interfaces/DnaVault.jsx b/tgui/packages/tgui/interfaces/DnaVault.tsx similarity index 75% rename from tgui/packages/tgui/interfaces/DnaVault.jsx rename to tgui/packages/tgui/interfaces/DnaVault.tsx index 5ac7711412d..2b6781d6cf7 100644 --- a/tgui/packages/tgui/interfaces/DnaVault.jsx +++ b/tgui/packages/tgui/interfaces/DnaVault.tsx @@ -1,28 +1,44 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, - Grid, LabeledList, ProgressBar, Section, + Stack, } from '../components'; import { Window } from '../layouts'; -export const DnaVault = (props) => { - const { act, data } = useBackend(); +type Data = { + animals_max: number; + animals: number; + choiceA: string; + choiceB: string; + completed: BooleanLike; + dna_max: number; + dna: number; + plants_max: number; + plants: number; + used: BooleanLike; +}; + +export function DnaVault(props) { + const { act, data } = useBackend(); const { - completed, - used, + animals_max, + animals, choiceA, choiceB, - dna, + completed, dna_max, - plants, + dna, plants_max, - animals, - animals_max, + plants, + used, } = data; + return ( @@ -50,37 +66,39 @@ export const DnaVault = (props) => { Applicable Gene Therapy Treatments - - + + + + + + )} ); -}; +} diff --git a/tgui/packages/tgui/interfaces/EightBallVote.tsx b/tgui/packages/tgui/interfaces/EightBallVote.tsx index 30ab7baae48..f85b8724ffe 100644 --- a/tgui/packages/tgui/interfaces/EightBallVote.tsx +++ b/tgui/packages/tgui/interfaces/EightBallVote.tsx @@ -2,50 +2,51 @@ import { BooleanLike } from 'common/react'; import { toTitleCase } from 'common/string'; import { useBackend } from '../backend'; -import { Box, Button, Grid, NoticeBox, Section } from '../components'; +import { Box, Button, NoticeBox, Section, Stack } from '../components'; import { Window } from '../layouts'; type Data = { - shaking: BooleanLike; - question: string; answers: Answer[]; + question: string; + shaking: BooleanLike; }; type Answer = { - answer: string; amount: number; + answer: string; selected: BooleanLike; }; -export const EightBallVote = (props) => { - const { act, data } = useBackend(); +export function EightBallVote(props) { + const { data } = useBackend(); const { shaking } = data; + return ( - {(!shaking && ( + {(shaking && ( No question is currently being asked. )) || } ); -}; +} -const EightBallVoteQuestion = (props) => { +function EightBallVoteQuestion(props) { const { act, data } = useBackend(); const { question, answers = [] } = data; + return (
    "{question}" - + {answers.map((answer) => ( - + {answer.amount} - + ))} - +
    ); -}; +} diff --git a/tgui/packages/tgui/interfaces/EmergencyShuttleConsole.jsx b/tgui/packages/tgui/interfaces/EmergencyShuttleConsole.tsx similarity index 73% rename from tgui/packages/tgui/interfaces/EmergencyShuttleConsole.jsx rename to tgui/packages/tgui/interfaces/EmergencyShuttleConsole.tsx index b7b09bdca6a..04214e092d6 100644 --- a/tgui/packages/tgui/interfaces/EmergencyShuttleConsole.jsx +++ b/tgui/packages/tgui/interfaces/EmergencyShuttleConsole.tsx @@ -1,17 +1,34 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Box, Button, Grid, Section } from '../components'; +import { Box, Button, Section, Stack } from '../components'; import { Window } from '../layouts'; -export const EmergencyShuttleConsole = (props) => { - const { act, data } = useBackend(); +type Data = { + authorizations_remaining: number; + authorizations: Authorization[]; + emagged: BooleanLike; + enabled: BooleanLike; + engines_started: BooleanLike; + timer_str: string; +}; + +type Authorization = { + job: string; + name: string; +}; + +export function EmergencyShuttleConsole(props) { + const { act, data } = useBackend(); const { - timer_str, - enabled, - emagged, - engines_started, - authorizations_remaining, authorizations = [], + authorizations_remaining, + emagged, + enabled, + engines_started, + timer_str, } = data; + return ( @@ -29,41 +46,42 @@ export const EmergencyShuttleConsole = (props) => {
    act('abort')} - /> + > + Repeal All + } > - - + + + + + +
    @@ -71,7 +89,11 @@ export const EmergencyShuttleConsole = (props) => { } > - {authorizations.length > 0 ? ( + {authorizations.length === 0 ? ( + + No Active Authorizations + + ) : ( authorizations.map((authorization) => ( { {authorization.name} ({authorization.job}) )) - ) : ( - - No Active Authorizations - )}
    @@ -93,4 +111,4 @@ export const EmergencyShuttleConsole = (props) => {
    ); -}; +} diff --git a/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx b/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx index 0c632afd283..d91bc564e44 100644 --- a/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx +++ b/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx @@ -109,7 +109,7 @@ export const ExperimentConfigure = (props) => { const { always_active, has_start_callback } = data; let techwebs = data.techwebs ?? []; - const experiments = sortBy((exp) => exp.name)(data.experiments ?? []); + const experiments = sortBy(data.experiments ?? [], (exp) => exp.name); // Group servers together by web let webs = new Map(); diff --git a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx index af5bddf4d5b..e4951bd0041 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx @@ -229,8 +229,9 @@ export const DesignBrowser = ( - {sortBy((category: Category) => category.title)( + {sortBy( Object.values(root.subcategories), + (category: Category) => category.title, ).map((category) => ( (
    {searchText.length > 0 ? ( - {sortBy((design: T) => design.name)( + {sortBy( Object.values(root.descendants), + (design: T) => design.name, ) .filter((design) => design.name @@ -290,8 +292,9 @@ export const DesignBrowser = ( ) : selectedCategory === ALL_CATEGORY ? ( - {sortBy((design: T) => design.name)( + {sortBy( Object.values(root.descendants), + (design: T) => design.name, ).map((design) => buildRecipeElement( design, @@ -380,8 +383,9 @@ const DesignBrowserTab = ( Object.entries(category.subcategories).length > 0 && selectedCategory === category.title && (
    - {sortBy((category: Category) => category.title)( + {sortBy( Object.values(category.subcategories), + (category: Category) => category.title, ).map((subcategory) => ( ( const body = ( - {sortBy((design: T) => design.name)(category.children).map((design) => + {sortBy(category.children, (design: T) => design.name).map((design) => buildRecipeElement( design, availableMaterials || {}, diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx index 2936d93df3f..83923d5bd48 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx @@ -55,7 +55,7 @@ export const MaterialAccessBar = (props: MaterialAccessBarProps) => { return ( - {sortBy((m: Material) => MATERIAL_RARITY[m.name])(availableMaterials).map( + {sortBy(availableMaterials, (m: Material) => MATERIAL_RARITY[m.name]).map( (material) => ( { const { act } = useBackend(); const { data } = useBackend(); const faxes = data.faxes - ? sortBy((sortFax: FaxInfo) => sortFax.fax_name)( + ? sortBy( data.syndicate_network ? data.faxes.filter((filterFax: FaxInfo) => filterFax.visible) : data.faxes.filter( (filterFax: FaxInfo) => filterFax.visible && !filterFax.syndicate_network, ), + (sortFax: FaxInfo) => sortFax.fax_name, ) : []; return ( diff --git a/tgui/packages/tgui/interfaces/Filteriffic.jsx b/tgui/packages/tgui/interfaces/Filteriffic.jsx index b13cddc34f4..09bd1426452 100644 --- a/tgui/packages/tgui/interfaces/Filteriffic.jsx +++ b/tgui/packages/tgui/interfaces/Filteriffic.jsx @@ -155,10 +155,9 @@ const FilterFlagsEntry = (props) => { const filterInfo = data.filter_info; const flags = filterInfo[filterType]['flags']; - return map((bitField, flagName) => ( + return map(flags, (bitField, flagName) => ( act('modify_filter_value', { name: filterName, @@ -167,8 +166,11 @@ const FilterFlagsEntry = (props) => { }, }) } - /> - ))(flags); + key={flagName} + > + {flagName} + + )); }; const FilterDataEntry = (props) => { @@ -340,9 +342,9 @@ export const Filteriffic = (props) => { {!hasFilters ? ( No filters ) : ( - map((entry, key) => ( + map(filters, (entry, key) => ( - ))(filters) + )) )}
    diff --git a/tgui/packages/tgui/interfaces/FishCatalog.tsx b/tgui/packages/tgui/interfaces/FishCatalog.tsx index 01efc5e3531..7bb85054fb0 100644 --- a/tgui/packages/tgui/interfaces/FishCatalog.tsx +++ b/tgui/packages/tgui/interfaces/FishCatalog.tsx @@ -1,5 +1,4 @@ import { sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { classes } from 'common/react'; import { capitalize } from 'common/string'; import { useState } from 'react'; @@ -38,9 +37,7 @@ type FishCatalogData = { export const FishCatalog = (props) => { const { act, data } = useBackend(); const { fish_info, sponsored_by } = data; - const fish_by_name = flow([sortBy((fish: FishInfo) => fish.name)])( - fish_info || [], - ); + const fish_by_name = sortBy(fish_info || [], (fish: FishInfo) => fish.name); const [currentFish, setCurrentFish] = useState(null); return ( diff --git a/tgui/packages/tgui/interfaces/Gps.jsx b/tgui/packages/tgui/interfaces/Gps.jsx index 662335fcdc3..c12ba6a9efd 100644 --- a/tgui/packages/tgui/interfaces/Gps.jsx +++ b/tgui/packages/tgui/interfaces/Gps.jsx @@ -7,30 +7,36 @@ import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, Section, Table } from '../components'; import { Window } from '../layouts'; -const coordsToVec = (coords) => map(parseFloat)(coords.split(', ')); +const coordsToVec = (coords) => map(coords.split(', '), parseFloat); export const Gps = (props) => { const { act, data } = useBackend(); const { currentArea, currentCoords, globalmode, power, tag, updating } = data; const signals = flow([ - map((signal, index) => { - // Calculate distance to the target. BYOND distance is capped to 127, - // that's why we roll our own calculations here. - const dist = - signal.dist && - Math.round( - vecLength( - vecSubtract(coordsToVec(currentCoords), coordsToVec(signal.coords)), - ), - ); - return { ...signal, dist, index }; - }), - sortBy( - // Signals with distance metric go first - (signal) => signal.dist === undefined, - // Sort alphabetically - (signal) => signal.entrytag, - ), + (signals) => + map(signals, (signal, index) => { + // Calculate distance to the target. BYOND distance is capped to 127, + // that's why we roll our own calculations here. + const dist = + signal.dist && + Math.round( + vecLength( + vecSubtract( + coordsToVec(currentCoords), + coordsToVec(signal.coords), + ), + ), + ); + return { ...signal, dist, index }; + }), + (signals) => + sortBy( + signals, + // Signals with distance metric go first + (signal) => signal.dist === undefined, + // Sort alphabetically + (signal) => signal.entrytag, + ), ])(data.signals || []); return ( diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx index 8482bd665ec..74457a365bb 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { useBackend } from 'tgui/backend'; import { @@ -90,10 +89,10 @@ const GasList = (props: GasListProps) => { } = props; const { start_power, start_cooling } = data; - const gases: HypertorusGas[] = flow([ - filter((gas: HypertorusGas) => gas.amount >= 0.01), - sortBy((gas: HypertorusGas) => -gas.amount), - ])(raw_gases); + const gases: HypertorusGas[] = sortBy( + filter(raw_gases, (gas) => gas.amount >= 0.01), + (gas) => -gas.amount, + ); if (stickyGases) { ensure_gases(gases, stickyGases); diff --git a/tgui/packages/tgui/interfaces/Jukebox.tsx b/tgui/packages/tgui/interfaces/Jukebox.tsx index 073b97ddee1..f450b08ebc4 100644 --- a/tgui/packages/tgui/interfaces/Jukebox.tsx +++ b/tgui/packages/tgui/interfaces/Jukebox.tsx @@ -1,5 +1,4 @@ import { sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { BooleanLike } from '../../common/react'; import { useBackend } from '../backend'; @@ -32,7 +31,7 @@ export const Jukebox = () => { const { act, data } = useBackend(); const { active, looping, track_selected, volume, songs } = data; - const songs_sorted: Song[] = flow([sortBy((song: Song) => song.name)])(songs); + const songs_sorted: Song[] = sortBy(songs, (song: Song) => song.name); const song_selected: Song | undefined = songs.find( (song) => song.name === track_selected, ); diff --git a/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx b/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx index 27b3cc0e05f..4e0aebdcdd5 100644 --- a/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx +++ b/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx @@ -35,25 +35,14 @@ export const LaborClaimConsole = (props) => {
    -
    -
    - - Material - - Value - - - {ores.map((ore) => ( - - {toTitleCase(ore.ore)} - - - {ore.value} - - - - ))} -
    +
    + The nearby stacking machine will unload crates and collect smelted + materials, points will be calculated based on volume of delivered + materials. +
    + Please note that only sheets printed with our manufacturer's seal of + quality, such as those produced from the work camp furnace, will be + accepted as proof of labour.
    diff --git a/tgui/packages/tgui/interfaces/LaunchpadConsole.jsx b/tgui/packages/tgui/interfaces/LaunchpadConsole.jsx deleted file mode 100644 index c3145844fc2..00000000000 --- a/tgui/packages/tgui/interfaces/LaunchpadConsole.jsx +++ /dev/null @@ -1,276 +0,0 @@ -import { useBackend } from '../backend'; -import { - Box, - Button, - Divider, - Flex, - Grid, - Input, - NoticeBox, - NumberInput, - Section, -} from '../components'; -import { Window } from '../layouts'; - -const LaunchpadButtonPad = (props) => { - const { act } = useBackend(); - return ( - - -
    - ); -}; - -export const LaunchpadConsole = (props) => { - const { act, data } = useBackend(); - const { launchpads = [], selected_id } = data; - return ( - - - {(launchpads.length === 0 && ( - No Pads Connected - )) || ( -
    - - - {launchpads.map((launchpad) => ( -
    - )} -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/LaunchpadConsole.tsx b/tgui/packages/tgui/interfaces/LaunchpadConsole.tsx new file mode 100644 index 00000000000..fdad9955894 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LaunchpadConsole.tsx @@ -0,0 +1,259 @@ +import { useBackend } from '../backend'; +import { + Box, + Button, + Icon, + Input, + NoticeBox, + NumberInput, + Section, + Stack, + Tabs, +} from '../components'; +import { Window } from '../layouts'; + +type Data = { + launchpads: LaunchPad[]; + pad_active: number; + pad_name: string; + range: number; + selected_id: number; + selected_pad: string; + x: number; + y: number; +}; + +type LaunchPad = { + id: number; + name: string; +}; + +const buttonConfigs = [ + [ + { icon: 'arrow-left', iconRotation: 45, x: -1, y: 1 }, + { icon: 'arrow-left', x: -1 }, + { icon: 'arrow-down', iconRotation: 45, x: -1, y: -1 }, + ], + [ + { icon: 'arrow-up', y: 1 }, + { text: 'R', x: 0, y: 0 }, + { icon: 'arrow-down', y: -1 }, + ], + [ + { icon: 'arrow-up', iconRotation: 45, x: 1, y: 1 }, + { icon: 'arrow-right', x: 1 }, + { icon: 'arrow-right', iconRotation: 45, x: 1, y: -1 }, + ], +] as const; + +export function LaunchpadConsole(props) { + const { data } = useBackend(); + const { launchpads = [], selected_id } = data; + + return ( + + + {launchpads.length === 0 ? ( + No Pads Connected + ) : ( + + + + + + + {!selected_id ? ( + Please select a pad + ) : ( + + )} + + + )} + + + ); +} + +export function LaunchpadControl(props) { + return ( + + + + + +
    + + + + + + + + +
    +
    + + + +
    + ); +} + +function LaunchpadTabs(props) { + const { act, data } = useBackend(); + const { launchpads = [], selected_id } = data; + + return ( +
    + + {launchpads.map((pad) => ( + + act('select_pad', { + id: pad.id, + }) + } + > + {pad.name} + + ))} + +
    + ); +} + +function LaunchpadTitle(props) { + const { act, data } = useBackend(); + const { pad_name } = data; + + return ( +
    + + + + act('rename', { + name: value, + }) + } + /> + + + + + +
    + ); +} + +function LaunchpadButtonPad(props) { + const { act } = useBackend(); + + return ( +
    + + {buttonConfigs.map((buttonRow, i) => ( + + {buttonRow.map((buttonConfig, j) => ( + + ))} + + ))} + +
    + ); +} + +function TargetingControls(props) { + const { act, data } = useBackend(); + const { x, y, range } = data; + + const inputConfigs = [ + { value: x, axis: 'x', icon: 'arrows-alt-h' }, + { value: y, axis: 'y', icon: 'arrows-alt-v' }, + ]; + + return ( +
    + {inputConfigs.map((inputConfig, i) => ( + + + + {inputConfig.axis.toUpperCase()} + + + + + act('set_pos', { + [inputConfig.axis]: value, + }) + } + step={1} + stepPixelSize={10} + value={inputConfig.value} + width="90px" + /> + + + ))} +
    + ); +} + +function DeliveryButtons(props) { + const { act } = useBackend(); + + return ( +
    + + + + + + + + +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/LibraryAdmin.tsx b/tgui/packages/tgui/interfaces/LibraryAdmin.tsx index f805a46c7fb..fd88fdc48fb 100644 --- a/tgui/packages/tgui/interfaces/LibraryAdmin.tsx +++ b/tgui/packages/tgui/interfaces/LibraryAdmin.tsx @@ -1,5 +1,4 @@ import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { capitalize } from 'common/string'; import { useState } from 'react'; @@ -81,10 +80,14 @@ type Book = { category: string; title: string; id: number; +}; + +type AdminBook = Book & { + author_ckey: string; deleted: boolean; }; -type DisplayBook = Book & { +type DisplayAdminBook = AdminBook & { key: number; }; @@ -120,14 +123,18 @@ const SearchAndDisplay = (props) => { view_raw, show_deleted, } = data; - const books = flow([ - map((book, i) => ({ - ...book, - // Generate a unique id - key: i, - })), - sortBy((book) => book.key), - ])(pages); + const books = sortBy( + map( + pages, + (book, i) => + ({ + ...book, + // Generate a unique id + key: i, + }) as DisplayAdminBook, + ), + (book) => book.key, + ); return (
    diff --git a/tgui/packages/tgui/interfaces/LibraryConsole.jsx b/tgui/packages/tgui/interfaces/LibraryConsole.jsx index 83d034915b8..386ac3ca0c0 100644 --- a/tgui/packages/tgui/interfaces/LibraryConsole.jsx +++ b/tgui/packages/tgui/interfaces/LibraryConsole.jsx @@ -1,5 +1,4 @@ import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { classes } from 'common/react'; import { useState } from 'react'; @@ -136,14 +135,14 @@ export const Inventory = (props) => { export const InventoryDetails = (props) => { const { act, data } = useBackend(); - const inventory = flow([ - map((book, i) => ({ + const inventory = sortBy( + map(data.inventory, (book, i) => ({ ...book, // Generate a unique id key: i, })), - sortBy((book) => book.key), - ])(data.inventory); + (book) => book.key, + ); return (
    @@ -261,14 +260,14 @@ export const CheckoutEntries = (props) => { const CheckoutModal = (props) => { const { act, data } = useBackend(); - const inventory = flow([ - map((book, i) => ({ + const inventory = sortBy( + map(data.inventory, (book, i) => ({ ...book, // Generate a unique id key: i, })), - sortBy((book) => book.key), - ])(data.inventory); + (book) => book.key, + ); const [checkoutBook, setCheckoutBook] = useLocalState('CheckoutBook', false); const [bookName, setBookName] = useState('Insert Book name...'); @@ -387,14 +386,14 @@ export const SearchAndDisplay = (props) => { params_changed, can_db_request, } = data; - const records = flow([ - map((record, i) => ({ + const records = sortBy( + map(data.pages, (record, i) => ({ ...record, // Generate a unique id key: i, })), - sortBy((record) => record.key), - ])(data.pages); + (record) => record.key, + ); return ( diff --git a/tgui/packages/tgui/interfaces/LibraryVisitor.jsx b/tgui/packages/tgui/interfaces/LibraryVisitor.jsx index 6b8edb380be..cb27e42704d 100644 --- a/tgui/packages/tgui/interfaces/LibraryVisitor.jsx +++ b/tgui/packages/tgui/interfaces/LibraryVisitor.jsx @@ -1,5 +1,4 @@ import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend } from '../backend'; import { @@ -71,14 +70,14 @@ const SearchAndDisplay = (props) => { author, params_changed, } = data; - const records = flow([ - map((record, i) => ({ + const records = sortBy( + map(data.pages, (record, i) => ({ ...record, // Generate a unique id key: i, })), - sortBy((record) => record.key), - ])(data.pages); + (record) => record.key, + ); return (
    diff --git a/tgui/packages/tgui/interfaces/LootPanel/GroupedContents.tsx b/tgui/packages/tgui/interfaces/LootPanel/GroupedContents.tsx new file mode 100644 index 00000000000..5bfecce0b8a --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/GroupedContents.tsx @@ -0,0 +1,47 @@ +import { createSearch } from 'common/string'; +import { useMemo } from 'react'; + +import { Flex } from '../../components'; +import { LootBox } from './LootBox'; +import { SearchGroup, SearchItem } from './types'; + +type Props = { + contents: SearchItem[]; + searchText: string; +}; + +export function GroupedContents(props: Props) { + const { contents, searchText } = props; + + // limitations: items with different stack counts, charges etc. + const contentsByPath = useMemo(() => { + const acc: Record = {}; + + for (let i = 0; i < contents.length; i++) { + const item = contents[i]; + if (item.path) { + if (!acc[item.path]) { + acc[item.path] = []; + } + acc[item.path].push(item); + } else { + acc[item.ref] = [item]; + } + } + return acc; + }, [contents]); + + const filteredContents: SearchGroup[] = Object.entries(contentsByPath) + .filter(createSearch(searchText, ([_, items]) => items[0].name)) + .map(([_, items]) => ({ amount: items.length, item: items[0] })); + + return ( + + {filteredContents.map((group) => ( + + + + ))} + + ); +} diff --git a/tgui/packages/tgui/interfaces/LootPanel/IconDisplay.tsx b/tgui/packages/tgui/interfaces/LootPanel/IconDisplay.tsx new file mode 100644 index 00000000000..889d50de884 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/IconDisplay.tsx @@ -0,0 +1,24 @@ +import { DmIcon, Icon, Image } from '../../components'; +import { SearchItem } from './types'; + +type Props = { + item: SearchItem; +}; + +export function IconDisplay(props: Props) { + const { + item: { icon, icon_state }, + } = props; + + const fallback = ; + + if (!icon) { + return fallback; + } + + if (icon_state) { + return ; + } + + return ; +} diff --git a/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx b/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx new file mode 100644 index 00000000000..22b0c8532dd --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx @@ -0,0 +1,53 @@ +import { capitalizeAll } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Tooltip } from '../../components'; +import { IconDisplay } from './IconDisplay'; +import { SearchGroup, SearchItem } from './types'; + +type Props = + | { + item: SearchItem; + } + | { + group: SearchGroup; + }; + +export function LootBox(props: Props) { + const { act } = useBackend(); + + let amount = 0; + let item: SearchItem; + if ('group' in props) { + amount = props.group.amount; + item = props.group.item; + } else { + item = props.item; + } + + return ( + +
    + act('grab', { + ctrl: event.ctrlKey, + ref: item.ref, + shift: event.shiftKey, + }) + } + onContextMenu={(event) => { + event.preventDefault(); + act('grab', { + middle: true, + ref: item.ref, + shift: true, + }); + }} + > + + {amount > 1 &&
    {amount}
    } +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/LootPanel/RawContents.tsx b/tgui/packages/tgui/interfaces/LootPanel/RawContents.tsx new file mode 100644 index 00000000000..4241d36dc0a --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/RawContents.tsx @@ -0,0 +1,28 @@ +import { createSearch } from 'common/string'; + +import { Flex } from '../../components'; +import { LootBox } from './LootBox'; +import { SearchItem } from './types'; + +type Props = { + contents: SearchItem[]; + searchText: string; +}; + +export function RawContents(props: Props) { + const { contents, searchText } = props; + + const filteredContents = contents.filter( + createSearch(searchText, (item: SearchItem) => item.name), + ); + + return ( + + {filteredContents.map((item) => ( + + + + ))} + + ); +} diff --git a/tgui/packages/tgui/interfaces/LootPanel/index.tsx b/tgui/packages/tgui/interfaces/LootPanel/index.tsx new file mode 100644 index 00000000000..bd64113f302 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/index.tsx @@ -0,0 +1,76 @@ +import { KEY } from 'common/keys'; +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Button, Input, Section, Stack } from '../../components'; +import { Window } from '../../layouts'; +import { GroupedContents } from './GroupedContents'; +import { RawContents } from './RawContents'; +import { SearchItem } from './types'; + +type Data = { + contents: SearchItem[]; + searching: BooleanLike; +}; + +export function LootPanel(props) { + const { act, data } = useBackend(); + const { contents = [], searching } = data; + + const [grouping, setGrouping] = useState(true); + const [searchText, setSearchText] = useState(''); + + const total = contents.length ? contents.length - 1 : 0; + + return ( + + { + if (event.key === KEY.Escape) { + Byond.sendMessage('close'); + } + }} + > +
    + + setSearchText(value)} + placeholder="Search" + /> + + +
    +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/LootPanel/types.ts b/tgui/packages/tgui/interfaces/LootPanel/types.ts new file mode 100644 index 00000000000..f17b02b0c13 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LootPanel/types.ts @@ -0,0 +1,13 @@ +export type SearchItem = { + name: string; + path: string; + ref: string; +} & Partial<{ + icon: string; + icon_state: string; +}>; + +export type SearchGroup = { + amount: number; + item: SearchItem; +}; diff --git a/tgui/packages/tgui/interfaces/MatMarket.tsx b/tgui/packages/tgui/interfaces/MatMarket.tsx index 11de67fb656..d793b8501f0 100644 --- a/tgui/packages/tgui/interfaces/MatMarket.tsx +++ b/tgui/packages/tgui/interfaces/MatMarket.tsx @@ -118,7 +118,7 @@ export const MatMarket = (props) => {
    - {sortBy((tempmat: Material) => tempmat.rarity)(materials).map( + {sortBy(materials, (tempmat: Material) => tempmat.rarity).map( (material, i) => (
    diff --git a/tgui/packages/tgui/interfaces/Mecha/data.ts b/tgui/packages/tgui/interfaces/Mecha/data.ts index 993c7a1d4be..0bccc7fa5c1 100644 --- a/tgui/packages/tgui/interfaces/Mecha/data.ts +++ b/tgui/packages/tgui/interfaces/Mecha/data.ts @@ -1,5 +1,7 @@ import { BooleanLike } from 'common/react'; +import { Region } from '../common/AccessConfig'; + export type AccessData = { name: string; number: number; @@ -25,7 +27,7 @@ export type MainData = { overclock_temp_percentage: number; one_access: BooleanLike; - regions: string[]; + regions: Region[]; accesses: string[]; servo_rating: number; diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx index 7aee1f276a8..03672e05008 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useState } from 'react'; import { useBackend, useLocalState } from 'tgui/backend'; import { @@ -28,10 +27,10 @@ export const MedicalRecordTabs = (props) => { const [search, setSearch] = useState(''); - const sorted: MedicalRecord[] = flow([ - filter((record: MedicalRecord) => isRecordMatch(record, search)), - sortBy((record: MedicalRecord) => record.name?.toLowerCase()), - ])(records); + const sorted: MedicalRecord[] = sortBy( + filter(records, (record) => isRecordMatch(record, search)), + (record) => record.name?.toLowerCase(), + ); return ( diff --git a/tgui/packages/tgui/interfaces/NtosArcade.jsx b/tgui/packages/tgui/interfaces/NtosArcade.jsx deleted file mode 100644 index b8c9aa05109..00000000000 --- a/tgui/packages/tgui/interfaces/NtosArcade.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import { resolveAsset } from '../assets'; -import { useBackend } from '../backend'; -import { - AnimatedNumber, - Box, - Button, - Grid, - LabeledList, - ProgressBar, - Section, -} from '../components'; -import { NtosWindow } from '../layouts'; - -export const NtosArcade = (props) => { - const { act, data } = useBackend(); - return ( - - -
    - - - - - - - - {data.PlayerHitpoints}HP - - - - - {data.PlayerMP}MP - - - - -
    - {data.Status} -
    -
    - - - - HP - - -
    - -
    -
    -
    - -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/NtosArcade.tsx b/tgui/packages/tgui/interfaces/NtosArcade.tsx new file mode 100644 index 00000000000..ea63e62e037 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosArcade.tsx @@ -0,0 +1,178 @@ +import { BooleanLike } from 'common/react'; + +import { resolveAsset } from '../assets'; +import { useBackend } from '../backend'; +import { + AnimatedNumber, + Box, + Button, + Divider, + LabeledList, + NoticeBox, + ProgressBar, + Section, + Stack, +} from '../components'; +import { NtosWindow } from '../layouts'; + +type Data = { + BossID: string; + GameActive: BooleanLike; + Hitpoints: number; + PauseState: BooleanLike; + PlayerHitpoints: number; + PlayerMP: number; + Status: string; + TicketCount: number; +}; + +export function NtosArcade(props) { + return ( + + +
    + + + + + + + + + +
    +
    +
    + ); +} + +function PlayerStats(props) { + const { data } = useBackend(); + const { PauseState, PlayerHitpoints, PlayerMP, Status } = data; + + return ( + <> + + + + {PlayerHitpoints}HP + + + + + {PlayerMP}MP + + + + + {Status} + + ); +} + +function BossBar(props) { + const { data } = useBackend(); + const { BossID, Hitpoints } = data; + + return ( + <> + + + HP + + +
    + +
    + + ); +} + +function BottomButtons(props) { + const { act, data } = useBackend(); + const { GameActive, PauseState, TicketCount } = data; + + return ( + <> + + + + + + + + + = 1 ? 'good' : 'normal'}> + Earned Tickets: {TicketCount} + + + ); +} diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx index d8830fe79af..b0f17d449eb 100644 --- a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx +++ b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx @@ -26,7 +26,7 @@ export const NtosCrewManifest = (props) => { /> } > - {map((entries, department) => ( + {map(manifest, (entries, department) => (
    {entries.map((entry) => ( @@ -45,7 +45,7 @@ export const NtosCrewManifest = (props) => { ))}
    - ))(manifest)} + ))}
    diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx index 3852e90ac26..d9e6c7233ee 100644 --- a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx +++ b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx @@ -3,7 +3,7 @@ import { createSearch } from 'common/string'; import { useState } from 'react'; import { useBackend } from '../backend'; -import { Button, Image, Input, Section } from '../components'; +import { Button, Image, Input, Section, Tooltip } from '../components'; import { NtosWindow } from '../layouts'; type Data = { @@ -44,15 +44,15 @@ export const NtosEmojipedia = (props) => { } > {filteredEmojis.map((emoji) => ( - { - copyText(emoji.name); - }} - /> + + { + copyText(emoji.name); + }} + /> + ))} diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx index 852ca62cc55..896ca90d602 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx @@ -100,7 +100,8 @@ const ContactsScreen = (props: any) => { const [searchUser, setSearchUser] = useState(''); - const sortByUnreads = sortBy((chat) => chat.unread_messages); + const sortByUnreads = (array: NtChat[]) => + sortBy(array, (chat) => chat.unread_messages); const searchChatByName = createSearch( searchUser, diff --git a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx index 0bfdafc7b62..489c443f0c1 100644 --- a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx +++ b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { scale, toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { createSearch } from 'common/string'; @@ -70,20 +69,22 @@ export const NtosNetDownloader = (props) => { searchItem, (program) => program.filedesc, ); - const items = flow([ + let items = searchItem.length > 0 ? // If we have a query, search everything for it. - filter(search) + filter(programs, search) : // Otherwise, show respective programs for the category. - filter((program: ProgramData) => program.category === selectedCategory), - // This sorts all programs in the lists by name and compatibility - sortBy( - (program: ProgramData) => !program.compatible, - (program: ProgramData) => program.filedesc, - ), + filter(programs, (program) => program.category === selectedCategory); + // This sorts all programs in the lists by name and compatibility + items = sortBy( + items, + (program: ProgramData) => !program.compatible, + (program: ProgramData) => program.filedesc, + ); + if (!emagged) { // This filters the list to only contain verified programs - !emagged && filter((program: ProgramData) => program.verifiedsource === 1), - ])(programs); + items = filter(items, (program) => program.verifiedsource === 1); + } const disk_free_space = downloading ? disk_size - Number(toFixed(disk_used + downloadcompletion)) : disk_size - disk_used; diff --git a/tgui/packages/tgui/interfaces/NuclearBomb.jsx b/tgui/packages/tgui/interfaces/NuclearBomb.tsx similarity index 64% rename from tgui/packages/tgui/interfaces/NuclearBomb.jsx rename to tgui/packages/tgui/interfaces/NuclearBomb.tsx index 81b2e622e9d..5cda6d97cbb 100644 --- a/tgui/packages/tgui/interfaces/NuclearBomb.jsx +++ b/tgui/packages/tgui/interfaces/NuclearBomb.tsx @@ -1,32 +1,40 @@ -import { classes } from 'common/react'; +import { BooleanLike, classes } from 'common/react'; import { useBackend } from '../backend'; -import { Box, Button, Flex, Grid, Icon } from '../components'; +import { Box, Button, Icon, Stack } from '../components'; import { Window } from '../layouts'; +type Data = { + disk_present: BooleanLike; + status1: string; + status2: string; + anchored: BooleanLike; +}; + +const KEYPAD = [ + ['1', '4', '7', 'C'], + ['2', '5', '8', '0'], + ['3', '6', '9', 'E'], +] as const; + // This ui is so many manual overrides and !important tags // and hand made width sets that changing pretty much anything // is going to require a lot of tweaking it get it looking correct again // I'm sorry, but it looks bangin -export const NukeKeypad = (props) => { +export function NukeKeypad(props) { const { act } = useBackend(); - const keypadKeys = [ - ['1', '4', '7', 'C'], - ['2', '5', '8', '0'], - ['3', '6', '9', 'E'], - ]; + return ( - - {keypadKeys.map((keyColumn) => ( - + + {KEYPAD.map((keyColumn) => ( + {keyColumn.map((key) => ( ))} - + ))} - + ); -}; +} + +export function NuclearBomb(props) { + const { act, data } = useBackend(); + const { status1, status2 } = data; -export const NuclearBomb = (props) => { - const { act, data } = useBackend(); - const { anchored, disk_present, status1, status2 } = data; return ( - - + + {status1} - - + + {status2} - - + + - - + + ); -}; +} diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts index 8ad071c699b..c0668dd02d8 100644 --- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { HEALTH, THREAT } from './constants'; import type { AntagGroup, Antagonist, Observable } from './types'; @@ -18,7 +17,7 @@ export const getAntagCategories = (antagonists: Antagonist[]) => { categories[antag_group].push(player); }); - return sortBy(([key]) => key)(Object.entries(categories)); + return sortBy(Object.entries(categories), ([key]) => key); }; /** Returns a disguised name in case the person is wearing someone else's ID */ @@ -43,15 +42,19 @@ export const getMostRelevant = ( searchQuery: string, observables: Observable[][], ): Observable => { - return flow([ - // Filters out anything that doesn't match search - filter((observable) => - isJobOrNameMatch(observable, searchQuery), - ), + const queriedObservables = // Sorts descending by orbiters - sortBy((observable) => -(observable.orbiters || 0)), - // Makes a single Observables list for an easy search - ])(observables.flat())[0]; + sortBy( + // Filters out anything that doesn't match search + filter( + observables + // Makes a single Observables list for an easy search + .flat(), + (observable) => isJobOrNameMatch(observable, searchQuery), + ), + (observable) => -(observable.orbiters || 0), + ); + return queriedObservables[0]; }; /** Returns the display color for certain health percentages */ diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 0d992d981a8..0103fe8750f 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { capitalizeFirst, multiline } from 'common/string'; import { useBackend, useLocalState } from 'tgui/backend'; import { @@ -204,16 +203,13 @@ const ObservableSection = (props: { const [searchQuery] = useLocalState('searchQuery', ''); - const filteredSection: Observable[] = flow([ - filter((observable) => - isJobOrNameMatch(observable, searchQuery), - ), - sortBy((observable) => + const filteredSection = sortBy( + filter(section, (observable) => isJobOrNameMatch(observable, searchQuery)), + (observable) => getDisplayName(observable.full_name, observable.name) .replace(/^"/, '') .toLowerCase(), - ), - ])(section); + ); if (!filteredSection.length) { return null; diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx index 2a848073769..96ec4b818b3 100644 --- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx +++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { BooleanLike, classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -186,44 +185,44 @@ export const PersonalCrafting = (props) => { const [activeType, setFoodType] = useState( Object.keys(craftability).length ? 'Can Make' : data.foodtypes[0], ); - const material_occurences = flow([ - sortBy((material) => -material.occurences), - ])(data.material_occurences); + const material_occurences = sortBy( + data.material_occurences, + (material) => -material.occurences, + ); const [activeMaterial, setMaterial] = useState( material_occurences[0].atom_id, ); const [tabMode, setTabMode] = useState(0); const searchName = createSearch(searchText, (item: Recipe) => item.name); - let recipes = flow([ - filter( - (recipe) => - // If craftable only is selected, then filter by craftability - (!display_craftable_only || Boolean(craftability[recipe.ref])) && - // Ignore categories and types when searching - (searchText.length > 0 || - // Is foodtype mode and the active type matches - (tabMode === TABS.foodtype && - mode === MODE.cooking && - ((activeType === 'Can Make' && Boolean(craftability[recipe.ref])) || - recipe.foodtypes?.includes(activeType))) || - // Is material mode and the active material or catalysts match - (tabMode === TABS.material && - Object.keys(recipe.reqs).includes(activeMaterial)) || - // Is category mode and the active categroy matches - (tabMode === TABS.category && - ((activeCategory === 'Can Make' && - Boolean(craftability[recipe.ref])) || - recipe.category === activeCategory))), - ), - sortBy((recipe) => [ - activeCategory === 'Can Make' - ? 99 - Object.keys(recipe.reqs).length - : Number(craftability[recipe.ref]), - recipe.name.toLowerCase(), - ]), - ])(data.recipes); + let recipes = filter( + data.recipes, + (recipe) => + // If craftable only is selected, then filter by craftability + (!display_craftable_only || Boolean(craftability[recipe.ref])) && + // Ignore categories and types when searching + (searchText.length > 0 || + // Is foodtype mode and the active type matches + (tabMode === TABS.foodtype && + mode === MODE.cooking && + ((activeType === 'Can Make' && Boolean(craftability[recipe.ref])) || + recipe.foodtypes?.includes(activeType))) || + // Is material mode and the active material or catalysts match + (tabMode === TABS.material && + Object.keys(recipe.reqs).includes(activeMaterial)) || + // Is category mode and the active categroy matches + (tabMode === TABS.category && + ((activeCategory === 'Can Make' && + Boolean(craftability[recipe.ref])) || + recipe.category === activeCategory))), + ); + recipes = sortBy(recipes, (recipe) => [ + activeCategory === 'Can Make' + ? 99 - Object.keys(recipe.reqs).length + : Number(craftability[recipe.ref]), + recipe.name.toLowerCase(), + ]); if (searchText.length > 0) { - recipes = recipes.filter(searchName); + recipes = filter(recipes, searchName); } const canMake = ['Can Make']; const categories = canMake diff --git a/tgui/packages/tgui/interfaces/Photocopier.jsx b/tgui/packages/tgui/interfaces/Photocopier.jsx index 29353918e19..e1b8b74bb0a 100644 --- a/tgui/packages/tgui/interfaces/Photocopier.jsx +++ b/tgui/packages/tgui/interfaces/Photocopier.jsx @@ -178,7 +178,7 @@ const Blanks = (props) => { const { act, data } = useBackend(); const { blanks, categories, category } = data; - const sortedBlanks = sortBy((blank) => blank.name)(blanks || []); + const sortedBlanks = sortBy(blanks || [], (blank) => blank.name); const selectedCategory = category ?? categories[0]; const visibleBlanks = sortedBlanks.filter( diff --git a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx index b045304c4ca..1a623bb2079 100644 --- a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx +++ b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx @@ -158,7 +158,7 @@ const sortConnectionRefs = function ( direction: ConnectionDirection, connectSources: AssocConnected, ) { - refs = sortBy((connection: ConnectionRef) => connection.sort_by)(refs); + refs = sortBy(refs, (connection: ConnectionRef) => connection.sort_by); refs.map((connection, index) => { let connectSource = connectSources[connection.ref]; if (direction === ConnectionDirection.Outgoing) { @@ -264,14 +264,15 @@ const positionPlanes = (connectSources: AssocConnected) => { // and get rid of the now unneeded parent refs const stack = depth_stack.map((layer) => flow([ - sortBy((plane: string) => plane_info[plane].plane), - sortBy((plane: string) => { - const read_from = plane_info[layer[plane]]; - if (!read_from) { - return 0; - } - return read_from.plane; - }), + (planes) => sortBy(planes, (plane: string) => plane_info[plane].plane), + (planes) => + sortBy(planes, (plane: string) => { + const read_from = plane_info[layer[plane]]; + if (!read_from) { + return 0; + } + return read_from.plane; + }), ])(Object.keys(layer)), ); @@ -932,7 +933,7 @@ const AddModal = (props) => { ); const plane_list = Object.keys(plane_info).map((plane) => plane_info[plane]); - const planes = sortBy((plane: Plane) => -plane.plane)(plane_list); + const planes = sortBy(plane_list, (plane: Plane) => -plane.plane); const plane_options = planes.map((plane) => plane.name); diff --git a/tgui/packages/tgui/interfaces/PortableChemMixer.tsx b/tgui/packages/tgui/interfaces/PortableChemMixer.tsx index fc0b4cbb95e..9ffbe06b943 100644 --- a/tgui/packages/tgui/interfaces/PortableChemMixer.tsx +++ b/tgui/packages/tgui/interfaces/PortableChemMixer.tsx @@ -26,8 +26,9 @@ export const PortableChemMixer = (props) => { const { act, data } = useBackend(); const { beaker } = data; const beakerTransferAmounts = beaker ? beaker.transferAmounts : []; - const chemicals = sortBy((chem: DispensableReagent) => chem.id)( + const chemicals = sortBy( data.chemicals, + (chem: DispensableReagent) => chem.id, ); return ( diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.jsx b/tgui/packages/tgui/interfaces/PowerMonitor.jsx index 6e0e0dca173..039e700f68c 100644 --- a/tgui/packages/tgui/interfaces/PowerMonitor.jsx +++ b/tgui/packages/tgui/interfaces/PowerMonitor.jsx @@ -48,18 +48,22 @@ export const PowerMonitorContent = (props) => { const maxValue = Math.max(PEAK_DRAW, ...history.supply, ...history.demand); // Process area data const areas = flow([ - map((area, i) => ({ - ...area, - // Generate a unique id - id: area.name + i, - })), - sortByField === 'name' && sortBy((area) => area.name), - sortByField === 'charge' && sortBy((area) => -area.charge), + (areas) => + map(areas, (area, i) => ({ + ...area, + // Generate a unique id + id: area.name + i, + })), + sortByField === 'name' && ((areas) => sortBy(areas, (area) => area.name)), + sortByField === 'charge' && + ((areas) => sortBy(areas, (area) => -area.charge)), sortByField === 'draw' && - sortBy( - (area) => -powerRank(area.load), - (area) => -parseFloat(area.load), - ), + ((areas) => + sortBy( + areas, + (area) => -powerRank(area.load), + (area) => -parseFloat(area.load), + )), ])(data.areas); return ( <> diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx index 2ff85058da6..c00889536e0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx @@ -25,9 +25,10 @@ const antagsByCategory = new Map(); // This will break at priorities higher than 10, but that almost definitely // will not happen. -const binaryInsertAntag = binaryInsertWith((antag: Antagonist) => { - return `${antag.priority}_${antag.name}`; -}); +const binaryInsertAntag = (collection: Antagonist[], value: Antagonist) => + binaryInsertWith(collection, value, (antag) => { + return `${antag.priority}_${antag.name}`; + }); for (const antagKey of requireAntag.keys()) { const antag = requireAntag<{ diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx index 05845ffe548..ad81b2c27fd 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx @@ -13,11 +13,13 @@ type PreferenceChild = { children: ReactNode; }; -const binaryInsertPreference = binaryInsertWith( - (child) => child.name, -); +const binaryInsertPreference = ( + collection: PreferenceChild[], + value: PreferenceChild, +) => binaryInsertWith(collection, value, (child) => child.name); -const sortByName = sortBy<[string, PreferenceChild[]]>(([name]) => name); +const sortByName = (array: [string, PreferenceChild[]][]) => + sortBy(array, ([name]) => name); export const GamePreferencesPage = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx index bf40f73049a..10c962a8302 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx @@ -14,10 +14,11 @@ import { import { ServerPreferencesFetcher } from './ServerPreferencesFetcher'; const sortJobs = (entries: [string, Job][], head?: string) => - sortBy<[string, Job]>( + sortBy( + entries, ([key, _]) => (key === head ? -1 : 1), ([key, _]) => key, - )(entries); + ); const PRIORITY_BUTTON_SIZE = '18px'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx index c3b123105ab..32d39c287df 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx @@ -67,15 +67,14 @@ const KEY_CODE_TO_BYOND: Record = { */ const DOM_KEY_LOCATION_NUMPAD = 3; -const sortKeybindings = sortBy(([_, keybinding]: [string, Keybinding]) => { - return keybinding.name; -}); +const sortKeybindings = (array: [string, Keybinding][]) => + sortBy(array, ([_, keybinding]) => { + return keybinding.name; + }); -const sortKeybindingsByCategory = sortBy( - ([category, _]: [string, Record]) => { - return category; - }, -); +const sortKeybindingsByCategory = ( + array: [string, Record][], +) => sortBy(array, ([category, _]) => category); const formatKeyboardEvent = (event: KeyboardEvent): string => { let text = ''; @@ -177,12 +176,6 @@ const KeybindingName = (props: { keybinding: Keybinding }) => { ); }; -KeybindingName.defaultHooks = { - onComponentShouldUpdate: (lastProps, nextProps) => { - return lastProps.keybinding !== nextProps.keybinding; - }, -}; - const ResetToDefaultButton = (props: { keybindingId: string }) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx index 30766576256..846c05199d2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx @@ -1,11 +1,9 @@ -import { filterMap, sortBy } from 'common/collections'; +import { filter, map, sortBy } from 'common/collections'; import { exhaustiveCheck } from 'common/exhaustive'; import { classes } from 'common/react'; +import { createSearch } from 'common/string'; import { useState } from 'react'; -import { filter } from '../../../common/collections'; -import { flow } from '../../../common/fp'; -import { createSearch } from '../../../common/string'; import { sendAct, useBackend } from '../../backend'; import { Autofocus, @@ -229,8 +227,14 @@ const ChoicedSelection = (props: { }; const searchInCatalog = (searchText = '', catalog: Record) => { - const maybeSearch = createSearch(searchText, ([name, _icon]) => name); - return flow([searchText && filter(maybeSearch)])(Object.entries(catalog)); + let items = Object.entries(catalog); + if (searchText) { + items = filter( + items, + createSearch(searchText, ([name, _icon]) => name), + ); + } + return items; }; const GenderButton = (props: { @@ -395,10 +399,11 @@ const createSetRandomization = }); }; -const sortPreferences = sortBy<[string, unknown]>(([featureId, _]) => { - const feature = features[featureId]; - return feature?.name; -}); +const sortPreferences = (array: [string, unknown][]) => + sortBy(array, ([featureId, _]) => { + const feature = features[featureId]; + return feature?.name; + }); export const PreferenceList = (props: { act: typeof sendAct; @@ -478,22 +483,20 @@ export const getRandomization = ( const { data } = useBackend(); + if (!randomBodyEnabled) { + return {}; + } + return Object.fromEntries( - filterMap(Object.keys(preferences), (preferenceKey) => { - if (serverData.random.randomizable.indexOf(preferenceKey) === -1) { - return undefined; - } - - if (!randomBodyEnabled) { - return undefined; - } - - return [ - preferenceKey, - data.character_preferences.randomization[preferenceKey] || - RandomSetting.Disabled, - ]; - }), + map( + filter(Object.keys(preferences), (key) => + serverData.random.randomizable.includes(key), + ), + (key) => [ + key, + data.character_preferences.randomization[key] || RandomSetting.Disabled, + ], + ), ); }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx index 6dd79e19bdf..b334e460cea 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx @@ -1,4 +1,4 @@ -import { filterMap } from 'common/collections'; +import { filter } from 'common/collections'; import { useState } from 'react'; import { useBackend } from '../../backend'; @@ -23,13 +23,9 @@ function getCorrespondingPreferences( relevant_preferences: Record, ) { return Object.fromEntries( - filterMap(Object.keys(relevant_preferences), (key) => { - if (!customization_options.includes(key)) { - return undefined; - } - - return [key, relevant_preferences[key]]; - }), + filter(Object.entries(relevant_preferences), ([key, value]) => + customization_options.includes(key), + ), ); } diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx index eadb6e94d42..039fb8027ad 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx @@ -21,9 +21,11 @@ type NameWithKey = { name: Name; }; -const binaryInsertName = binaryInsertWith(({ key }) => key); +const binaryInsertName = (collection: NameWithKey[], value: NameWithKey) => + binaryInsertWith(collection, value, ({ key }) => key); -const sortNameWithKeyEntries = sortBy<[string, NameWithKey[]]>(([key]) => key); +const sortNameWithKeyEntries = (array: [string, NameWithKey[]][]) => + sortBy(array, ([key]) => key); export const MultiNameInput = (props: { handleClose: () => void; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx index b911a196b3c..6da6aec820d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx @@ -1,4 +1,4 @@ -import { sortBy, sortStrings } from 'common/collections'; +import { sort, sortBy } from 'common/collections'; import { BooleanLike, classes } from 'common/react'; import { ComponentType, @@ -22,7 +22,8 @@ import { import { createSetPreference, PreferencesMenuData } from '../../data'; import { ServerPreferencesFetcher } from '../../ServerPreferencesFetcher'; -export const sortChoices = sortBy<[string, ReactNode]>(([name]) => name); +export const sortChoices = (array: [string, ReactNode][]) => + sortBy(array, ([name]) => name); export type Feature< TReceiving, @@ -210,7 +211,7 @@ export const FeatureDropdownInput = ( return ( ; }; -const sortHexValues = sortBy<[string, HexValue]>( - ([_, hexValue]) => -hexValue.lightness, -); +const sortHexValues = (array: [string, HexValue][]) => + sortBy(array, ([_, hexValue]) => -hexValue.lightness); export const skin_tone: Feature = { name: 'Skin tone', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx index cfa323dce2c..ab973e3659e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx @@ -22,10 +22,13 @@ export const ghost_accs: FeatureChoiced = { component: FeatureDropdownInput, }; -const insertGhostForm = binaryInsertWith<{ +type GhostForm = { displayText: ReactNode; value: string; -}>(({ value }) => value); +}; + +const insertGhostForm = (collection: GhostForm[], value: GhostForm) => + binaryInsertWith(collection, value, ({ value }) => value); const GhostFormInput = ( props: FeatureValueProps, diff --git a/tgui/packages/tgui/interfaces/Radio.jsx b/tgui/packages/tgui/interfaces/Radio.jsx index d25409e033a..d852149571a 100644 --- a/tgui/packages/tgui/interfaces/Radio.jsx +++ b/tgui/packages/tgui/interfaces/Radio.jsx @@ -23,10 +23,10 @@ export const Radio = (props) => { const tunedChannel = RADIO_CHANNELS.find( (channel) => channel.freq === frequency, ); - const channels = map((value, key) => ({ + const channels = map(data.channels, (value, key) => ({ name: key, status: !!value, - }))(data.channels); + })); // Calculate window height let height = 106; if (subspace) { diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx index 5195c451838..117df20b8c0 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx @@ -1,4 +1,4 @@ -import { sortStrings } from 'common/collections'; +import { sort } from 'common/collections'; import { useState } from 'react'; import { useBackend, useLocalState } from '../../backend'; @@ -22,9 +22,9 @@ export const MessageWriteTab = (props) => { information_consoles = [], } = data; - const sorted_assistance = sortStrings(assistance_consoles); - const sorted_supply = sortStrings(supply_consoles); - const sorted_information = sortStrings(information_consoles); + const sorted_assistance = sort(assistance_consoles); + const sorted_supply = sort(supply_consoles); + const sorted_information = sort(information_consoles); const resetMessage = () => { setMessageText(''); diff --git a/tgui/packages/tgui/interfaces/RestockTracker.jsx b/tgui/packages/tgui/interfaces/RestockTracker.jsx index 236f486069c..7df606adffc 100644 --- a/tgui/packages/tgui/interfaces/RestockTracker.jsx +++ b/tgui/packages/tgui/interfaces/RestockTracker.jsx @@ -17,8 +17,9 @@ export const Restock = (props) => { export const RestockTracker = (props) => { const { data } = useBackend(); - const vending_list = sortBy((vend) => vend.percentage)( + const vending_list = sortBy( data.vending_list ?? [], + (vend) => vend.percentage, ); return (
    diff --git a/tgui/packages/tgui/interfaces/Roulette.jsx b/tgui/packages/tgui/interfaces/Roulette.jsx deleted file mode 100644 index e07cf4e0ef4..00000000000 --- a/tgui/packages/tgui/interfaces/Roulette.jsx +++ /dev/null @@ -1,313 +0,0 @@ -import { classes } from 'common/react'; -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { Box, Button, Grid, NumberInput, Table } from '../components'; -import { Window } from '../layouts'; - -const getNumberColor = (number) => { - const inRedOddRange = - (number >= 1 && number <= 10) || (number >= 19 && number <= 28); - - if (number % 2 === 1) { - return inRedOddRange ? 'red' : 'black'; - } - return inRedOddRange ? 'black' : 'red'; -}; - -export const RouletteNumberCell = (props) => { - const { - buttonClass = null, - cellClass = null, - color, - colspan = '1', - rowspan = '1', - text, - value, - } = props; - const { act } = useBackend(); - - return ( - - - - ); -}; - -export const RouletteBoard = () => { - const firstRow = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36]; - const secondRow = [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35]; - const thirdRow = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34]; - const fourthRow = { - 's1-12': '1st 12', - 's13-24': '2nd 12', - 's25-36': '3rd 12', - }; - const fifthRow = [ - { color: 'transparent', text: '1-18', value: 's1-18' }, - { color: 'transparent', text: 'Even', value: 'even' }, - { color: 'black', text: 'Black', value: 'black' }, - { color: 'red', text: 'Red', value: 'red' }, - { color: 'transparent', text: 'Odd', value: 'odd' }, - { color: 'transparent', text: '19-36', value: 's19-36' }, - ]; - - return ( - - - - - {firstRow.map((number) => ( - - ))} - - - - {secondRow.map((number) => ( - - ))} - - - - {thirdRow.map((number) => ( - - ))} - - - - - {Object.entries(fourthRow).map(([value, text]) => ( - - ))} - - - - {fifthRow.map((cell) => ( - - ))} - -
    -
    - ); -}; - -export const RouletteBetTable = (props) => { - const { act, data } = useBackend(); - - const [customBet, setCustomBet] = useState(500); - - let { BetType } = data; - - if (BetType.startsWith('s')) { - BetType = BetType.substring(1, BetType.length); - } - - return ( - - - - Last Spin: - - - Current Bet: - - - - - {data.LastSpin} - - - - {data.BetAmount} cr on {BetType} - - -
    - ); -}; - -export const Roulette = (props) => { - return ( - - - - - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/Roulette/BetTable.tsx b/tgui/packages/tgui/interfaces/Roulette/BetTable.tsx new file mode 100644 index 00000000000..8abf081b288 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Roulette/BetTable.tsx @@ -0,0 +1,171 @@ +import { BooleanLike, classes } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Box, Button, NumberInput, Stack, Table } from '../../components'; +import { getNumberColor } from './helpers'; + +type Data = { + IsAnchored: BooleanLike; + BetAmount: number; + BetType: string; + HouseBalance: number; + LastSpin: number; + Spinning: BooleanLike; + AccountBalance: number; + CanUnbolt: BooleanLike; +}; + +export function RouletteBetTable(props) { + const { act, data } = useBackend(); + const { LastSpin, HouseBalance, BetAmount, IsAnchored } = data; + + const [customBet, setCustomBet] = useState(500); + + let BetType = data.BetType; + + if (BetType.startsWith('s')) { + BetType = BetType.substring(1, BetType.length); + } + + return ( + + + + Last Spin: + + + Current Bet: + + + + + {LastSpin} + + + + {BetAmount} cr on {BetType} + + + + + + + + + + + + setCustomBet(value)} + /> + + + + + + + + + Swipe an ID card with a connected account to spin! + + + + + + + House Balance: + + {HouseBalance ? HouseBalance + ' cr' : 'None'} + + + + + +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Roulette/Board.tsx b/tgui/packages/tgui/interfaces/Roulette/Board.tsx new file mode 100644 index 00000000000..0f0fbcdc681 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Roulette/Board.tsx @@ -0,0 +1,107 @@ +import { Box, Table } from '../../components'; +import { getNumberColor } from './helpers'; +import { RouletteNumberCell } from './NumberCell'; + +const firstRow = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36] as const; +const secondRow = [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35] as const; +const thirdRow = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34] as const; +const fourthRow = { + 's1-12': '1st 12', + 's13-24': '2nd 12', + 's25-36': '3rd 12', +} as const; +const fifthRow = [ + { color: 'transparent', text: '1-18', value: 's1-18' }, + { color: 'transparent', text: 'Even', value: 'even' }, + { color: 'black', text: 'Black', value: 'black' }, + { color: 'red', text: 'Red', value: 'red' }, + { color: 'transparent', text: 'Odd', value: 'odd' }, + { color: 'transparent', text: '19-36', value: 's19-36' }, +] as const; + +export function RouletteBoard(props) { + return ( + + + + + {firstRow.map((number) => ( + + ))} + + + + {secondRow.map((number) => ( + + ))} + + + + {thirdRow.map((number) => ( + + ))} + + + + + {Object.entries(fourthRow).map(([value, text]) => ( + + ))} + + + + {fifthRow.map((cell) => ( + + ))} + +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Roulette/NumberCell.tsx b/tgui/packages/tgui/interfaces/Roulette/NumberCell.tsx new file mode 100644 index 00000000000..1b8143905c3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Roulette/NumberCell.tsx @@ -0,0 +1,48 @@ +import { classes } from 'common/react'; + +import { useBackend } from '../../backend'; +import { Button, Table } from '../../components'; + +type Props = { + color: string; + text: string; + value: string; +} & Partial<{ + buttonClass: string; + cellClass: string; + colspan: number; + rowspan: number; +}>; + +export function RouletteNumberCell(props: Props) { + const { + buttonClass, + cellClass, + color, + colspan = 1, + rowspan = 1, + text, + value, + } = props; + const { act } = useBackend(); + + return ( + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Roulette/helpers.tsx b/tgui/packages/tgui/interfaces/Roulette/helpers.tsx new file mode 100644 index 00000000000..b5c4f9b9b33 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Roulette/helpers.tsx @@ -0,0 +1,9 @@ +export function getNumberColor(number: number): 'red' | 'black' { + const inRedOddRange = + (number >= 1 && number <= 10) || (number >= 19 && number <= 28); + + if (number % 2 === 1) { + return inRedOddRange ? 'red' : 'black'; + } + return inRedOddRange ? 'black' : 'red'; +} diff --git a/tgui/packages/tgui/interfaces/Roulette/index.tsx b/tgui/packages/tgui/interfaces/Roulette/index.tsx new file mode 100644 index 00000000000..8c27a052a02 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Roulette/index.tsx @@ -0,0 +1,14 @@ +import { Window } from '../../layouts'; +import { RouletteBetTable } from './BetTable'; +import { RouletteBoard } from './Board'; + +export function Roulette(props) { + return ( + + + + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx index 8132027e3e6..8241148257a 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useState } from 'react'; import { useBackend, useLocalState } from 'tgui/backend'; import { @@ -29,10 +28,10 @@ export const SecurityRecordTabs = (props) => { const [search, setSearch] = useState(''); - const sorted: SecurityRecord[] = flow([ - filter((record: SecurityRecord) => isRecordMatch(record, search)), - sortBy((record: SecurityRecord) => record.name), - ])(records); + const sorted = sortBy( + filter(records, (record) => isRecordMatch(record, search)), + (record) => record.name, + ); return ( diff --git a/tgui/packages/tgui/interfaces/SeedExtractor.tsx b/tgui/packages/tgui/interfaces/SeedExtractor.tsx index 3c05b3d0498..87955da243f 100644 --- a/tgui/packages/tgui/interfaces/SeedExtractor.tsx +++ b/tgui/packages/tgui/interfaces/SeedExtractor.tsx @@ -1,5 +1,4 @@ import { sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -67,9 +66,10 @@ export const SeedExtractor = (props) => { const search = createSearch(searchText, (item: SeedData) => item.name); const seeds_filtered = searchText.length > 0 ? data.seeds.filter(search) : data.seeds; - const seeds = flow([ - sortBy((item: SeedData) => item[sortField as keyof SeedData]), - ])(seeds_filtered || []); + const seeds = sortBy( + seeds_filtered || [], + (item: SeedData) => item[sortField as keyof SeedData], + ); sortField !== 'name' && seeds.reverse(); return ( diff --git a/tgui/packages/tgui/interfaces/SelectEquipment.jsx b/tgui/packages/tgui/interfaces/SelectEquipment.jsx index d43d28961e2..d8df6c71e7c 100644 --- a/tgui/packages/tgui/interfaces/SelectEquipment.jsx +++ b/tgui/packages/tgui/interfaces/SelectEquipment.jsx @@ -1,5 +1,4 @@ import { filter, map, sortBy, uniq } from 'common/collections'; -import { flow } from 'common/fp'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -30,10 +29,10 @@ export const SelectEquipment = (props) => { const isFavorited = (entry) => favorites?.includes(entry.path); - const outfits = map((entry) => ({ + const outfits = map([...data.outfits, ...data.custom_outfits], (entry) => ({ ...entry, favorite: isFavorited(entry), - }))([...data.outfits, ...data.custom_outfits]); + })); // even if no custom outfits were sent, we still want to make sure there's // at least a 'Custom' tab so the button to create a new one pops up @@ -49,15 +48,15 @@ export const SelectEquipment = (props) => { (entry) => entry.name + entry.path, ); - const visibleOutfits = flow([ - filter((entry) => entry.category === tab), - filter(searchFilter), - sortBy( - (entry) => !entry.favorite, - (entry) => !entry.priority, - (entry) => entry.name, + const visibleOutfits = sortBy( + filter( + filter(outfits, (entry) => entry.category === tab), + searchFilter, ), - ])(outfits); + (entry) => !entry.favorite, + (entry) => !entry.priority, + (entry) => entry.name, + ); const getOutfitEntry = (current_outfit) => outfits.find((outfit) => getOutfitKey(outfit) === current_outfit); diff --git a/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx b/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx index e64f47086cd..8cff913e8e9 100644 --- a/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx +++ b/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx @@ -104,7 +104,7 @@ export const ShuttleManipulatorTemplates = (props) => { - {map((template, templateId) => ( + {map(templateObject, (template, templateId) => ( { > {template.port_id} - ))(templateObject)} + ))} diff --git a/tgui/packages/tgui/interfaces/StackCrafting.tsx b/tgui/packages/tgui/interfaces/StackCrafting.tsx index 255d8f501f1..7395306c11a 100644 --- a/tgui/packages/tgui/interfaces/StackCrafting.tsx +++ b/tgui/packages/tgui/interfaces/StackCrafting.tsx @@ -1,5 +1,3 @@ -import { filter, map, reduce, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { clamp } from 'common/math'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -49,8 +47,7 @@ type RecipeBoxProps = { }; // RecipeList converted via Object.entries() for filterRecipeList -type RecipeListEntry = [string, RecipeList | Recipe]; -type RecipeListFilterableEntry = [string, RecipeList | Recipe | undefined]; +type RecipeListFilterableEntry = [string, RecipeList | Recipe]; /** * Type guard for recipe vs recipe list @@ -70,30 +67,29 @@ function isRecipeList(value: Recipe | RecipeList): value is RecipeList { const filterRecipeList = ( list: RecipeList, keyFilter: (key: string) => boolean, -) => { - const filteredList: RecipeList = flow([ - map((entry: RecipeListEntry): RecipeListFilterableEntry => { - const [key, recipe] = entry; +): RecipeList | undefined => { + const filteredList = Object.fromEntries( + Object.entries(list) + .flatMap((entry): RecipeListFilterableEntry[] => { + const [key, recipe] = entry; - if (isRecipeList(recipe)) { // If category name matches, return the whole thing. if (keyFilter(key)) { - return entry; + return [entry]; } - // otherwise, filter sub-entries. - return [key, filterRecipeList(recipe, keyFilter)]; - } + if (isRecipeList(recipe)) { + // otherwise, filter sub-entries. + const subEntries = filterRecipeList(recipe, keyFilter); + if (subEntries !== undefined) { + return [[key, subEntries]]; + } + } - return keyFilter(key) ? entry : [key, undefined]; - }), - filter((entry: RecipeListFilterableEntry) => entry[1] !== undefined), - sortBy((entry: RecipeListEntry) => entry[0].toLowerCase()), - reduce((obj: RecipeList, entry: RecipeListEntry) => { - obj[entry[0]] = entry[1]; - return obj; - }, {}), - ])(Object.entries(list)); + return []; + }) + .sort(([a], [b]) => (a < b ? -1 : a !== b ? 1 : 0)), + ); return Object.keys(filteredList).length ? filteredList : undefined; }; diff --git a/tgui/packages/tgui/interfaces/StationAlertConsole.jsx b/tgui/packages/tgui/interfaces/StationAlertConsole.jsx index f80a5826b06..c4ff6812955 100644 --- a/tgui/packages/tgui/interfaces/StationAlertConsole.jsx +++ b/tgui/packages/tgui/interfaces/StationAlertConsole.jsx @@ -1,5 +1,4 @@ import { sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { useBackend } from '../backend'; import { Button, Section, Stack } from '../components'; @@ -30,8 +29,9 @@ export const StationAlertConsoleContent = (props) => { Camera: 5, }; - const sortedAlarms = flow([sortBy((alarm) => sortingKey[alarm.name])])( + const sortedAlarms = sortBy( data.alarms || [], + (alarm) => sortingKey[alarm.name], ); return ( diff --git a/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx b/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx index f3176415a4f..e6e7b02ce67 100644 --- a/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx +++ b/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx @@ -1,4 +1,4 @@ -import { filterMap } from 'common/collections'; +import { filter, map } from 'common/collections'; import { exhaustiveCheck } from 'common/exhaustive'; import { BooleanLike } from 'common/react'; import { useState } from 'react'; @@ -110,15 +110,9 @@ const FutureStationTraitsPage = (props) => { icon="times" onClick={() => { act('setup_future_traits', { - station_traits: filterMap( - future_station_traits, - (otherTrait) => { - if (otherTrait.path === trait.path) { - return undefined; - } else { - return otherTrait.path; - } - }, + station_traits: filter( + map(future_station_traits, (t) => t.path), + (p) => p !== trait.path, ), }); }} diff --git a/tgui/packages/tgui/interfaces/Supermatter.tsx b/tgui/packages/tgui/interfaces/Supermatter.tsx index 9bb8661ca29..35d176db6cd 100644 --- a/tgui/packages/tgui/interfaces/Supermatter.tsx +++ b/tgui/packages/tgui/interfaces/Supermatter.tsx @@ -1,5 +1,4 @@ import { filter, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { ReactNode, useState } from 'react'; @@ -123,10 +122,14 @@ export const SupermatterContent = (props: SupermatterProps) => { gas_metadata, } = props; const [allGasActive, setAllGasActive] = useState(false); - const gas_composition: [gas_path: string, amount: number][] = flow([ - !allGasActive && filter(([gas_path, amount]) => amount !== 0), - sortBy(([gas_path, amount]) => -amount), - ])(Object.entries(props.gas_composition)); + let gas_composition = Object.entries(props.gas_composition); + if (!allGasActive) { + gas_composition = filter( + gas_composition, + ([gas_path, amount]) => amount !== 0, + ); + } + gas_composition = sortBy(gas_composition, ([gas_path, amount]) => -amount); return ( diff --git a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx index 2e9403794bf..c051315fe3b 100644 --- a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx +++ b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx @@ -20,7 +20,8 @@ type SurgeryInitiatorData = { target_name: string; }; -const sortSurgeries = sortBy((surgery: Surgery) => surgery.name); +const sortSurgeries = (array: Surgery[]) => + sortBy(array, (surgery) => surgery.name); type SurgeryInitiatorInnerState = { selectedSurgeryIndex: number; diff --git a/tgui/packages/tgui/interfaces/SyndContractor.jsx b/tgui/packages/tgui/interfaces/SyndContractor.jsx index 472a1834df6..5daa40b1195 100644 --- a/tgui/packages/tgui/interfaces/SyndContractor.jsx +++ b/tgui/packages/tgui/interfaces/SyndContractor.jsx @@ -11,6 +11,7 @@ import { Modal, NoticeBox, Section, + Stack, Table, Tabs, } from '../components'; @@ -181,8 +182,8 @@ export const StatusPane = (props) => { } > - - + + { {String(data.earned_tc)} - - + + {String(data.contracts_completed)} ACTIVE - - + +
    ); }; diff --git a/tgui/packages/tgui/interfaces/SyndicateContractor.tsx b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx index 81e01d682d7..66c07263981 100644 --- a/tgui/packages/tgui/interfaces/SyndicateContractor.tsx +++ b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx @@ -5,32 +5,21 @@ import { Box, Button, Flex, - Grid, Icon, LabeledList, Modal, NoticeBox, Section, + Stack, } from '../components'; import { FakeTerminal } from '../components/FakeTerminal'; import { NtosWindow } from '../layouts'; -const CONTRACT_STATUS_INACTIVE = 1; -const CONTRACT_STATUS_ACTIVE = 2; -const CONTRACT_STATUS_BOUNTY_CONSOLE_ACTIVE = 3; -const CONTRACT_STATUS_EXTRACTING = 4; -const CONTRACT_STATUS_COMPLETE = 5; -const CONTRACT_STATUS_ABORTED = 6; - -export const SyndicateContractor = (props) => { - return ( - - - - - - ); -}; +enum CONTRACT { + Inactive = 1, + Active = 2, + Complete = 5, +} type Data = { contracts_completed: number; @@ -59,7 +48,47 @@ type ContractData = { target: string; }; -export const SyndicateContractorContent = (props) => { +const infoEntries = [ + 'SyndTract v2.0', + '', + "We've identified potentional high-value targets that are", + 'currently assigned to your mission area. They are believed', + 'to hold valuable information which could be of immediate', + 'importance to our organisation.', + '', + 'Listed below are all of the contracts available to you. You', + 'are to bring the specified target to the designated', + 'drop-off, and contact us via this uplink. We will send', + 'a specialised extraction unit to put the body into.', + '', + 'We want targets alive - but we will sometimes pay slight', + "amounts if they're not, you just won't receive the shown", + 'bonus. You can redeem your payment through this uplink in', + 'the form of raw telecrystals, which can be put into your', + 'regular Syndicate uplink to purchase whatever you may need.', + 'We provide you with these crystals the moment you send the', + 'target up to us, which can be collected at anytime through', + 'this system.', + '', + 'Targets extracted will be ransomed back to the station once', + 'their use to us is fulfilled, with us providing you a small', + 'percentage cut. You may want to be mindful of them', + 'identifying you when they come back. We provide you with', + 'a standard contractor loadout, which will help cover your', + 'identity.', +] as const; + +export function SyndicateContractor(props) { + return ( + + + + + + ); +} + +function SyndicateContractorContent(props) { const { data, act } = useBackend(); const { error, logged_in, first_load, info_screen } = data; @@ -84,37 +113,7 @@ export const SyndicateContractorContent = (props) => { 'Searching for available contracts...', 'CONTRACTS FOUND', 'WELCOME, AGENT', - ]; - - const infoEntries = [ - 'SyndTract v2.0', - '', - "We've identified potentional high-value targets that are", - 'currently assigned to your mission area. They are believed', - 'to hold valuable information which could be of immediate', - 'importance to our organisation.', - '', - 'Listed below are all of the contracts available to you. You', - 'are to bring the specified target to the designated', - 'drop-off, and contact us via this uplink. We will send', - 'a specialised extraction unit to put the body into.', - '', - 'We want targets alive - but we will sometimes pay slight', - "amounts if they're not, you just won't receive the shown", - 'bonus. You can redeem your payment through this uplink in', - 'the form of raw telecrystals, which can be put into your', - 'regular Syndicate uplink to purchase whatever you may need.', - 'We provide you with these crystals the moment you send the', - 'target up to us, which can be collected at anytime through', - 'this system.', - '', - 'Targets extracted will be ransomed back to the station once', - 'their use to us is fulfilled, with us providing you a small', - 'percentage cut. You may want to be mindful of them', - 'identifying you when they come back. We provide you with', - 'a standard contractor loadout, which will help cover your', - 'identity.', - ]; + ] as const; const errorPane = !!error && ( @@ -126,7 +125,7 @@ export const SyndicateContractorContent = (props) => { {error} - @@ -136,11 +135,9 @@ export const SyndicateContractorContent = (props) => { return (
    - {!!error && {error}}
    @@ -167,11 +164,12 @@ export const SyndicateContractorContent = (props) => {
    ); } @@ -183,38 +181,38 @@ export const SyndicateContractorContent = (props) => { ); -}; +} -export const StatusPane = (props) => { +function StatusPane(props) { const { act, data } = useBackend(); const { redeemable_tc, earned_tc, contracts_completed } = data; return (
    - Contractor Status - } + title="Contractor Status" > - - + + act('PRG_redeem_TC')} - /> + > + Claim + } > {String(redeemable_tc)} @@ -223,24 +221,28 @@ export const StatusPane = (props) => { {String(earned_tc)} - - + + {String(contracts_completed)} ACTIVE - - + +
    ); -}; +} -const ContractsTab = (props) => { +function ContractsTab(props) { const { act, data } = useBackend(); - const { contracts, ongoing_contract, extraction_enroute, dropoff_direction } = - data; + const { + contracts = [], + ongoing_contract, + extraction_enroute, + dropoff_direction, + } = data; return ( <> @@ -248,18 +250,19 @@ const ContractsTab = (props) => { title="Available Contracts" buttons={ } > {contracts.map((contract) => { - if (ongoing_contract && contract.status !== CONTRACT_STATUS_ACTIVE) { + if (ongoing_contract && contract.status !== CONTRACT.Active) { return; } - const active = contract.status > CONTRACT_STATUS_INACTIVE; - if (contract.status >= CONTRACT_STATUS_COMPLETE) { + const active = contract.status > CONTRACT.Inactive; + if (contract.status >= CONTRACT.Complete) { return; } return ( @@ -276,27 +279,28 @@ const ContractsTab = (props) => { {`${contract.payout} (+${contract.payout_bonus}) TC`}
    } > - - {contract.message} - + + {contract.message} + Dropoff Location: {contract.dropoff} - - + + ); })} @@ -310,4 +314,4 @@ const ContractsTab = (props) => { ); -}; +} diff --git a/tgui/packages/tgui/interfaces/Techweb.jsx b/tgui/packages/tgui/interfaces/Techweb.jsx index 96b52983ade..c041d646d7d 100644 --- a/tgui/packages/tgui/interfaces/Techweb.jsx +++ b/tgui/packages/tgui/interfaces/Techweb.jsx @@ -41,9 +41,9 @@ const selectRemappedStaticData = (data) => { ...node, id: remapId(id), costs, - prereq_ids: map(remapId)(node.prereq_ids || []), - design_ids: map(remapId)(node.design_ids || []), - unlock_ids: map(remapId)(node.unlock_ids || []), + prereq_ids: map(node.prereq_ids || [], remapId), + design_ids: map(node.design_ids || [], remapId), + unlock_ids: map(node.unlock_ids || [], remapId), required_experiments: node.required_experiments || [], discount_experiments: node.discount_experiments || [], }; @@ -251,10 +251,11 @@ const TechwebOverview = (props) => { ); }); } else { - displayedNodes = sortBy((x) => node_cache[x.id].name)( + displayedNodes = sortBy( tabIndex < 2 ? nodes.filter((x) => x.tier === tabIndex) : nodes.filter((x) => x.tier >= tabIndex), + (x) => node_cache[x.id].name, ); } diff --git a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx index 3f1a3dcb543..f59b01b8b5d 100644 --- a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx +++ b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx @@ -7,7 +7,7 @@ import { Window } from '../layouts'; const JOB_REPORT_MENU_FAIL_REASON_TRACKING_DISABLED = 1; const JOB_REPORT_MENU_FAIL_REASON_NO_RECORDS = 2; -const sortByPlaytime = sortBy(([_, playtime]) => -playtime); +const sortByPlaytime = (array) => sortBy(array, ([_, playtime]) => -playtime); const PlaytimeSection = (props) => { const { playtimes } = props; diff --git a/tgui/packages/tgui/interfaces/WarrantConsole.tsx b/tgui/packages/tgui/interfaces/WarrantConsole.tsx index 14415b3ee79..a87de8e017c 100644 --- a/tgui/packages/tgui/interfaces/WarrantConsole.tsx +++ b/tgui/packages/tgui/interfaces/WarrantConsole.tsx @@ -63,7 +63,7 @@ export const WarrantConsole = (props) => { const RecordList = (props) => { const { act, data } = useBackend(); const { records = [] } = data; - const sorted = sortBy((record: WarrantRecord) => record.crew_name)(records); + const sorted = sortBy(records, (record) => record.crew_name); const [selectedRecord, setSelectedRecord] = useLocalState< WarrantRecord | undefined diff --git a/tgui/packages/tgui/interfaces/common/AccessConfig.jsx b/tgui/packages/tgui/interfaces/common/AccessConfig.jsx deleted file mode 100644 index e91abecbde7..00000000000 --- a/tgui/packages/tgui/interfaces/common/AccessConfig.jsx +++ /dev/null @@ -1,136 +0,0 @@ -import { sortBy } from 'common/collections'; -import { useState } from 'react'; - -import { Button, Flex, Grid, Section, Tabs } from '../../components'; - -export const AccessConfig = (props) => { - const { - accesses = [], - selectedList = [], - accessMod, - grantAll, - denyAll, - grantDep, - denyDep, - } = props; - const [selectedAccessName, setSelectedAccessName] = useState( - accesses[0]?.name, - ); - const selectedAccess = accesses.find( - (access) => access.name === selectedAccessName, - ); - const selectedAccessEntries = sortBy((entry) => entry.desc)( - selectedAccess?.accesses || [], - ); - - const checkAccessIcon = (accesses) => { - let oneAccess = false; - let oneInaccess = false; - for (let element of accesses) { - if (selectedList.includes(element.ref)) { - oneAccess = true; - } else { - oneInaccess = true; - } - } - if (!oneAccess && oneInaccess) { - return 0; - } else if (oneAccess && oneInaccess) { - return 1; - } else { - return 2; - } - }; - - return ( -
    -
    - ); -}; - -const diffMap = { - 0: { - icon: 'times-circle', - color: 'bad', - }, - 1: { - icon: 'stop-circle', - color: null, - }, - 2: { - icon: 'check-circle', - color: 'good', - }, -}; diff --git a/tgui/packages/tgui/interfaces/common/AccessConfig.tsx b/tgui/packages/tgui/interfaces/common/AccessConfig.tsx new file mode 100644 index 00000000000..766a6724d77 --- /dev/null +++ b/tgui/packages/tgui/interfaces/common/AccessConfig.tsx @@ -0,0 +1,204 @@ +import { sortBy } from 'common/collections'; +import { useState } from 'react'; + +import { Button, Section, Stack, Tabs } from '../../components'; + +type BaseProps = { + accessMod: (ref: string) => void; + denyDep: (ref: string) => void; + grantDep: (ref: string) => void; +}; + +type ConfigProps = { + accesses: Region[]; + denyAll: () => void; + grantAll: () => void; + selectedList: string[]; +} & BaseProps; + +type AccessButtonProps = { + selectedAccess: Region; + selectedAccessEntries: Area[]; + selectedList: string[]; +} & BaseProps; + +export type Region = { + accesses: Area[]; + name: string; +}; + +export type Area = { + desc: string; + ref: string; +}; + +enum ACCESS { + Denied = 0, + Partial = 1, + Granted = 2, +} + +const DIFFMAP = [ + { + icon: 'times-circle', + color: 'bad', + }, + { + icon: 'stop-circle', + color: null, + }, + { + icon: 'check-circle', + color: 'good', + }, +] as const; + +export function AccessConfig(props: ConfigProps) { + const { + accesses = [], + selectedList = [], + accessMod, + grantAll, + denyAll, + grantDep, + denyDep, + } = props; + + const [selectedAccessName, setSelectedAccessName] = useState( + accesses[0]?.name, + ); + + const selectedAccess = + accesses.find((access) => access.name === selectedAccessName) || + accesses[0]; + + const selectedAccessEntries = sortBy( + selectedAccess?.accesses || [], + (entry: Area) => entry.desc, + ); + + function checkAccessIcon(accesses: Area[]) { + let oneAccess = false; + let oneInaccess = false; + for (let element of accesses) { + if (selectedList.includes(element.ref)) { + oneAccess = true; + } else { + oneInaccess = true; + } + } + if (!oneAccess && oneInaccess) { + return ACCESS.Denied; + } else if (oneAccess && oneInaccess) { + return ACCESS.Partial; + } else { + return ACCESS.Granted; + } + } + + return ( +
    + + + + } + > + + + + {accesses.map((access) => { + const entries = access.accesses || []; + const icon = DIFFMAP[checkAccessIcon(entries)].icon; + const color = DIFFMAP[checkAccessIcon(entries)].color; + return ( + setSelectedAccessName(access.name)} + > + {access.name} + + ); + })} + + + + + + + +
    + ); +} + +function AccessButtons(props: AccessButtonProps) { + const { + selectedAccessEntries, + selectedList, + accessMod, + grantDep, + denyDep, + selectedAccess, + } = props; + + return ( + + + + + + + + + + + + + +
    + {selectedAccessEntries.map((entry) => ( + accessMod(entry.ref)} + > + {entry.desc} + + ))} +
    +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/common/AccessList.jsx b/tgui/packages/tgui/interfaces/common/AccessList.jsx index a4096b6ce30..9ac1fe913b3 100644 --- a/tgui/packages/tgui/interfaces/common/AccessList.jsx +++ b/tgui/packages/tgui/interfaces/common/AccessList.jsx @@ -248,8 +248,9 @@ const RegionAccessList = (props) => { const selectedAccess = accesses.find( (access) => access.name === selectedAccessName, ); - const selectedAccessEntries = sortBy((entry) => entry.desc)( + const selectedAccessEntries = sortBy( selectedAccess?.accesses || [], + (entry) => entry.desc, ); const allWildcards = Object.keys(wildcardSlots); diff --git a/tgui/packages/tgui/layouts/Layout.tsx b/tgui/packages/tgui/layouts/Layout.tsx index 74aad987d21..173ed1cbb43 100644 --- a/tgui/packages/tgui/layouts/Layout.tsx +++ b/tgui/packages/tgui/layouts/Layout.tsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; +import { useEffect, useRef } from 'react'; import { BoxProps, @@ -40,6 +41,20 @@ type ContentProps = Partial<{ function LayoutContent(props: ContentProps) { const { className, scrollable, children, ...rest } = props; + const node = useRef(null); + + useEffect(() => { + const self = node.current; + + if (self && scrollable) { + addScrollableNode(self); + } + return () => { + if (self && scrollable) { + removeScrollableNode(self); + } + }; + }, []); return (
    {children} @@ -56,9 +72,4 @@ function LayoutContent(props: ContentProps) { ); } -LayoutContent.defaultHooks = { - onComponentDidMount: (node) => addScrollableNode(node), - onComponentWillUnmount: (node) => removeScrollableNode(node), -}; - Layout.Content = LayoutContent; diff --git a/tgui/packages/tgui/layouts/Pane.tsx b/tgui/packages/tgui/layouts/Pane.tsx index a2858fae7fc..f34205545fb 100644 --- a/tgui/packages/tgui/layouts/Pane.tsx +++ b/tgui/packages/tgui/layouts/Pane.tsx @@ -9,6 +9,7 @@ import { classes } from 'common/react'; import { useBackend } from '../backend'; import { Box } from '../components'; import { BoxProps } from '../components/Box'; +import { useDebug } from '../debug'; import { Layout } from './Layout'; type Props = Partial<{ @@ -18,11 +19,8 @@ type Props = Partial<{ export function Pane(props: Props) { const { theme, children, className, ...rest } = props; - const { suspended, debug } = useBackend(); - let debugLayout = false; - if (debug) { - debugLayout = debug.debugLayout; - } + const { suspended } = useBackend(); + const { debugLayout = false } = useDebug(); return ( diff --git a/tgui/packages/tgui/layouts/Window.tsx b/tgui/packages/tgui/layouts/Window.tsx index 2b6fbf87356..aa91370bfc3 100644 --- a/tgui/packages/tgui/layouts/Window.tsx +++ b/tgui/packages/tgui/layouts/Window.tsx @@ -13,6 +13,7 @@ import { globalStore } from '../backend'; import { Icon } from '../components'; import { BoxProps } from '../components/Box'; import { UI_DISABLED, UI_INTERACTIVE, UI_UPDATE } from '../constants'; +import { useDebug } from '../debug'; import { toggleKitchenSink } from '../debug/actions'; import { dragStartHandler, @@ -48,10 +49,8 @@ export const Window = (props: Props) => { height, } = props; - const { config, suspended, debug } = useBackend(); - if (suspended) { - return null; - } + const { config, suspended } = useBackend(); + const { debugLayout = false } = useDebug(); useEffect(() => { const updateGeometry = () => { @@ -80,11 +79,6 @@ export const Window = (props: Props) => { }; }, [width, height]); - let debugLayout = false; - if (debug) { - debugLayout = debug.debugLayout; - } - const dispatch = globalStore.dispatch; const fancy = config.window?.fancy; @@ -95,11 +89,11 @@ export const Window = (props: Props) => { ? config.status < UI_DISABLED : config.status < UI_INTERACTIVE); - return ( + return suspended ? null : ( { // Get the component for the current route export const getRoutedComponent = () => { - const { suspended, config, debug } = useBackend(); + const { suspended, config } = useBackend(); + const { kitchenSink = false } = useDebug(); + if (suspended) { return SuspendedWindow; } @@ -61,7 +64,7 @@ export const getRoutedComponent = () => { } if (process.env.NODE_ENV !== 'production') { // Show a kitchen sink - if (debug?.kitchenSink) { + if (kitchenSink) { return require('./debug').KitchenSink; } } diff --git a/tgui/packages/tgui/styles/components/SearchItem.scss b/tgui/packages/tgui/styles/components/SearchItem.scss new file mode 100644 index 00000000000..76946ec9c5a --- /dev/null +++ b/tgui/packages/tgui/styles/components/SearchItem.scss @@ -0,0 +1,22 @@ +@use '../colors.scss'; + +.SearchItem { + align-items: center; + background: black; + border: thin solid #212121; + display: flex; + height: 3rem; + justify-content: center; + position: relative; + width: 3rem; + margin-bottom: 0; +} + +.SearchItem--amount { + bottom: -1rem; + color: colors.$teal; + font-family: 'Roboto', sans-serif; + font-size: 1.5rem; + position: absolute; + right: -4px; +} diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 25443ae606c..87715e2ae30 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -38,6 +38,7 @@ @include meta.load-css('./components/NumberInput.scss'); @include meta.load-css('./components/ProgressBar.scss'); @include meta.load-css('./components/RoundGauge.scss'); +@include meta.load-css('./components/SearchItem.scss'); @include meta.load-css('./components/Section.scss'); @include meta.load-css('./components/Slider.scss'); @include meta.load-css('./components/Stack.scss'); diff --git a/tools/test_merge_bot/main.js b/tools/test_merge_bot/main.js index 0ad51304ecf..ae7d4c7a98d 100644 --- a/tools/test_merge_bot/main.js +++ b/tools/test_merge_bot/main.js @@ -87,19 +87,41 @@ export async function processTestMerges({ github, context }) { } if (existingComment === undefined) { - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: prNumber, - body: newBody, - }); + try { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: newBody, + }); + } catch (error) { + if(error.status){ + console.error(`Failed to create comment for #{prNumber}`) + console.error(error) + continue; + } + else{ + throw error + } + } } else { - await github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: existingComment.databaseId, - body: newBody, - }); + try { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existingComment.databaseId, + body: newBody, + }); + } catch (error) { + if(error.status){ + console.error(`Failed to update comment for #{prNumber}`) + console.error(error) + continue; + } + else{ + throw error + } + } } } } From 92d499e454f436996811a9c1f4bb274b6cba0be6 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:27:20 +0200 Subject: [PATCH 59/60] [MIRROR] Fix the materials box dropping its contents on creation (#27504) * Fix the materials box dropping its contents on creation (#82892) ## About The Pull Request This fixes the materials box (part of the debug box/admin outfit) dropping its contents everywhere. The issue is that these stacks will merge during `PopulateContents` as part of the parent call to `/obj/item/storage/Initialize` before `/obj/item/storage/box/material/Initialize` has a chance to change the size of the box. ## Why It's Good For The Game Fixes #82705 ## Changelog :cl: VexingRaven fix: The debug box no longer spills its contents everywhere /:cl: * Fix the materials box dropping its contents on creation * Update engineering_boxes.dm --------- Co-authored-by: VexingRaven Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> --- code/game/objects/items/storage/boxes/engineering_boxes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index 359f9c17c7b..a46703ec8bf 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -24,7 +24,7 @@ /obj/item/storage/box/material/Initialize(mapload) . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC //This needs to be set here too because the parent type overrides it again /obj/item/storage/box/material/PopulateContents() //less uranium because radioactive var/static/items_inside = list( From d28fdb49d527ca426fc0befb71d32ff467d8d294 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:33:42 +0200 Subject: [PATCH 60/60] Automatic changelog for PR #27504 [ci skip] --- html/changelogs/AutoChangeLog-pr-27504.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-27504.yml diff --git a/html/changelogs/AutoChangeLog-pr-27504.yml b/html/changelogs/AutoChangeLog-pr-27504.yml new file mode 100644 index 00000000000..7480670397a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-27504.yml @@ -0,0 +1,4 @@ +author: "VexingRaven" +delete-after: True +changes: + - bugfix: "The debug box no longer spills its contents everywhere" \ No newline at end of file