From 3ddf6c204ad5b5dbf986840500ffa72a2cd46cf4 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 30 Jun 2023 14:33:37 -0500 Subject: [PATCH 001/575] Make set_state accept state decl instances --- code/datums/extensions/state_machine.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/datums/extensions/state_machine.dm b/code/datums/extensions/state_machine.dm index 4d573c68494..914f633541e 100644 --- a/code/datums/extensions/state_machine.dm +++ b/code/datums/extensions/state_machine.dm @@ -93,7 +93,10 @@ var/global/list/state_machines = list() var/datum/holder_instance = get_holder() if(istype(current_state)) current_state.exited_state(holder_instance) - current_state = GET_DECL(new_state_type) + if(ispath(new_state_type)) + current_state = GET_DECL(new_state_type) + else // need to include null here, so we can't do an istype + current_state = new_state_type if(istype(current_state)) current_state.entered_state(holder_instance) return current_state From 2e9586f68f257347c3fc50e986af0c28a7477b91 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 30 Jun 2023 14:34:14 -0500 Subject: [PATCH 002/575] Fix exoplanet weather --- .../template_types/random_exoplanet/planet_types/barren.dm | 1 + .../template_types/random_exoplanet/planet_types/desert.dm | 1 + .../maps/template_types/random_exoplanet/planetoid_data.dm | 6 ++---- .../maps/template_types/random_exoplanet/random_planet.dm | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm index 861518b7d06..34d03a2df48 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/barren.dm @@ -46,6 +46,7 @@ atmosphere_gen_pressure_max = 0.05 ATM atmosphere_gen_temperature_min = -240 CELSIUS //-240c is about the surface temp of pluto for ref atmosphere_gen_temperature_max = 450 CELSIUS //450c is the temperature at the surface of mercury for ref + initial_weather_state = null // No weather. possible_rock_colors = list( COLOR_BEIGE, COLOR_GRAY80, diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/desert.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/desert.dm index a26c3911151..cb8a8f57dac 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/desert.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/desert.dm @@ -74,6 +74,7 @@ habitability_class = null //Generate randomly atmosphere_gen_temperature_min = 40 CELSIUS atmosphere_gen_temperature_max = 120 CELSIUS + initial_weather_state = null // No weather. surface_light_gen_level_min = 0.5 surface_light_gen_level_max = 0.95 flora = /datum/planet_flora/random/desert diff --git a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm index 96a01e53aa7..f95a8be1213 100644 --- a/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm +++ b/code/modules/maps/template_types/random_exoplanet/planetoid_data.dm @@ -34,8 +34,8 @@ var/temperature_min = 0 CELSIUS ///The maximum temperature that can be reached on the planet.(For instance via meteo or sunlight/shade or whatever) var/temperature_max = 25 CELSIUS - ///What weather state to use for this planet initially. If null, will not initialize any weather system. May be type path at definition or instance at runtime. - var/decl/state/weather/initial_weather_state + ///What weather state to use for this planet initially. If null, will not initialize any weather system. Must be a typepath rather than an instance. + var/decl/state/weather/initial_weather_state = /decl/state/weather/calm // *** Appearence *** ///A weak reference to the overmap marker for this template instance if any exists. Or at definition the type path of the marker to use @@ -156,8 +156,6 @@ ///Resets the given weather state to our planet replacing the old one, and trigger updates. Can be a type path or instance. /datum/planetoid_data/proc/reset_weather(var/decl/state/weather/W) - if(ispath(W)) - W = GET_DECL(W) initial_weather_state = W if(!(topmost_level_id in SSmapping.levels_by_id)) return //It's entire possible the levels weren't initialized yet, so don't bother. diff --git a/code/modules/maps/template_types/random_exoplanet/random_planet.dm b/code/modules/maps/template_types/random_exoplanet/random_planet.dm index f77ad0e84b9..c1c2ab3c505 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_planet.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_planet.dm @@ -234,7 +234,7 @@ ///Make sure all levels of this planet have the weather system setup. /datum/map_template/planetoid/random/proc/generate_weather(var/datum/planetoid_data/gen_data, var/datum/level_data/topmost_level_data) - if(!ispath(gen_data.initial_weather_state, /decl/state/weather)) + if(!gen_data.initial_weather_state) return gen_data.reset_weather(gen_data.initial_weather_state) From 678384fda63c5035fbdce78c9ca5fb9018165838 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 30 Jun 2023 15:29:15 -0500 Subject: [PATCH 003/575] Make weather overlays visible --- code/modules/weather/_weather.dm | 5 ++++- code/modules/weather/weather_init.dm | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/weather/_weather.dm b/code/modules/weather/_weather.dm index efec0d896de..7f653fc0950 100644 --- a/code/modules/weather/_weather.dm +++ b/code/modules/weather/_weather.dm @@ -96,4 +96,7 @@ icon = 'icons/effects/weather.dmi' icon_state = "full" alpha = 0 - invisibility = 0 + +/obj/abstract/lightning_overlay/Initialize() + . = ..() + invisibility = 0 // This is set to maximum in parent regardless of what we set, because we can't have nice things. \ No newline at end of file diff --git a/code/modules/weather/weather_init.dm b/code/modules/weather/weather_init.dm index ab243534667..2a933ac9cb5 100644 --- a/code/modules/weather/weather_init.dm +++ b/code/modules/weather/weather_init.dm @@ -4,6 +4,8 @@ INITIALIZE_IMMEDIATE(/obj/abstract/weather_system) . = ..() + invisibility = 0 + // Bookkeeping/rightclick guards. verbs.Cut() forceMove(null) From 816a9f5687f26b8a6ad6a1fe4d43d2aa3f92d272 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 4 Jul 2023 07:39:43 -0500 Subject: [PATCH 004/575] Fix readying up not refreshing --- code/modules/mob/new_player/new_player.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f183b1e3fed..e8fc26df4ff 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -102,6 +102,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) if(href_list["lobby_ready"]) if(GAME_STATE <= RUNLEVEL_LOBBY) ready = !ready + show_lobby_menu() if(href_list["refresh"]) show_lobby_menu() From 5d2a4a4107cca043d221c00afeafa845f3fe5fac Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 5 Jul 2023 20:22:39 -0500 Subject: [PATCH 005/575] Fixes the direction of lighting --- code/_helpers/maths.dm | 8 ++++---- code/modules/lighting/lighting_source.dm | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/code/_helpers/maths.dm b/code/_helpers/maths.dm index 050a150f865..91510342d34 100644 --- a/code/_helpers/maths.dm +++ b/code/_helpers/maths.dm @@ -137,12 +137,12 @@ mid = (mid - start) < 0 ? mid - start + 360 : mid - start return mid <= end -#define POLAR_TO_CART_X(R,T) ((R) * sin(T)) -#define POLAR_TO_CART_Y(R,T) ((R) * cos(T)) +#define POLAR_TO_BYOND_X(R,T) ((R) * sin(T)) +#define POLAR_TO_BYOND_Y(R,T) ((R) * cos(T)) /proc/polar2turf(x, y, z, angle, distance) - var/x_offset = POLAR_TO_CART_X(distance, angle) - var/y_offset = POLAR_TO_CART_Y(distance, angle) + var/x_offset = POLAR_TO_BYOND_X(distance, angle) + var/y_offset = POLAR_TO_BYOND_Y(distance, angle) return locate(CEILING(x + x_offset), CEILING(y + y_offset), z) /proc/get_turf_from_angle(x, y, z, angle, ideal_distance) diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 18f53172eb8..70958818a9e 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -144,6 +144,8 @@ lum_g = 1 lum_b = 1 +#define POLAR_TO_CART_X(R,T) ((R) * cos(T)) +#define POLAR_TO_CART_Y(R,T) ((R) * sin(T)) #define DETERMINANT(A_X,A_Y,B_X,B_Y) ((A_X)*(B_Y) - (A_Y)*(B_X)) #define MINMAX(NUM) ((NUM) < 0 ? -round(-(NUM)) : round(NUM)) #define ARBITRARY_NUMBER 10 @@ -196,9 +198,9 @@ limit_b_y = MINMAX(limit_b_y) #undef ARBITRARY_NUMBER -#undef POLAR_TO_CART_X -#undef POLAR_TO_CART_Y #undef MINMAX +#undef POLAR_TO_CART_Y +#undef POLAR_TO_CART_X /datum/light_source/proc/remove_lum(now = FALSE) applied = FALSE From 6451c071aea6a68aafadc0a3332805fcda3ec708 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 2 Jun 2023 18:32:13 +1000 Subject: [PATCH 006/575] Converting dexterity to a bitflag system. --- code/__defines/mobs.dm | 28 +++++++++---- code/_onclick/drag_drop.dm | 2 +- code/_onclick/other_mobs.dm | 2 +- .../stock_parts/power/battery.dm | 2 +- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/self_destruct_storage.dm | 2 +- code/game/objects/item.dm | 4 +- code/game/objects/items/shooting_range.dm | 2 +- code/game/objects/items/spirit_board.dm | 2 +- code/game/objects/items/toys.dm | 2 +- code/game/objects/items/weapons/defib.dm | 2 +- code/game/objects/items/weapons/ecigs.dm | 2 +- .../items/weapons/implants/implantpad.dm | 2 +- .../objects/items/weapons/storage/belt.dm | 2 +- .../items/weapons/storage/parachute.dm | 2 +- .../objects/items/weapons/storage/secure.dm | 2 +- code/game/objects/items/weapons/tape.dm | 2 +- code/game/objects/items/weapons/tech_disks.dm | 2 +- .../items/weapons/tools/weldingtool.dm | 2 +- code/game/objects/items/weapons/traps.dm | 2 +- .../objects/items/weapons/weldbackpack.dm | 2 +- code/game/objects/structures/banners.dm | 2 +- code/game/objects/structures/bookcase.dm | 2 +- code/game/objects/structures/coathanger.dm | 2 +- code/game/objects/structures/crematorium.dm | 2 +- code/game/objects/structures/curtains.dm | 4 +- .../objects/structures/defensive_barrier.dm | 2 +- code/game/objects/structures/displaycase.dm | 2 +- .../objects/structures/emergency_dispenser.dm | 2 +- code/game/objects/structures/extinguisher.dm | 2 +- code/game/objects/structures/fires.dm | 2 +- code/game/objects/structures/flora/plant.dm | 2 +- code/game/objects/structures/fuel_port.dm | 2 +- code/game/objects/structures/hand_cart.dm | 2 +- code/game/objects/structures/handrail.dm | 2 +- code/game/objects/structures/janicart.dm | 4 +- code/game/objects/structures/mineral_bath.dm | 2 +- code/game/objects/structures/rubble.dm | 2 +- code/game/objects/structures/skele_stand.dm | 2 +- .../stool_bed_chair_nest_sofa/bed.dm | 2 +- .../game/objects/structures/tank_dispenser.dm | 2 +- code/game/objects/structures/target_stake.dm | 2 +- code/game/objects/structures/watercloset.dm | 2 +- code/modules/butchery/butchery.dm | 2 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 2 +- .../clothing/under/accessories/holster.dm | 2 +- .../clothing/under/accessories/storage.dm | 2 +- code/modules/games/cards.dm | 4 +- code/modules/mechs/equipment/utility.dm | 2 +- code/modules/mechs/mech_interaction.dm | 4 +- code/modules/mechs/mech_wreckage.dm | 2 +- code/modules/mining/ore_box.dm | 6 +-- code/modules/mob/living/carbon/carbon.dm | 3 -- code/modules/mob/living/carbon/human/human.dm | 39 ++++++++----------- code/modules/mob/living/silicon/silicon.dm | 3 -- .../living/simple_animal/friendly/mouse.dm | 4 +- code/modules/mob/mob.dm | 13 ++++--- code/modules/multiz/hoist.dm | 10 ++--- code/modules/multiz/mobile_ladder.dm | 4 +- code/modules/organs/external/_external.dm | 2 +- .../prosthetics/prosthetics_manufacturer.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/printer.dm | 2 +- code/modules/projectiles/ammunition.dm | 2 +- code/modules/projectiles/ammunition/boxes.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- .../guns/launcher/grenade_launcher.dm | 2 +- .../projectiles/guns/launcher/money_cannon.dm | 2 +- .../projectiles/guns/launcher/pneumatic.dm | 2 +- .../projectiles/guns/launcher/syringe_gun.dm | 2 +- .../projectiles/guns/magnetic/magnetic.dm | 2 +- code/modules/projectiles/guns/projectile.dm | 2 +- .../projectiles/guns/projectile/automatic.dm | 2 +- .../drinkingglass/extras.dm | 2 +- .../food/sliceable/pizza.dm | 4 +- .../reagents/reagent_containers/hypospray.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 4 +- code/modules/sealant_gun/sealant_gun.dm | 2 +- code/modules/sealant_gun/sealant_injector.dm | 2 +- code/modules/sealant_gun/sealant_rack.dm | 2 +- mods/mobs/dionaea/mob/_nymph.dm | 3 -- .../ascent/mobs/bodyparts_insectoid.dm | 12 ++---- mods/species/ascent/mobs/nymph/_nymph.dm | 3 -- 84 files changed, 142 insertions(+), 144 deletions(-) diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 6a0f5b9405f..e0039fb3305 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -307,13 +307,27 @@ #define MARKING_TARGET_HAIR 1 // Draw a /decl/sprite_accessory/marking to the mob's hair, eg. ears & horns #define DEXTERITY_NONE 0 -#define DEXTERITY_SIMPLE_MACHINES 1 -#define DEXTERITY_KEYBOARDS 2 -#define DEXTERITY_TOUCHSCREENS 3 -#define DEXTERITY_GRIP 4 -#define DEXTERITY_WEAPONS 5 -#define DEXTERITY_COMPLEX_TOOLS 6 -#define DEXTERITY_FULL 7 +#define DEXTERITY_SIMPLE_MACHINES BITFLAG(0) +#define DEXTERITY_HOLD_ITEM BITFLAG(1) +#define DEXTERITY_EQUIP_ITEM BITFLAG(2) +#define DEXTERITY_KEYBOARDS BITFLAG(3) +#define DEXTERITY_TOUCHSCREENS BITFLAG(4) +// TODO: actually get grab code to check this one. +#define DEXTERITY_GRAPPLE BITFLAG(5) +#define DEXTERITY_WEAPONS BITFLAG(6) +#define DEXTERITY_COMPLEX_TOOLS BITFLAG(7) +#define DEXTERITY_BASE (DEXTERITY_SIMPLE_MACHINES|DEXTERITY_HOLD_ITEM|DEXTERITY_EQUIP_ITEM) +#define DEXTERITY_FULL (DEXTERITY_BASE|DEXTERITY_KEYBOARDS|DEXTERITY_TOUCHSCREENS|DEXTERITY_GRAPPLE|DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS) + +// List of dexterity flags ordered by 'complexity' for use in brainloss dex malus checking. +var/global/list/dexterity_levels = list( + "[DEXTERITY_COMPLEX_TOOLS]", + "[DEXTERITY_WEAPONS]", + "[DEXTERITY_GRAPPLE]", + "[DEXTERITY_TOUCHSCREENS]", + "[DEXTERITY_KEYBOARDS]", + "[DEXTERITY_BASE]" +) // used in /mob/living/carbon/human/can_inject, and by various callers of that proc #define CAN_INJECT 1 diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index d01a671bebd..7dd9ce3d50d 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -14,7 +14,7 @@ // Can the user drop something onto this atom? /atom/proc/user_can_mousedrop_onto(var/mob/user, var/atom/being_dropped, var/incapacitation_flags) - return !user.incapacitated(incapacitation_flags) && check_mousedrop_interactivity(user) && user.check_dexterity(DEXTERITY_GRIP) + return !user.incapacitated(incapacitation_flags) && check_mousedrop_interactivity(user) && user.check_dexterity(DEXTERITY_HOLD_ITEM) /atom/proc/check_mousedrop_interactivity(var/mob/user) return CanPhysicallyInteract(user) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 87ed57f9f3e..1506e8a7c39 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -29,7 +29,7 @@ SHOULD_CALL_PARENT(TRUE) if(handle_grab_interaction(user)) return TRUE - if(!LAZYLEN(climbers) || (user in climbers) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!LAZYLEN(climbers) || (user in climbers) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return FALSE user.visible_message( SPAN_DANGER("\The [user] shakes \the [src]!"), diff --git a/code/game/machinery/_machines_base/stock_parts/power/battery.dm b/code/game/machinery/_machines_base/stock_parts/power/battery.dm index fda2c356b7d..48104faab0d 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/battery.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/battery.dm @@ -183,7 +183,7 @@ return ..() /obj/item/stock_parts/power/battery/attack_hand(mob/user) - if(cell && istype(loc, /obj/machinery) && user.check_dexterity(DEXTERITY_GRIP)) + if(cell && istype(loc, /obj/machinery) && user.check_dexterity(DEXTERITY_HOLD_ITEM)) user.put_in_hands(cell) extract_cell(user) return TRUE diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index f4aa9deee54..6e6fa2a93fd 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -802,7 +802,7 @@ var/global/list/turret_icons /obj/machinery/porta_turret_construct/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM)) return ..() if(build_step == 4) if(!installation) diff --git a/code/game/machinery/self_destruct_storage.dm b/code/game/machinery/self_destruct_storage.dm index 0f0609a0644..623edd2b60d 100644 --- a/code/game/machinery/self_destruct_storage.dm +++ b/code/game/machinery/self_destruct_storage.dm @@ -6,7 +6,7 @@ anchored = TRUE density = FALSE - required_interaction_dexterity = DEXTERITY_GRIP + required_interaction_dexterity = DEXTERITY_HOLD_ITEM construct_state = /decl/machine_construction/default/panel_closed base_type = /obj/machinery/nuclear_cylinder_storage/buildable diff --git a/code/game/objects/item.dm b/code/game/objects/item.dm index 5e1b0ee2548..afa0cf72da9 100644 --- a/code/game/objects/item.dm +++ b/code/game/objects/item.dm @@ -288,9 +288,9 @@ if(anchored) return ..() - if(!user.check_dexterity(DEXTERITY_GRIP, silent = TRUE)) + if(!user.check_dexterity(DEXTERITY_EQUIP_ITEM, silent = TRUE)) - if(user.check_dexterity(DEXTERITY_KEYBOARDS, silent = TRUE)) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM, silent = TRUE)) if(loc == user) to_chat(user, SPAN_NOTICE("You begin trying to remove \the [src]...")) diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 9c5c3473471..7becb448496 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -28,7 +28,7 @@ /obj/item/target/attack_hand(var/mob/user) // taking pinned targets off! - if(!stake || !user.check_dexterity(DEXTERITY_GRIP)) + if(!stake || !user.check_dexterity(DEXTERITY_HOLD_ITEM)) return ..() return stake.attack_hand(user) diff --git a/code/game/objects/items/spirit_board.dm b/code/game/objects/items/spirit_board.dm index 2ff5c775999..86a5e48019f 100644 --- a/code/game/objects/items/spirit_board.dm +++ b/code/game/objects/items/spirit_board.dm @@ -14,7 +14,7 @@ to_chat(user, "The planchette is sitting at \"[planchette]\".") /obj/item/spirit_board/attack_hand(mob/user) - if(user.a_intent == I_GRAB || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(user.a_intent == I_GRAB || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() spirit_board_pick_letter(user) return TRUE diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c8b6e2f348d..04b77a62222 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -550,7 +550,7 @@ var/phrase = "I don't want to exist anymore!" /obj/structure/plushie/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() playsound(src.loc, 'sound/effects/rustle1.ogg', 100, 1) if(user.a_intent == I_HELP) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 8ea5e2457fa..53c89edd8ae 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -68,7 +68,7 @@ toggle_paddles() /obj/item/defibrillator/attack_hand(mob/user) - if(loc != user || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(loc != user || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() toggle_paddles() return TRUE diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index 83f2f011abf..52d2417a177 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -181,7 +181,7 @@ to_chat(user, SPAN_WARNING("\The [src] does not have a battery installed.")) /obj/item/clothing/mask/smokable/ecig/attack_hand(mob/user)//eject cartridge - if(!user.is_holding_offhand(src) || !ec_cartridge || !user.check_dexterity(DEXTERITY_GRIP)) + if(!user.is_holding_offhand(src) || !ec_cartridge || !user.check_dexterity(DEXTERITY_HOLD_ITEM)) return ..() lit = FALSE user.put_in_hands(ec_cartridge) diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index ac44e02c410..a0af46a9e31 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -13,7 +13,7 @@ add_overlay("[icon_state]-imp") /obj/item/implantpad/attack_hand(mob/user) - if(!imp || (src in user.get_held_items()) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!imp || (src in user.get_held_items()) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user.put_in_active_hand(imp) imp.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 49bfe583b21..f6d05c597a5 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -75,7 +75,7 @@ . = ..(W, user) /obj/item/storage/belt/holster/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) if(H.unholster(user)) diff --git a/code/game/objects/items/weapons/storage/parachute.dm b/code/game/objects/items/weapons/storage/parachute.dm index 60d18996a4d..4f1342fe21e 100644 --- a/code/game/objects/items/weapons/storage/parachute.dm +++ b/code/game/objects/items/weapons/storage/parachute.dm @@ -18,7 +18,7 @@ to_chat(user, SPAN_DANGER("The parachute is unpacked.")) /obj/item/storage/backpack/parachute/attack_self(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/initial_pack = packed var/pack_msg = packed ? "unpack" : "pack" diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index e574592be37..a47f31e5786 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -92,7 +92,7 @@ matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_REINFORCEMENT) /obj/item/storage/secure/briefcase/attack_hand(mob/user as mob) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) if (loc == user && lock.locked) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 8f3f306dba3..79fc3b3cbfc 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -168,7 +168,7 @@ return 0.2 /obj/item/duct_tape/attack_hand(var/mob/user) - if(user.has_dexterity(DEXTERITY_GRIP)) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM)) anchored = FALSE // Unattach it from whereever it's on, if anything. return ..() diff --git a/code/game/objects/items/weapons/tech_disks.dm b/code/game/objects/items/weapons/tech_disks.dm index d66bffc779f..0d2928edc73 100644 --- a/code/game/objects/items/weapons/tech_disks.dm +++ b/code/game/objects/items/weapons/tech_disks.dm @@ -111,7 +111,7 @@ var/datum/fabricator_recipe/blueprint /obj/item/disk/design_disk/attack_hand(mob/user) - if(user.a_intent != I_HURT || !blueprint || !user.has_dexterity(DEXTERITY_KEYBOARDS)) + if(user.a_intent != I_HURT || !blueprint || !user.check_dexterity(DEXTERITY_KEYBOARDS)) return ..() blueprint = null SetName(initial(name)) diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 0ddd4a4fbec..bb2620f7d9e 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -162,7 +162,7 @@ return ..() /obj/item/weldingtool/attack_hand(mob/user) - if (tank && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if (tank && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return remove_tank(user) return ..() diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index a2a15795bd4..2eb4df31b3f 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -50,7 +50,7 @@ anchored = 1 /obj/item/beartrap/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(buckled_mob) user_unbuckle_mob(user) diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index 901e0323e35..59b2c5a1978 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -130,7 +130,7 @@ return ..() /obj/item/chems/weldpack/attack_hand(mob/user) - if(!is_welder_attached() || !user.check_dexterity(DEXTERITY_GRIP)) + if(!is_welder_attached() || !user.check_dexterity(DEXTERITY_HOLD_ITEM)) return ..() if(user.is_holding_offhand(src)) detach_gun(user) diff --git a/code/game/objects/structures/banners.dm b/code/game/objects/structures/banners.dm index 7859457fc83..91d3ce82d05 100644 --- a/code/game/objects/structures/banners.dm +++ b/code/game/objects/structures/banners.dm @@ -35,7 +35,7 @@ update_icon() /obj/structure/banner_frame/attack_hand(mob/user) - if(banner && user.check_dexterity(DEXTERITY_GRIP)) + if(banner && user.check_dexterity(DEXTERITY_HOLD_ITEM)) user.put_in_hands(banner) var/old_banner = banner set_banner(null) diff --git a/code/game/objects/structures/bookcase.dm b/code/game/objects/structures/bookcase.dm index d80271bd08e..79c00050395 100644 --- a/code/game/objects/structures/bookcase.dm +++ b/code/game/objects/structures/bookcase.dm @@ -31,7 +31,7 @@ var/global/list/station_bookcases = list() return ..() /obj/structure/bookcase/attack_hand(var/mob/user) - if(!length(contents) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!length(contents) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/book/choice = input("Which book would you like to remove from the shelf?") as null|obj in contents if(choice && (choice in contents) && CanPhysicallyInteract(user)) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 5d3c07f65db..b3830b82719 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -36,7 +36,7 @@ break /obj/structure/coatrack/attack_hand(mob/user) - if(!length(contents) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!length(contents) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/removing = contents[contents.len] user.visible_message( \ diff --git a/code/game/objects/structures/crematorium.dm b/code/game/objects/structures/crematorium.dm index dd76a80954e..d8240222d2a 100644 --- a/code/game/objects/structures/crematorium.dm +++ b/code/game/objects/structures/crematorium.dm @@ -79,7 +79,7 @@ update_icon() /obj/structure/crematorium/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(locked) to_chat(usr, SPAN_WARNING("It's currently locked.")) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index f9a0a328821..8be61b533ac 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -104,7 +104,9 @@ ..(P, def_zone) /obj/structure/curtain/attack_hand(mob/user) - toggle() + if(user.check_dexterity(DEXTERITY_HOLD_ITEM)) + toggle() + return TRUE return ..() /obj/structure/curtain/attackby(obj/item/W, mob/user) diff --git a/code/game/objects/structures/defensive_barrier.dm b/code/game/objects/structures/defensive_barrier.dm index d55582df7c8..d3e3a8f7adc 100644 --- a/code/game/objects/structures/defensive_barrier.dm +++ b/code/game/objects/structures/defensive_barrier.dm @@ -101,7 +101,7 @@ /obj/structure/defensive_barrier/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/decl/species/species = user.get_species() diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index fb23a4607fb..ae993ab4536 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -113,7 +113,7 @@ /obj/structure/displaycase/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) diff --git a/code/game/objects/structures/emergency_dispenser.dm b/code/game/objects/structures/emergency_dispenser.dm index fb8a80fe6d0..c8b7075f4d5 100644 --- a/code/game/objects/structures/emergency_dispenser.dm +++ b/code/game/objects/structures/emergency_dispenser.dm @@ -15,7 +15,7 @@ //Added by Strumpetplaya - AI shouldn't be able to (you're both stupid, need CanPhysicallyInteract --Chinsky) //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc) //(It uses the Nano helper and a dexterity check now anyway. --Loaf) - if(!CanPhysicallyInteract(user) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!CanPhysicallyInteract(user) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!amount) to_chat(user, SPAN_WARNING("It's empty.")) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 04a5d92125e..90522d2bcf3 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -31,7 +31,7 @@ /obj/structure/extinguisher_cabinet/attack_hand(mob/user) - if(user.check_dexterity(DEXTERITY_GRIP, TRUE) && has_extinguisher) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE) && has_extinguisher) user.put_in_hands(has_extinguisher) to_chat(user, SPAN_NOTICE("You take [has_extinguisher] from [src].")) playsound(src.loc, 'sound/effects/extout.ogg', 50, 0) diff --git a/code/game/objects/structures/fires.dm b/code/game/objects/structures/fires.dm index f307634278b..2c7bc14ed9d 100644 --- a/code/game/objects/structures/fires.dm +++ b/code/game/objects/structures/fires.dm @@ -139,7 +139,7 @@ /obj/structure/fire_source/attack_hand(var/mob/user) - if(length(contents) && user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(length(contents) && user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) var/obj/item/removing = pick(contents) removing.dropInto(loc) user.put_in_hands(removing) diff --git a/code/game/objects/structures/flora/plant.dm b/code/game/objects/structures/flora/plant.dm index a7532da5e62..97b2ed7aaa8 100644 --- a/code/game/objects/structures/flora/plant.dm +++ b/code/game/objects/structures/flora/plant.dm @@ -81,7 +81,7 @@ . = ..() /obj/structure/flora/plant/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(dead) diff --git a/code/game/objects/structures/fuel_port.dm b/code/game/objects/structures/fuel_port.dm index a0974e7137d..ef1de75d390 100644 --- a/code/game/objects/structures/fuel_port.dm +++ b/code/game/objects/structures/fuel_port.dm @@ -27,7 +27,7 @@ return locate(/obj/item/tank) in contents /obj/structure/fuel_port/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!open) to_chat(user, SPAN_WARNING("The door is secured tightly. You'll need a crowbar to open it.")) diff --git a/code/game/objects/structures/hand_cart.dm b/code/game/objects/structures/hand_cart.dm index 272d1430058..01ee5afa427 100644 --- a/code/game/objects/structures/hand_cart.dm +++ b/code/game/objects/structures/hand_cart.dm @@ -44,7 +44,7 @@ . = ..() /obj/structure/hand_cart/attack_hand(mob/user) - if(!carrying || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!carrying || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload_item(user) return TRUE diff --git a/code/game/objects/structures/handrail.dm b/code/game/objects/structures/handrail.dm index d5742d8b86f..77859925fc7 100644 --- a/code/game/objects/structures/handrail.dm +++ b/code/game/objects/structures/handrail.dm @@ -11,7 +11,7 @@ obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED /obj/structure/handrail/attack_hand(mob/user) - if(!can_buckle || buckled_mob || !istype(user) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!can_buckle || buckled_mob || !istype(user) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user_buckle_mob(user, user) return TRUE diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index f3e1d06d08c..4a1642a396b 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -85,7 +85,7 @@ /obj/structure/janitorialcart/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() ui_interact(user) return TRUE @@ -231,7 +231,7 @@ . = ..() /obj/structure/bed/chair/janicart/attack_hand(mob/user) - if(!mybag || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!mybag || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user.put_in_hands(mybag) mybag = null diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index f1fbb054b47..bf96ad06a07 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -66,7 +66,7 @@ return TRUE /obj/structure/mineral_bath/attack_hand(var/mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() eject_occupant() return TRUE diff --git a/code/game/objects/structures/rubble.dm b/code/game/objects/structures/rubble.dm index 5c3c1f57491..98611dab27a 100644 --- a/code/game/objects/structures/rubble.dm +++ b/code/game/objects/structures/rubble.dm @@ -47,7 +47,7 @@ add_overlay("twinkle[rand(1,3)]") /obj/structure/rubble/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!is_rummaging) if(!lootleft) diff --git a/code/game/objects/structures/skele_stand.dm b/code/game/objects/structures/skele_stand.dm index 706bb80fde5..7e0f52ed753 100644 --- a/code/game/objects/structures/skele_stand.dm +++ b/code/game/objects/structures/skele_stand.dm @@ -31,7 +31,7 @@ playsound(loc, 'sound/effects/bonerattle.ogg', 40) /obj/structure/skele_stand/attack_hand(mob/user) - if(length(swag) && user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(length(swag) && user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) var/obj/item/clothing/C = input("What piece of clothing do you want to remove?", "Skeleton Undressing") as null|anything in list_values(swag) if(C) swag -= get_key_by_value(swag, C) diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm index dcdfb48e6a1..b0550cbc2b2 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm @@ -183,7 +183,7 @@ ..() /obj/structure/bed/roller/attack_hand(mob/user) - if(!beaker || buckled_mob || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!beaker || buckled_mob || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() remove_beaker(user) return TRUE diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 2d308af30d4..1b5fa419f9e 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -66,7 +66,7 @@ return attack_hand_with_interaction_checks(user) /obj/structure/tank_rack/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/list/dat = list() var/oxycount = LAZYLEN(oxygen_tanks) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index f6a6bf9fb9f..958eb8d7f91 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -14,7 +14,7 @@ set_target(W) /obj/structure/target_stake/attack_hand(var/mob/user) - if (!pinned_target || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if (!pinned_target || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() to_chat(user, SPAN_NOTICE("You take \the [pinned_target] off the stake.")) user.put_in_hands(pinned_target) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index ff5accb4f69..4e588655204 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -115,7 +115,7 @@ var/global/list/hygiene_props = list() update_icon() /obj/structure/hygiene/toilet/attack_hand(var/mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(swirlie) diff --git a/code/modules/butchery/butchery.dm b/code/modules/butchery/butchery.dm index c9d142b9ecb..20b508846bc 100644 --- a/code/modules/butchery/butchery.dm +++ b/code/modules/butchery/butchery.dm @@ -90,7 +90,7 @@ /obj/structure/kitchenspike/attack_hand(var/mob/user) - if(!occupant || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!occupant || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(occupant_state == CARCASS_FRESH) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 021ffe4c7df..114503a735d 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -22,7 +22,7 @@ // Clumsy folks can't take the mask off themselves. /obj/item/clothing/mask/muzzle/attack_hand(mob/user) - if(user.get_equipped_item(slot_wear_mask_str) != src || user.check_dexterity(DEXTERITY_GRIP)) + if(user.get_equipped_item(slot_wear_mask_str) != src || user.check_dexterity(DEXTERITY_HOLD_ITEM)) return ..() to_chat(user, SPAN_WARNING("You cannot remove \the [src] without help.")) return TRUE diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index e9b56a7bfd8..7f20d838c5f 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -48,7 +48,7 @@ to_chat(user, SPAN_ITALIC("Something is hidden inside.")) /obj/item/clothing/shoes/attack_hand(var/mob/user) - if(user.check_dexterity(DEXTERITY_GRIP, TRUE) && remove_hidden(user)) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE) && remove_hidden(user)) return TRUE return ..() diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 4f2cdd791c7..8adce1cd352 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -21,7 +21,7 @@ . = ..(W, user) /obj/item/clothing/accessory/storage/holster/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) if(H.unholster(user)) diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 17977df7053..092d935b86a 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -22,7 +22,7 @@ hold = new/obj/item/storage/internal/pockets(src, slots, max_w_class) /obj/item/clothing/accessory/storage/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE) || !hold) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE) || !hold) return ..() if(istype(loc, /obj/item/clothing)) hold.open(user) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index fe05b5ffb03..d9cb59583c5 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -137,7 +137,7 @@ var/global/list/card_decks = list() cards += P /obj/item/deck/attack_hand(mob/user) - if(user.a_intent == I_GRAB || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(user.a_intent == I_GRAB || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() draw_card(user) return TRUE @@ -307,7 +307,7 @@ var/global/list/card_decks = list() user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.") /obj/item/hand/attack_hand(mob/user) - if(loc != user && !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(loc != user && !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() // build the list of cards in the hand diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index 01467bee214..5e4a7c86f18 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -14,7 +14,7 @@ return ..() /obj/item/mech_equipment/clamp/attack_hand(mob/user) - if(!owner || !LAZYISIN(owner.pilots, user) || owner.hatch_closed || !length(carrying) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!owner || !LAZYISIN(owner.pilots, user) || owner.hatch_closed || !length(carrying) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/chosen_obj = input(user, "Choose an object to grab.", "Clamp Claw") as null|anything in carrying if(chosen_obj && do_after(user, 20, owner) && !owner.hatch_closed && !QDELETED(chosen_obj) && (chosen_obj in carrying)) diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index 654a63986fe..2268f62713d 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -86,8 +86,8 @@ return STATUS_INTERACTIVE return ..() -/mob/living/exosuit/has_dexterity(dex_level) - return TRUE +/mob/living/exosuit/get_dexterity(var/silent = FALSE) + return DEXTERITY_FULL /mob/living/exosuit/ClickOn(var/atom/A, var/params, var/mob/user) diff --git a/code/modules/mechs/mech_wreckage.dm b/code/modules/mechs/mech_wreckage.dm index ce4be8e5176..147b0b68ec6 100644 --- a/code/modules/mechs/mech_wreckage.dm +++ b/code/modules/mechs/mech_wreckage.dm @@ -50,7 +50,7 @@ /obj/structure/mech_wreckage/attack_hand(var/mob/user) var/list/contained_atoms = get_contained_external_atoms() - if(!length(contained_atoms) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!length(contained_atoms) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/thing = pick(contained_atoms) thing.forceMove(get_turf(user)) diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index a7f74aef044..38b8b75ab3d 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -18,7 +18,7 @@ var/list/stored_ore /obj/structure/ore_box/attack_hand(mob/user) - if(total_ores <= 0 || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(total_ores <= 0 || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/stack/material/ore/O = pick(get_contained_external_atoms()) if(!remove_ore(O, user)) @@ -87,7 +87,7 @@ if(user) to_chat(user, SPAN_WARNING("\The [src] is empty!")) return FALSE - if(user && !user.check_dexterity(DEXTERITY_GRIP)) + if(user && !user.check_dexterity(DEXTERITY_HOLD_ITEM)) to_chat(user, SPAN_WARNING("You lack the dexterity to empty \the [src]!")) return FALSE @@ -106,7 +106,7 @@ if(user) to_chat(user, SPAN_WARNING("\The [src] is empty!")) return FALSE - if(user && !user.check_dexterity(DEXTERITY_GRIP)) + if(user && !user.check_dexterity(DEXTERITY_HOLD_ITEM)) to_chat(user, SPAN_WARNING("You lack the dexterity to empty \the [src]!")) return FALSE if(user) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1aba862ee74..080943a7044 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -343,9 +343,6 @@ /mob/living/carbon/adjust_hydration(var/amt) set_hydration(hydration + amt) -/mob/living/carbon/has_dexterity(var/dex_level) - . = ..() && (species.get_manual_dexterity() >= dex_level) - /mob/living/carbon/fluid_act(var/datum/reagents/fluids) var/saturation = min(fluids.total_volume, round(mob_size * 1.5 * reagent_permeability()) - touching.total_volume) if(saturation > 0) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a3cc0a04571..eaaf347214c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1197,31 +1197,26 @@ new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, species.get_blood_color(src)) -/mob/living/carbon/human/has_dexterity(var/dex_level) - . = check_dexterity(dex_level, silent = TRUE) - -/mob/living/carbon/human/check_dexterity(var/dex_level = DEXTERITY_FULL, var/silent, var/force_active_hand) - if(isnull(force_active_hand)) - force_active_hand = get_active_held_item_slot() - var/obj/item/organ/external/active_hand = GET_EXTERNAL_ORGAN(src, force_active_hand) - var/dex_malus = 0 - if(getBrainLoss() && getBrainLoss() > config.dex_malus_brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there. - dex_malus = round(clamp(round(getBrainLoss()-config.dex_malus_brainloss_threshold)/10, DEXTERITY_NONE, DEXTERITY_FULL)) +/mob/living/carbon/human/get_dexterity(var/silent = FALSE) + var/check_slot = get_active_held_item_slot() + var/obj/item/organ/external/active_hand = check_slot && GET_EXTERNAL_ORGAN(src, check_slot) if(!active_hand) if(!silent) - to_chat(src, SPAN_WARNING("Your hand is missing!")) - return FALSE + to_chat(src, SPAN_WARNING("Your [check_slot ? parse_zone(check_slot) : "hand"] is missing!")) + return DEXTERITY_NONE if(!active_hand.is_usable()) - to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!")) - return - if((active_hand.get_dexterity()-dex_malus) < dex_level) - if(!silent && !dex_malus) - to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't have the dexterity to use that!")) - else if(!silent) - to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!")) - return FALSE - return TRUE - + if(!silent) + to_chat(src, SPAN_WARNING("Your [active_hand.name] is unusable!")) + return DEXTERITY_NONE + var/dex_malus = 0 + if(getBrainLoss() && getBrainLoss() > config.dex_malus_brainloss_threshold) ///brainloss shouldn't instantly cripple you, so the effects only start once past the threshold and escalate from there. + dex_malus = clamp(CEILING((getBrainLoss()-config.dex_malus_brainloss_threshold)/10), 0, length(global.dexterity_levels)) + if(dex_malus > 0) + dex_malus = global.dexterity_levels[dex_malus] + if(!silent) + to_chat(src, SPAN_WARNING("Your [active_hand.name] doesn't respond properly!")) + return (active_hand.get_manual_dexterity() & ~dex_malus) + return active_hand.get_manual_dexterity() /mob/living/carbon/human/lose_hair() if(species.set_default_hair(src)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 0a1ce0d842f..7384e6cc96e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -46,9 +46,6 @@ #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode -/mob/living/silicon/has_dexterity(var/dex_level) - return dexterity >= dex_level - /mob/living/silicon/Initialize() global.silicon_mob_list += src . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index c9c0348a2f4..8fd7b238d42 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -35,8 +35,8 @@ var/body_color //brown, gray and white, leave blank for random var/splatted = FALSE -/mob/living/simple_animal/mouse/check_dexterity(dex_level, silent) - return FALSE // Mice are troll bait, give them no power. +/mob/living/simple_animal/mouse/get_dexterity(var/silent = FALSE) + return DEXTERITY_NONE // Mice are troll bait, give them no power. /mob/living/simple_animal/mouse/Life() . = ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3384c9971fd..9c669815024 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1063,11 +1063,14 @@ return 1 // Let simple mobs press buttons and levers but nothing more complex. -/mob/proc/has_dexterity(var/dex_level) - . = dex_level <= DEXTERITY_SIMPLE_MACHINES - -/mob/proc/check_dexterity(var/dex_level, var/silent) - . = has_dexterity(dex_level) +/mob/proc/get_dexterity(var/silent = FALSE) + var/decl/species/my_species = get_species() + if(my_species) + return my_species.get_manual_dexterity() + return DEXTERITY_BASE + +/mob/proc/check_dexterity(var/dex_level = DEXTERITY_FULL, var/silent = FALSE) + . = !!(get_dexterity(silent) & dex_level) if(!. && !silent) to_chat(src, FEEDBACK_YOU_LACK_DEXTERITY) diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm index 0e4513b82b9..5f07b8078f7 100644 --- a/code/modules/multiz/hoist.dm +++ b/code/modules/multiz/hoist.dm @@ -38,7 +38,7 @@ var/obj/structure/hoist/source_hoist /obj/effect/hoist_hook/attack_hand(mob/user) - if(user.incapacitated() || !user.check_dexterity(DEXTERITY_GRIP) || !source_hoist?.hoistee) + if(user.incapacitated() || !user.check_dexterity(DEXTERITY_HOLD_ITEM) || !source_hoist?.hoistee) return ..() source_hoist.check_consistency() source_hoist.hoistee.forceMove(get_turf(src)) @@ -64,7 +64,7 @@ if (user.incapacitated()) to_chat(user, SPAN_WARNING("You can't do that while incapacitated.")) return - if (!user.check_dexterity(DEXTERITY_GRIP)) + if (!user.check_dexterity(DEXTERITY_HOLD_ITEM)) return source_hoist.attach_hoistee(AM) user.visible_message( @@ -87,7 +87,7 @@ /obj/effect/hoist_hook/handle_mouse_drop(atom/over, mob/user) if(source_hoist.hoistee && isturf(over) && over.Adjacent(source_hoist.hoistee)) - if(!user.check_dexterity(DEXTERITY_GRIP)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM)) return TRUE source_hoist.check_consistency() @@ -182,7 +182,7 @@ source_hoist.break_hoist() /obj/structure/hoist/attack_hand(mob/user) - if (!ishuman(user) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if (!ishuman(user) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if (user.incapacitated()) @@ -242,7 +242,7 @@ if (isobserver(usr) || usr.incapacitated()) return - if (!usr.check_dexterity(DEXTERITY_GRIP)) + if (!usr.check_dexterity(DEXTERITY_HOLD_ITEM)) return if (hoistee) diff --git a/code/modules/multiz/mobile_ladder.dm b/code/modules/multiz/mobile_ladder.dm index 8a40d4c370e..a6084cb3ca7 100644 --- a/code/modules/multiz/mobile_ladder.dm +++ b/code/modules/multiz/mobile_ladder.dm @@ -2,7 +2,7 @@ name = "mobile ladder" desc = "A lightweight deployable ladder, which you can use to move up or down. Or alternatively, you can bash some faces in." icon = 'icons/obj/mobile_ladder.dmi' - + material = /decl/material/solid/metal/steel matter = list(/decl/material/solid/plastic = MATTER_AMOUNT_SECONDARY) icon_state = ICON_STATE_WORLD @@ -97,7 +97,7 @@ to_chat(user, SPAN_WARNING("You can't do that right now!")) return - if(!user.check_dexterity(DEXTERITY_GRIP)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM)) return user.visible_message( diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 0727eb836c3..691665e1fd9 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -1253,7 +1253,7 @@ Note that amputating the affected organ does in fact remove the infection from t return 1 return 0 -/obj/item/organ/external/proc/get_dexterity() +/obj/item/organ/external/proc/get_manual_dexterity() if(model) var/decl/prosthetics_manufacturer/R = GET_DECL(model) if(R) diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm index 8c13ba5fd82..d6d921a9ec1 100644 --- a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm +++ b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm @@ -14,7 +14,7 @@ var/list/allowed_bodytypes // Determines which bodytypes can apply the limb. var/modifier_string = "robotic" // Used to alter the name of the limb. var/hardiness = 1 // Modifies min and max broken damage for the limb. - var/manual_dexterity = DEXTERITY_FULL // For hands, determines the dexterity value passed to get_dexterity(). + var/manual_dexterity = DEXTERITY_FULL // For hands, determines the dexterity value passed to get_manual_dexterity(). var/movement_slowdown = 0 // Applies a slowdown value to this limb. var/is_robotic = TRUE // Determines if EMP damage is applied to this prosthetic. var/modular_prosthetic_tier = MODULAR_BODYPART_INVALID // Determines how the limb behaves as a prosthetic with regards to manual attachment/detachment. diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 169b9d310f4..2ebba0789c7 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -33,7 +33,7 @@ if(!CanPhysicallyInteract(user)) return FALSE - if(user.a_intent == I_HURT || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(user.a_intent == I_HURT || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(LAZYLEN(papers) < 1 && amount < 1) diff --git a/code/modules/paperwork/printer.dm b/code/modules/paperwork/printer.dm index 9f26b13c5d8..d2be8b2b24b 100644 --- a/code/modules/paperwork/printer.dm +++ b/code/modules/paperwork/printer.dm @@ -73,7 +73,7 @@ . = ..() /obj/item/stock_parts/printer/attack_hand(mob/user) - if(toner && istype(loc, /obj/machinery) && user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(toner && istype(loc, /obj/machinery) && user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return remove_toner(user) return ..() diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 940863cb257..d414b975fc5 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -196,7 +196,7 @@ /obj/item/ammo_magazine/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!stored_ammo.len) to_chat(user, SPAN_NOTICE("\The [src] is already empty!")) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 9a4c1923499..cb9281c9e13 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -62,7 +62,7 @@ overlays += I /obj/item/ammo_magazine/shotholder/attack_hand(mob/user) - if(loc != user || user.a_intent != I_HURT || !length(stored_ammo) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(loc != user || user.a_intent != I_HURT || !length(stored_ammo) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] stored_ammo -= C diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 1eb9d0d79b2..6bcc375a702 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -145,7 +145,7 @@ var/global/list/registered_cyborg_weapons = list() //For removable cells. /obj/item/gun/energy/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || isnull(accepts_cell_type) || isnull(power_supply) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || isnull(accepts_cell_type) || isnull(power_supply) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user.put_in_hands(power_supply) power_supply = null diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index 602116561ae..56e02609c8f 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -85,7 +85,7 @@ ..() /obj/item/gun/launcher/grenade/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload(user) return TRUE diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm index 46c117ca3c2..964cf71c46d 100644 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ b/code/modules/projectiles/guns/launcher/money_cannon.dm @@ -106,7 +106,7 @@ to_chat(user, "You set [src] to dispense [dispensing] [cur.name_singular] at a time.") /obj/item/gun/launcher/money/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload_receptacle(user) return TRUE diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 94c642f9a63..239d563b8ce 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -60,7 +60,7 @@ to_chat(user, "There is nothing to remove in \the [src].") /obj/item/gun/launcher/pneumatic/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload_hopper(user) return TRUE diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index bfbd03f7832..4068e87fd34 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -103,7 +103,7 @@ add_fingerprint(user) /obj/item/gun/launcher/syringe/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!darts.len) to_chat(user, SPAN_WARNING("\The [src] is empty.")) diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index 021d8b407c1..a2a0272c50d 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -190,7 +190,7 @@ . = ..() /obj/item/gun/magnetic/attack_hand(var/mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() var/obj/item/removing if(loaded) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 12f4ed6b41b..6f25a2a4afb 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -225,7 +225,7 @@ to_chat(user, SPAN_WARNING("You can't unload \the [src] manually. Maybe try a crowbar?")) /obj/item/gun/projectile/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !manual_unload || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !manual_unload || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload_ammo(user, allow_dump=0) return TRUE diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 27148489e56..796a6e12bf5 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -105,7 +105,7 @@ ..() /obj/item/gun/projectile/automatic/assault_rifle/grenade/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !use_launcher || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !use_launcher || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() launcher.unload(user) return TRUE diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm index d90c2d1345d..3a11eeafd07 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm @@ -26,7 +26,7 @@ return ..() /obj/item/chems/drinks/glass2/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!extras.len) diff --git a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm b/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm index 2ed1b6963e5..1798fb1291a 100644 --- a/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm +++ b/code/modules/reagents/reagent_containers/food/sliceable/pizza.dm @@ -189,14 +189,14 @@ /obj/item/pizzabox/attack_hand(mob/user) if(open && pizza) - if(user.check_dexterity(DEXTERITY_GRIP)) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM)) user.put_in_hands(pizza) to_chat(user, SPAN_NOTICE("You take \the [src.pizza] out of \the [src].")) pizza = null update_icon() return TRUE - if(length(boxes) && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_GRIP)) + if(length(boxes) && user.is_holding_offhand(src) && user.check_dexterity(DEXTERITY_HOLD_ITEM)) var/obj/item/pizzabox/box = boxes[boxes.len] boxes -= box user.put_in_hands(box) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 56e133288b9..805c30b3083 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -142,7 +142,7 @@ return TRUE /obj/item/chems/hypospray/vial/attack_hand(mob/user) - if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(!loaded_vial) to_chat(user, SPAN_NOTICE("There is no vial loaded in \the [src].")) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 0d90890f734..b3e37f37fe7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -159,7 +159,7 @@ to_chat(user, SPAN_WARNING("There is some kind of device rigged to the tank.")) /obj/structure/reagent_dispensers/fueltank/attack_hand(var/mob/user) - if (!rig || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if (!rig || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() visible_message(SPAN_NOTICE("\The [user] begins to detach \the [rig] from \the [src].")) if(!user.do_skilled(2 SECONDS, SKILL_ELECTRICAL, src)) @@ -251,7 +251,7 @@ reagents.add_reagent(/decl/material/liquid/water, reagents.maximum_volume) /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/user) - if(user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return dispense_cup(user) return ..() diff --git a/code/modules/sealant_gun/sealant_gun.dm b/code/modules/sealant_gun/sealant_gun.dm index f6839c89f7d..4a7cf1719c1 100644 --- a/code/modules/sealant_gun/sealant_gun.dm +++ b/code/modules/sealant_gun/sealant_gun.dm @@ -46,7 +46,7 @@ . = ..() /obj/item/gun/launcher/sealant/attack_hand(mob/user) - if(!(src in user.get_held_items()) || !loaded_tank || !user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!(src in user.get_held_items()) || !loaded_tank || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() unload_tank(user) return TRUE diff --git a/code/modules/sealant_gun/sealant_injector.dm b/code/modules/sealant_gun/sealant_injector.dm index 9b79fa54556..8eee5ee365a 100644 --- a/code/modules/sealant_gun/sealant_injector.dm +++ b/code/modules/sealant_gun/sealant_injector.dm @@ -79,7 +79,7 @@ playsound(loc, 'sound/effects/refill.ogg', 50, 1) /obj/structure/sealant_injector/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(loaded_tank) loaded_tank.dropInto(get_turf(src)) diff --git a/code/modules/sealant_gun/sealant_rack.dm b/code/modules/sealant_gun/sealant_rack.dm index a23f8472357..d952957c995 100644 --- a/code/modules/sealant_gun/sealant_rack.dm +++ b/code/modules/sealant_gun/sealant_rack.dm @@ -27,7 +27,7 @@ add_overlay("tanks[length(tanks)]") /obj/structure/sealant_rack/attack_hand(mob/user) - if(!user.check_dexterity(DEXTERITY_GRIP, TRUE)) + if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() if(loaded_gun) loaded_gun.dropInto(loc) diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm index bb24669059d..45a30d56430 100644 --- a/mods/mobs/dionaea/mob/_nymph.dm +++ b/mods/mobs/dionaea/mob/_nymph.dm @@ -85,6 +85,3 @@ var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable) if(hattable?.hat) to_chat(user, SPAN_NOTICE("It is wearing [html_icon(hattable.hat)] \a [hattable.hat].")) - -/mob/living/carbon/alien/diona/has_dexterity() - return FALSE \ No newline at end of file diff --git a/mods/species/ascent/mobs/bodyparts_insectoid.dm b/mods/species/ascent/mobs/bodyparts_insectoid.dm index 0a1bc0fd0fc..b88ca6a9cd8 100644 --- a/mods/species/ascent/mobs/bodyparts_insectoid.dm +++ b/mods/species/ascent/mobs/bodyparts_insectoid.dm @@ -66,10 +66,8 @@ organ_tag = BP_L_HAND_UPPER gripper_type = /datum/inventory_slot/gripper/upper_left_hand -/obj/item/organ/external/hand/insectoid/upper/get_dexterity() - . = DEXTERITY_GRIP - if(model) - . = min(., ..()) +/obj/item/organ/external/hand/insectoid/upper/get_manual_dexterity() + return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) /obj/item/organ/external/hand/right/insectoid name = "right grasper" @@ -90,10 +88,8 @@ organ_tag = BP_R_HAND_UPPER gripper_type = /datum/inventory_slot/gripper/upper_right_hand -/obj/item/organ/external/hand/right/insectoid/upper/get_dexterity() - . = DEXTERITY_GRIP - if(model) - . = min(., ..()) +/obj/item/organ/external/hand/right/insectoid/upper/get_manual_dexterity() + return (..() & ~(DEXTERITY_WEAPONS|DEXTERITY_COMPLEX_TOOLS)) /obj/item/organ/external/groin/insectoid name = "abdomen" diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm index 4ea753c2333..4e7b75052e0 100644 --- a/mods/species/ascent/mobs/nymph/_nymph.dm +++ b/mods/species/ascent/mobs/nymph/_nymph.dm @@ -58,9 +58,6 @@ if(holding_item) to_chat(user, SPAN_NOTICE("It is holding \icon[holding_item] \a [holding_item].")) -/mob/living/carbon/alien/ascent_nymph/has_dexterity() - return FALSE - /mob/living/carbon/alien/ascent_nymph/death(gibbed) if(holding_item) try_unequip(holding_item) From d7a132ac817a7feed33568860fc358f70cfb00fc Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Mon, 10 Jul 2023 10:11:41 +1000 Subject: [PATCH 007/575] Requested changes. --- code/game/objects/effects/decals/posters/_poster.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 4 ++++ code/modules/mob/mob.dm | 2 +- mods/mobs/dionaea/mob/_nymph.dm | 3 +++ mods/species/ascent/mobs/nymph/_nymph.dm | 3 +++ 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/decals/posters/_poster.dm b/code/game/objects/effects/decals/posters/_poster.dm index 70cd796d0e0..b0421b2f1dc 100644 --- a/code/game/objects/effects/decals/posters/_poster.dm +++ b/code/game/objects/effects/decals/posters/_poster.dm @@ -72,7 +72,7 @@ /obj/structure/sign/poster/attack_hand(mob/user) if(user.a_intent != I_HURT || ruined) return ..() - if(!CanPhysicallyInteract(user) || !user.check_dexterity(DEXTERITY_GRIP)) + if(!CanPhysicallyInteract(user) || !user.check_dexterity(DEXTERITY_HOLD_ITEM)) return TRUE add_fingerprint(user) visible_message(SPAN_WARNING("\The [user] rips \the '[src]' in a single, decisive motion!")) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index eaaf347214c..e2281ef0cc1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1201,6 +1201,10 @@ var/check_slot = get_active_held_item_slot() var/obj/item/organ/external/active_hand = check_slot && GET_EXTERNAL_ORGAN(src, check_slot) if(!active_hand) + // todo: move dexterity onto inventory slot? + var/datum/inventory_slot/gripper/gripper = get_inventory_slot_datum(check_slot) + if(istype(gripper) && isnull(gripper.requires_organ_tag)) + return species.get_manual_dexterity(src) if(!silent) to_chat(src, SPAN_WARNING("Your [check_slot ? parse_zone(check_slot) : "hand"] is missing!")) return DEXTERITY_NONE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9c669815024..cd59e88b623 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1070,7 +1070,7 @@ return DEXTERITY_BASE /mob/proc/check_dexterity(var/dex_level = DEXTERITY_FULL, var/silent = FALSE) - . = !!(get_dexterity(silent) & dex_level) + . = (get_dexterity(silent) & dex_level) == dex_level if(!. && !silent) to_chat(src, FEEDBACK_YOU_LACK_DEXTERITY) diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm index 45a30d56430..63fede80c71 100644 --- a/mods/mobs/dionaea/mob/_nymph.dm +++ b/mods/mobs/dionaea/mob/_nymph.dm @@ -85,3 +85,6 @@ var/datum/extension/hattable/hattable = get_extension(src, /datum/extension/hattable) if(hattable?.hat) to_chat(user, SPAN_NOTICE("It is wearing [html_icon(hattable.hat)] \a [hattable.hat].")) + +/mob/living/carbon/alien/diona/get_dexterity(var/silent = FALSE) + return DEXTERITY_NONE diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm index 4e7b75052e0..1a4c737875d 100644 --- a/mods/species/ascent/mobs/nymph/_nymph.dm +++ b/mods/species/ascent/mobs/nymph/_nymph.dm @@ -58,6 +58,9 @@ if(holding_item) to_chat(user, SPAN_NOTICE("It is holding \icon[holding_item] \a [holding_item].")) +/mob/living/carbon/alien/ascent_nymph/get_dexterity(var/silent = FALSE) + return DEXTERITY_NONE + /mob/living/carbon/alien/ascent_nymph/death(gibbed) if(holding_item) try_unequip(holding_item) From 263a598944b65dbc235966f17bf5e9f7ef07b50c Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 10 Jul 2023 17:17:36 -0500 Subject: [PATCH 008/575] Fix storage items handling pixel offsets --- code/game/objects/items/weapons/storage/storage_ui/default.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/storage_ui/default.dm b/code/game/objects/items/weapons/storage/storage_ui/default.dm index 85c768517ca..1df98a6248d 100644 --- a/code/game/objects/items/weapons/storage/storage_ui/default.dm +++ b/code/game/objects/items/weapons/storage/storage_ui/default.dm @@ -235,8 +235,7 @@ storage_start.overlays += stored_continue storage_start.overlays += stored_end - O.reset_offsets() - O.screen_loc = "LEFT+[SCREEN_LOC_MOD_FIRST]:[round((startpoint+endpoint)/2)+2-O.pixel_x],BOTTOM+[SCREEN_LOC_MOD_SECOND]:[SCREEN_LOC_MOD_DIVIDED-O.pixel_y]" + O.screen_loc = "LEFT+[SCREEN_LOC_MOD_FIRST]:[round((startpoint+endpoint)/2)+2],BOTTOM+[SCREEN_LOC_MOD_SECOND]:[SCREEN_LOC_MOD_DIVIDED]" O.maptext = "" O.hud_layerise() From d848a72c913e35544e203ae69ec2d0bd5e7e4297 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 10 Jul 2023 16:05:43 -0500 Subject: [PATCH 009/575] Fix infinite transition loop next to two edges --- code/modules/multiz/turf_mimic_edge.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/multiz/turf_mimic_edge.dm b/code/modules/multiz/turf_mimic_edge.dm index 9669227d274..83d8017f38a 100644 --- a/code/modules/multiz/turf_mimic_edge.dm +++ b/code/modules/multiz/turf_mimic_edge.dm @@ -286,13 +286,13 @@ var/new_y = AM.y //Get the position inside the destination level's bounds to teleport the thing to - if(T.x <= LDsrc.level_inner_min_x) + if(T.x < LDsrc.level_inner_min_x) new_x = LDdst.level_inner_max_x - else if (T.x >= LDsrc.level_inner_max_x) + else if (T.x > LDsrc.level_inner_max_x) new_x = LDdst.level_inner_min_x - else if (T.y <= LDsrc.level_inner_min_y) + else if (T.y < LDsrc.level_inner_min_y) new_y = LDdst.level_inner_max_y - else if (T.y >= LDsrc.level_inner_max_y) + else if (T.y > LDsrc.level_inner_max_y) new_y = LDdst.level_inner_min_y else return //If we're teleporting into the same spot just quit early From d34c24bd1e267729893097d6a1d8c5aeabec94b7 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 11 Jul 2023 10:24:49 +1000 Subject: [PATCH 010/575] build_species_lists() is now cached (again?) --- code/_helpers/global_lists.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 372c9fca931..1b89344c6b9 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -79,11 +79,13 @@ var/global/list/string_slot_flags = list( return 1 // This is all placeholder procs for an eventual PR to change them to use decls. -var/global/list/all_species = list() -var/global/list/playable_species = list() // A list of ALL playable species, whitelisted, latejoin or otherwise. +var/global/list/all_species +var/global/list/playable_species // A list of ALL playable species, whitelisted, latejoin or otherwise. /proc/build_species_lists() - global.all_species.Cut() - global.playable_species.Cut() + if(global.all_species) + return + global.all_species = list() + global.playable_species = list() var/list/species_decls = decls_repository.get_decls_of_subtype(/decl/species) for(var/species_type in species_decls) var/decl/species/species = species_decls[species_type] From f6c62f66095ad8270a43594636d5132302f84bed Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 5 Apr 2023 13:03:50 -0500 Subject: [PATCH 011/575] Fix hardcoded codex entry generation --- code/controllers/subsystems/initialization/codex.dm | 5 +++-- code/modules/codex/codex_scannable.dm | 1 + code/modules/codex/entries/_codex_entry.dm | 11 ++++++----- code/modules/codex/entries/structures.dm | 3 +++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/code/controllers/subsystems/initialization/codex.dm b/code/controllers/subsystems/initialization/codex.dm index 0437bac3503..33220f338ce 100644 --- a/code/controllers/subsystems/initialization/codex.dm +++ b/code/controllers/subsystems/initialization/codex.dm @@ -27,8 +27,9 @@ SUBSYSTEM_DEF(codex) // Create general hardcoded entries. for(var/ctype in subtypesof(/datum/codex_entry)) var/datum/codex_entry/centry = ctype - if(initial(centry.name)) - centry = new centry() + if(TYPE_IS_ABSTRACT(centry) || initial(centry.skip_hardcoded_generation)) + continue + centry = new centry() // Create categorized entries. var/list/deferred_population = list() diff --git a/code/modules/codex/codex_scannable.dm b/code/modules/codex/codex_scannable.dm index 49ca5d03f1f..31a862f778d 100644 --- a/code/modules/codex/codex_scannable.dm +++ b/code/modules/codex/codex_scannable.dm @@ -14,6 +14,7 @@ var/global/list/unlocked_codex_scannables = list() /datum/codex_entry/scannable name = null + skip_hardcoded_generation = TRUE var/secret_text var/has_scannable_secrets = FALSE var/worth_points = 1 diff --git a/code/modules/codex/entries/_codex_entry.dm b/code/modules/codex/entries/_codex_entry.dm index 635e296fd72..783ca84eaba 100644 --- a/code/modules/codex/entries/_codex_entry.dm +++ b/code/modules/codex/entries/_codex_entry.dm @@ -11,6 +11,7 @@ var/antag_text var/disambiguator var/list/categories + var/skip_hardcoded_generation // if TRUE, don't create this entry in codex init. where possible consider using abstract_type instead /datum/codex_entry/temporary store_codex_entry = FALSE @@ -103,14 +104,14 @@ . += header . += "" - . += "" + . += "
" if(lore_text) - . += "

