From 6d384051ed9323afb1a4031d4df0948dba99bd2f Mon Sep 17 00:00:00 2001 From: carlarctg <53100513+carlarctg@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:03:06 -0300 Subject: [PATCH 01/22] carpenter hammer fits on belt slot (#88109) ## About The Pull Request bro its a hammer (speaking of, i feel like it should fit on the toolbelt & be a crowbar. but that's basically 1:1 the preexisting claw hammer, idk) ## Why It's Good For The Game bro it's a hammer. ## Changelog :cl: qol: carpenter hammer fits on belt slot code: renames belt_icon_state to inside_belt_icon_state for intelligibiility /:cl: --- code/game/objects/items.dm | 4 ++-- code/game/objects/items/devices/multitool.dm | 2 +- code/game/objects/items/tools/crowbar.dm | 4 ++-- code/game/objects/items/tools/screwdriver.dm | 4 ++-- code/game/objects/items/tools/spess_knife.dm | 2 +- code/game/objects/items/tools/wrench.dm | 4 ++-- code/game/objects/items/weaponry.dm | 2 ++ code/modules/unit_tests/greyscale_config.dm | 6 +++--- 8 files changed, 15 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cfc5aa6a5153a..f32690f334cad 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -27,7 +27,7 @@ ///Icon state for mob worn overlays, if null the normal icon_state will be used. var/worn_icon_state ///Icon state for the belt overlay, if null the normal icon_state will be used. - var/belt_icon_state + var/inside_belt_icon_state ///Forced mob worn layer instead of the standard preferred size. var/alternate_worn_layer ///The config type to use for greyscaled worn sprites. Both this and greyscale_colors must be assigned to work. @@ -910,7 +910,7 @@ /// Returns the icon used for overlaying the object on a belt /obj/item/proc/get_belt_overlay() - var/icon_state_to_use = belt_icon_state || icon_state + var/icon_state_to_use = inside_belt_icon_state || icon_state if(greyscale_config_belt && greyscale_colors) return mutable_appearance(SSgreyscale.GetColoredIconByType(greyscale_config_belt, greyscale_colors), icon_state_to_use) return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state_to_use) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 0ea1e867b4c16..4d538f46184d9 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -283,7 +283,7 @@ desc = "An omni-technological interface." icon = 'icons/obj/antags/abductor.dmi' icon_state = "multitool" - belt_icon_state = "multitool_alien" + inside_belt_icon_state = "multitool_alien" custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1.25, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/titanium = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT) toolspeed = 0.1 diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index b98ace86cf006..2d5a508076d9c 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -50,7 +50,7 @@ usesound = 'sound/items/weapons/sonic_jackhammer.ogg' custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) icon_state = "crowbar" - belt_icon_state = "crowbar_alien" + inside_belt_icon_state = "crowbar_alien" toolspeed = 0.1 /obj/item/crowbar/large @@ -80,7 +80,7 @@ lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' inhand_icon_state = "clawhammer" - belt_icon_state = "clawhammer" + inside_belt_icon_state = "clawhammer" throwforce = 10 throw_range = 5 throw_speed = 3 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 8cf9005d19137..cb6411e7e8c09 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -5,7 +5,7 @@ icon_state = "screwdriver_map" inhand_icon_state = "screwdriver" worn_icon_state = "screwdriver" - belt_icon_state = "screwdriver" + inside_belt_icon_state = "screwdriver" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' flags_1 = IS_PLAYER_COLORABLE_1 @@ -81,7 +81,7 @@ name = "hand drill" desc = "A simple powered hand drill." icon_state = "drill" - belt_icon_state = null + inside_belt_icon_state = null inhand_icon_state = "drill" worn_icon_state = "drill" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' diff --git a/code/game/objects/items/tools/spess_knife.dm b/code/game/objects/items/tools/spess_knife.dm index 4019aa41c701d..3550f4df5aeda 100644 --- a/code/game/objects/items/tools/spess_knife.dm +++ b/code/game/objects/items/tools/spess_knife.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/tools.dmi' icon_state = "spess_knife" worn_icon_state = "spess_knife" - belt_icon_state = "spess_knife" + inside_belt_icon_state = "spess_knife" inhand_icon_state = "spess_knife" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 41b4556ebace5..564403acf0ec3 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -42,7 +42,7 @@ name = "alien wrench" desc = "A polarized wrench. It causes anything placed between the jaws to turn." icon = 'icons/obj/antags/abductor.dmi' - belt_icon_state = "wrench_alien" + inside_belt_icon_state = "wrench_alien" custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) usesound = 'sound/effects/empulse.ogg' toolspeed = 0.1 @@ -96,7 +96,7 @@ desc = "It's like a normal wrench but edgier. Can be found on the battlefield." icon_state = "wrench_combat" inhand_icon_state = "wrench_combat" - belt_icon_state = "wrench_combat" + inside_belt_icon_state = "wrench_combat" attack_verb_continuous = list("devastates", "brutalizes", "commits a war crime against", "obliterates", "humiliates") attack_verb_simple = list("devastate", "brutalize", "commit a war crime against", "obliterate", "humiliate") tool_behaviour = null diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index dc0375ac04bd2..eb5ade8414263 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -437,6 +437,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 icon = 'icons/obj/weapons/hammer.dmi' icon_state = "carpenter_hammer" inhand_icon_state = "carpenter_hammer" + worn_icon_state = "clawhammer" //plaecholder lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' desc = "Uncanny looking hammer." @@ -446,6 +447,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 w_class = WEIGHT_CLASS_NORMAL wound_bonus = 20 demolition_mod = 1.25 + slot_flags = ITEM_SLOT_BELT /obj/item/carpenter_hammer/Initialize(mapload) . = ..() diff --git a/code/modules/unit_tests/greyscale_config.dm b/code/modules/unit_tests/greyscale_config.dm index d3d9ce9d4fdd4..9c0484eff7d11 100644 --- a/code/modules/unit_tests/greyscale_config.dm +++ b/code/modules/unit_tests/greyscale_config.dm @@ -21,9 +21,9 @@ TEST_FAIL("[worn.DebugName()] is missing a sprite for the worn overlay for [item_path]. Expected icon state: '[worn_icon_state]'") var/datum/greyscale_config/belt = SSgreyscale.configurations["[initial(item_path.greyscale_config_belt)]"] - var/belt_icon_state = initial(item_path.belt_icon_state) || initial(item_path.icon_state) - if(belt && !belt.icon_states[belt_icon_state]) - TEST_FAIL("[belt.DebugName()] is missing a sprite for the belt overlay for [item_path]. Expected icon state: '[belt_icon_state]'") + var/inside_belt_icon_state = initial(item_path.inside_belt_icon_state) || initial(item_path.icon_state) + if(belt && !belt.icon_states[inside_belt_icon_state]) + TEST_FAIL("[belt.DebugName()] is missing a sprite for the belt overlay for [item_path]. Expected icon state: '[inside_belt_icon_state]'") /// Makes sure objects using greyscale configs have, if any, the correct number of colors /datum/unit_test/greyscale_color_count From 3f26a0a97787d52603639dafb27c06436830887f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:03:26 +0000 Subject: [PATCH 02/22] Automatic changelog for PR #88109 [ci skip] --- html/changelogs/AutoChangeLog-pr-88109.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88109.yml diff --git a/html/changelogs/AutoChangeLog-pr-88109.yml b/html/changelogs/AutoChangeLog-pr-88109.yml new file mode 100644 index 0000000000000..19f948fcc4ca3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88109.yml @@ -0,0 +1,5 @@ +author: "carlarctg" +delete-after: True +changes: + - qol: "carpenter hammer fits on belt slot" + - code_imp: "renames belt_icon_state to inside_belt_icon_state for intelligibiility" \ No newline at end of file From d04d513d553298a6cad8c70c63baae070b7788a0 Mon Sep 17 00:00:00 2001 From: Lucy Date: Sun, 24 Nov 2024 18:03:54 -0500 Subject: [PATCH 03/22] Replace `caller` args in pathfinding code with `requester` (#88084) ## About The Pull Request Somewhat of a port of https://github.com/ParadiseSS13/Paradise/pull/26401, albeit re-done from scratch (with the power of find and replace) Caller is a protected/reserved var in 516. We use it a lot. It's used in more places than this, but I'm a perfectionist and can't think of better names for most of the other uses (mostly mob AI, holocall, and `InterceptClickOn` related), so I'm just doing pathfinding for now. ## Why It's Good For The Game Prep for compiling on 516 ## Changelog No user-facing changes - this is merely renaming vars. --- code/__HELPERS/paths/jps.dm | 14 ++++++------- code/__HELPERS/paths/path.dm | 26 ++++++++++++------------ code/__HELPERS/paths/sssp.dm | 4 ++-- code/controllers/subsystem/pathfinder.dm | 22 ++++++++++---------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm index 208888d21ba5c..daeddc13c60e4 100644 --- a/code/__HELPERS/paths/jps.dm +++ b/code/__HELPERS/paths/jps.dm @@ -55,7 +55,7 @@ /datum/pathfind/jps /// The movable we are pathing - var/atom/movable/caller + var/atom/movable/requester /// The turf we're trying to path to (note that this won't track a moving target) var/turf/end /// The open list/stack we pop nodes out from (TODO: make this a normal list and macro-ize the heap operations to reduce proc overhead) @@ -72,9 +72,9 @@ ///Defines how we handle diagonal moves. See __DEFINES/path.dm var/diagonal_handling = DIAGONAL_REMOVE_CLUNKY -/datum/pathfind/jps/proc/setup(atom/movable/caller, list/access, max_distance, simulated_only, avoid, list/datum/callback/on_finish, atom/goal, mintargetdist, skip_first, diagonal_handling) - src.caller = caller - src.pass_info = new(caller, access) +/datum/pathfind/jps/proc/setup(atom/movable/requester, list/access, max_distance, simulated_only, avoid, list/datum/callback/on_finish, atom/goal, mintargetdist, skip_first, diagonal_handling) + src.requester = requester + src.pass_info = new(requester, access) src.max_distance = max_distance src.simulated_only = simulated_only src.avoid = avoid @@ -88,12 +88,12 @@ /datum/pathfind/jps/Destroy(force) . = ..() - caller = null + requester = null end = null open = null /datum/pathfind/jps/start() - start = start || get_turf(caller) + start = start || get_turf(requester) . = ..() if(!.) return . @@ -115,7 +115,7 @@ . = ..() if(!.) return . - if(QDELETED(caller)) + if(QDELETED(requester)) return FALSE while(!open.is_empty() && !path) diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm index 950cd1906846c..da1c9917b6be2 100644 --- a/code/__HELPERS/paths/path.dm +++ b/code/__HELPERS/paths/path.dm @@ -4,7 +4,7 @@ * It will yield until a path is returned, using magic * * Arguments: - * * caller: The movable atom that's trying to find the path + * * requester: The movable atom that's trying to find the path * * end: What we're trying to path to. It doesn't matter if this is a turf or some other atom, we're gonna just path to the turf it's on anyway * * max_distance: The maximum number of steps we can take in a given path to search (default: 30, 0 = infinite) * * mintargetdistance: Minimum distance to the target before path returns, could be used to get near a target, but not right to it - for an AI mob with a gun, for example. @@ -14,16 +14,16 @@ * * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures. * * diagonal_handling: defines how we handle diagonal moves. see __DEFINES/path.dm */ -/proc/get_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY) +/proc/get_path_to(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY) var/list/hand_around = list() // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) - if(!SSpathfinder.pathfind(caller, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await)) + if(!SSpathfinder.pathfind(requester, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await)) return list() UNTIL(length(hand_around)) var/list/return_val = hand_around[1] - if(!islist(return_val) || (QDELETED(caller) || QDELETED(end))) // It's trash, just hand back empty to make it easy + if(!islist(return_val) || (QDELETED(requester) || QDELETED(end))) // It's trash, just hand back empty to make it easy return list() return return_val @@ -37,7 +37,7 @@ * It will yield until a path is returned, using magic * * Arguments: - * * caller: The movable atom that's trying to find the path + * * requester: The movable atom that's trying to find the path * * end: What we're trying to path to. It doesn't matter if this is a turf or some other atom, we're gonna just path to the turf it's on anyway * * max_distance: The maximum number of steps we can take in a given path to search (default: 30, 0 = infinite) * * mintargetdistance: Minimum distance to the target before path returns, could be used to get near a target, but not right to it - for an AI mob with a gun, for example. @@ -47,29 +47,29 @@ * * exclude: If we want to avoid a specific turf, like if we're a mulebot who already got blocked by some turf * * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures. */ -/proc/get_swarm_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE) +/proc/get_swarm_path_to(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE) var/list/hand_around = list() // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) - if(!SSpathfinder.swarmed_pathfind(caller, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await)) + if(!SSpathfinder.swarmed_pathfind(requester, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await)) return list() UNTIL(length(hand_around)) var/list/return_val = hand_around[1] - if(!islist(return_val) || (QDELETED(caller) || QDELETED(end))) // It's trash, just hand back empty to make it easy + if(!islist(return_val) || (QDELETED(requester) || QDELETED(end))) // It's trash, just hand back empty to make it easy return list() return return_val -/proc/get_sssp(atom/movable/caller, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude) +/proc/get_sssp(atom/movable/requester, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude) var/list/hand_around = list() // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) - if(!SSpathfinder.build_map(caller, get_turf(caller), max_distance, access, simulated_only, exclude, await)) + if(!SSpathfinder.build_map(requester, get_turf(requester), max_distance, access, simulated_only, exclude, await)) return null UNTIL(length(hand_around)) var/datum/path_map/return_val = hand_around[1] - if(!istype(return_val, /datum/path_map) || (QDELETED(caller))) // It's trash, just hand back null to make it easy + if(!istype(return_val, /datum/path_map) || (QDELETED(requester))) // It's trash, just hand back null to make it easy return null return return_val @@ -202,7 +202,7 @@ return modified_path /** - * For seeing if we can actually move between 2 given turfs while accounting for our access and the caller's pass_flags + * For seeing if we can actually move between 2 given turfs while accounting for our access and the requester's pass_flags * * Assumes destinantion turf is non-dense - check and shortcircuit in code invoking this proc to avoid overhead. * Makes some other assumptions, such as assuming that unless declared, non dense objects will not block movement. @@ -311,7 +311,7 @@ /// Let's avoid this var/camera_type - /// Weakref to the caller used to generate this info + /// Weakref to the requester used to generate this info /// Should not use this almost ever, it's for context and to allow for proc chains that /// Require a movable var/datum/weakref/caller_ref = null diff --git a/code/__HELPERS/paths/sssp.dm b/code/__HELPERS/paths/sssp.dm index 21e520ea0164c..092da587793a8 100644 --- a/code/__HELPERS/paths/sssp.dm +++ b/code/__HELPERS/paths/sssp.dm @@ -201,8 +201,8 @@ /// Our current position in the working queue var/working_index -/datum/pathfind/sssp/proc/setup(atom/movable/caller, list/access, turf/center, max_distance, simulated_only, turf/avoid, list/datum/callback/on_finish) - src.pass_info = new(caller, access) +/datum/pathfind/sssp/proc/setup(atom/movable/requester, list/access, turf/center, max_distance, simulated_only, turf/avoid, list/datum/callback/on_finish) + src.pass_info = new(requester, access) src.start = center src.max_distance = max_distance src.simulated_only = simulated_only diff --git a/code/controllers/subsystem/pathfinder.dm b/code/controllers/subsystem/pathfinder.dm index 17ee754718e5e..d95b3bff5388c 100644 --- a/code/controllers/subsystem/pathfinder.dm +++ b/code/controllers/subsystem/pathfinder.dm @@ -61,9 +61,9 @@ SUBSYSTEM_DEF(pathfinder) currentmaps.len-- /// Initiates a pathfind. Returns true if we're good, FALSE if something's failed -/datum/controller/subsystem/pathfinder/proc/pathfind(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, diagonal_handling = DIAGONAL_REMOVE_CLUNKY, list/datum/callback/on_finish) +/datum/controller/subsystem/pathfinder/proc/pathfind(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, diagonal_handling = DIAGONAL_REMOVE_CLUNKY, list/datum/callback/on_finish) var/datum/pathfind/jps/path = new() - path.setup(caller, access, max_distance, simulated_only, exclude, on_finish, end, mintargetdist, skip_first, diagonal_handling) + path.setup(requester, access, max_distance, simulated_only, exclude, on_finish, end, mintargetdist, skip_first, diagonal_handling) if(path.start()) active_pathing += path return TRUE @@ -71,21 +71,21 @@ SUBSYSTEM_DEF(pathfinder) /// Initiates a swarmed pathfind. Returns TRUE if we're good, FALSE if something's failed /// If a valid pathmap exists for the TARGET turf we'll use that, otherwise we have to build a new one -/datum/controller/subsystem/pathfinder/proc/swarmed_pathfind(atom/movable/caller, atom/end, max_distance = 30, mintargetdist = 0, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, list/datum/callback/on_finish) +/datum/controller/subsystem/pathfinder/proc/swarmed_pathfind(atom/movable/requester, atom/end, max_distance = 30, mintargetdist = 0, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, list/datum/callback/on_finish) var/turf/target = get_turf(end) - var/datum/can_pass_info/pass_info = new(caller, access) + var/datum/can_pass_info/pass_info = new(requester, access) // If there's a map we can use already, use it var/datum/path_map/valid_map = get_valid_map(pass_info, target, simulated_only, exclude, age, include_building = TRUE) if(valid_map && valid_map.expand(max_distance)) - path_map_passalong(on_finish, get_turf(caller), mintargetdist, skip_first, valid_map) + path_map_passalong(on_finish, get_turf(requester), mintargetdist, skip_first, valid_map) return TRUE // Otherwise we're gonna make a new one, and turn it into a path for the callbacks passed into us var/list/datum/callback/pass_in = list() - pass_in += CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(path_map_passalong), on_finish, get_turf(caller), mintargetdist, skip_first) + pass_in += CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(path_map_passalong), on_finish, get_turf(requester), mintargetdist, skip_first) // And to allow subsequent calls to reuse the same map, we'll put a placeholder in the cache, and fill it up when the pathing finishes var/datum/path_map/empty = new() - empty.pass_info = new(caller, access) + empty.pass_info = new(requester, access) empty.start = target empty.pass_space = simulated_only empty.avoid = exclude @@ -133,9 +133,9 @@ SUBSYSTEM_DEF(pathfinder) source_to_maps[target] -= same_target /// Initiates a SSSP run. Returns true if we're good, FALSE if something's failed -/datum/controller/subsystem/pathfinder/proc/build_map(atom/movable/caller, turf/source, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude, list/datum/callback/on_finish) +/datum/controller/subsystem/pathfinder/proc/build_map(atom/movable/requester, turf/source, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude, list/datum/callback/on_finish) var/datum/pathfind/sssp/path = new() - path.setup(caller, access, source, max_distance, simulated_only, exclude, on_finish) + path.setup(requester, access, source, max_distance, simulated_only, exclude, on_finish) if(path.start()) active_pathing += path return TRUE @@ -160,7 +160,7 @@ SUBSYSTEM_DEF(pathfinder) /// Optionally takes a max age to accept (defaults to 0 seconds) and a minimum acceptable range /// If include_building is true and we can only find a building path, we'll use that instead. tho we will wait for it to finish first /datum/controller/subsystem/pathfinder/proc/get_valid_map(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE) - // Walk all the maps that match our caller's turf OR our target's + // Walk all the maps that match our requester's turf OR our target's // Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one var/oldest_time = world.time - age /// Backup return value used if no finished pathmaps are found @@ -189,7 +189,7 @@ SUBSYSTEM_DEF(pathfinder) /// Takes a set of pathfind info, returns all valid pathmaps that would work /// Takes an optional minimum range arg /datum/controller/subsystem/pathfinder/proc/get_valid_maps(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE) - // Walk all the maps that match our caller's turf OR our target's + // Walk all the maps that match our requester's turf OR our target's // Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one var/list/valid_maps = list() var/oldest_time = world.time - age From 466db3f27bc6c73d292a4947553184049e909c68 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Mon, 25 Nov 2024 02:04:38 +0300 Subject: [PATCH 04/22] Fixes a runtime in cranial fissure remove code (#88081) ## About The Pull Request This can be called after victim gets qdeleted from bodypart cleanup, runtimes here prevent wound from cleaning itself up which in return prevents the bodypart from deleting properly. ## Changelog :cl: fix: Fixed a runtime in cranial fissure remove code /:cl: --- code/datums/wounds/cranial_fissure.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index 615d0d10eb0e6..8e561cd346c13 100644 --- a/code/datums/wounds/cranial_fissure.dm +++ b/code/datums/wounds/cranial_fissure.dm @@ -52,12 +52,10 @@ /datum/wound/cranial_fissure/remove_wound(ignore_limb, replaced) REMOVE_TRAIT(limb, TRAIT_IMMUNE_TO_CRANIAL_FISSURE, type) - REMOVE_TRAIT(victim, TRAIT_HAS_CRANIAL_FISSURE, type) - - victim.remove_filter(CRANIAL_FISSURE_FILTER_DISPLACEMENT) - - UnregisterSignal(victim, COMSIG_MOB_SLIPPED) - + if (!isnull(victim)) + REMOVE_TRAIT(victim, TRAIT_HAS_CRANIAL_FISSURE, type) + victim.remove_filter(CRANIAL_FISSURE_FILTER_DISPLACEMENT) + UnregisterSignal(victim, COMSIG_MOB_SLIPPED) return ..() /datum/wound/cranial_fissure/proc/on_owner_slipped(mob/source) From ef980ea36b1dee69d04c51fb64313df217e33e87 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:05:01 +0000 Subject: [PATCH 05/22] Automatic changelog for PR #88081 [ci skip] --- html/changelogs/AutoChangeLog-pr-88081.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88081.yml diff --git a/html/changelogs/AutoChangeLog-pr-88081.yml b/html/changelogs/AutoChangeLog-pr-88081.yml new file mode 100644 index 0000000000000..f06e344500cec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88081.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixed a runtime in cranial fissure remove code" \ No newline at end of file From 7b76476ae8469186def235cd4bcf315d5d57ae2f Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 24 Nov 2024 17:08:56 -0600 Subject: [PATCH 06/22] Change some status effects adjustments to use `SECONDS` (#88098) ## About The Pull Request Some of the status effect adjustments were missing `SECONDS` to their proc calls. ## Why It's Good For The Game N/A --- code/datums/diseases/chronic_illness.dm | 2 +- code/datums/diseases/tuberculosis.dm | 2 +- code/game/objects/items/hand_items.dm | 4 ++-- code/game/objects/items/religion.dm | 10 +++++----- .../mob/living/carbon/alien/alien_defense.dm | 12 +++++------ code/modules/mob/living/status_procs.dm | 12 +++++------ .../reagents/drinks/alcohol_reagents.dm | 6 +++--- .../reagents/drinks/drink_reagents.dm | 20 +++++++++---------- .../chemistry/reagents/drug_reagents.dm | 2 +- .../chemistry/reagents/medicine_reagents.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 10 +++++----- .../mecha/equipment/tools/medical_tools.dm | 10 +++++----- 12 files changed, 46 insertions(+), 46 deletions(-) diff --git a/code/datums/diseases/chronic_illness.dm b/code/datums/diseases/chronic_illness.dm index 617cfde763d11..be4525fd5a411 100644 --- a/code/datums/diseases/chronic_illness.dm +++ b/code/datums/diseases/chronic_illness.dm @@ -60,7 +60,7 @@ affected_mob.visible_message(span_warning("[affected_mob] collapses!")) if(prob(30)) to_chat(affected_mob, span_danger("Your vision blurs as you faint!")) - affected_mob.AdjustSleeping(10) + affected_mob.AdjustSleeping(1 SECONDS) if(SPT_PROB(0.5, seconds_per_tick)) to_chat(affected_mob, span_danger("[pick("You feel as though your atoms are accelerating in place.", "You feel like you're being torn apart!")]")) affected_mob.emote("scream") diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm index 2a77195e311c4..4b01ef804af29 100644 --- a/code/datums/diseases/tuberculosis.dm +++ b/code/datums/diseases/tuberculosis.dm @@ -51,7 +51,7 @@ if(SPT_PROB(5, seconds_per_tick)) need_mob_update += affected_mob.adjustStaminaLoss(100, updating_stamina = FALSE) affected_mob.visible_message(span_warning("[affected_mob] faints!"), span_userdanger("You surrender yourself and feel at peace...")) - affected_mob.AdjustSleeping(100) + affected_mob.AdjustSleeping(10 SECONDS) if(SPT_PROB(1, seconds_per_tick)) to_chat(affected_mob, span_userdanger("You feel your mind relax and your thoughts drift!")) affected_mob.adjust_confusion_up_to(8 SECONDS, 100 SECONDS) diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 880c73ceced39..12bf53f5c3e30 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -257,8 +257,8 @@ ) // Worse than just help intenting people. - slapped.AdjustSleeping(-75) - slapped.AdjustUnconscious(-50) + slapped.AdjustSleeping(-7.5 SECONDS) + slapped.AdjustUnconscious(-5 SECONDS) else user.visible_message( diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index ecf43fdfab776..963274f26f268 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -70,11 +70,11 @@ need_mob_update += inspired_human.adjustFireLoss(-15, updating_health = FALSE) if(need_mob_update) inspired_human.updatehealth() - inspired_human.AdjustStun(-40) - inspired_human.AdjustKnockdown(-40) - inspired_human.AdjustImmobilized(-40) - inspired_human.AdjustParalyzed(-40) - inspired_human.AdjustUnconscious(-40) + inspired_human.AdjustStun(-4 SECONDS) + inspired_human.AdjustKnockdown(-4 SECONDS) + inspired_human.AdjustImmobilized(-4 SECONDS) + inspired_human.AdjustParalyzed(-4 SECONDS) + inspired_human.AdjustUnconscious(-4 SECONDS) playsound(inspired_human, 'sound/effects/magic/staff_healing.ogg', 25, FALSE) /obj/item/banner/proc/special_inspiration(mob/living/carbon/human/H) //Any banner-specific inspiration effects go here diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 4aeed5c2b9def..2c91579e9767a 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -18,12 +18,12 @@ In all, this is a lot like the monkey code. /N if(user == src && check_self_for_injuries()) return set_resting(FALSE) - AdjustStun(-60) - AdjustKnockdown(-60) - AdjustImmobilized(-60) - AdjustParalyzed(-60) - AdjustUnconscious(-60) - AdjustSleeping(-100) + AdjustStun(-6 SECONDS) + AdjustKnockdown(-6 SECONDS) + AdjustImmobilized(-6 SECONDS) + AdjustParalyzed(-6 SECONDS) + AdjustUnconscious(-6 SECONDS) + AdjustSleeping(-10 SECONDS) visible_message(span_notice("[user.name] nuzzles [src] trying to wake [p_them()] up!")) else if(health > 0) user.do_attack_animation(src, ATTACK_EFFECT_BITE) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 4efc847805f7f..11815d71b1220 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -424,12 +424,12 @@ ///////////////////////// CLEAR STATUS ///////////////////////// /mob/living/proc/adjust_status_effects_on_shake_up() - AdjustStun(-60) - AdjustKnockdown(-60) - AdjustUnconscious(-60) - AdjustSleeping(-100) - AdjustParalyzed(-60) - AdjustImmobilized(-60) + AdjustStun(-6 SECONDS) + AdjustKnockdown(-6 SECONDS) + AdjustUnconscious(-6 SECONDS) + AdjustSleeping(-10 SECONDS) + AdjustParalyzed(-6 SECONDS) + AdjustImmobilized(-6 SECONDS) ///////////////////////////////// FROZEN ///////////////////////////////////// diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 7866b2eb37f14..ce344aa8dc0c0 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -183,7 +183,7 @@ . = ..() drinker.set_dizzy_if_lower(10 SECONDS * REM * seconds_per_tick) drinker.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - drinker.AdjustSleeping(-40 * REM * seconds_per_tick) + drinker.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) if(!HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE)) drinker.set_jitter_if_lower(10 SECONDS) @@ -231,7 +231,7 @@ /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) . = ..() drinker.adjust_drowsiness(-14 SECONDS * REM * seconds_per_tick) - drinker.AdjustSleeping(-40 * REM * seconds_per_tick) + drinker.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) drinker.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, drinker.get_body_temp_normal()) if(!HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE)) drinker.set_jitter_if_lower(10 SECONDS) @@ -1411,7 +1411,7 @@ if(52 to 201) drinker.Sleeping(100 * REM * seconds_per_tick) if(202 to INFINITY) - drinker.AdjustSleeping(40 * REM * seconds_per_tick) + drinker.AdjustSleeping(4 SECONDS * REM * seconds_per_tick) if(drinker.adjustToxLoss(2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) return UPDATE_MOB_HEALTH diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 05a2c984287b3..21bb32e0d6556 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -278,7 +278,7 @@ . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) //310.15 is the normal bodytemp. affected_mob.adjust_bodytemperature(25 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) if(holder.has_reagent(/datum/reagent/consumable/frostoil)) @@ -300,7 +300,7 @@ affected_mob.adjust_dizzy(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-2 SECONDS * REM * seconds_per_tick) affected_mob.adjust_jitter(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-2 SECONDS * REM * seconds_per_tick) if(affected_mob.getToxLoss() && SPT_PROB(10, seconds_per_tick)) if(affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) . = UPDATE_MOB_HEALTH @@ -377,7 +377,7 @@ . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) /datum/reagent/consumable/hot_ice_coffee @@ -398,7 +398,7 @@ . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-60 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-6 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-7 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) if(affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) return UPDATE_MOB_HEALTH @@ -416,7 +416,7 @@ . = ..() affected_mob.adjust_dizzy(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-2 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) if(affected_mob.getToxLoss() && SPT_PROB(10, seconds_per_tick)) if(affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) . = UPDATE_MOB_HEALTH @@ -529,7 +529,7 @@ affected_mob.set_jitter_if_lower(40 SECONDS * REM * seconds_per_tick) affected_mob.adjust_dizzy(2 SECONDS * REM * seconds_per_tick) affected_mob.remove_status_effect(/datum/status_effect/drowsiness) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) /datum/reagent/consumable/spacemountainwind @@ -543,7 +543,7 @@ /datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_drowsiness(-14 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-2 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) @@ -642,7 +642,7 @@ . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) /datum/reagent/consumable/wellcheers @@ -680,7 +680,7 @@ affected_mob.set_jitter_if_lower(80 SECONDS * REM * seconds_per_tick) affected_mob.adjust_dizzy(2 SECONDS * REM * seconds_per_tick) affected_mob.remove_status_effect(/datum/status_effect/drowsiness) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) /datum/reagent/consumable/monkey_energy/on_mob_metabolize(mob/living/affected_mob) @@ -1255,7 +1255,7 @@ return affected_mob.set_silence_if_lower(MIMEDRINK_SILENCE_DURATION) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) if(affected_mob.getToxLoss() && SPT_PROB(25, seconds_per_tick)) if(affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) return UPDATE_MOB_HEALTH diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 61836a49163e0..28c299c87f0af 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -832,7 +832,7 @@ if(kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)) . = UPDATE_MOB_HEALTH kronkaine_fiend.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick) - kronkaine_fiend.AdjustSleeping(-20 * REM * seconds_per_tick) + kronkaine_fiend.AdjustSleeping(-2 SECONDS * REM * seconds_per_tick) kronkaine_fiend.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick) if(volume < 10) return diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index d6fef868831d7..bb98bd9bff672 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1184,7 +1184,7 @@ /datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-2 SECONDS * REM * seconds_per_tick) holder.remove_reagent(/datum/reagent/consumable/sugar, 3 * REM * seconds_per_tick) //Trek Chems, used primarily by medibots. Only heals a specific damage type, but is very efficient. diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 2941e5ecd7d08..af160235c4dcc 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -3096,11 +3096,11 @@ . = ..() if(affected_mob.mob_biotypes & MOB_UNDEAD || HAS_MIND_TRAIT(affected_mob, TRAIT_MORBID)) //if morbid or undead,acts like an addiction-less drug affected_mob.remove_status_effect(/datum/status_effect/jitter) - affected_mob.AdjustStun(-50 * REM * seconds_per_tick) - affected_mob.AdjustKnockdown(-50 * REM * seconds_per_tick) - affected_mob.AdjustUnconscious(-50 * REM * seconds_per_tick) - affected_mob.AdjustParalyzed(-50 * REM * seconds_per_tick) - affected_mob.AdjustImmobilized(-50 * REM * seconds_per_tick) + affected_mob.AdjustStun(-5 SECONDS * REM * seconds_per_tick) + affected_mob.AdjustKnockdown(-5 SECONDS * REM * seconds_per_tick) + affected_mob.AdjustUnconscious(-5 SECONDS * REM * seconds_per_tick) + affected_mob.AdjustParalyzed(-5 SECONDS * REM * seconds_per_tick) + affected_mob.AdjustImmobilized(-5 SECONDS * REM * seconds_per_tick) else if(affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, REM * seconds_per_tick)) //1 heart damage per tick . = UPDATE_MOB_HEALTH diff --git a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm index 329ade4f377c6..3c49e18c7552e 100644 --- a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm @@ -148,11 +148,11 @@ STOP_PROCESSING(SSobj, src) patient = null ex_patient.adjustOxyLoss(-2 * seconds_per_tick) - ex_patient.AdjustStun(-40 * seconds_per_tick) - ex_patient.AdjustKnockdown(-40 * seconds_per_tick) - ex_patient.AdjustParalyzed(-40 * seconds_per_tick) - ex_patient.AdjustImmobilized(-40 * seconds_per_tick) - ex_patient.AdjustUnconscious(-40 * seconds_per_tick) + ex_patient.AdjustStun(-4 SECONDS * seconds_per_tick) + ex_patient.AdjustKnockdown(-4 SECONDS * seconds_per_tick) + ex_patient.AdjustParalyzed(-4 SECONDS * seconds_per_tick) + ex_patient.AdjustImmobilized(-4 SECONDS * seconds_per_tick) + ex_patient.AdjustUnconscious(-4 SECONDS * seconds_per_tick) if(ex_patient.reagents.get_reagent_amount(/datum/reagent/medicine/epinephrine) < 5 \ && ex_patient.reagents.get_reagent_amount(/datum/reagent/medicine/c2/penthrite) <= 0 \ && ex_patient.stat >= SOFT_CRIT) From cb4591a56c74d746c0a2bed8e9cb2522085d7ca2 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:09:33 +0000 Subject: [PATCH 07/22] Automatic changelog for PR #88098 [ci skip] --- html/changelogs/AutoChangeLog-pr-88098.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88098.yml diff --git a/html/changelogs/AutoChangeLog-pr-88098.yml b/html/changelogs/AutoChangeLog-pr-88098.yml new file mode 100644 index 0000000000000..5a26403292a88 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88098.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - code_imp: "Change some status effects to use SECONDS define." \ No newline at end of file From 85ecad411207294ff46df2be303a2baac17197ba Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Sun, 24 Nov 2024 18:12:22 -0500 Subject: [PATCH 08/22] Adds a disease that makes you reject gravity. (#87666) ## About The Pull Request This PR adds a small, pre-canned virus to the game, the "Localized Weightloss Malfunction" virus, or weightlessness virus. Weightlessness is a weak contact virus that can only spawn due to randomized virus spreading virus. The virus itself applies weightlessness via having the mob produce their own internal supply of gravitium, resulting in a lack of control from gravity. This is a bit of a patch job, and if we'd like to make this apply a more specific status debuff that can be managed, but this works well enough for proof of concept anyway. ![image](https://github.com/user-attachments/assets/fb1783b2-db7c-49b6-b973-1b7ee35565b7) The disease is cured via liquid dark matter, but has a reasonable chance to self-cure as well similar to most diseases do nowadays. ## Why It's Good For The Game Seemed like an interesting mechanical intersection, and while it can be frustrating, it is by no means a round removal virus. It is debilitating enough that it would necessitate a medbay visit. Liquid dark matter also serves as a occasional grenade chemical, but giving it a medical use provides another inch of plausible deniability. I made this PR a little bit ago on a whim, and it's been sitting on my repo for a hot second here, so I thought I'd get this moving if there's no major issues. --- code/datums/diseases/weightlessness.dm | 43 +++++++++++++++++++++++++ code/modules/events/disease_outbreak.dm | 3 +- tgstation.dme | 1 + 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 code/datums/diseases/weightlessness.dm diff --git a/code/datums/diseases/weightlessness.dm b/code/datums/diseases/weightlessness.dm new file mode 100644 index 0000000000000..c561b3c9205ec --- /dev/null +++ b/code/datums/diseases/weightlessness.dm @@ -0,0 +1,43 @@ +/datum/disease/weightlessness + name = "Localized Weightloss Malfunction" + max_stages = 4 + spread_text = "On Contact" + spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS + cure_text = "Liquid dark matter" + cures = list(/datum/reagent/liquid_dark_matter) + agent = "Sub-quantum DNA Repulsion" + viable_mobtypes = list(/mob/living/carbon/human) + disease_flags = CAN_CARRY|CAN_RESIST|CURABLE + spreading_modifier = 0.5 + cure_chance = 4 + desc = "This disease results in a low level rewrite of the patient's bio-electric signature, causing them to reject the phenomena of \"weight\". Injestion of liquid dark matter tends to stabilize the field." + severity = DISEASE_SEVERITY_MEDIUM + infectable_biotypes = MOB_ORGANIC + + +/datum/disease/weightlessness/stage_act(seconds_per_tick, times_fired) + . = ..() + if(!.) + return + + switch(stage) + if(1) + if(SPT_PROB(1, seconds_per_tick)) + to_chat(affected_mob, span_danger("You almost lose your balance for a second.")) + if(2) + if(SPT_PROB(3, seconds_per_tick) && !HAS_TRAIT_FROM(affected_mob, TRAIT_MOVE_FLOATING, NO_GRAVITY_TRAIT)) + to_chat(affected_mob, span_danger("You feel yourself lift off the ground.")) + affected_mob.reagents.add_reagent(/datum/reagent/gravitum, 1) + + if(4) + if(SPT_PROB(3, seconds_per_tick) && !affected_mob.has_quirk(/datum/quirk/spacer_born)) + to_chat(affected_mob, span_danger("You feel sick as the world starts moving around you.")) + affected_mob.adjust_confusion(3 SECONDS) + if(SPT_PROB(8, seconds_per_tick) && !HAS_TRAIT_FROM(affected_mob, TRAIT_MOVE_FLOATING, NO_GRAVITY_TRAIT)) + to_chat(affected_mob, span_danger("You suddenly lift off the ground.")) + affected_mob.reagents.add_reagent(/datum/reagent/gravitum, 5) + +/datum/disease/weightlessness/cure(add_resistance) + . = ..() + affected_mob.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 95, purge_ratio = 0.4) + to_chat(affected_mob, span_danger("You fall to the floor as your body stops rejecting gravity.")) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 3856bf550b4a3..43c7f98cf19bd 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -111,6 +111,7 @@ /datum/disease/flu, /datum/disease/fluspanish, /datum/disease/magnitis, + /datum/disease/weightlessness, /// And here are some that will never roll for real, just to mess around. /datum/disease/death_sandwich_poisoning, /datum/disease/dna_retrovirus, @@ -138,7 +139,7 @@ virus_candidates += list(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish) //The wacky ones - virus_candidates += list(/datum/disease/magnitis, /datum/disease/anxiety) + virus_candidates += list(/datum/disease/magnitis, /datum/disease/anxiety, /datum/disease/weightlessness) //The rest of the diseases either aren't conventional "diseases" or are too unique/extreme to be considered for a normal event virus_type = pick(virus_candidates) diff --git a/tgstation.dme b/tgstation.dme index 6738e3a083aac..fb2105463dace 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1382,6 +1382,7 @@ #include "code\datums\diseases\rhumba_beat.dm" #include "code\datums\diseases\transformation.dm" #include "code\datums\diseases\tuberculosis.dm" +#include "code\datums\diseases\weightlessness.dm" #include "code\datums\diseases\wizarditis.dm" #include "code\datums\diseases\advance\advance.dm" #include "code\datums\diseases\advance\presets.dm" From bc843e011e19ddf6533d53fee033db705dbfc7e9 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:12:43 +0000 Subject: [PATCH 09/22] Automatic changelog for PR #87666 [ci skip] --- html/changelogs/AutoChangeLog-pr-87666.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-87666.yml diff --git a/html/changelogs/AutoChangeLog-pr-87666.yml b/html/changelogs/AutoChangeLog-pr-87666.yml new file mode 100644 index 0000000000000..79a6bd62c5e08 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-87666.yml @@ -0,0 +1,4 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - rscadd: "Adds a canned disease that can show randomly in space occasionally, causing the target to begin to providing chemicals resulting in the target to avoid needing to be affected by gravity." \ No newline at end of file From 013660537d926b619c23aff0e822326e861e8bad Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 00:28:21 +0000 Subject: [PATCH 10/22] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-87666.yml | 4 -- html/changelogs/AutoChangeLog-pr-88058.yml | 5 -- html/changelogs/AutoChangeLog-pr-88065.yml | 6 -- html/changelogs/AutoChangeLog-pr-88072.yml | 4 -- html/changelogs/AutoChangeLog-pr-88081.yml | 4 -- html/changelogs/AutoChangeLog-pr-88098.yml | 4 -- html/changelogs/AutoChangeLog-pr-88109.yml | 5 -- html/changelogs/AutoChangeLog-pr-88118.yml | 4 -- html/changelogs/AutoChangeLog-pr-88119.yml | 4 -- html/changelogs/AutoChangeLog-pr-88120.yml | 4 -- html/changelogs/AutoChangeLog-pr-88123.yml | 4 -- html/changelogs/AutoChangeLog-pr-88127.yml | 4 -- html/changelogs/AutoChangeLog-pr-88129.yml | 4 -- html/changelogs/AutoChangeLog-pr-88130.yml | 4 -- html/changelogs/AutoChangeLog-pr-88132.yml | 4 -- html/changelogs/AutoChangeLog-pr-88133.yml | 4 -- html/changelogs/AutoChangeLog-pr-88139.yml | 4 -- html/changelogs/AutoChangeLog-pr-88140.yml | 4 -- html/changelogs/AutoChangeLog-pr-88141.yml | 4 -- html/changelogs/AutoChangeLog-pr-88142.yml | 5 -- html/changelogs/AutoChangeLog-pr-88146.yml | 5 -- html/changelogs/AutoChangeLog-pr-88147.yml | 4 -- html/changelogs/AutoChangeLog-pr-88148.yml | 4 -- html/changelogs/AutoChangeLog-pr-88149.yml | 4 -- html/changelogs/AutoChangeLog-pr-88154.yml | 4 -- html/changelogs/AutoChangeLog-pr-88155.yml | 4 -- html/changelogs/AutoChangeLog-pr-88163.yml | 4 -- html/changelogs/AutoChangeLog-pr-88174.yml | 4 -- html/changelogs/archive/2024-11.yml | 64 ++++++++++++++++++++++ 29 files changed, 64 insertions(+), 118 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-87666.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88058.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88065.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88072.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88081.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88098.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88109.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88118.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88119.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88120.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88123.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88127.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88129.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88130.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88132.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88133.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88139.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88140.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88141.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88142.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88146.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88147.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88148.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88149.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88154.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88155.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88163.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88174.yml diff --git a/html/changelogs/AutoChangeLog-pr-87666.yml b/html/changelogs/AutoChangeLog-pr-87666.yml deleted file mode 100644 index 79a6bd62c5e08..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-87666.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - rscadd: "Adds a canned disease that can show randomly in space occasionally, causing the target to begin to providing chemicals resulting in the target to avoid needing to be affected by gravity." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88058.yml b/html/changelogs/AutoChangeLog-pr-88058.yml deleted file mode 100644 index 4fa0223761707..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88058.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Mifutus" -delete-after: True -changes: - - rscadd: "Added new moth customizations available in the character creation under the name \"Dipped\"" - - image: "added icons for the moth wings, antennae and markings\n:cl:" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88065.yml b/html/changelogs/AutoChangeLog-pr-88065.yml deleted file mode 100644 index 137a5dcb4a02d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88065.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - balance: "Nerfed slipperiness from fish infusion. It no longer knockdowns but it staggers and slides the user one or two tiles away." - - balance: "Added a slight natural weakness to fire/heat to the fish infusion, which, taking the minor general damage resistance resistance when wet, is pretty mild." - - balance: "hot temperature projectiles from the temperature gun (and watchers I think) also dry living creatures hit by them." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88072.yml b/html/changelogs/AutoChangeLog-pr-88072.yml deleted file mode 100644 index dfc9728aad8b4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88072.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - image: "Muzzle flash now is attached to your sprite, meaning you won't run over it if you fire while moving" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88081.yml b/html/changelogs/AutoChangeLog-pr-88081.yml deleted file mode 100644 index f06e344500cec..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88081.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed a runtime in cranial fissure remove code" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88098.yml b/html/changelogs/AutoChangeLog-pr-88098.yml deleted file mode 100644 index 5a26403292a88..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88098.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - code_imp: "Change some status effects to use SECONDS define." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88109.yml b/html/changelogs/AutoChangeLog-pr-88109.yml deleted file mode 100644 index 19f948fcc4ca3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88109.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "carlarctg" -delete-after: True -changes: - - qol: "carpenter hammer fits on belt slot" - - code_imp: "renames belt_icon_state to inside_belt_icon_state for intelligibiility" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88118.yml b/html/changelogs/AutoChangeLog-pr-88118.yml deleted file mode 100644 index f82d4e2c0fe0f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88118.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Auris456852" -delete-after: True -changes: - - bugfix: "Makes a sliced baklava pie keep its complexity after slicing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88119.yml b/html/changelogs/AutoChangeLog-pr-88119.yml deleted file mode 100644 index 13d9297440793..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88119.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - bugfix: "Fix weather effects ignoring certain areas like space." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88120.yml b/html/changelogs/AutoChangeLog-pr-88120.yml deleted file mode 100644 index c8eb7ab41a8e5..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88120.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dawnseer" -delete-after: True -changes: - - bugfix: "fixed some erronous spriting on the zippo" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88123.yml b/html/changelogs/AutoChangeLog-pr-88123.yml deleted file mode 100644 index e9586c31e5e78..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88123.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - image: "Changing clipboard skins now changes the inhands sprite as well" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88127.yml b/html/changelogs/AutoChangeLog-pr-88127.yml deleted file mode 100644 index 00f1b2cc53f7a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88127.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed a runtime caused by logging out while your runechat message was appearing." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88129.yml b/html/changelogs/AutoChangeLog-pr-88129.yml deleted file mode 100644 index d86daaa1bc14f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88129.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed atrocinator module footstep spam when you're moving on a tram" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88130.yml b/html/changelogs/AutoChangeLog-pr-88130.yml deleted file mode 100644 index cb093fb25d7db..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88130.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed meteors freezing in place if they continiously miss the station on a looping z level" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88132.yml b/html/changelogs/AutoChangeLog-pr-88132.yml deleted file mode 100644 index 59786eca83a0f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88132.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - code_imp: "Cleaned up organ code" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88133.yml b/html/changelogs/AutoChangeLog-pr-88133.yml deleted file mode 100644 index 102bfe9adce67..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88133.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "changelings now have a sound for absorbing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88139.yml b/html/changelogs/AutoChangeLog-pr-88139.yml deleted file mode 100644 index 549d5583fa485..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88139.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "fixed some wiring on wawastation, added an additional distro/scrubbers connection to sciences network" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88140.yml b/html/changelogs/AutoChangeLog-pr-88140.yml deleted file mode 100644 index 38d16cbe558d6..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88140.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - bugfix: "Fix coffee maker items teleporting to AI/Cyborg locations" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88141.yml b/html/changelogs/AutoChangeLog-pr-88141.yml deleted file mode 100644 index 3a595c93e9e0c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88141.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "damage done by thrown objects to objects respects their demolition modifier" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88142.yml b/html/changelogs/AutoChangeLog-pr-88142.yml deleted file mode 100644 index 6e51235fa05b8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88142.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Blind people no longer make eye contact with their hands" - - bugfix: "Blindfolds and other sorts of opaque eye coverage now prevent eye contact from occuring" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88146.yml b/html/changelogs/AutoChangeLog-pr-88146.yml deleted file mode 100644 index 0d3cd43f0c22e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88146.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Mifutus" -delete-after: True -changes: - - bugfix: "fixed the pulse rifle not spawning when won" - - code_imp: "added get_turf to the pulserifle when the odds are beat.\n:cl:" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88147.yml b/html/changelogs/AutoChangeLog-pr-88147.yml deleted file mode 100644 index 7f0b84ab8d4cd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88147.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed a random zero in nuke ops uplink UI" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88148.yml b/html/changelogs/AutoChangeLog-pr-88148.yml deleted file mode 100644 index 8861b436989fc..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88148.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EnterTheJake" -delete-after: True -changes: - - image: "Heretic's Moon Blade has received a new sprite." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88149.yml b/html/changelogs/AutoChangeLog-pr-88149.yml deleted file mode 100644 index 3b4701923978f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88149.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - refactor: "Cleaned up code relating to heretic ascension announcements and traits." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88154.yml b/html/changelogs/AutoChangeLog-pr-88154.yml deleted file mode 100644 index 657dc850c2723..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88154.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - qol: "Reagent grinders display number of material sheets they hold instead of defaulting to 1" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88155.yml b/html/changelogs/AutoChangeLog-pr-88155.yml deleted file mode 100644 index 044b3923208c9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88155.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GoblinBackwards" -delete-after: True -changes: - - bugfix: "fixed the fire effect not appearing on burning gasses" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88163.yml b/html/changelogs/AutoChangeLog-pr-88163.yml deleted file mode 100644 index 7541c67527e3c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88163.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed some issues with defib paddle retraction." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88174.yml b/html/changelogs/AutoChangeLog-pr-88174.yml deleted file mode 100644 index 3efa289952b89..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88174.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed fishing turfs not lazyloading" \ No newline at end of file diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index 1178bed657af7..941cac464a017 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -873,3 +873,67 @@ - bugfix: Fix fireplace particles runtimes. timothymtorres, SmArtKar: - bugfix: Fix chewable bubblegum not metabolizing due to microdose +2024-11-25: + Absolucy: + - refactor: Cleaned up code relating to heretic ascension announcements and traits. + ArcaneMusic: + - rscadd: Adds a canned disease that can show randomly in space occasionally, causing + the target to begin to providing chemicals resulting in the target to avoid + needing to be affected by gravity. + Auris456852: + - bugfix: Makes a sliced baklava pie keep its complexity after slicing + Dawnseer: + - bugfix: fixed some erronous spriting on the zippo + EnterTheJake: + - image: Heretic's Moon Blade has received a new sprite. + Ghommie: + - balance: Nerfed slipperiness from fish infusion. It no longer knockdowns but it + staggers and slides the user one or two tiles away. + - balance: Added a slight natural weakness to fire/heat to the fish infusion, which, + taking the minor general damage resistance resistance when wet, is pretty mild. + - balance: hot temperature projectiles from the temperature gun (and watchers I + think) also dry living creatures hit by them. + GoblinBackwards: + - bugfix: fixed the fire effect not appearing on burning gasses + Mifutus: + - rscadd: Added new moth customizations available in the character creation under + the name "Dipped" + - image: 'added icons for the moth wings, antennae and markings + + :cl:' + - bugfix: fixed the pulse rifle not spawning when won + - code_imp: 'added get_turf to the pulserifle when the odds are beat. + + :cl:' + SmArtKar: + - code_imp: Cleaned up organ code + - bugfix: Fixed meteors freezing in place if they continiously miss the station + on a looping z level + - image: Muzzle flash now is attached to your sprite, meaning you won't run over + it if you fire while moving + - bugfix: Fixed some issues with defib paddle retraction. + - bugfix: Fixed atrocinator module footstep spam when you're moving on a tram + - qol: Reagent grinders display number of material sheets they hold instead of defaulting + to 1 + - image: Changing clipboard skins now changes the inhands sprite as well + - bugfix: Fixed a runtime in cranial fissure remove code + - bugfix: Fixed fishing turfs not lazyloading + - bugfix: Blind people no longer make eye contact with their hands + - bugfix: Blindfolds and other sorts of opaque eye coverage now prevent eye contact + from occuring + - bugfix: Fixed a random zero in nuke ops uplink UI + - bugfix: Fixed a runtime caused by logging out while your runechat message was + appearing. + carlarctg: + - qol: carpenter hammer fits on belt slot + - code_imp: renames belt_icon_state to inside_belt_icon_state for intelligibiility + grungussuss: + - sound: changelings now have a sound for absorbing + mc-oofert: + - bugfix: fixed some wiring on wawastation, added an additional distro/scrubbers + connection to sciences network + - bugfix: damage done by thrown objects to objects respects their demolition modifier + timothymtorres: + - bugfix: Fix weather effects ignoring certain areas like space. + - bugfix: Fix coffee maker items teleporting to AI/Cyborg locations + - code_imp: Change some status effects to use SECONDS define. From a2d463cdd80e7d6e569abbf5ff543c8ba01f68ab Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:59:21 +0300 Subject: [PATCH 11/22] Guncode Agony 4.4: Armor as an argument (#88143) ## About The Pull Request Lil cleanup/tweak I couldn't do in the main PR because it conflicted before and i forgot after. Yes this works with overrides that don't have the arg, yes I tested it. ## Why It's Good For The Game Don't run armor code thrice please thank you ## Changelog :cl: code: Projectile impacts no longer fetch mobs' armor values thrice /:cl: --- .../signals_atom/signals_atom_x_act.dm | 4 ++-- code/game/atom/atom_act.dm | 23 +++++++++++++++---- code/modules/hydroponics/hydroponics.dm | 2 +- code/modules/lost_crew/damages/projectile.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 2 +- code/modules/mob/living/living_defense.dm | 3 +-- .../computers/machinery/modular_computer.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- .../surgery/organs/internal/eyes/_eyes.dm | 3 +-- code/modules/vehicles/atv.dm | 2 +- code/modules/vehicles/mecha/combat/durand.dm | 2 +- code/modules/vehicles/mecha/mecha_defense.dm | 2 +- code/modules/vehicles/secway.dm | 2 +- 13 files changed, 32 insertions(+), 19 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm index 3d28fdd81162c..bedfaf2fa0374 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm @@ -14,7 +14,7 @@ #define COMSIG_ATOM_EMP_ACT "atom_emp_act" ///from base of atom/fire_act(): (exposed_temperature, exposed_volume) #define COMSIG_ATOM_FIRE_ACT "atom_fire_act" -///from base of atom/bullet_act(): (/obj/projectile, def_zone) +///from base of atom/bullet_act(): (/obj/proj, def_zone, piercing_hit, blocked) #define COMSIG_ATOM_PRE_BULLET_ACT "pre_atom_bullet_act" /// All this does is prevent default bullet on_hit from being called, [BULLET_ACT_HIT] being return is implied #define COMPONENT_BULLET_ACTED (1<<0) @@ -22,7 +22,7 @@ #define COMPONENT_BULLET_BLOCKED (1<<1) /// Forces bullet act to return [BULLET_ACT_FORCE_PIERCE], takes priority over above #define COMPONENT_BULLET_PIERCED (1<<2) -///from base of atom/bullet_act(): (/obj/projectile, def_zone) +///from base of atom/bullet_act(): (/obj/proj, def_zone, piercing_hit, blocked) #define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" ///from base of atom/CheckParts(): (list/parts_list, datum/crafting_recipe/R) #define COMSIG_ATOM_CHECKPARTS "atom_checkparts" diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm index 8565d790612c2..54f023eb86b59 100644 --- a/code/game/atom/atom_act.dm +++ b/code/game/atom/atom_act.dm @@ -75,6 +75,20 @@ SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity, protection) return protection // Pass the protection value collected here upwards +/** + * Wrapper for bullet_act used for atom-specific calculations, i.e. armor + * + * @params + * * hitting_projectile - projectile + * * def_zone - zone hit + * * piercing_hit - is this hit piercing or normal? + */ + +/atom/proc/projectile_hit(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE, blocked = null) + if (isnull(blocked)) + blocked = check_projectile_armor(def_zone, hitting_projectile) + return bullet_act(hitting_projectile, def_zone, piercing_hit, blocked) + /** * React to a hit by a projectile object * @@ -82,11 +96,12 @@ * * hitting_projectile - projectile * * def_zone - zone hit * * piercing_hit - is this hit piercing or normal? + * * blocked - total armor value to apply to this hit */ -/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) +/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE, blocked = 0) SHOULD_CALL_PARENT(TRUE) - var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone) + var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone, piercing_hit, blocked) if(sigreturn & COMPONENT_BULLET_PIERCED) return BULLET_ACT_FORCE_PIERCE if(sigreturn & COMPONENT_BULLET_BLOCKED) @@ -94,7 +109,7 @@ if(sigreturn & COMPONENT_BULLET_ACTED) return BULLET_ACT_HIT - SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone) + SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone, piercing_hit, blocked) if(QDELETED(hitting_projectile)) // Signal deleted it? return BULLET_ACT_BLOCK @@ -102,7 +117,7 @@ target = src, // This armor check only matters for the visuals and messages in on_hit(), it's not actually used to reduce damage since // only living mobs use armor to reduce damage, but on_hit() is going to need the value no matter what is shot. - blocked = check_projectile_armor(def_zone, hitting_projectile), + blocked = blocked, pierce_hit = piercing_hit, ) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index e6eb41c42e6c6..c8a3e10b8e931 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -293,7 +293,7 @@ mutate() return BULLET_ACT_HIT if(istype(proj, /obj/projectile/energy/flora/yield)) - return myseed.bullet_act(proj) + return myseed.projectile_hit(proj) if(istype(proj, /obj/projectile/energy/flora/evolution)) if(myseed) if(LAZYLEN(myseed.mutatelist)) diff --git a/code/modules/lost_crew/damages/projectile.dm b/code/modules/lost_crew/damages/projectile.dm index 121304ac9b5c7..64541cf1eaf61 100644 --- a/code/modules/lost_crew/damages/projectile.dm +++ b/code/modules/lost_crew/damages/projectile.dm @@ -13,7 +13,7 @@ var/hits = ((max_hits - min_hits) * severity + min_hits) for(var/i in 1 to hits) - body.bullet_act(projectile, def_zone = pick(GLOB.all_body_zones), piercing_hit = TRUE) + body.projectile_hit(projectile, def_zone = pick(GLOB.all_body_zones), piercing_hit = TRUE) /datum/corpse_damage/cause_of_death/projectile/laser projectile = /obj/projectile/beam/laser diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 36c9182d32b06..1a5e4b60ecc81 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -60,7 +60,7 @@ playsound(src, held_item.block_sound, BLOCK_SOUND_VOLUME, TRUE) // Find a turf near or on the original location to bounce to if(!isturf(loc)) //Open canopy mech (ripley) check. if we're inside something and still got hit - return loc.bullet_act(bullet, def_zone, piercing_hit) + return loc.projectile_hit(bullet, def_zone, piercing_hit) bullet.reflect(src) return BULLET_ACT_FORCE_PIERCE // complete projectile permutation diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 71dc34b986f38..230d0d9ab1ce2 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -91,12 +91,11 @@ /mob/living/proc/is_ears_covered() return null -/mob/living/bullet_act(obj/projectile/proj, def_zone, piercing_hit = FALSE) +/mob/living/bullet_act(obj/projectile/proj, def_zone, piercing_hit = FALSE, blocked = 0) . = ..() if (. != BULLET_ACT_HIT) return . - var/blocked = check_projectile_armor(def_zone, proj, is_silent = TRUE) if(blocked >= 100) if(proj.is_hostile_projectile()) apply_projectile_effects(proj, def_zone, blocked) diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 2d81fb6c3b5cb..763335d6728ab 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -187,6 +187,6 @@ // "Burn" damage is equally strong against internal components and exterior casing // "Brute" damage mostly damages the casing. /obj/machinery/modular_computer/bullet_act(obj/projectile/proj) - return cpu?.bullet_act(proj) || ..() + return cpu?.projectile_hit(proj) || ..() #undef CPU_INTERACTABLE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f5c62e1d05986..c4c5d42164ce0 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -533,7 +533,7 @@ pierces += 1 // Targets should handle their impact logic on our own and if they decide that we hit them, they call our on_hit - var/result = target.bullet_act(src, def_zone, mode == PROJECTILE_PIERCE_HIT) + var/result = target.projectile_hit(src, def_zone, mode == PROJECTILE_PIERCE_HIT) if (result != BULLET_ACT_FORCE_PIERCE && max_pierces && pierces >= max_pierces) return PROJECTILE_IMPACT_SUCCESSFUL diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index fd6beabcb0d1f..0f7e229b24cb7 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -107,14 +107,13 @@ organ_owner.update_sight() UnregisterSignal(organ_owner, COMSIG_ATOM_BULLET_ACT) -/obj/item/organ/eyes/proc/on_bullet_act(mob/living/carbon/source, obj/projectile/proj, def_zone) +/obj/item/organ/eyes/proc/on_bullet_act(mob/living/carbon/source, obj/projectile/proj, def_zone, piercing_hit, blocked) SIGNAL_HANDLER // Once-a-dozen-rounds level of rare if (def_zone != BODY_ZONE_HEAD || !prob(proj.damage * 0.1) || !(proj.damage_type == BRUTE || proj.damage_type == BURN)) return - var/blocked = source.check_projectile_armor(def_zone, proj, is_silent = TRUE) if (blocked && source.is_eyes_covered()) if (!proj.armour_penetration || prob(blocked - proj.armour_penetration)) return diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 6a472ccc31c4d..3840bfe0cd201 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -116,7 +116,7 @@ if(prob(50) || !LAZYLEN(buckled_mobs)) return ..() for(var/mob/buckled_mob as anything in buckled_mobs) - return buckled_mob.bullet_act(proj) + return buckled_mob.projectile_hit(proj) return ..() /obj/vehicle/ridden/atv/atom_destruction() diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index da1f7122dd14a..1497c4c615de7 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -84,7 +84,7 @@ //Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. /obj/vehicle/sealed/mecha/durand/bullet_act(obj/projectile/source, def_zone, mode) if(defense_check(source.loc) && shield) - return shield.bullet_act(source, def_zone, mode) + return shield.projectile_hit(source, def_zone, mode) return ..() diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index f0fdc3997a39d..d7f52915a4b2b 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -121,7 +121,7 @@ && !(mecha_flags & SILICON_PILOT) \ && (def_zone == BODY_ZONE_HEAD || def_zone == BODY_ZONE_CHEST)) var/mob/living/hitmob = pick(occupants) - return hitmob.bullet_act(hitting_projectile, def_zone, piercing_hit) //If the sides are open, the occupant can be hit + return hitmob.projectile_hit(hitting_projectile, def_zone, piercing_hit) //If the sides are open, the occupant can be hit . = ..() diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index 341167630af14..6042210d01ca1 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -101,5 +101,5 @@ if(!buckled_mobs || prob(40)) return ..() for(var/mob/rider as anything in buckled_mobs) - return rider.bullet_act(proj) + return rider.projectile_hit(proj) return ..() From 40d42eba351a087b1da3d8f231982e1abea837c9 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:59:44 +0000 Subject: [PATCH 12/22] Automatic changelog for PR #88143 [ci skip] --- html/changelogs/AutoChangeLog-pr-88143.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88143.yml diff --git a/html/changelogs/AutoChangeLog-pr-88143.yml b/html/changelogs/AutoChangeLog-pr-88143.yml new file mode 100644 index 0000000000000..edf021d82cd40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88143.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - code_imp: "Projectile impacts no longer fetch mobs' armor values thrice" \ No newline at end of file From f720e551d95fa625e2fd503aeb2719d512c69b0e Mon Sep 17 00:00:00 2001 From: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:14:52 -0300 Subject: [PATCH 13/22] Fixes ghosts being able to make analyzing sounds (#88177) ## About The Pull Request Prevents ghost from emitting analyzing sounds when using the gas scan verb ## Why It's Good For The Game Fixes a little bug ## Changelog :cl: Hardly fix: Ghosts can no longer emit spooky analyzing sounds when scanning /:cl: --- code/game/objects/items/devices/scanners/gas_analyzer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index d71d84e1f1909..112833877c4d3 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -183,8 +183,8 @@ var/icon = target var/message = list() - playsound(user, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) if(!silent && isliving(user)) + playsound(user, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) user.visible_message(span_notice("[user] uses the analyzer on [icon2html(icon, viewers(user))] [target]."), span_notice("You use the analyzer on [icon2html(icon, user)] [target].")) message += span_boldnotice("Results of analysis of [icon2html(icon, user)] [target].") From b965535732c7d3f5c4d0de982548c1f819b7601d Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:15:14 +0000 Subject: [PATCH 14/22] Automatic changelog for PR #88177 [ci skip] --- html/changelogs/AutoChangeLog-pr-88177.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88177.yml diff --git a/html/changelogs/AutoChangeLog-pr-88177.yml b/html/changelogs/AutoChangeLog-pr-88177.yml new file mode 100644 index 0000000000000..c8c6b94053e49 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88177.yml @@ -0,0 +1,4 @@ +author: "Hardly" +delete-after: True +changes: + - bugfix: "Ghosts can no longer emit spooky analyzing sounds when scanning" \ No newline at end of file From 60cbc47ef078872201bd9ee53cc142f74798d36b Mon Sep 17 00:00:00 2001 From: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com> Date: Mon, 25 Nov 2024 07:15:30 -0700 Subject: [PATCH 15/22] Adds a fuel examine to lighters (#88170) ## About The Pull Request Didn't even know they had this until it stopped lighting. While it has fuel, it says it has x fuel out of its maximum. When empty, it says what to refuel it with (welder fuel) ![image](https://github.com/user-attachments/assets/4096e68f-c2e5-4b50-abd4-f904059a23ee)
(For reference, Welders have something similar) ![image](https://github.com/user-attachments/assets/afbf675c-85ee-49c8-8956-0e77352544d6)
I do not know how to set up math to make this number more useful; it tends to burn .25 units ever few seconds but beyond that it's just numbers and I'm not the best with numbers. At the least you can see if it's full or empty. ## Why It's Good For The Game This mechanic is not shown to players in any way besides the lighter not lighting. ## Changelog :cl: qol: added an examine note to lighters showing their fuel /:cl: --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> --- code/game/objects/items/lighter.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/objects/items/lighter.dm b/code/game/objects/items/lighter.dm index a27db91909c3d..38794ab9079e3 100644 --- a/code/game/objects/items/lighter.dm +++ b/code/game/objects/items/lighter.dm @@ -52,6 +52,13 @@ ) update_appearance() +/obj/item/lighter/examine(mob/user) + . = ..() + if(get_fuel() <= 0) + . += span_warning("It is out of lighter fluid! Refill it with welder fuel.") + else + . += span_notice("It contains [get_fuel()] units of fuel out of [maximum_fuel].") + /// Destroy the lighter when it's shot by a bullet /obj/item/lighter/proc/on_intercepted_bullet(mob/living/victim, obj/projectile/bullet) victim.visible_message(span_warning("\The [bullet] shatters on [victim]'s lighter!")) From f3a73a3cf2e11718f786a4a9e9e40830bf3feadc Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:15:54 +0000 Subject: [PATCH 16/22] Automatic changelog for PR #88170 [ci skip] --- html/changelogs/AutoChangeLog-pr-88170.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88170.yml diff --git a/html/changelogs/AutoChangeLog-pr-88170.yml b/html/changelogs/AutoChangeLog-pr-88170.yml new file mode 100644 index 0000000000000..90451a3c59837 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88170.yml @@ -0,0 +1,4 @@ +author: "OrionTheFox" +delete-after: True +changes: + - qol: "added an examine note to lighters showing their fuel" \ No newline at end of file From e4cff9687b4b7563e5a2d129a6cdff8b008679d1 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:16:09 +0300 Subject: [PATCH 17/22] [NO GBP] Fixes a non-player facing runtime I accidentally left in organ manipulation (#88164) ## About The Pull Request Thankfully this runtime didn't actually do anything whatsoever but it still messed in the logs. I'll test my stuff better I guess? ## Changelog :cl: fix: Fixed a (non-player facing) runtime in organ manipulation surgery /:cl: --- code/modules/surgery/organ_manipulation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 2b5cb38b92f58..c8de2490f611e 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -17,9 +17,9 @@ . = ..() if(!.) return + // We've completed the surgery if(status > length(steps)) - remove_fishing_spot() return if(!ispath(steps[status], /datum/surgery_step/manipulate_organs)) From 8df3ffaa6b03fe05c1bf9eba3eb69fc2fce71f38 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:16:30 +0000 Subject: [PATCH 18/22] Automatic changelog for PR #88164 [ci skip] --- html/changelogs/AutoChangeLog-pr-88164.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88164.yml diff --git a/html/changelogs/AutoChangeLog-pr-88164.yml b/html/changelogs/AutoChangeLog-pr-88164.yml new file mode 100644 index 0000000000000..20da10db6c1c7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88164.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixed a (non-player facing) runtime in organ manipulation surgery" \ No newline at end of file From 20b920830082a9a5a1e0ed7088612feac00913ff Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:24:05 +0200 Subject: [PATCH 19/22] fixes raptors breaking their troughs, removes troublesome raptors and you can now rename ur raptors (#88153) ## About The Pull Request after my PR removing most self-registering attack signals, raptors would sometimes break their troughs after interacting with it, this fixes that. Also, removes the troublesome trait from raptors. raptors with this trait would go out and harm other raptors everyonce in a while, but ive discovered that this can be annoying to deal with when you have many of them, so ive removed it and im going to replace it with something less annoying in the future. Also you can now give your raptors pet collars, effectively allowing u to rename them ## Why It's Good For The Game fixes raptors breaking their trough and provides some QOL to raptor ranching ## Changelog :cl: fix: raptors no longer break their trough upon interacting with it balance: removed the troublesome trait from raptors, they now wont go out to attack their colleagues. add: you can now give pet collars to ur raptors to rename them /:cl: --- code/__DEFINES/basic_mobs.dm | 6 ------ .../mob/living/basic/lavaland/raptor/_raptor.dm | 4 ++-- .../basic/lavaland/raptor/raptor_ai_behavior.dm | 15 --------------- .../basic/lavaland/raptor/raptor_ai_controller.dm | 1 - .../basic/lavaland/raptor/raptor_ai_subtrees.dm | 15 --------------- 5 files changed, 2 insertions(+), 39 deletions(-) diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index 12ddaa3a68af9..75dcfbc3bd5a7 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -60,16 +60,10 @@ GLOBAL_LIST_EMPTY(customized_pets) #define BB_RAPTOR_PLAYFUL "raptor_playful" ///this mob will flee combat when it feels threatened #define BB_RAPTOR_COWARD "raptor_coward" -///this mob will go out seeking trouble against its kind -#define BB_RAPTOR_TROUBLE_MAKER "raptor_trouble_maker" -///cooldown till we go out cause trouble again -#define BB_RAPTOR_TROUBLE_COOLDOWN "raptor_trouble_maker_cooldown" ///our raptor baby target we will take care of #define BB_RAPTOR_BABY "raptor_baby" ///the raptor we will heal up #define BB_INJURED_RAPTOR "injured_raptor" -///the raptor we will bully -#define BB_RAPTOR_VICTIM "raptor_victim" ///the cooldown for next time we eat #define BB_RAPTOR_EAT_COOLDOWN "raptor_eat_cooldown" ///our trough target diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm index 917c9c3c43871..5166211b13828 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm @@ -12,7 +12,6 @@ GLOBAL_LIST_INIT(raptor_inherit_traits, list( BB_RAPTOR_MOTHERLY = "Motherly", BB_RAPTOR_PLAYFUL = "Playful", BB_RAPTOR_COWARD = "Coward", - BB_RAPTOR_TROUBLE_MAKER = "Trouble Maker", )) GLOBAL_LIST_EMPTY(raptor_population) @@ -70,6 +69,7 @@ GLOBAL_LIST_EMPTY(raptor_population) change_offsets = FALSE icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi' + AddElement(/datum/element/wears_collar) add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) if(!mapload) @@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(raptor_population) balloon_alert(src, "no food!") else melee_attack(ore_food) - return TRUE + return FALSE /mob/living/basic/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown) if(!combat_mode && istype(target, /mob/living/basic/raptor/baby_raptor)) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm index a826fb4a4363a..a412fceeb1276 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm @@ -7,21 +7,6 @@ /datum/ai_behavior/find_hunt_target/injured_raptor/valid_dinner(mob/living/source, mob/living/target, radius) return (source != target && target.health < target.maxHealth) -/datum/ai_behavior/find_hunt_target/raptor_victim - action_cooldown = 30 SECONDS - -/datum/ai_behavior/find_hunt_target/raptor_victim/valid_dinner(mob/living/source, mob/living/target, radius) - if(target.ai_controller?.blackboard[BB_RAPTOR_TROUBLE_MAKER]) - return FALSE - return target.stat != DEAD && can_see(source, target, radius) - -/datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors - -/datum/ai_behavior/hunt_target/interact_with_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - if(succeeded) - controller.set_blackboard_key(BB_RAPTOR_TROUBLE_COOLDOWN, world.time + 2 MINUTES) - return ..() - /datum/ai_behavior/find_hunt_target/raptor_baby/valid_dinner(mob/living/source, mob/living/target, radius) return can_see(source, target, radius) && target.stat != DEAD diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm index d9bada12ee8db..4241eb4295e73 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm @@ -27,7 +27,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough, /datum/ai_planning_subtree/find_and_hunt_target/care_for_young, /datum/ai_planning_subtree/make_babies, - /datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble, /datum/ai_planning_subtree/express_happiness, /datum/ai_planning_subtree/find_and_hunt_target/play_with_owner/raptor, ) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm index 2b88cc3282bd0..06697d60b942f 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm @@ -11,21 +11,6 @@ return return ..() -/datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble - target_key = BB_RAPTOR_VICTIM - hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors - finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim - hunt_targets = list(/mob/living/basic/raptor) - hunt_chance = 30 - hunt_range = 9 - -/datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - if(controller.blackboard[BB_BASIC_MOB_HEALER] || !controller.blackboard[BB_RAPTOR_TROUBLE_MAKER]) - return - if(world.time < controller.blackboard[BB_RAPTOR_TROUBLE_COOLDOWN]) - return - return ..() - /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/raptor target_key = BB_BASIC_MOB_FLEE_TARGET From f290bd0f2df82d2ff2dd3730648f5839952504c6 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:24:47 +0000 Subject: [PATCH 20/22] Automatic changelog for PR #88153 [ci skip] --- html/changelogs/AutoChangeLog-pr-88153.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88153.yml diff --git a/html/changelogs/AutoChangeLog-pr-88153.yml b/html/changelogs/AutoChangeLog-pr-88153.yml new file mode 100644 index 0000000000000..cbd9775492e0b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88153.yml @@ -0,0 +1,6 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - bugfix: "raptors no longer break their trough upon interacting with it" + - balance: "removed the troublesome trait from raptors, they now wont go out to attack their colleagues." + - rscadd: "you can now give pet collars to ur raptors to rename them" \ No newline at end of file From 4ca8e1333a1ab0516c929a2ef80a89ca8c71a56e Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Mon, 25 Nov 2024 19:48:48 +0300 Subject: [PATCH 21/22] [NO GBP] Ensures that if your brain is removed you die (#88194) ## About The Pull Request Closes #88193 ## Changelog :cl: fix: Ensures that if your brain is removed you die /:cl: --- code/modules/surgery/organs/organ_movement.dm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index 69dd5b78b8a5e..46fddf303391a 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -189,6 +189,13 @@ if(!special) organ_owner.hud_used?.update_locked_slots() + if((organ_flags & ORGAN_VITAL) && !special && !HAS_TRAIT(organ_owner, TRAIT_GODMODE)) + if(organ_owner.stat != DEAD) + organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) + organ_owner.death() + + START_PROCESSING(SSobj, src) + var/list/diseases = organ_owner.get_static_viruses() if(!LAZYLEN(diseases)) return @@ -208,13 +215,6 @@ if(LAZYLEN(diseases_to_add)) AddComponent(/datum/component/infective, diseases_to_add) - if((organ_flags & ORGAN_VITAL) && !special && !HAS_TRAIT(organ_owner, TRAIT_GODMODE)) - if(organ_owner.stat != DEAD) - organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) - organ_owner.death() - - START_PROCESSING(SSobj, src) - /// Called to remove an organ from a limb. Do not put any mob operations here (except the bodypart_getter at the start) /// Give EITHER a limb OR a limb_owner /obj/item/organ/proc/bodypart_remove(obj/item/bodypart/limb, mob/living/carbon/limb_owner, movement_flags) From 2bdedeb5356c3deae9e9555b8fec7341ad1b75c7 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:49:24 +0000 Subject: [PATCH 22/22] Automatic changelog for PR #88194 [ci skip] --- html/changelogs/AutoChangeLog-pr-88194.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88194.yml diff --git a/html/changelogs/AutoChangeLog-pr-88194.yml b/html/changelogs/AutoChangeLog-pr-88194.yml new file mode 100644 index 0000000000000..93ff0c6adf555 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88194.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Ensures that if your brain is removed you die" \ No newline at end of file