[TRIM_LINEBREAKS(lore_text)]

" + . += "

[TRIM_LINEBREAKS(lore_text)]

" if(mechanics_text) - . += "

OOC Information

\n

[TRIM_LINEBREAKS(mechanics_text)]

" + . += "

OOC Information

\n

[TRIM_LINEBREAKS(mechanics_text)]

" if(antag_text && (!presenting_to || (presenting_to.mind && player_is_antag(presenting_to.mind)))) - . += "

Antagonist Information

\n

[TRIM_LINEBREAKS(antag_text)]

" - . += "" + . += "

Antagonist Information

\n

[TRIM_LINEBREAKS(antag_text)]

" + . += "
" if(include_footer) var/footer = get_codex_footer(presenting_to) diff --git a/code/modules/codex/entries/structures.dm b/code/modules/codex/entries/structures.dm index 9459123486d..21295bbab7a 100644 --- a/code/modules/codex/entries/structures.dm +++ b/code/modules/codex/entries/structures.dm @@ -31,6 +31,9 @@ mechanics_text = "A simple barricade is crafted from any material. You can make it a cheval de frise by adding rods of any material to a barricade constructed of any material, this structure will injure anyone who moves into it." disambiguator = "structure" +/datum/codex_entry/deity + abstract_type = /datum/codex_entry/deity + /datum/codex_entry/deity/altar associated_paths = list(/obj/structure/deity/altar) mechanics_text = "To place someone upon the altar, first have them in an aggressive grab and click the altar while adjacent." From 398fb9b43fec4e916917d4d9a240d6a13c187cce Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 5 Apr 2023 13:04:21 -0500 Subject: [PATCH 012/575] Add skill name as associated string to codex --- code/modules/codex/categories/category_skills.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/codex/categories/category_skills.dm b/code/modules/codex/categories/category_skills.dm index 489a5faaf4f..77cd55659e6 100644 --- a/code/modules/codex/categories/category_skills.dm +++ b/code/modules/codex/categories/category_skills.dm @@ -15,8 +15,9 @@ skill_info += "

[level]

[skill.levels[level]]" var/datum/codex_entry/entry = new( _display_name = "[skill.name] (skill)", + _associated_strings = list(skill.name), _lore_text = skill.desc, - _mechanics_text = jointext(skill_info, "
") + _mechanics_text = jointext(skill_info, "
"), ) items |= entry.name . = ..() \ No newline at end of file From 71ef20cac326c2d32a14f2d789e583a9924be06d Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 5 Apr 2023 13:05:52 -0500 Subject: [PATCH 013/575] Fix codex formatting and spelling --- code/game/jobs/job/_job.dm | 2 +- .../items/books/manuals/engineering.dm | 2 +- code/modules/codex/entries/engineering.dm | 37 +++++++++++++------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/code/game/jobs/job/_job.dm b/code/game/jobs/job/_job.dm index 61f60a05828..e3a5d05d289 100644 --- a/code/game/jobs/job/_job.dm +++ b/code/game/jobs/job/_job.dm @@ -9,7 +9,7 @@ var/current_positions = 0 // How many players have this job var/availablity_chance = 100 // Percentage chance job is available each round var/guestbanned = FALSE // If set to 1 this job will be unavalible to guests - var/must_fill = FALSE // If set to 1 this job will be have priority over other job preferences. Do not reccommend on jobs with more that one position. + var/must_fill = FALSE // If set to 1 this job will be have priority over other job preferences. Do not recommend on jobs with more than one position. var/not_random_selectable = FALSE // If set to 1 this job will not be selected when a player asks for a random job. var/description // If set, returns a static description. To add dynamic text, overwrite this proc, call parent aka . = ..() and then . += "extra text" on the line after that. var/list/event_categories // A set of tags used to check jobs for suitability for things like random event selection. diff --git a/code/game/objects/items/books/manuals/engineering.dm b/code/game/objects/items/books/manuals/engineering.dm index 14adfa45e01..cf54e3895fd 100644 --- a/code/game/objects/items/books/manuals/engineering.dm +++ b/code/game/objects/items/books/manuals/engineering.dm @@ -666,7 +666,7 @@ The largest uses of them are for their cleaning functions and their ability to tailor suits for a species. Do not enter them physically. You will die from any of the functions being activated, and it will be painful. These machines can both tailor a suit between species, and between types. This means you can convert engineering hardsuits to atmospherics, or the other way. This is useful. Use it if you can.

- There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not reccomend using them unless no other option is available. + There's also modification kits that let you modify suits yourself. These are extremely difficult to use unless you understand the actual construction of the suit. I do not recommend using them unless no other option is available.

Final Checks