From e9360876127cc678f4264bcb9ea05a2a536cb391 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 27 May 2024 00:22:07 +0000 Subject: [PATCH 01/49] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-83420.yml | 4 ---- html/changelogs/AutoChangeLog-pr-83421.yml | 4 ---- html/changelogs/AutoChangeLog-pr-83432.yml | 4 ---- html/changelogs/AutoChangeLog-pr-83453.yml | 4 ---- html/changelogs/AutoChangeLog-pr-83455.yml | 4 ---- html/changelogs/AutoChangeLog-pr-83486.yml | 4 ---- html/changelogs/archive/2024-05.yml | 13 +++++++++++++ 7 files changed, 13 insertions(+), 24 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-83420.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83421.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83432.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83453.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83455.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83486.yml diff --git a/html/changelogs/AutoChangeLog-pr-83420.yml b/html/changelogs/AutoChangeLog-pr-83420.yml deleted file mode 100644 index 1d1cb39750c2a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83420.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "YesterdaysPromise" -delete-after: True -changes: - - image: "Cleaned a single stray pixel in a single frame of a bite telegraphing accidentaly found while re-organizing the files." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83421.yml b/html/changelogs/AutoChangeLog-pr-83421.yml deleted file mode 100644 index 9a03244707dcd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83421.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - refactor: "Refactored the way high toxins cause you to vomit." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83432.yml b/html/changelogs/AutoChangeLog-pr-83432.yml deleted file mode 100644 index 53ebc36723874..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83432.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "by INFRARED_BARON" -delete-after: True -changes: - - image: "Changes the sprites of bone and ash drake armor (suit + helmet mob/objs)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83453.yml b/html/changelogs/AutoChangeLog-pr-83453.yml deleted file mode 100644 index cc036ce9d1498..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83453.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Time-Green" -delete-after: True -changes: - - rscdel: "Removes sentient disease from the game" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83455.yml b/html/changelogs/AutoChangeLog-pr-83455.yml deleted file mode 100644 index d7f9b7d0dd1b6..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83455.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Time-Green" -delete-after: True -changes: - - rscdel: "Miasma and gibs no longer generates random diseases" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83486.yml b/html/changelogs/AutoChangeLog-pr-83486.yml deleted file mode 100644 index 1ae1044efe103..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83486.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "necromanceranne" -delete-after: True -changes: - - bugfix: "Material floor tiles once again have their improved sprite." \ No newline at end of file diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index 0bc768070518f..051c951627ac3 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -700,3 +700,16 @@ - qol: Made borg inventory not shift around depending on equipped items tmyqlfpir: - bugfix: '[Ice Box Station] Dorm 1''s door no longer shares ID with dorm 2''s door' +2024-05-27: + Melbert: + - refactor: Refactored the way high toxins cause you to vomit. + Time-Green: + - rscdel: Removes sentient disease from the game + - rscdel: Miasma and gibs no longer generates random diseases + YesterdaysPromise: + - image: Cleaned a single stray pixel in a single frame of a bite telegraphing accidentaly + found while re-organizing the files. + by INFRARED_BARON: + - image: Changes the sprites of bone and ash drake armor (suit + helmet mob/objs) + necromanceranne: + - bugfix: Material floor tiles once again have their improved sprite. From 309a240ab8dfa120d90ccb4530f0768e3cf98c9d Mon Sep 17 00:00:00 2001 From: Fikou <23585223+Fikou@users.noreply.github.com> Date: Mon, 27 May 2024 18:40:00 +0200 Subject: [PATCH 02/49] makes food hud burger icon have a sharp outline (#83380) ## About The Pull Request instead of ![image](https://github.com/tgstation/tgstation/assets/23585223/fa013f8d-d402-4714-8f85-986273643f86) will look more like this ![image](https://github.com/MrMelbert/tgstation/assets/23585223/8fe754c8-5242-4e8d-be6f-90897c8eae5d) also i would like to make it not protrude from the middle of your hud it looks ugly but idk where to put it @Mothblocks ## Why It's Good For The Game anti aliasing smells ## Changelog :cl: image: makes food hud burger icon have a sharp outline /:cl: --- code/_onclick/hud/screen_objects.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index ea22327f13592..6f30f2a51355d 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -793,7 +793,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/splash) food_image = image(icon = food_icon, icon_state = food_icon_state, pixel_x = -5) food_image.plane = plane food_image.appearance_flags |= KEEP_APART // To be unaffected by filters applied to src - food_image.add_filter("simple_outline", 2, outline_filter(1, COLOR_BLACK)) + food_image.add_filter("simple_outline", 2, outline_filter(1, COLOR_BLACK, OUTLINE_SHARP)) underlays += food_image // To be below filters applied to src SetInvisibility(INVISIBILITY_ABSTRACT, name) // Start invisible, update later From 91f30899b03e8d1b7e2fe01f761a5064a4a43a9a Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:40:19 +1200 Subject: [PATCH 03/49] Automatic changelog for PR #83380 [ci skip] --- html/changelogs/AutoChangeLog-pr-83380.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83380.yml diff --git a/html/changelogs/AutoChangeLog-pr-83380.yml b/html/changelogs/AutoChangeLog-pr-83380.yml new file mode 100644 index 0000000000000..f9fbd4819073d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83380.yml @@ -0,0 +1,4 @@ +author: "Fikou" +delete-after: True +changes: + - image: "makes food hud burger icon have a sharp outline" \ No newline at end of file From 07882b23ccbc345bd7eb2b7939d41492e4cff490 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Mon, 27 May 2024 09:43:25 -0700 Subject: [PATCH 04/49] Converts parallax to pixel offsets, saves a bunch of cpu time, makes things nicer on clients too (#83395) ## About The Pull Request Right now parallax is like a quarter of SSinput, which is BAD. It's so high mostly because of the animates we need to do, but also due to the cost of setting screen_loc. ![image](https://github.com/tgstation/tgstation/assets/58055496/8e4ec4b7-2101-4dca-91b8-4db9e79de7c4) This sucks. The default step is to reduce the poll rate of the effect, but I don't want to do that because it SUCKS. Sooooo how can we optimize. Well, if we stop thinking in terms of screen_loc, which is a string (tree shit) and also unanimatable, and start working in pixel offsets, this'd be a way cheaper. We can make that happen by sticking all our parallax layers on one rock screen object. Then they have relative positions and can be pixel offset (I have stolen this concept wholesale from Ter) This works unreasonably well, roughly a 65% cost reduction. S good shit. ![image](https://github.com/tgstation/tgstation/assets/58055496/1e6c4455-a13b-44c3-bf59-71ef26cac9fd) While I'm here... [uses KEEP_TOGETHER to reduce clientside load, makes the flying animation better.](https://github.com/tgstation/tgstation/commit/52610398e2dc221c80d1f629e9c9f8fb59498977) We were individually rendering all like fucking 24 480x480 overlays on all 5 parallax layers, which means we had to apply our transform to EACH ONE. This has GOTTA suck shit for clients, so let's... not? Should help. The existing flying animation makes me depressed. it has some very visible stutter, and jumps around a lot. We can deal with the starting stutter by avoiding starting a new animation on the layer until the old one is finished. This is what was SUPPOSED to be happening, but because we fired one timer for all the layers, they'd desync and jump in ugly ways. This means we need to use one timer per layer, which does induce more cost then I'd like. IDK how I feel about this to be honest. I try and reduce ending weirdness by unscaling time at the end, so different aspects don't slow down at different rates. Speed on the parallax animation was weird, it'd spike up, then dip down in flight. This was because the percieved rate of change from the quad easing was closer to 2x the existing. I've handled this by halving the animation time in the loop Oh also there's no sense calling the update animation proc if we are coming to a stop, and thus have no follow up animation. ## Changelog :cl: LemonInTheDark refactor: I have reworked how parallax and its animations (space travel) work. Please report any bugs lads! /:cl: --------- Co-authored-by: san7890 --- code/_onclick/hud/parallax/parallax.dm | 166 +++++++++++++------------ code/modules/client/client_defines.dm | 5 +- code/modules/client/client_procs.dm | 3 + 3 files changed, 90 insertions(+), 84 deletions(-) diff --git a/code/_onclick/hud/parallax/parallax.dm b/code/_onclick/hud/parallax/parallax.dm index 506226b41ead0..bcdcd0e74fed1 100644 --- a/code/_onclick/hud/parallax/parallax.dm +++ b/code/_onclick/hud/parallax/parallax.dm @@ -11,6 +11,10 @@ for(var/atom/movable/screen/plane_master/parallax as anything in get_true_plane_masters(PLANE_SPACE_PARALLAX)) parallax.unhide_plane(screenmob) + if(isnull(C.parallax_rock)) + C.parallax_rock = new(null, src) + C.screen |= C.parallax_rock + if(!length(C.parallax_layers_cached)) C.parallax_layers_cached = list() C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, src) @@ -25,7 +29,7 @@ if (length(C.parallax_layers) > C.parallax_layers_max) C.parallax_layers.len = C.parallax_layers_max - C.screen |= (C.parallax_layers) + C.parallax_rock.vis_contents = C.parallax_layers // We could do not do parallax for anything except the main plane group // This could be changed, but it would require refactoring this whole thing // And adding non client particular hooks for all the inputs, and I do not have the time I'm sorry :( @@ -44,7 +48,7 @@ /datum/hud/proc/remove_parallax(mob/viewmob) var/mob/screenmob = viewmob || mymob var/client/C = screenmob.client - C.screen -= (C.parallax_layers_cached) + C.screen -= (C.parallax_rock) for(var/atom/movable/screen/plane_master/plane_master as anything in screenmob.hud_used.get_true_plane_masters(PLANE_SPACE)) if(screenmob != mymob) C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen @@ -104,83 +108,65 @@ update_parallax(screen_mob) // This sets which way the current shuttle is moving (returns true if the shuttle has stopped moving so the caller can append their animation) -/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = 0, skip_windups, mob/viewmob) +/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = NONE, skip_windups, mob/viewmob) . = FALSE var/mob/screenmob = viewmob || mymob var/client/C = screenmob.client if(new_parallax_movedir == C.parallax_movedir) return - var/animatedir = new_parallax_movedir - if(new_parallax_movedir == FALSE) - var/animate_time = 0 - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - L.icon_state = initial(L.icon_state) - L.update_o(C.view) - var/T = PARALLAX_LOOP_TIME / L.speed - if (T > animate_time) - animate_time = T - C.dont_animate_parallax = world.time + min(animate_time, PARALLAX_LOOP_TIME) - animatedir = C.parallax_movedir - - var/matrix/newtransform - switch(animatedir) + + var/animation_dir = new_parallax_movedir || C.parallax_movedir + var/matrix/new_transform + switch(animation_dir) if(NORTH) - newtransform = matrix(1, 0, 0, 0, 1, 480) + new_transform = matrix(1, 0, 0, 0, 1, 480) if(SOUTH) - newtransform = matrix(1, 0, 0, 0, 1,-480) + new_transform = matrix(1, 0, 0, 0, 1,-480) if(EAST) - newtransform = matrix(1, 0, 480, 0, 1, 0) + new_transform = matrix(1, 0, 480, 0, 1, 0) if(WEST) - newtransform = matrix(1, 0,-480, 0, 1, 0) - - var/shortesttimer - if(!skip_windups) - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - - var/T = PARALLAX_LOOP_TIME / L.speed - if (isnull(shortesttimer)) - shortesttimer = T - if (T < shortesttimer) - shortesttimer = T - L.transform = newtransform - animate(L, transform = matrix(), time = T, easing = QUAD_EASING | (new_parallax_movedir ? EASE_IN : EASE_OUT), flags = ANIMATION_END_NOW) - if (new_parallax_movedir) - L.transform = newtransform - animate(transform = matrix(), time = T) //queue up another animate so lag doesn't create a shutter + new_transform = matrix(1, 0,-480, 0, 1, 0) + + var/longest_timer = 0 + for(var/key in C.parallax_animate_timers) + deltimer(C.parallax_animate_timers[key]) + C.parallax_animate_timers = list() + for(var/atom/movable/screen/parallax_layer/layer as anything in C.parallax_layers) + var/scaled_time = PARALLAX_LOOP_TIME / layer.speed + if(new_parallax_movedir == NONE) // If we're stopping, we need to stop on the same dime, yeah? + scaled_time = PARALLAX_LOOP_TIME + longest_timer = max(longest_timer, scaled_time) + + if(skip_windups) + update_parallax_motionblur(C, layer, new_parallax_movedir, new_transform) + continue - C.parallax_movedir = new_parallax_movedir - if (C.parallax_animate_timer) - deltimer(C.parallax_animate_timer) - var/datum/callback/CB = CALLBACK(src, PROC_REF(update_parallax_motionblur), C, animatedir, new_parallax_movedir, newtransform) - if(skip_windups) - CB.Invoke() - else - C.parallax_animate_timer = addtimer(CB, min(shortesttimer, PARALLAX_LOOP_TIME), TIMER_CLIENT_TIME|TIMER_STOPPABLE) + layer.transform = new_transform + animate(layer, transform = matrix(), time = scaled_time, easing = QUAD_EASING | (new_parallax_movedir ? EASE_IN : EASE_OUT)) + if (new_parallax_movedir == NONE) + continue + //queue up another animate so lag doesn't create a shutter + animate(transform = new_transform, time = 0) + animate(transform = matrix(), time = scaled_time / 2) + C.parallax_animate_timers[layer] = addtimer(CALLBACK(src, PROC_REF(update_parallax_motionblur), C, layer, new_parallax_movedir, new_transform), scaled_time, TIMER_CLIENT_TIME|TIMER_STOPPABLE) + C.dont_animate_parallax = world.time + min(longest_timer, PARALLAX_LOOP_TIME) + C.parallax_movedir = new_parallax_movedir -/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform) +/datum/hud/proc/update_parallax_motionblur(client/C, atom/movable/screen/parallax_layer/layer, new_parallax_movedir, matrix/new_transform) if(!C) return - C.parallax_animate_timer = FALSE - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - if (!new_parallax_movedir) - animate(L) - continue - - var/newstate = initial(L.icon_state) - var/T = PARALLAX_LOOP_TIME / L.speed - - if (newstate in icon_states(L.icon)) - L.icon_state = newstate - L.update_o(C.view) - - L.transform = newtransform - - animate(L, transform = L.transform, time = 0, loop = -1, flags = ANIMATION_END_NOW) - animate(transform = matrix(), time = T) + C.parallax_animate_timers -= layer + + // If we are moving in a direction, we used the QUAD_EASING function with EASE_IN + // This means our position function is x^2. This is always LESS then the linear we're using here + // But if we just used the same time delay, our rate of change would mismatch. f'(1) = 2x for quad easing, rather then the 1 we get for linear + // (This is because of how derivatives work right?) + // Because of this, while our actual rate of change from before was PARALLAX_LOOP_TIME, our perceived rate of change was PARALLAX_LOOP_TIME / 2 (lower == faster). + // Let's account for that here + var/scaled_time = (PARALLAX_LOOP_TIME / layer.speed) / 2 + animate(layer, transform = new_transform, time = 0, loop = -1, flags = ANIMATION_END_NOW) + animate(transform = matrix(), time = scaled_time) /datum/hud/proc/update_parallax(mob/viewmob) var/mob/screenmob = viewmob || mymob @@ -217,36 +203,41 @@ var/our_speed = parallax_layer.speed var/change_x var/change_y + var/old_x = parallax_layer.offset_x + var/old_y = parallax_layer.offset_y if(parallax_layer.absolute) // We use change here so the typically large absolute objects (just lavaland for now) don't jitter so much - change_x = (posobj.x - SSparallax.planet_x_offset) * our_speed + parallax_layer.offset_x - change_y = (posobj.y - SSparallax.planet_y_offset) * our_speed + parallax_layer.offset_y + change_x = (posobj.x - SSparallax.planet_x_offset) * our_speed + old_x + change_y = (posobj.y - SSparallax.planet_y_offset) * our_speed + old_y else change_x = offset_x * our_speed change_y = offset_y * our_speed // This is how we tile parralax sprites // It doesn't use change because we really don't want to animate this - if(parallax_layer.offset_x - change_x > 240) + if(old_x - change_x > 240) parallax_layer.offset_x -= 480 - else if(parallax_layer.offset_x - change_x < -240) + parallax_layer.pixel_w = parallax_layer.offset_x + else if(old_x - change_x < -240) parallax_layer.offset_x += 480 - if(parallax_layer.offset_y - change_y > 240) + parallax_layer.pixel_w = parallax_layer.offset_x + if(old_y - change_y > 240) parallax_layer.offset_y -= 480 - else if(parallax_layer.offset_y - change_y < -240) + parallax_layer.pixel_z = parallax_layer.offset_y + else if(old_y - change_y < -240) parallax_layer.offset_y += 480 + parallax_layer.pixel_z = parallax_layer.offset_y - // Now that we have our offsets, let's do our positioning parallax_layer.offset_x -= change_x parallax_layer.offset_y -= change_y - - parallax_layer.screen_loc = "CENTER-7:[round(parallax_layer.offset_x, 1)],CENTER-7:[round(parallax_layer.offset_y, 1)]" - - // We're going to use a transform to "glide" that last movement out, so it looks nicer + // Now that we have our offsets, let's do our positioning + // We're going to use an animate to "glide" that last movement out, so it looks nicer // Don't do any animates if we're not actually moving enough distance yeah? thanks lad if(run_parralax && (largest_change * our_speed > 1)) - parallax_layer.transform = matrix(1,0,change_x, 0,1,change_y) - animate(parallax_layer, transform=matrix(), time = glide_rate) + animate(parallax_layer, pixel_w = round(parallax_layer.offset_x, 1), pixel_z = round(parallax_layer.offset_y, 1), time = glide_rate) + else + parallax_layer.pixel_w = round(parallax_layer.offset_x, 1) + parallax_layer.pixel_z = round(parallax_layer.offset_y, 1) /atom/movable/proc/update_parallax_contents() for(var/mob/client_mob as anything in client_mobs_in_contents) @@ -258,6 +249,15 @@ var/area/areaobj = get_area(client.eye) hud_used.set_parallax_movedir(areaobj.parallax_movedir, TRUE) +// Root object for parallax, all parallax layers are drawn onto this +INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_home) +/atom/movable/screen/parallax_home + icon = null + blend_mode = BLEND_ADD + plane = PLANE_SPACE_PARALLAX + screen_loc = "CENTER-7,CENTER-7" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + // We need parallax to always pass its args down into initialize, so we immediate init it INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) /atom/movable/screen/parallax_layer @@ -266,9 +266,9 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) var/offset_x = 0 var/offset_y = 0 var/absolute = FALSE + appearance_flags = APPEARANCE_UI | KEEP_TOGETHER blend_mode = BLEND_ADD plane = PLANE_SPACE_PARALLAX - screen_loc = "CENTER-7,CENTER-7" mouse_opacity = MOUSE_OPACITY_TRANSPARENT /atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, template = FALSE) @@ -302,15 +302,17 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) // Turn the view size into a grid of correctly scaled overlays var/list/viewscales = getviewsize(view) - var/countx = CEILING((viewscales[1] / 2) * parallax_scaler, 1) + 1 - var/county = CEILING((viewscales[2] / 2) * parallax_scaler, 1) + 1 + // This could be half the size but we need to provide space for parallax movement on mob movement, and movement on scroll from shuttles, so like this instead + var/countx = (CEILING((viewscales[1] / 2) * parallax_scaler, 1) + 1) + var/county = (CEILING((viewscales[2] / 2) * parallax_scaler, 1) + 1) var/list/new_overlays = new for(var/x in -countx to countx) for(var/y in -county to county) if(x == 0 && y == 0) continue var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) - texture_overlay.transform = matrix(1, 0, x*480, 0, 1, y*480) + texture_overlay.pixel_w += 480 * x + texture_overlay.pixel_z += 480 * y new_overlays += texture_overlay cut_overlays() add_overlay(new_overlays) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 3272620a86555..97924643604c5 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -197,6 +197,7 @@ var/list/parallax_layers var/list/parallax_layers_cached + var/atom/movable/screen/parallax_home/parallax_rock ///this is the last recorded client eye by SSparallax/fire() var/atom/movable/movingmob var/turf/previous_turf @@ -206,8 +207,8 @@ var/parallax_movedir = 0 /// How many parallax layers to show our client var/parallax_layers_max = 4 - /// Timer for the area directional animation - var/parallax_animate_timer + /// Timers for the area directional animation, one for each layer + var/list/parallax_animate_timers /// Do we want to do parallax animations at all? /// Exists to prevent laptop fires var/do_parallax_animations = TRUE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index c3163b3e0b169..1de6c330bfce9 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -601,6 +601,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( QDEL_NULL(void) QDEL_NULL(tooltips) QDEL_NULL(loot_panel) + QDEL_NULL(parallax_rock) + QDEL_LIST(parallax_layers_cached) + parallax_layers = null seen_messages = null Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening From 8a9a9d1ade942221c87bcc8990346e8950ba76d8 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:44:02 +1200 Subject: [PATCH 05/49] Automatic changelog for PR #83395 [ci skip] --- html/changelogs/AutoChangeLog-pr-83395.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83395.yml diff --git a/html/changelogs/AutoChangeLog-pr-83395.yml b/html/changelogs/AutoChangeLog-pr-83395.yml new file mode 100644 index 0000000000000..13f4b366d044e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83395.yml @@ -0,0 +1,4 @@ +author: "LemonInTheDark" +delete-after: True +changes: + - refactor: "I have reworked how parallax and its animations (space travel) work. Please report any bugs lads!" \ No newline at end of file From 29b3f30eb7f70c7882845d3321edbc36b713bb98 Mon Sep 17 00:00:00 2001 From: Jacquerel Date: Mon, 27 May 2024 17:46:11 +0100 Subject: [PATCH 06/49] Vines can't pull anchored objects, can pull you off tables (#83410) ## About The Pull Request Fixes #83072 by preventing the ability from targeting anchored atoms. Also fixes the logic to only check for obstacles interposed between us and the target, not ones sharing the tile. ## Why It's Good For The Game This is how the ability was already supposed to work ## Changelog :cl: fix: Venus Man Traps cannot use vines to drag around machines or objects that are bolted, welded, rooted to, or otherwise are part of the ground fix: Standing on a table will not prevent you from being grappled by a Venus Man Trap /:cl: --- .../mob/living/basic/jungle/venus_human_trap.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index 6c0a6e2f9db8c..ec375283fcea0 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -216,15 +216,19 @@ QDEL_LIST(vines) return ..() -/datum/action/cooldown/mob_cooldown/projectile_attack/vine_tangle/Activate(atom/target_atom) - if(isturf(target_atom) || istype(target_atom, /obj/structure/spacevine)) +/datum/action/cooldown/mob_cooldown/projectile_attack/vine_tangle/Activate(atom/movable/target_atom) + if(!ismovable(target_atom) || istype(target_atom, /obj/structure/spacevine)) + return + if(target_atom.anchored) + owner.balloon_alert(owner, "can't pull!") return if(get_dist(owner, target_atom) > vine_grab_distance) owner.balloon_alert(owner, "too far!") return - for(var/turf/blockage in get_line(owner, target_atom)) + var/list/target_turfs = get_line(owner, target_atom) - list(get_turf(owner), get_turf(target_atom)) + for(var/turf/blockage in target_turfs) if(blockage.is_blocked_turf(exclude_mobs = TRUE)) - owner.balloon_alert(owner, "something's in the way!") + owner.balloon_alert(owner, "path blocked!") return var/datum/beam/new_vine = owner.Beam(target_atom, icon_state = "vine", time = vine_duration * (ismob(target_atom) ? 1 : 2), beam_type = /obj/effect/ebeam/vine, emissive = FALSE) From 572a1884edd8ee88b956af9776e6318c9436db92 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:46:40 +1200 Subject: [PATCH 07/49] Automatic changelog for PR #83410 [ci skip] --- html/changelogs/AutoChangeLog-pr-83410.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83410.yml diff --git a/html/changelogs/AutoChangeLog-pr-83410.yml b/html/changelogs/AutoChangeLog-pr-83410.yml new file mode 100644 index 0000000000000..ed8799caa05ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83410.yml @@ -0,0 +1,5 @@ +author: "Jacquerel" +delete-after: True +changes: + - bugfix: "Venus Man Traps cannot use vines to drag around machines or objects that are bolted, welded, rooted to, or otherwise are part of the ground" + - bugfix: "Standing on a table will not prevent you from being grappled by a Venus Man Trap" \ No newline at end of file From a7ca4b83cb3a2423b2bbce35b13c833677d4e842 Mon Sep 17 00:00:00 2001 From: Echriser Date: Mon, 27 May 2024 11:47:46 -0500 Subject: [PATCH 08/49] Makes computer console circuits more consistent (#83412) ## About The Pull Request This PR makes the computer console's print feature work on a signal instead of wasting paper every string update, changes the flashlight color change to do the same, fixes the on/off signal not turning the console on, and fixes the signal for the console turning off not functioning. ## Why It's Good For The Game Besides the bug fixes, this makes the console components more consistent with every other circuit component. The refactor is to prevent worrying about nulls for colors or errors because of early returns. ## Changelog :cl: fix: computers with no lights can now turn on using the on/off signal fix: RGB lights on PDA circuits now use a signal fix: the is_off signal now works on consoles fix: printing text on a console component now uses a signal refactor: each input signal in console circuits now have their own proc /:cl: --- .../computers/item/computer.dm | 5 +- .../computers/item/computer_circuit.dm | 58 +++++++++---------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e2a197a33900c..a17a9bb8ed054 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -484,7 +484,10 @@ playsound(src, 'sound/machines/card_slide.ogg', 50) /obj/item/modular_computer/proc/turn_on(mob/user, open_ui = TRUE) - var/issynth = HAS_SILICON_ACCESS(user) // Robots and AIs get different activation messages. + var/issynth = FALSE // Robots and AIs get different activation messages. + if(user) + issynth = HAS_SILICON_ACCESS(user) + if(atom_integrity <= integrity_failure * max_integrity) if(user) if(issynth) diff --git a/code/modules/modular_computers/computers/item/computer_circuit.dm b/code/modules/modular_computers/computers/item/computer_circuit.dm index 2a6a0d70be971..35caaf3c85107 100644 --- a/code/modules/modular_computers/computers/item/computer_circuit.dm +++ b/code/modules/modular_computers/computers/item/computer_circuit.dm @@ -5,7 +5,9 @@ var/obj/item/modular_computer/computer ///Turns the PC on/off var/datum/port/input/on_off - ///When set, will print a piece of paper with the value as text. + ///Determines the text to be printed + var/datum/port/input/print_text + /// Print when triggered var/datum/port/input/print ///Sent when turned on @@ -18,6 +20,7 @@ var/datum/port/input/red var/datum/port/input/green var/datum/port/input/blue + var/datum/port/input/set_color /obj/item/circuit_component/modpc/register_shell(atom/movable/shell) . = ..() @@ -39,10 +42,11 @@ * I hope you're cool with me doing it here. */ if(computer.has_light && isnull(lights)) - lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL) + lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_flashlight)) red = add_input_port("Red", PORT_TYPE_NUMBER) green = add_input_port("Green", PORT_TYPE_NUMBER) blue = add_input_port("Blue", PORT_TYPE_NUMBER) + set_color = add_input_port("Set Color", PORT_TYPE_SIGNAL, trigger = PROC_REF(set_flashlight_color)) /obj/item/circuit_component/modpc/unregister_shell(atom/movable/shell) if(computer) @@ -51,45 +55,37 @@ return ..() /obj/item/circuit_component/modpc/populate_ports() - on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL) - print = add_input_port("Print Text", PORT_TYPE_STRING) + on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_power)) + print_text = add_input_port("Print Text", PORT_TYPE_STRING) + print = add_input_port("Print", PORT_TYPE_SIGNAL, trigger = PROC_REF(print_text)) is_on = add_output_port("Turned On", PORT_TYPE_SIGNAL) - is_on = add_output_port("Shut Down", PORT_TYPE_SIGNAL) + is_off = add_output_port("Shut Down", PORT_TYPE_SIGNAL) /obj/item/circuit_component/modpc/pre_input_received(datum/port/input/port) if(isnull(computer)) return - if(COMPONENT_TRIGGERED_BY(print, port)) + if(COMPONENT_TRIGGERED_BY(print_text, port)) print.set_value(html_encode(trim(print.value, MAX_PAPER_LENGTH))) - else if(COMPONENT_TRIGGERED_BY(red, port)) - red.set_value(clamp(red.value, 0, 255)) - else if(COMPONENT_TRIGGERED_BY(blue, port)) - blue.set_value(clamp(blue.value, 0, 255)) - else if(COMPONENT_TRIGGERED_BY(green, port)) - green.set_value(clamp(green.value, 0, 255)) - -/obj/item/circuit_component/modpc/input_received(datum/port/input/port) - if(isnull(computer)) - return - if(COMPONENT_TRIGGERED_BY(on_off, port)) - if(computer.enabled) - INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer)) - else - INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on)) - return - if(!computer.enabled) - return +/obj/item/circuit_component/modpc/proc/print_text(datum/source) + if(computer.enabled) + computer.print_text(print_text.value) + +/obj/item/circuit_component/modpc/proc/toggle_power(datum/source) + if(computer.enabled) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer)) + else + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on)) - if(COMPONENT_TRIGGERED_BY(print, port)) - computer.print_text(print.value) +/obj/item/circuit_component/modpc/proc/toggle_flashlight(datum/source) + computer.toggle_flashlight() - if(lights) - if(COMPONENT_TRIGGERED_BY(lights, port)) - computer.toggle_flashlight() - if(COMPONENT_TRIGGERED_BY(red, port) || COMPONENT_TRIGGERED_BY(green, port) || COMPONENT_TRIGGERED_BY(blue, port)) - computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0)) +/obj/item/circuit_component/modpc/proc/set_flashlight_color(datum/source) + red.set_value(clamp(red.value, 0, 255)) + blue.set_value(clamp(blue.value, 0, 255)) + green.set_value(clamp(green.value, 0, 255)) + computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0)) /obj/item/circuit_component/modpc/proc/computer_on(datum/source, mob/user) SIGNAL_HANDLER From 459bf38be95de7c200c9255435cead248354e33e Mon Sep 17 00:00:00 2001 From: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com> Date: Mon, 27 May 2024 18:48:14 +0200 Subject: [PATCH 09/49] Fixes Rust Victims being permanently exiled to the puke-zone. (#83417) ## About The Pull Request closes : https://github.com/tgstation/tgstation/issues/83375 ## Why It's Good For The Game Deleting Heretic rust you are standing on now properly deletes the status effect. ## Changelog :cl: fix: Rust debuffs now gets properly removed if you derust a tile you are standing on. /:cl: --- code/datums/elements/rust.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/elements/rust.dm b/code/datums/elements/rust.dm index 060de19494fc0..396307197c49d 100644 --- a/code/datums/elements/rust.dm +++ b/code/datums/elements/rust.dm @@ -98,6 +98,8 @@ UnregisterSignal(source, COMSIG_ATOM_EXITED) for(var/obj/effect/glowing_rune/rune_to_remove in source) qdel(rune_to_remove) + for(var/mob/living/victim in source) + victim.remove_status_effect(/datum/status_effect/rust_corruption) /datum/element/rust/heretic/proc/on_entered(turf/source, atom/movable/entered, ...) SIGNAL_HANDLER From 41828ee71a50bc788d540c9e38c0f0fbb2502bdb Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:48:17 +1200 Subject: [PATCH 10/49] Automatic changelog for PR #83412 [ci skip] --- html/changelogs/AutoChangeLog-pr-83412.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83412.yml diff --git a/html/changelogs/AutoChangeLog-pr-83412.yml b/html/changelogs/AutoChangeLog-pr-83412.yml new file mode 100644 index 0000000000000..34a9e744c46fd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83412.yml @@ -0,0 +1,8 @@ +author: "Echriser" +delete-after: True +changes: + - bugfix: "computers with no lights can now turn on using the on/off signal" + - bugfix: "RGB lights on PDA circuits now use a signal" + - bugfix: "the is_off signal now works on consoles" + - bugfix: "printing text on a console component now uses a signal" + - refactor: "each input signal in console circuits now have their own proc" \ No newline at end of file From 318492f85eccb68cfd5c1e44ebca3bf618aad0ce Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:48:32 +1200 Subject: [PATCH 11/49] Automatic changelog for PR #83417 [ci skip] --- html/changelogs/AutoChangeLog-pr-83417.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83417.yml diff --git a/html/changelogs/AutoChangeLog-pr-83417.yml b/html/changelogs/AutoChangeLog-pr-83417.yml new file mode 100644 index 0000000000000..7c6ab4c7859eb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83417.yml @@ -0,0 +1,4 @@ +author: "EnterTheJake" +delete-after: True +changes: + - bugfix: "Rust debuffs now gets properly removed if you derust a tile you are standing on." \ No newline at end of file From cde7b00b52feb172af3b5181831179cd42d172b1 Mon Sep 17 00:00:00 2001 From: FlufflesTheDog Date: Mon, 27 May 2024 09:51:05 -0700 Subject: [PATCH 12/49] Fix echolocation lag ft. an actual fix (#83434) ## About The Pull Request Fixes the actual underlying issue that makes images pile up when the cooldown is lower than the fade time. Also, adjusts the fade time to compensate for the new 1 second cooldown, because otherwise you literally don't get an echolocation effect. Things just never vanish. Fixes #83385 ## Why It's Good For The Game well- current behavior: https://github.com/tgstation/tgstation/assets/25628932/98efda07-5396-4f8c-8460-69231bbfc32e ## Changelog :cl: Fluffles fix: echolocation is less laggy. and works. /:cl: --- code/datums/components/echolocation.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/datums/components/echolocation.dm b/code/datums/components/echolocation.dm index 60a6d0fa8aa3c..020c47ad875e1 100644 --- a/code/datums/components/echolocation.dm +++ b/code/datums/components/echolocation.dm @@ -4,11 +4,11 @@ /// Time between echolocations. IMPORTANT!! The effective time in local and the effective time in live are very different. The second is noticeably slower, var/cooldown_time = 1 SECONDS /// Time for the image to start fading out. - var/image_expiry_time = 1.4 SECONDS + var/image_expiry_time = 0.7 SECONDS /// Time for the image to fade in. - var/fade_in_time = 0.4 SECONDS + var/fade_in_time = 0.2 SECONDS /// Time for the image to fade out and delete itself. - var/fade_out_time = 0.4 SECONDS + var/fade_out_time = 0.3 SECONDS /// Are images static? If yes, spawns them on the turf and makes them not change location. Otherwise they change location and pixel shift with the original. var/images_are_static = TRUE /// With mobs that have this echo group in their echolocation receiver trait, we share echo images. @@ -105,7 +105,7 @@ for(var/mob/living/viewer in filtered) if(blocking_trait && HAS_TRAIT(viewer, blocking_trait)) continue - if(HAS_TRAIT_FROM(viewer, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) + if(HAS_TRAIT_FROM(viewer, TRAIT_ECHOLOCATION_RECEIVER, echo_group) && isnull(receivers[viewer])) receivers[viewer] = list() for(var/atom/filtered_atom as anything in filtered) show_image(saved_appearances["[filtered_atom.icon]-[filtered_atom.icon_state]"] || generate_appearance(filtered_atom), filtered_atom, current_time) @@ -175,6 +175,7 @@ for(var/atom/rendered_atom as anything in receivers[echolocate_receiver]) if(receivers[echolocate_receiver][rendered_atom]["time"] <= from_when && echolocate_receiver.client) echolocate_receiver.client.images -= receivers[echolocate_receiver][rendered_atom]["image"] + receivers[echolocate_receiver] -= rendered_atom if(!length(receivers[echolocate_receiver])) receivers -= echolocate_receiver From b1bbaa4dad42ad7d35baace96ae09c32ea365466 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 04:51:24 +1200 Subject: [PATCH 13/49] Automatic changelog for PR #83434 [ci skip] --- html/changelogs/AutoChangeLog-pr-83434.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83434.yml diff --git a/html/changelogs/AutoChangeLog-pr-83434.yml b/html/changelogs/AutoChangeLog-pr-83434.yml new file mode 100644 index 0000000000000..33e3355ed2c93 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83434.yml @@ -0,0 +1,4 @@ +author: "Fluffles" +delete-after: True +changes: + - bugfix: "echolocation is less laggy. and works." \ No newline at end of file From 96d64929fb72da6517426d01203c59237b424490 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Mon, 27 May 2024 12:55:50 -0400 Subject: [PATCH 14/49] Adds additional type logging to nested feedback for all printed parts. (#83466) ## About The Pull Request What it says on the tin, this adds logging to nested_logging for autolathes, protolathes, and the mech fabricator. Also quickly renames a variable name within the mech fabricator because this thing hasn't been updated in awhile and it was egregious to me. ## Why It's Good For The Game I wanted to throw together a quick superset chart of what items are printed most often and how often, and was shocked to learn that it wasn't logged in this way. It was recorded somewhat within the silo log, but this is MUCH easier to use all thing considered, so it's an easy fix. ## Changelog No front facing changes. --- code/game/machinery/autolathe.dm | 1 + code/modules/research/machinery/_production.dm | 1 + code/modules/vehicles/mecha/mech_fabricator.dm | 15 ++++++++------- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 296a9031ae27e..9b33a901d9ebe 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -353,6 +353,7 @@ created.pixel_x = created.base_pixel_x + rand(-6, 6) created.pixel_y = created.base_pixel_y + rand(-6, 6) created.forceMove(target) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]")) if(is_stack) items_remaining = 0 diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index bdd31f4e9a04c..cc6a45a5f1f13 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -414,6 +414,7 @@ created.pixel_x = created.base_pixel_x + rand(-6, 6) created.pixel_y = created.base_pixel_y + rand(-6, 6) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]")) if(is_stack) items_remaining = 0 diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 2dce26624ad25..47c116cbc6029 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -260,22 +260,23 @@ * * Returns FALSE is the machine cannot dispense the part on the appropriate turf. * Return TRUE if the part was successfully dispensed. - * * D - Design datum to attempt to dispense. + * * dispensed_design - Design datum to attempt to dispense. */ -/obj/machinery/mecha_part_fabricator/proc/dispense_built_part(datum/design/D) - var/obj/item/I = new D.build_path(src) +/obj/machinery/mecha_part_fabricator/proc/dispense_built_part(datum/design/dispensed_design) + var/obj/item/built_part = new dispensed_design.build_path(src) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[built_part.type]")) being_built = null var/turf/exit = get_step(src,(dir)) if(exit.density) say("Error! The part outlet is obstructed.") - desc = "It's trying to dispense the fabricated [D.name], but the part outlet is obstructed." - stored_part = I + desc = "It's trying to dispense the fabricated [dispensed_design.name], but the part outlet is obstructed." + stored_part = built_part return FALSE - say("The fabrication of [I] is now complete.") - I.forceMove(exit) + say("The fabrication of [built_part] is now complete.") + built_part.forceMove(exit) top_job_id += 1 From 152b3c550a677b6a469d563b55cdf66084ebf1cb Mon Sep 17 00:00:00 2001 From: Whoneedspacee Date: Mon, 27 May 2024 15:09:10 -0400 Subject: [PATCH 15/49] Wendigo Mob Abilities (#83325) ## About The Pull Request Converts wendigo's abilities into mob abilities, behavior should be almost identical to how it was before. Also gave megafauna the same night vision as normal lavaland mobs since controlling them and being unable to see was difficult while testing. Wendigo's scream and slam were made into global procs so they could be used across these abilities, but if there's a better way to do that I'm open to it. ## Why It's Good For The Game More refactoring to make way for converting these all to basic megafauna. ## Changelog :cl: refactor: Wendigos abilities have been changed into actions that can be added to any mob. /:cl: --- code/datums/actions/cooldown_action.dm | 3 + code/datums/actions/mobs/ground_slam.dm | 32 +++ code/datums/actions/mobs/projectileattack.dm | 86 ++++++ code/datums/actions/mobs/teleport.dm | 25 ++ .../hostile/megafauna/_megafauna.dm | 4 + .../hostile/megafauna/wendigo.dm | 244 ++++++------------ tgstation.dme | 2 + 7 files changed, 232 insertions(+), 164 deletions(-) create mode 100644 code/datums/actions/mobs/ground_slam.dm create mode 100644 code/datums/actions/mobs/teleport.dm diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index 18fe9f22e8024..1c290c5f224c1 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -171,6 +171,9 @@ next_use_time = world.time + override_cooldown_time else next_use_time = world.time + cooldown_time + // Don't start a cooldown if we have a cooldown time of 0 seconds + if(next_use_time == world.time) + return build_all_button_icons(UPDATE_BUTTON_STATUS) START_PROCESSING(SSfastprocess, src) diff --git a/code/datums/actions/mobs/ground_slam.dm b/code/datums/actions/mobs/ground_slam.dm new file mode 100644 index 0000000000000..e00799196b589 --- /dev/null +++ b/code/datums/actions/mobs/ground_slam.dm @@ -0,0 +1,32 @@ +/datum/action/cooldown/mob_cooldown/ground_slam + name = "Ground Slam" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Slams the ground sending out a shockwave around you." + cooldown_time = 10 SECONDS + /// The range of the slam + var/range = 5 + /// The delay before the shockwave expands it's range + var/delay = 3 + /// How far hit targets are thrown + var/throw_range = 8 + /// Whether the target can move or not while the slam is occurring + var/can_move = FALSE + +/datum/action/cooldown/mob_cooldown/ground_slam/Activate(atom/target_atom) + disable_cooldown_actions() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), override = TRUE) + do_slam(target_atom) + UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Slams the ground around the source throwing back enemies caught nearby, delay is for the radius increase +/datum/action/cooldown/mob_cooldown/ground_slam/proc/do_slam(atom/target) + wendigo_slam(owner, range, delay, throw_range) + +/datum/action/cooldown/mob_cooldown/ground_slam/proc/on_move(atom/source, atom/new_loc) + SIGNAL_HANDLER + if(!can_move) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index be7eff8963363..d8f8e6bdf6427 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -16,14 +16,23 @@ var/default_projectile_spread = 0 /// The multiplier to the projectiles speed (a value of 2 makes it twice as slow, 0.5 makes it twice as fast) var/projectile_speed_multiplier = 1 + /// Whether the target can move or not while the attack is occurring + var/can_move = TRUE /datum/action/cooldown/mob_cooldown/projectile_attack/Activate(atom/target_atom) disable_cooldown_actions() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), override = TRUE) attack_sequence(owner, target_atom) + UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) StartCooldown() enable_cooldown_actions() return TRUE +/datum/action/cooldown/mob_cooldown/projectile_attack/proc/on_move(atom/source, atom/new_loc) + SIGNAL_HANDLER + if(!can_move) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + /datum/action/cooldown/mob_cooldown/projectile_attack/proc/attack_sequence(mob/living/firer, atom/target) shoot_projectile(firer, target, null, firer, rand(-default_projectile_spread, default_projectile_spread), null) @@ -151,6 +160,25 @@ SLEEP_CHECK_DEATH(1.5 SECONDS, owner) return ..() +/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave/spiral + can_move = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo/create_spiral_attack(mob/living/firer, atom/target, negative = pick(TRUE, FALSE)) + wendigo_scream(firer) + var/shots_spiral = 40 + var/angle_to_target = get_angle(firer, target) + var/spiral_direction = pick(-1, 1) + for(var/shot in 1 to shots_spiral) + var/shots_per_tick = 5 - enraged * 3 + var/angle_change = (5 + enraged * shot / 6) * spiral_direction + for(var/count in 1 to shots_per_tick) + var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(1, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) + /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe name = "All Directions" button_icon = 'icons/effects/effects.dmi' @@ -192,6 +220,13 @@ shoot_projectile(firer, target, null, firer, spread, null) +/datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/wendigo + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave + shot_angles = list(-20, -10, 0, 10, 20) + projectile_speed_multiplier = 4 + + /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/colossus cooldown_time = 0.5 SECONDS @@ -327,3 +362,54 @@ colossus.telegraph() colossus.dir_shots.attack_sequence(firer, target) SLEEP_CHECK_DEATH(1 SECONDS, firer) + +/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle + name = "Alternating Shots" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Fires projectiles around you in an alternating fashion." + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave + can_move = FALSE + var/enraged = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle/attack_sequence(mob/living/firer, atom/target) + wendigo_scream(firer) + if(enraged) + projectile_speed_multiplier = 1 + else + projectile_speed_multiplier = 1.5 + var/shots_per = 24 + for(var/shoot_times in 1 to 8) + var/offset = shoot_times % 2 + for(var/shot in 1 to shots_per) + var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5 + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(6 - enraged * 2, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) + +/datum/action/cooldown/mob_cooldown/projectile_attack/wave + name = "Wave Shots" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Fires projectiles around you in a circular wave." + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave + can_move = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/wave/attack_sequence(mob/living/firer, atom/target) + wendigo_scream(firer) + var/shots_per = 7 + var/difference = 360 / shots_per + var/wave_direction = pick(-1, 1) + switch(wave_direction) + if(-1) + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave/alternate + if(1) + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave + for(var/shoot_times in 1 to 32) + for(var/shot in 1 to shots_per) + var/angle = shot * difference + shoot_times * 5 * wave_direction * -1 + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(2, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) diff --git a/code/datums/actions/mobs/teleport.dm b/code/datums/actions/mobs/teleport.dm new file mode 100644 index 0000000000000..7b7ffddf30b3d --- /dev/null +++ b/code/datums/actions/mobs/teleport.dm @@ -0,0 +1,25 @@ +/datum/action/cooldown/mob_cooldown/teleport + name = "Teleport" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Allows you to teleport a certain distance away from a position in a random direction." + cooldown_time = 10 SECONDS + /// The distance from the target + var/radius = 6 + +/datum/action/cooldown/mob_cooldown/teleport/Activate(atom/target_atom) + disable_cooldown_actions() + teleport_to(target_atom) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Handles randomly teleporting the owner around the target in view +/datum/action/cooldown/mob_cooldown/teleport/proc/teleport_to(atom/teleport_target) + var/list/possible_ends = view(radius, teleport_target.loc) - view(radius - 1, teleport_target.loc) + for(var/turf/closed/cant_teleport_turf in possible_ends) + possible_ends -= cant_teleport_turf + if(!possible_ends.len) + return + var/turf/end = pick(possible_ends) + do_teleport(owner, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index ea048482e4f1f..31d2e62fba7dc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -20,6 +20,10 @@ maxbodytemp = INFINITY vision_range = 5 aggro_vision_range = 18 + // Pale purple, should be red enough to see stuff on lavaland + lighting_cutoff_red = 25 + lighting_cutoff_green = 15 + lighting_cutoff_blue = 35 move_force = MOVE_FORCE_OVERPOWERING move_resist = MOVE_FORCE_OVERPOWERING pull_force = MOVE_FORCE_OVERPOWERING diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index d39c8a3e52bd9..8fc667df5a876 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -1,10 +1,4 @@ #define WENDIGO_ENRAGED (health <= maxHealth*0.5) -#define WENDIGO_CIRCLE_SHOTCOUNT 24 -#define WENDIGO_CIRCLE_REPEATCOUNT 8 -#define WENDIGO_SPIRAL_SHOTCOUNT 40 -#define WENDIGO_WAVE_SHOTCOUNT 7 -#define WENDIGO_WAVE_REPEATCOUNT 32 -#define WENDIGO_SHOTGUN_SHOTCOUNT 5 /* @@ -51,9 +45,6 @@ Difficulty: Hard death_message = "falls to the ground in a bloody heap, shaking the arena." death_sound = 'sound/effects/gravhit.ogg' footstep_type = FOOTSTEP_MOB_HEAVY - attack_action_types = list(/datum/action/innate/megafauna_attack/heavy_stomp, - /datum/action/innate/megafauna_attack/teleport, - /datum/action/innate/megafauna_attack/shockwave_scream) summon_line = "GwaHOOOOOOOOOOOOOOOOOOOOO" /// Saves the turf the megafauna was created at (spawns exit portal here) var/turf/starting @@ -61,37 +52,38 @@ Difficulty: Hard var/stomp_range = 1 /// Stores directions the mob is moving, then calls that a move has fully ended when these directions are removed in moved var/stored_move_dirs = 0 - /// If the wendigo is allowed to move - var/can_move = TRUE /// Time before the wendigo can scream again var/scream_cooldown_time = 10 SECONDS + /// Teleport Ability + var/datum/action/cooldown/mob_cooldown/teleport/teleport + /// Shotgun Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/wendigo/shotgun_blast + /// Ground Slam Ability + var/datum/action/cooldown/mob_cooldown/ground_slam/ground_slam + /// Alternating Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle/alternating_circle + /// Spiral Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo/spiral + /// Wave Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/wave/wave /// Stores the last scream time so it doesn't spam it COOLDOWN_DECLARE(scream_cooldown) /mob/living/simple_animal/hostile/megafauna/wendigo/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - -/datum/action/innate/megafauna_attack/heavy_stomp - name = "Heavy Stomp" - button_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "You are now stomping the ground around you." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/teleport - name = "Teleport" - button_icon = 'icons/effects/bubblegum.dmi' - button_icon_state = "smack ya one" - chosen_message = "You are now teleporting at the target you click on." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/shockwave_scream - name = "Shockwave Scream" - button_icon = 'icons/mob/actions/actions_animal.dmi' - button_icon_state = "expand" - chosen_message = "You are now screeching, disorienting targets around you." - chosen_attack_num = 3 + teleport = new(src) + shotgun_blast = new(src) + ground_slam = new(src) + alternating_circle = new(src) + spiral = new(src) + wave = new(src) + teleport.Grant(src) + shotgun_blast.Grant(src) + ground_slam.Grant(src) + alternating_circle.Grant(src) + spiral.Grant(src) + wave.Grant(src) /mob/living/simple_animal/hostile/megafauna/wendigo/Initialize(mapload) . = ..() @@ -108,13 +100,6 @@ Difficulty: Hard move_to_delay = initial(move_to_delay) if(client) - switch(chosen_attack) - if(1) - heavy_stomp() - if(2) - try_teleport() - if(3) - shockwave_scream() return var/mob/living/living_target = target @@ -127,28 +112,54 @@ Difficulty: Hard chosen_attack = rand(1, 2) switch(chosen_attack) if(1) - heavy_stomp() + ground_slam.Activate(target) if(2) - try_teleport() + teleport.Activate(target) + if(WENDIGO_ENRAGED) + shotgun_blast.Activate(target) if(3) do_teleport(src, starting, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) - shockwave_scream() + var/shockwave_attack + if(WENDIGO_ENRAGED) + shockwave_attack = rand(1, 3) + else + shockwave_attack = rand(1, 2) + switch(shockwave_attack) + if(1) + alternating_circle.enraged = WENDIGO_ENRAGED + alternating_circle.Activate(target) + if(2) + spiral.enraged = WENDIGO_ENRAGED + spiral.Activate(target) + if(3) + wave.Activate(target) + update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 3 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 3 SECONDS)) /mob/living/simple_animal/hostile/megafauna/wendigo/Move(atom/newloc, direct) - if(!can_move) - return stored_move_dirs |= direct - return ..() + . = ..() + // Remove after anyways in case the movement was prevented + stored_move_dirs &= ~direct /mob/living/simple_animal/hostile/megafauna/wendigo/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() stored_move_dirs &= ~movement_dir if(!stored_move_dirs) - INVOKE_ASYNC(src, PROC_REF(wendigo_slam), stomp_range, 1, 8) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(wendigo_slam), src, stomp_range, 1, 8) -/// Slams the ground around the source throwing back enemies caught nearby, delay is for the radius increase -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/wendigo_slam(range, delay, throw_range) - var/turf/origin = get_turf(src) +/proc/wendigo_scream(mob/owner) + SLEEP_CHECK_DEATH(5, owner) + playsound(owner.loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) + var/pixel_shift = rand(5, 15) + animate(owner, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) + animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) + for(var/mob/living/dizzy_target in get_hearers_in_view(7, owner) - owner) + dizzy_target.set_dizzy_if_lower(12 SECONDS) + to_chat(dizzy_target, span_danger("[owner] screams loudly!")) + SLEEP_CHECK_DEATH(1 SECONDS, owner) + +/proc/wendigo_slam(mob/owner, range, delay, throw_range) + var/turf/origin = get_turf(owner) if(!origin) return var/list/all_turfs = RANGE_TURFS(range, origin) @@ -158,117 +169,16 @@ Difficulty: Hard if(get_dist(origin, stomp_turf) > sound_range) continue new /obj/effect/temp_visual/small_smoke/halfsecond(stomp_turf) - for(var/mob/living/target in stomp_turf) - if(target == src || target.throwing) + for(var/mob/living/hit_mob in stomp_turf) + if(hit_mob == owner || hit_mob.throwing) continue - to_chat(target, span_userdanger("[src]'s ground slam shockwave sends you flying!")) - var/turf/thrownat = get_ranged_target_turf_direct(src, target, throw_range, rand(-10, 10)) - target.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE) - target.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) - shake_camera(target, 2, 1) + to_chat(hit_mob, span_userdanger("[owner]'s ground slam shockwave sends you flying!")) + var/turf/thrownat = get_ranged_target_turf_direct(owner, hit_mob, throw_range, rand(-10, 10)) + hit_mob.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE) + hit_mob.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) + shake_camera(hit_mob, 2, 1) all_turfs -= stomp_turf - sleep(delay) - -/// Larger but slower ground stomp -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/heavy_stomp() - can_move = FALSE - wendigo_slam(5, 3 - WENDIGO_ENRAGED, 8) - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 0 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 0 SECONDS)) - can_move = TRUE - -/// Teleports to a location 4 turfs away from the enemy in view -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/try_teleport() - teleport(6) - if(WENDIGO_ENRAGED) - playsound(loc, 'sound/magic/clockwork/invoke_general.ogg', 100, TRUE) - for(var/shots in 1 to WENDIGO_SHOTGUN_SHOTCOUNT) - var/spread = shots * 10 - 30 - var/turf/startloc = get_step(get_turf(src), get_dir(src, target)) - var/turf/endloc = get_turf(target) - if(!endloc) - break - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.speed = 8 - shockwave.preparePixelProjectile(endloc, startloc, null, spread) - shockwave.firer = src - if(target) - shockwave.original = target - shockwave.fire() - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 0 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 0 SECONDS)) - -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/teleport(range = 6) - var/list/possible_ends = view(range, target.loc) - view(range - 1, target.loc) - for(var/turf/closed/cant_teleport_turf in possible_ends) - possible_ends -= cant_teleport_turf - if(!possible_ends.len) - return - var/turf/end = pick(possible_ends) - do_teleport(src, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) - -/// Applies dizziness to all nearby enemies that can hear the scream and animates the wendigo shaking up and down as shockwave projectiles shoot outward -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/shockwave_scream() - can_move = FALSE - COOLDOWN_START(src, scream_cooldown, scream_cooldown_time) - SLEEP_CHECK_DEATH(5, src) - playsound(loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) - var/pixel_shift = rand(5, 15) - animate(src, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) - animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) - for(var/mob/living/dizzy_target in get_hearers_in_view(7, src) - src) - dizzy_target.set_dizzy_if_lower(12 SECONDS) - to_chat(dizzy_target, span_danger("The wendigo screams loudly!")) - SLEEP_CHECK_DEATH(1 SECONDS, src) - spiral_attack() - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 3 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 3 SECONDS)) - SLEEP_CHECK_DEATH(3 SECONDS, src) - can_move = TRUE - -/// Shoots shockwave projectiles in a random preset pattern -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/spiral_attack() - var/list/choices = list("Alternating Circle", "Spiral") - if(WENDIGO_ENRAGED) - choices += "Wave" - var/spiral_type = pick(choices) - switch(spiral_type) - if("Alternating Circle") - var/shots_per = WENDIGO_CIRCLE_SHOTCOUNT - for(var/shoot_times in 1 to WENDIGO_CIRCLE_REPEATCOUNT) - var/offset = shoot_times % 2 - for(var/shot in 1 to shots_per) - var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5 - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.speed = 3 - WENDIGO_ENRAGED - shockwave.fire(angle) - SLEEP_CHECK_DEATH(6 - WENDIGO_ENRAGED * 2, src) - if("Spiral") - var/shots_spiral = WENDIGO_SPIRAL_SHOTCOUNT - var/angle_to_target = get_angle(src, target) - var/spiral_direction = pick(-1, 1) - for(var/shot in 1 to shots_spiral) - var/shots_per_tick = 5 - WENDIGO_ENRAGED * 3 - var/angle_change = (5 + WENDIGO_ENRAGED * shot / 6) * spiral_direction - for(var/count in 1 to shots_per_tick) - var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.damage = 15 - shockwave.fire(angle) - SLEEP_CHECK_DEATH(1, src) - if("Wave") - var/shots_per = WENDIGO_WAVE_SHOTCOUNT - var/difference = 360 / shots_per - var/wave_direction = pick(-1, 1) - for(var/shoot_times in 1 to WENDIGO_WAVE_REPEATCOUNT) - for(var/shot in 1 to shots_per) - var/angle = shot * difference + shoot_times * 5 * wave_direction * -1 - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.wave_movement = TRUE - shockwave.speed = 8 - shockwave.wave_speed = 10 * wave_direction - shockwave.fire(angle) - SLEEP_CHECK_DEATH(2, src) + SLEEP_CHECK_DEATH(delay, owner) /mob/living/simple_animal/hostile/megafauna/wendigo/death(gibbed, list/force_grant) if(health > 0) @@ -285,6 +195,7 @@ Difficulty: Hard /obj/projectile/colossus/wendigo_shockwave name = "wendigo shockwave" + speed = 2 /// If wave movement is enabled var/wave_movement = FALSE /// Amount the angle changes every pixel move @@ -292,6 +203,17 @@ Difficulty: Hard /// Amount of movements this projectile has made var/pixel_moves = 0 +/obj/projectile/colossus/wendigo_shockwave/spiral + damage = 15 + +/obj/projectile/colossus/wendigo_shockwave/wave + speed = 8 + wave_movement = TRUE + wave_speed = 10 + +/obj/projectile/colossus/wendigo_shockwave/wave/alternate + wave_speed = -10 + /obj/projectile/colossus/wendigo_shockwave/pixel_move(trajectory_multiplier, hitscanning = FALSE) . = ..() if(wave_movement) @@ -344,9 +266,3 @@ Difficulty: Hard throwforce = 0 #undef WENDIGO_ENRAGED -#undef WENDIGO_CIRCLE_SHOTCOUNT -#undef WENDIGO_CIRCLE_REPEATCOUNT -#undef WENDIGO_SPIRAL_SHOTCOUNT -#undef WENDIGO_WAVE_SHOTCOUNT -#undef WENDIGO_WAVE_REPEATCOUNT -#undef WENDIGO_SHOTGUN_SHOTCOUNT diff --git a/tgstation.dme b/tgstation.dme index d35ffe575fabd..165b2419ccc35 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -852,6 +852,7 @@ #include "code\datums\actions\mobs\dash.dm" #include "code\datums\actions\mobs\defensive_mode.dm" #include "code\datums\actions\mobs\fire_breath.dm" +#include "code\datums\actions\mobs\ground_slam.dm" #include "code\datums\actions\mobs\lava_swoop.dm" #include "code\datums\actions\mobs\meteors.dm" #include "code\datums\actions\mobs\mobcooldown.dm" @@ -860,6 +861,7 @@ #include "code\datums\actions\mobs\projectileattack.dm" #include "code\datums\actions\mobs\sign_language.dm" #include "code\datums\actions\mobs\sneak.dm" +#include "code\datums\actions\mobs\teleport.dm" #include "code\datums\actions\mobs\transform_weapon.dm" #include "code\datums\actions\mobs\sequences\dash_attack.dm" #include "code\datums\actions\mobs\sequences\projectile.dm" From 6a60750973cbb17cea147ea6f9cc4c9aae316cf8 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 07:09:29 +1200 Subject: [PATCH 16/49] Automatic changelog for PR #83325 [ci skip] --- html/changelogs/AutoChangeLog-pr-83325.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83325.yml diff --git a/html/changelogs/AutoChangeLog-pr-83325.yml b/html/changelogs/AutoChangeLog-pr-83325.yml new file mode 100644 index 0000000000000..6024e5fc009d8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83325.yml @@ -0,0 +1,4 @@ +author: "Whoneedspacee" +delete-after: True +changes: + - refactor: "Wendigos abilities have been changed into actions that can be added to any mob." \ No newline at end of file From 2e4ff08a471fa079c8c51656cff4df09241c1eff Mon Sep 17 00:00:00 2001 From: zxaber <37497534+zxaber@users.noreply.github.com> Date: Mon, 27 May 2024 12:10:59 -0700 Subject: [PATCH 17/49] Infected AI (Traitor Final Objective) no longer plays the Malf Antag sound effect (#83390) ## About The Pull Request Does as title says. Infected AI *could* be given a new sound effect but I'll leave that to someone in the future. Also removes the ability for Infected AIs to set their own custom objectives ## Why It's Good For The Game Getting Malf AI usually means you can ignore laws. AIs really should be checking their Law 0 before deciding to do their own flavor of chaos but Infected AI having the same sound effect is an unnecessary extra chance to mix the two up. ## Changelog :cl: qol: Traitor-created Infected AIs no longer hear the Malf AI antag sound alert. /:cl: --------- Co-authored-by: Afevis --- code/modules/antagonists/malf_ai/malf_ai.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index b76452e6076f3..358b618df99aa 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -20,6 +20,8 @@ var/should_give_codewords = TRUE ///since the module purchasing is built into the antag info, we need to keep track of its compact mode here var/module_picker_compactmode = FALSE + ///malf on_gain sound effect. Set here so Infected AI can override + var/malf_sound = 'sound/ambience/antag/malf.ogg' /datum/antagonist/malf_ai/New(give_objectives = TRUE) . = ..() @@ -39,7 +41,8 @@ malfunction_flavor = strings(MALFUNCTION_FLAVOR_FILE, employer) add_law_zero() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + if(malf_sound) + owner.current.playsound_local(get_turf(owner.current), malf_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.current.grant_language(/datum/language/codespeak, source = LANGUAGE_MALF) var/datum/atom_hud/data/hackyhud = GLOB.huds[DATA_HUD_MALF_APC] @@ -272,6 +275,8 @@ /datum/antagonist/malf_ai/infected name = "Infected AI" employer = "Infected AI" + can_assign_self_objectives = FALSE + malf_sound = null ///The player, to who is this AI slaved var/datum/mind/boss From fd8941f893c667ea861ad0eebc559c399b63d4e2 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 07:11:21 +1200 Subject: [PATCH 18/49] Automatic changelog for PR #83390 [ci skip] --- html/changelogs/AutoChangeLog-pr-83390.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83390.yml diff --git a/html/changelogs/AutoChangeLog-pr-83390.yml b/html/changelogs/AutoChangeLog-pr-83390.yml new file mode 100644 index 0000000000000..4fde26198833a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83390.yml @@ -0,0 +1,4 @@ +author: "zxaber" +delete-after: True +changes: + - qol: "Traitor-created Infected AIs no longer hear the Malf AI antag sound alert." \ No newline at end of file From 0850748efa116a16b515c821395f353ccaba031d Mon Sep 17 00:00:00 2001 From: Jacquerel Date: Mon, 27 May 2024 20:12:24 +0100 Subject: [PATCH 19/49] Large monsters break out of the Paddy very quickly (#83406) ## About The Pull Request Fixes #83292 by making mobs larger than Humans break out of the mech jail cell 10x faster than humans. Also I made the error output into balloon alerts. ## Why It's Good For The Game This is a security mech designed for interacting with crew; it doesn't _need_ the ability to arrest alien queens or space dragons and we didn't really design any of these antagonists with the idea that you can stuff them inside a mech that looks smaller than they are. Resultingly; now they don't stay stuck in it for very long if you are not paying attention. ## Changelog :cl: balance: Mobs significantly larger than humans, such as Space Dragons and Xenomorph Queens, breakout of being arrested by a mech significantly faster. /:cl: --- code/modules/vehicles/mecha/equipment/weapons/weapons.dm | 4 ++-- code/modules/vehicles/mecha/working/ripley.dm | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index bd9bbfca91f27..d13b90e5659f7 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -580,10 +580,10 @@ . = ..() var/mob/living/mobtarget = target if(mobtarget.move_resist == MOVE_FORCE_OVERPOWERING) //No megafauna or bolted AIs, please. - to_chat(source, "[span_warning("[src] is unable to lift [mobtarget].")]") + balloon_alert(source, "too strong!") return if(secmech.cargo_hold.contents.len >= secmech.cargo_hold.cargo_capacity) - to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") + balloon_alert(source, "no room!") return playsound(chassis, clampsound, 50, FALSE, -6) diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 1bed2350f08c8..be9dc0d69c337 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -396,8 +396,13 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) return ..() /obj/item/mecha_parts/mecha_equipment/ejector/seccage/container_resist_act(mob/living/user) - to_chat(user, span_notice("You begin attempting a breakout. (This will take around 45 seconds and [chassis] need to remain stationary.)")) - if(!do_after(user, 1 MINUTES, target = chassis)) + var/breakout_time = 1 MINUTES + + if (user.mob_size > MOB_SIZE_HUMAN) + breakout_time = 6 SECONDS + + to_chat(user, span_notice("You begin attempting a breakout. (This will take around [DisplayTimeText(breakout_time)] and [chassis] needs to remain stationary.)")) + if(!do_after(user, breakout_time, target = chassis)) return to_chat(user, span_notice("You break out of the [src].")) playsound(chassis, 'sound/items/crowbar.ogg', 100, TRUE) From 7a54ad2693702bb404288784a803cdd27e8be81b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 07:12:43 +1200 Subject: [PATCH 20/49] Automatic changelog for PR #83406 [ci skip] --- html/changelogs/AutoChangeLog-pr-83406.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83406.yml diff --git a/html/changelogs/AutoChangeLog-pr-83406.yml b/html/changelogs/AutoChangeLog-pr-83406.yml new file mode 100644 index 0000000000000..c02fdfe001def --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83406.yml @@ -0,0 +1,4 @@ +author: "Jacquerel" +delete-after: True +changes: + - balance: "Mobs significantly larger than humans, such as Space Dragons and Xenomorph Queens, breakout of being arrested by a mech significantly faster." \ No newline at end of file From a7babaf975a6985f8aea5c6ffb4b1c6d3f30f8d9 Mon Sep 17 00:00:00 2001 From: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Date: Mon, 27 May 2024 19:18:56 +0000 Subject: [PATCH 21/49] Saves profiler snapshots every 5 minutes (#83467) ## About The Pull Request As the title says. Each saved snapshot will be named - `profiler-[TIME IN SECONDS].json` - `sendmaps-[TIME IN SECONDS].json` For example, `profiler-0.json`, `profiler-300.json`, `profiler-600.json` would correspond to a profile at the start of the round, a profile 300 seconds into a round and a profile 600 seconds into a round. The timings depend on world.time, so it's probably not a good idea to rely on these timings to stay consistent. ## Why It's Good For The Game Allows us to track performance of procs over time. Could allow us to spot any sort of anomalies or performance sinks. CC: @MrStonedOne @bobbah @LemonInTheDark --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> --- code/controllers/subsystem/profiler.dm | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index dc06c2bc6ae7f..46d5b0fd57ba5 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -1,11 +1,8 @@ -#define PROFILER_FILENAME "profiler.json" -#define SENDMAPS_FILENAME "sendmaps.json" - SUBSYSTEM_DEF(profiler) name = "Profiler" init_order = INIT_ORDER_PROFILER runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - wait = 3000 + wait = 300 SECONDS var/fetch_cost = 0 var/write_cost = 0 @@ -56,12 +53,12 @@ SUBSYSTEM_DEF(profiler) if(!length(current_profile_data)) //Would be nice to have explicit proc to check this stack_trace("Warning, profiling stopped manually before dump.") - var/prof_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]") + var/prof_file = file("[GLOB.log_directory]/profiler/profiler-[round(world.time * 0.1, 10)].json") if(fexists(prof_file)) fdel(prof_file) if(!length(current_sendmaps_data)) //Would be nice to have explicit proc to check this stack_trace("Warning, sendmaps profiling stopped manually before dump.") - var/sendmaps_file = file("[GLOB.log_directory]/[SENDMAPS_FILENAME]") + var/sendmaps_file = file("[GLOB.log_directory]/profiler/sendmaps-[round(world.time * 0.1, 10)].json") if(fexists(sendmaps_file)) fdel(sendmaps_file) @@ -70,5 +67,3 @@ SUBSYSTEM_DEF(profiler) WRITE_FILE(sendmaps_file, current_sendmaps_data) write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) -#undef PROFILER_FILENAME -#undef SENDMAPS_FILENAME From 96e301be39fa20cb4b0d7497e92777f95fdb3f37 Mon Sep 17 00:00:00 2001 From: Higgin Date: Mon, 27 May 2024 12:20:26 -0700 Subject: [PATCH 22/49] Viro Rework Tweaks (Buffed Natural Healing, Slower Progression, Stealth Respects Severity) (#83459) ## About The Pull Request ![image](https://github.com/tgstation/tgstation/assets/3894717/1d041612-c364-41c7-ae4b-bd386f2acb2e) what it says on the tin. we're in virology rework season again #79854 makes natural healing enough for people to kick the teeth out of bad viruses without chem. (still needs exact testing to dial in, but ideally, chems will be a buff but no longer a mainstay. #83453 will help, and things like fungal TB will be unchanged.) makes viruses progress a bit slower across the board - this was part of why you could have a bad virus shoot up to stage 5 from having been at stage 1 out of nowhere, even after having mostly fought it off. this is probabilistic, but the prob is lower now. makes viruses only hide if their stealth stat is higher than their severity. if you want your virus to be sneaky, you need to spec into hiding it and run fewer symptoms (#83458 will fuck with this if implemented - stay tuned.) ## Why It's Good For The Game people don't like getting griefed by one-sided mechanics. while i think i got some of the way there in #79854, the felt impact of that PR was undercut by me being conservative with the values for what players' actual choices outside of chem could do and SD still existing. I'm hoping to go back and fix that first one since thankfully @Time-Green is working on #83453. Logic remains much the same as in https://hackmd.io/@Higgin/HJljdBuNp - I am leaving this as a draft until I've had at least a few more tests on the values, but I'd like to see this TM'd in a round or two with advanced diseases floating around if possible. edit to add some clarification: if you do nothing, I balanced the worst viruses to be about a 50% chance of death. if you do the right thing, it should work 100% of the time or close to it. the problem I'm trying to address here is that the second one was nowhere near 100%. ## Changelog :cl: balance: Viruses now self-heal much more effectively with good mood, sleep, food, and spaceacillin. balance: Viruses now punish being hungry more. Stay fed! balance: Spaceacillin now gives 200 ticks of symptom resistance, declining over time, rather than 100. balance: Viruses now progress slightly slower. balance: Viruses now only hide if their stealth stat is greater than their total computed severity. /:cl: --- code/__DEFINES/diseases.dm | 18 +++++++++--------- code/datums/diseases/_disease.dm | 4 ++-- code/datums/diseases/advance/advance.dm | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/__DEFINES/diseases.dm b/code/__DEFINES/diseases.dm index 047bb79582de4..fe05a30e0fd83 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -81,28 +81,28 @@ DEFINE_BITFIELD(spread_flags, list( //// Adjust to make it faster or slower to cure once the virus has reached its peak. #define DISEASE_PEAKED_RECOVERY_MULTIPLIER 1.2 /// Slowdown Recovery Bonus - set this to the maximum extra chance per tick you want people to get to recover from spaceacillin or other slowdown/virus resistance effects -#define DISEASE_SLOWDOWN_RECOVERY_BONUS 1 -/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS.______qdel_list_wrapper(list/L) +#define DISEASE_SLOWDOWN_RECOVERY_BONUS 3 +/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS. //// Scales down linearly over time. -#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 100 +#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 200 /// Negative Malnutrition Recovery Penalty //// Flat penalty to recovery chance if malnourished or starving -#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 1.5 +#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 3 /// Satiety Recovery Multiplier - added chance to recover based on positive satiety //// Multiplier of satiety/max_satiety if satiety is positive or zero. Increase to make satiety more valuable, decrease for less. -#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 1 +#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 3 /// Good Sleeping Recovery Bonus - additive benefits for various types of good sleep (blanket, bed, darkness, pillows.) //// Raise to make each factor add this much chance to recover. -#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.2 +#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.6 /// Sleeping Recovery Multiplier - multiplies ALL recovery chance effects by this amount. //// Set to 1 for no effect on recovery chances from sleeping. -#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 2 +#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 6 /// Final Cure Chance Multiplier - multiplies the disease's cure chance to get the probability of moving from stage 1 to a final cure. //// Must be greater than zero for diseases to self cure. -#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 3 +#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 6 /// Symptom Offset Duration - number of cycles over which sleeping/having spaceacillin or a slowdown effect can prevent symptoms appearing //// Set to maximum # of cycles you want to be able to offset symptoms. Scales down linearly over time. -#define DISEASE_SYMPTOM_OFFSET_DURATION 100 +#define DISEASE_SYMPTOM_OFFSET_DURATION 200 /// Symptom Frequency Modifier //// Raise to make symptoms fire less frequently, lower to make them fire more frequently. Keep at 0 or above. diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index bc60049e73ea6..da0a849989ec1 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -140,9 +140,9 @@ if(affected_mob.mob_mood) // this and most other modifiers below a shameless rip from sleeping healing buffs, but feeling good helps make it go away quicker switch(affected_mob.mob_mood.sanity_level) if(SANITY_LEVEL_GREAT) - recovery_prob += 0.2 + recovery_prob += 0.4 if(SANITY_LEVEL_NEUTRAL) - recovery_prob += 0.1 + recovery_prob += 0.2 if(SANITY_LEVEL_DISTURBED) recovery_prob += 0 if(SANITY_LEVEL_UNSTABLE) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 93edea10b41c6..88e824383343f 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -271,7 +271,7 @@ /datum/disease/advance/proc/assign_properties() if(properties?.len) - if(properties["stealth"] >= 2) + if(properties["stealth"] >= properties["severity"]) visibility_flags |= HIDDEN_SCANNER else visibility_flags &= ~HIDDEN_SCANNER @@ -287,7 +287,7 @@ spreading_modifier = max(CEILING(0.4 * properties["transmittable"], 1), 1) cure_chance = clamp(7.5 - (0.5 * properties["resistance"]), 1, 10) // can be between 1 and 10 - stage_prob = max(0.5 * properties["stage_rate"], 1) + stage_prob = max(0.3 * properties["stage_rate"], 1) set_severity(round(properties["severity"]), 1) generate_cure(properties) else From 3aaddb737352f83cfd8ad1dbeb29d578381f45e6 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 07:20:46 +1200 Subject: [PATCH 23/49] Automatic changelog for PR #83459 [ci skip] --- html/changelogs/AutoChangeLog-pr-83459.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83459.yml diff --git a/html/changelogs/AutoChangeLog-pr-83459.yml b/html/changelogs/AutoChangeLog-pr-83459.yml new file mode 100644 index 0000000000000..7b3871dab89da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83459.yml @@ -0,0 +1,8 @@ +author: "Higgin" +delete-after: True +changes: + - balance: "Viruses now self-heal much more effectively with good mood, sleep, food, and spaceacillin." + - balance: "Viruses now punish being hungry more. Stay fed!" + - balance: "Spaceacillin now gives 200 ticks of symptom resistance, declining over time, rather than 100." + - balance: "Viruses now progress slightly slower." + - balance: "Viruses now only hide if their stealth stat is greater than their total computed severity." \ No newline at end of file From d4db3385ab312055eb3bdaed766ab019cbad126b Mon Sep 17 00:00:00 2001 From: Time-Green <7501474+Time-Green@users.noreply.github.com> Date: Mon, 27 May 2024 21:21:21 +0200 Subject: [PATCH 24/49] Adds symptom weights (#83456) ## About The Pull Request Adds symptom weights. Sneeze and cough have double weighing ## Why It's Good For The Game Sneezing and coughing are very commonly used symptoms in order to mass spread diseases. They're usually a given since it gives everyone your virus. By increasing their weighting, mass spreaders are limited to less symptoms. Reduces station-wipe potential of lethal diseases and nerfs positive viruses by requiring people to actually go to medbay and get them (even if its just the pill table). We can make viruses less symptom heavy now that we don't have to worry about the virologists' enjoyment, making it less horrible to deal with. Instead of combusting, freezing, becoming blind, starving and your skin melting, you now wont starve (unless you got infected through fluids, but that's a lot more direct and avoidable so probably fine) ## Changelog :cl: tweak: Sneezing and coughing symptoms have double the weighting /:cl: --- code/datums/diseases/advance/advance.dm | 13 +++++++++---- code/datums/diseases/advance/symptoms/cough.dm | 1 + code/datums/diseases/advance/symptoms/sneeze.dm | 1 + code/datums/diseases/advance/symptoms/symptoms.dm | 3 +++ tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx | 7 ++++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 88e824383343f..3d8bfdf8837dd 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -266,6 +266,7 @@ properties["severity"] = round((properties["severity"] / 2), 1) properties["severity"] *= (symptoms.len / VIRUS_SYMPTOM_LIMIT) //fewer symptoms, less severity properties["severity"] = clamp(properties["severity"], 1, 7) + properties["capacity"] = get_symptom_weights() // Assign the properties that are in the list. /datum/disease/advance/proc/assign_properties() @@ -341,7 +342,7 @@ // Will generate a random cure, the more resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/generate_cure() if(properties?.len) - var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) + var/res = clamp(properties["resistance"] - (symptoms.len * 0.5), 1, advance_cures.len) if(res == oldres) return cures = list(pick(advance_cures[res])) @@ -402,11 +403,9 @@ // Add a symptom, if it is over the limit we take a random symptom away and add the new one. /datum/disease/advance/proc/AddSymptom(datum/symptom/S) - if(HasSymptom(S)) return - - if(symptoms.len >= VIRUS_SYMPTOM_LIMIT) + while(get_symptom_weights() > VIRUS_SYMPTOM_LIMIT + S.weight) RemoveSymptom(pick(symptoms)) symptoms += S S.OnAdd(src) @@ -423,6 +422,12 @@ S.name += " (neutered)" S.OnRemove(src) +/// How much of the symptom capacity is currently being used? +/datum/disease/advance/proc/get_symptom_weights() + . = 0 + for(var/datum/symptom/symptom as anything in symptoms) + . += symptom.weight + /* Static Procs diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 7368e99acc814..0a29a633a30ae 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -10,6 +10,7 @@ name = "Cough" desc = "The virus irritates the throat of the host, causing occasional coughing. Each cough will try to infect bystanders who are within 1 tile of the host with the virus." illness = "Jest Infection" + weight = 2 stealth = -1 resistance = 3 stage_speed = 1 diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 14a087da1238f..6771d57f20bca 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -10,6 +10,7 @@ name = "Sneezing" desc = "The virus causes irritation of the nasal cavity, making the host sneeze occasionally. Sneezes from this symptom will spread the virus in a 4 meter cone in front of the host." illness = "Bard Flu" + weight = 2 stealth = -2 resistance = 3 stage_speed = 0 diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 28ba45f8de4e0..5a4331b3c6183 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -39,6 +39,8 @@ var/naturally_occuring = TRUE ///If the symptom requires an organ for the effects to function, robotic organs are immune to disease unless inorganic biology symptom is present var/required_organ + /// How much space does this symptom use? + var/weight = 1 /datum/symptom/New() var/list/S = SSdisease.list_symptoms @@ -106,6 +108,7 @@ var/list/data = list() data["name"] = name data["desc"] = desc + data["weight"] = weight data["stealth"] = stealth data["resistance"] = resistance data["stage_speed"] = stage_speed diff --git a/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx b/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx index cdbb49f715fca..5fa92583f2e51 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx @@ -70,7 +70,7 @@ const Thresholds = (props) => { /** Displays the numerical trait modifiers for a virus symptom */ const Traits = (props) => { const { - symptom: { level, resistance, stage_speed, stealth, transmission }, + symptom: { level, weight, resistance, stage_speed, stealth, transmission }, } = props; return ( @@ -81,6 +81,11 @@ const Traits = (props) => { {level} + + + {weight} + + {resistance} From dc2da9338aaefa34f083673ab797fd93c43818b2 Mon Sep 17 00:00:00 2001 From: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Date: Mon, 27 May 2024 19:23:13 +0000 Subject: [PATCH 25/49] Removes logging each lua function called on the dm side of things. (#83483) ## About The Pull Request As the title says. This should significantly improve the performance of running lua scripts. ## Why It's Good For The Game There is a lot of performance overhead in logging each individual function called by a lua script as can be seen in the following screenshot: This is a test done on a local server where I run the `zombie_controller.lua` script that can be found on the auxlua-cookbook repository with a lot of AI zombies spawned in. ![image](https://github.com/tgstation/tgstation/assets/37270891/fb8ee2d8-0b4c-49d7-823a-a552cde6cb10) ![image](https://github.com/tgstation/tgstation/assets/37270891/186c2cb0-82f9-4914-bd29-df19e1c0dbe1) Logging these calls is not necessary as it doesn't provide any real information to anyone looking for bad actors. Lua scripts are already logged when ran and they can be examined to spot if the script being run is done so in bad faith. --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> --- code/modules/admin/verbs/lua/lua_state.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/admin/verbs/lua/lua_state.dm b/code/modules/admin/verbs/lua/lua_state.dm index 27994d966a7cb..bf2bcbd5a9003 100644 --- a/code/modules/admin/verbs/lua/lua_state.dm +++ b/code/modules/admin/verbs/lua/lua_state.dm @@ -111,8 +111,6 @@ GLOBAL_PROTECT(lua_usr) for(var/path_element in function) new_function_path += path_element function = new_function_path - var/msg = "[key_name(usr)] called the lua function \"[function]\" with arguments: [english_list(call_args)]" - log_lua(msg) var/tmp_usr = GLOB.lua_usr GLOB.lua_usr = usr From 2f76261ca5bce18d12bd461d9c9965fa28fce895 Mon Sep 17 00:00:00 2001 From: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> Date: Mon, 27 May 2024 20:44:54 +0100 Subject: [PATCH 26/49] [NO GBP]Fixes labour camp shuttle retrieval message. (#83488) ## About The Pull Request I tried to make the name a proper noun with the /p tag, but /p isn't the way to do it. I don't know the way to do it, but the name will be capitalised anyways so lets just remove it. ## Why It's Good For The Game It's better this way. ## Changelog :cl: spellcheck: Fixes labour camp shuttle retrieval message starting with "/p". /:cl: --- code/modules/mining/laborcamp/laborstacker.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 8b82d4b7d7796..cd5a60a22f2ae 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -109,7 +109,7 @@ var/datum/record/crew/target = find_record(user_mob.real_name) target?.wanted_status = WANTED_PAROLE - security_radio.talk_into(src, "/p [user_mob.name] returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) + security_radio.talk_into(src, "[user_mob.name] returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) user_mob.log_message("has completed their labor points goal and is now sending the gulag shuttle back to the station.", LOG_GAME) to_chat(user_mob, span_notice("Shuttle received message and will be sent shortly.")) return TRUE From 579bd9807b7b7917e552f39046e577e33dc12e33 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 07:45:14 +1200 Subject: [PATCH 27/49] Automatic changelog for PR #83488 [ci skip] --- html/changelogs/AutoChangeLog-pr-83488.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83488.yml diff --git a/html/changelogs/AutoChangeLog-pr-83488.yml b/html/changelogs/AutoChangeLog-pr-83488.yml new file mode 100644 index 0000000000000..eec98662e6816 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83488.yml @@ -0,0 +1,4 @@ +author: "Pickle-Coding" +delete-after: True +changes: + - spellcheck: "Fixes labour camp shuttle retrieval message starting with \"/p\"." \ No newline at end of file From 9ea1a19619994c64d0fa80eb50f7327985d72698 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 28 May 2024 00:23:34 +0000 Subject: [PATCH 28/49] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-83325.yml | 4 --- html/changelogs/AutoChangeLog-pr-83380.yml | 4 --- html/changelogs/AutoChangeLog-pr-83390.yml | 4 --- html/changelogs/AutoChangeLog-pr-83395.yml | 4 --- html/changelogs/AutoChangeLog-pr-83406.yml | 4 --- html/changelogs/AutoChangeLog-pr-83410.yml | 5 --- html/changelogs/AutoChangeLog-pr-83412.yml | 8 ----- html/changelogs/AutoChangeLog-pr-83417.yml | 4 --- html/changelogs/AutoChangeLog-pr-83434.yml | 4 --- html/changelogs/AutoChangeLog-pr-83459.yml | 8 ----- html/changelogs/AutoChangeLog-pr-83488.yml | 4 --- html/changelogs/archive/2024-05.yml | 40 ++++++++++++++++++++++ 12 files changed, 40 insertions(+), 53 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-83325.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83380.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83390.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83395.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83406.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83410.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83412.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83417.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83434.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83459.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83488.yml diff --git a/html/changelogs/AutoChangeLog-pr-83325.yml b/html/changelogs/AutoChangeLog-pr-83325.yml deleted file mode 100644 index 6024e5fc009d8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83325.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Whoneedspacee" -delete-after: True -changes: - - refactor: "Wendigos abilities have been changed into actions that can be added to any mob." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83380.yml b/html/changelogs/AutoChangeLog-pr-83380.yml deleted file mode 100644 index f9fbd4819073d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83380.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fikou" -delete-after: True -changes: - - image: "makes food hud burger icon have a sharp outline" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83390.yml b/html/changelogs/AutoChangeLog-pr-83390.yml deleted file mode 100644 index 4fde26198833a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83390.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zxaber" -delete-after: True -changes: - - qol: "Traitor-created Infected AIs no longer hear the Malf AI antag sound alert." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83395.yml b/html/changelogs/AutoChangeLog-pr-83395.yml deleted file mode 100644 index 13f4b366d044e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83395.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LemonInTheDark" -delete-after: True -changes: - - refactor: "I have reworked how parallax and its animations (space travel) work. Please report any bugs lads!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83406.yml b/html/changelogs/AutoChangeLog-pr-83406.yml deleted file mode 100644 index c02fdfe001def..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83406.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jacquerel" -delete-after: True -changes: - - balance: "Mobs significantly larger than humans, such as Space Dragons and Xenomorph Queens, breakout of being arrested by a mech significantly faster." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83410.yml b/html/changelogs/AutoChangeLog-pr-83410.yml deleted file mode 100644 index ed8799caa05ce..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83410.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Jacquerel" -delete-after: True -changes: - - bugfix: "Venus Man Traps cannot use vines to drag around machines or objects that are bolted, welded, rooted to, or otherwise are part of the ground" - - bugfix: "Standing on a table will not prevent you from being grappled by a Venus Man Trap" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83412.yml b/html/changelogs/AutoChangeLog-pr-83412.yml deleted file mode 100644 index 34a9e744c46fd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83412.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Echriser" -delete-after: True -changes: - - bugfix: "computers with no lights can now turn on using the on/off signal" - - bugfix: "RGB lights on PDA circuits now use a signal" - - bugfix: "the is_off signal now works on consoles" - - bugfix: "printing text on a console component now uses a signal" - - refactor: "each input signal in console circuits now have their own proc" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83417.yml b/html/changelogs/AutoChangeLog-pr-83417.yml deleted file mode 100644 index 7c6ab4c7859eb..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83417.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EnterTheJake" -delete-after: True -changes: - - bugfix: "Rust debuffs now gets properly removed if you derust a tile you are standing on." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83434.yml b/html/changelogs/AutoChangeLog-pr-83434.yml deleted file mode 100644 index 33e3355ed2c93..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83434.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fluffles" -delete-after: True -changes: - - bugfix: "echolocation is less laggy. and works." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83459.yml b/html/changelogs/AutoChangeLog-pr-83459.yml deleted file mode 100644 index 7b3871dab89da..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83459.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Higgin" -delete-after: True -changes: - - balance: "Viruses now self-heal much more effectively with good mood, sleep, food, and spaceacillin." - - balance: "Viruses now punish being hungry more. Stay fed!" - - balance: "Spaceacillin now gives 200 ticks of symptom resistance, declining over time, rather than 100." - - balance: "Viruses now progress slightly slower." - - balance: "Viruses now only hide if their stealth stat is greater than their total computed severity." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83488.yml b/html/changelogs/AutoChangeLog-pr-83488.yml deleted file mode 100644 index eec98662e6816..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83488.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Pickle-Coding" -delete-after: True -changes: - - spellcheck: "Fixes labour camp shuttle retrieval message starting with \"/p\"." \ No newline at end of file diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index 051c951627ac3..aaa901966a304 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -713,3 +713,43 @@ - image: Changes the sprites of bone and ash drake armor (suit + helmet mob/objs) necromanceranne: - bugfix: Material floor tiles once again have their improved sprite. +2024-05-28: + Echriser: + - bugfix: computers with no lights can now turn on using the on/off signal + - bugfix: RGB lights on PDA circuits now use a signal + - bugfix: the is_off signal now works on consoles + - bugfix: printing text on a console component now uses a signal + - refactor: each input signal in console circuits now have their own proc + EnterTheJake: + - bugfix: Rust debuffs now gets properly removed if you derust a tile you are standing + on. + Fikou: + - image: makes food hud burger icon have a sharp outline + Fluffles: + - bugfix: echolocation is less laggy. and works. + Higgin: + - balance: Viruses now self-heal much more effectively with good mood, sleep, food, + and spaceacillin. + - balance: Viruses now punish being hungry more. Stay fed! + - balance: Spaceacillin now gives 200 ticks of symptom resistance, declining over + time, rather than 100. + - balance: Viruses now progress slightly slower. + - balance: Viruses now only hide if their stealth stat is greater than their total + computed severity. + Jacquerel: + - balance: Mobs significantly larger than humans, such as Space Dragons and Xenomorph + Queens, breakout of being arrested by a mech significantly faster. + - bugfix: Venus Man Traps cannot use vines to drag around machines or objects that + are bolted, welded, rooted to, or otherwise are part of the ground + - bugfix: Standing on a table will not prevent you from being grappled by a Venus + Man Trap + LemonInTheDark: + - refactor: I have reworked how parallax and its animations (space travel) work. + Please report any bugs lads! + Pickle-Coding: + - spellcheck: Fixes labour camp shuttle retrieval message starting with "/p". + Whoneedspacee: + - refactor: Wendigos abilities have been changed into actions that can be added + to any mob. + zxaber: + - qol: Traitor-created Infected AIs no longer hear the Malf AI antag sound alert. From 28cc0cddc7a01545ed2bd105a4153559f5aa3d9c Mon Sep 17 00:00:00 2001 From: NewyearnewmeUwu <70115628+NewyearnewmeUwu@users.noreply.github.com> Date: Mon, 27 May 2024 23:24:04 -0700 Subject: [PATCH 29/49] Fixes a typo in the paystand code. (#83506) ## About The Pull Request Pretty self-explanatory. Fixes #83496. Turns out it was just a typo. ## Why It's Good For The Game Bugs bad? ## Changelog :cl: fix: Fixed a typo preventing creation of paystands using an ID. /:cl: --- code/game/objects/items/cards_ids.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index c3621cd332958..fe03aaaf01e0d 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -454,7 +454,7 @@ if(!COOLDOWN_FINISHED(src, last_holopay_projection)) balloon_alert(user, "still recharging") return - if(can_be_used_in_payment(user)) + if(!can_be_used_in_payment(user)) balloon_alert(user, "no account!") to_chat(user, span_warning("You need a valid bank account to do this.")) return From 33ca00ae95a3c9730f646515c188575271300e8d Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Tue, 28 May 2024 18:24:23 +1200 Subject: [PATCH 30/49] Automatic changelog for PR #83506 [ci skip] --- html/changelogs/AutoChangeLog-pr-83506.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83506.yml diff --git a/html/changelogs/AutoChangeLog-pr-83506.yml b/html/changelogs/AutoChangeLog-pr-83506.yml new file mode 100644 index 0000000000000..d9db6982d0ef9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83506.yml @@ -0,0 +1,4 @@ +author: "NewyearnewmeUwu" +delete-after: True +changes: + - bugfix: "Fixed a typo preventing creation of paystands using an ID." \ No newline at end of file From 2e3a90293d198c13acf8203921d94b780c7b6d1f Mon Sep 17 00:00:00 2001 From: FlufflesTheDog Date: Tue, 28 May 2024 05:32:28 -0700 Subject: [PATCH 31/49] Dehardcoded modsuit fixes (#83425) ## About The Pull Request Patches up some things that were lacking post #82905 - Some missing (un)seal messages - a missed direct use of the mod_parts list EDIT: Also fixes the modsuit painter, and makes sure modsuits can still be set to use custom dmi files via `MOD_ICON_OVERRIDE`/`MOD_WORN_ICON_OVERRIDE` Fixes #83442 ## Changelog :cl: fix: some missing modsuit (un)sealing messages should no longer be missing fix: MOD circuit adapter core deployed parts output should work again fix: Modsuit painter works again /:cl: --- code/modules/mod/mod_paint.dm | 4 ++-- code/modules/mod/mod_theme.dm | 18 ++++++++++++++++++ code/modules/wiremod/shell/module.dm | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm index 1402a4aebc6bc..77af1f7290c83 100644 --- a/code/modules/mod/mod_paint.dm +++ b/code/modules/mod/mod_paint.dm @@ -151,7 +151,7 @@ if(!pick) balloon_alert(user, "no skin picked!") return - mod.theme.set_skin(pick) + mod.theme.set_skin(mod, pick) /obj/item/mod/paint/proc/check_menu(obj/item/mod/control/mod, mob/user) if(user.incapacitated() || !user.is_holding(src) || !mod || mod.active || mod.activating) @@ -186,7 +186,7 @@ if(!(skin in mod.theme.variants)) balloon_alert(user, "incompatible theme!") return TRUE - mod.theme.set_skin(skin) + mod.theme.set_skin(mod, skin) balloon_alert(user, "skin applied") qdel(src) return TRUE diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index ecfa570dde160..971ccaf5c72bf 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -143,6 +143,8 @@ control_part_datum.part_item = mod mod.mod_parts["[mod.slot_flags]"] = control_part_datum for(var/path in variants[default_skin]) + if(!ispath(path)) + continue var/obj/item/mod_part = new path(mod) if(mod_part.slot_flags == ITEM_SLOT_OCLOTHING && isclothing(mod_part)) var/obj/item/clothing/chestplate = mod_part @@ -576,10 +578,14 @@ /obj/item/clothing/gloves/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), /obj/item/clothing/shoes/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1361,10 +1367,14 @@ /obj/item/clothing/gloves/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), /obj/item/clothing/shoes/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1506,6 +1516,8 @@ UNSEALED_CLOTHING = THICKMATERIAL|CASTING_CLOTHES, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, @@ -2155,14 +2167,20 @@ /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm index 9061bac3e300e..14092f5d2c83c 100644 --- a/code/modules/wiremod/shell/module.dm +++ b/code/modules/wiremod/shell/module.dm @@ -271,7 +271,7 @@ SIGNAL_HANDLER var/string_list = list() var/is_deployed = TRUE - for(var/obj/item/part as anything in attached_module.mod.mod_parts) + for(var/obj/item/part as anything in attached_module.mod.get_parts()) if(part.loc == attached_module.mod) is_deployed = FALSE else From 9cf6f18aace220ff5b6963b321b85d127415923e Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 00:32:47 +1200 Subject: [PATCH 32/49] Automatic changelog for PR #83425 [ci skip] --- html/changelogs/AutoChangeLog-pr-83425.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83425.yml diff --git a/html/changelogs/AutoChangeLog-pr-83425.yml b/html/changelogs/AutoChangeLog-pr-83425.yml new file mode 100644 index 0000000000000..4bb476e3ce13b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83425.yml @@ -0,0 +1,6 @@ +author: "FlufflesTheDog" +delete-after: True +changes: + - bugfix: "some missing modsuit (un)sealing messages should no longer be missing" + - bugfix: "MOD circuit adapter core deployed parts output should work again" + - bugfix: "Modsuit painter works again" \ No newline at end of file From d9fedb97b2b1e7736577efbb5728eaa8fd259fc9 Mon Sep 17 00:00:00 2001 From: Time-Green <7501474+Time-Green@users.noreply.github.com> Date: Tue, 28 May 2024 17:10:06 +0200 Subject: [PATCH 33/49] [NO GBP] Removes sentient disease from antag preferences (#83518) --- config/dynamic.json | 4 ---- .../antagonists/antagonists/sentientdisease.ts | 15 --------------- 2 files changed, 19 deletions(-) delete mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts diff --git a/config/dynamic.json b/config/dynamic.json index a4a1eb7ebdbfb..5761dbabc324e 100644 --- a/config/dynamic.json +++ b/config/dynamic.json @@ -117,10 +117,6 @@ "weight": 0 }, - "Sentient Disease": { - "weight": 0 - }, - "Space Pirates": { "weight": 0 }, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts deleted file mode 100644 index a9c11eda72910..0000000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Antagonist, Category } from '../base'; - -const SentientDisease: Antagonist = { - key: 'sentientdisease', - name: 'Sentient Disease', - description: [ - ` - Mutate and spread yourself and infect as much of the crew as possible - with a deadly plague of your own creation. - `, - ], - category: Category.Midround, -}; - -export default SentientDisease; From 3e3bd0bc2df5c72c36c305bd518242947f54777a Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 03:10:26 +1200 Subject: [PATCH 34/49] Automatic changelog for PR #83518 [ci skip] --- html/changelogs/AutoChangeLog-pr-83518.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83518.yml diff --git a/html/changelogs/AutoChangeLog-pr-83518.yml b/html/changelogs/AutoChangeLog-pr-83518.yml new file mode 100644 index 0000000000000..54333ae06168e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83518.yml @@ -0,0 +1,4 @@ +author: "Time-Green" +delete-after: True +changes: + - rscdel: "Wipes the last echo of sentient disease from existence" \ No newline at end of file From f79795820088980fb091c3b9356debf3b6515b9e Mon Sep 17 00:00:00 2001 From: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Date: Tue, 28 May 2024 13:01:35 -0700 Subject: [PATCH 35/49] Loot panel no longer opens on your equipment (#83399) ## About The Pull Request ![image](https://github.com/tgstation/tgstation/assets/42397676/d074a920-716a-4108-bb98-275f2c0b46fb) ## Why It's Good For The Game More straight forward functionality ## Changelog :cl: fix: Lootpanel no longer opens up when alt clicking objects on your person /:cl: --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> --- code/_onclick/click_alt.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm index 7f762a6e920ea..bda0e849a6563 100644 --- a/code/_onclick/click_alt.dm +++ b/code/_onclick/click_alt.dm @@ -38,6 +38,13 @@ if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING)) return + /// No loot panel if it's on our person + if(isobj(target) && isliving(src)) + var/mob/living/user = src + if(target in user.get_all_gear()) + to_chat(user, span_warning("You can't search for this item, it's already in your inventory! Take it off first.")) + return + client.loot_panel.open(tile) From 02318ae32c61b5b1a77381b1d7dbcb0563bf1902 Mon Sep 17 00:00:00 2001 From: Capsandi <38051413+Capsandi@users.noreply.github.com> Date: Tue, 28 May 2024 16:02:55 -0400 Subject: [PATCH 36/49] Chutes no longer play sounds on top of each other. Pipe ejections are a bit quieter too (#83470) ## About The Pull Request Chutes were playing a sound per item in a stack because the condition was that the last played sound happened before worldtime+1 which was always the case, that's in the future. They now only play a single sound when multiple items enter them at once. Outlets functioned correctly but the sound for midpipe ejections was a bit overpowering, so I deadened it a bit(-4 LUFS). Tested. No observed effect on consecutive insertions. ## Why It's Good For The Game It is often the case that a conveyor with a large stack of items may be activated, pushing a large quantity of items into a chute, which would then fry the eardrums of all those nearby. ## Changelog :cl: sound: Disposal chutes will no longer play a sound for each item when many items enter it at once /:cl: --- code/modules/recycling/disposal/bin.dm | 2 +- sound/machines/hiss.ogg | Bin 29958 -> 29345 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 4acb1aa0a33c6..2771bc1adb25d 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -241,7 +241,7 @@ flushing = TRUE flushAnimation() sleep(1 SECONDS) - if(last_sound < world.time + 1) + if(last_sound < world.time - 1) //Prevents piles of items from playing a dozen sounds at once playsound(src, 'sound/machines/disposalflush.ogg', 50, FALSE, FALSE) last_sound = world.time sleep(0.5 SECONDS) diff --git a/sound/machines/hiss.ogg b/sound/machines/hiss.ogg index a1b725eab931eb3d7ab9dadff6c1517b4a6e4a1c..73ace2de31fcf2e270e4d2e564dd4c55a1284664 100644 GIT binary patch delta 24051 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 U8e~x37Nx}&knendc2B+30A`V-x&QzG delta 24657 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 J_teW!ZUBo>R^I>s From 8bfc69705e3ddbd33598c83b7a528b75d8698f6d Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:03:16 +1200 Subject: [PATCH 37/49] Automatic changelog for PR #83399 [ci skip] --- html/changelogs/AutoChangeLog-pr-83399.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83399.yml diff --git a/html/changelogs/AutoChangeLog-pr-83399.yml b/html/changelogs/AutoChangeLog-pr-83399.yml new file mode 100644 index 0000000000000..750fedb54e781 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83399.yml @@ -0,0 +1,4 @@ +author: "jlsnow301" +delete-after: True +changes: + - bugfix: "Lootpanel no longer opens up when alt clicking objects on your person" \ No newline at end of file From cf1f756ea7678a6378a856b2ef1a19d263678d1b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:03:35 +1200 Subject: [PATCH 38/49] Automatic changelog for PR #83470 [ci skip] --- html/changelogs/AutoChangeLog-pr-83470.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83470.yml diff --git a/html/changelogs/AutoChangeLog-pr-83470.yml b/html/changelogs/AutoChangeLog-pr-83470.yml new file mode 100644 index 0000000000000..753c455022860 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83470.yml @@ -0,0 +1,4 @@ +author: "Capsandi" +delete-after: True +changes: + - sound: "Disposal chutes will no longer play a sound for each item when many items enter it at once" \ No newline at end of file From a2f88759862e1699edaa864e313c96059f1acc79 Mon Sep 17 00:00:00 2001 From: Lucy Date: Tue, 28 May 2024 16:05:31 -0400 Subject: [PATCH 39/49] Fix issues resulting from an elevated object being created inside of a non-turf atom (#83498) ## About The Pull Request If an elevated object is initialized inside of a non-turf atom, it'll still make the turf it is on elevated. Permanently. Which is weird. ## Why It's Good For The Game Randomly elevated turfs are bad. Bugs bad. ## Changelog :cl: fix: Fix a rare issue where a turf would remain permanently "elevated" if an elevated object was initialized inside of a non-turf object. /:cl: --- code/datums/elements/elevation.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm index 92fba97a09414..b83548c6b5f41 100644 --- a/code/datums/elements/elevation.dm +++ b/code/datums/elements/elevation.dm @@ -18,8 +18,9 @@ if(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - var/turf/turf = get_turf(target) - if(turf) + var/atom/atom_target = target + if(isturf(atom_target.loc)) + var/turf/turf = atom_target.loc if(!HAS_TRAIT(turf, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift))) RegisterSignal(turf, COMSIG_TURF_RESET_ELEVATION, PROC_REF(check_elevation)) RegisterSignal(turf, COMSIG_TURF_CHANGE, PROC_REF(pre_change_turf)) From 0de20113983e5ee70e9534ff96d5ff12dfd41e38 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:06:21 +1200 Subject: [PATCH 40/49] Automatic changelog for PR #83498 [ci skip] --- html/changelogs/AutoChangeLog-pr-83498.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83498.yml diff --git a/html/changelogs/AutoChangeLog-pr-83498.yml b/html/changelogs/AutoChangeLog-pr-83498.yml new file mode 100644 index 0000000000000..98532aea8dc63 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83498.yml @@ -0,0 +1,4 @@ +author: "Absolucy" +delete-after: True +changes: + - bugfix: "Fix a rare issue where a turf would remain permanently \"elevated\" if an elevated object was initialized inside of a non-turf object." \ No newline at end of file From 9c3df9d82d6f48b120377011494640b672e54728 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Tue, 28 May 2024 13:08:27 -0700 Subject: [PATCH 41/49] Resolves beam rifle overtime issues (#83476) ## About The Pull Request Ok so like, beam rifles send out tracer rounds right We send out tracer rounds once every few seconds and if the mob or mouse moves. The problem is those tracer rounds are hitscan, and hitscan projectiles don't like, wait to move. So if I just drag my mouse a bunch I'm causin a bunch of hitscan attempts. This might be ok, but what happens if I do it in space (the place with 100s of turfs empty of things to hit). Anyway let's do some tick checking in hitscan's while loop so it can't eat seconds of cpu time uncontested ## Why It's Good For The Game ![image](https://github.com/tgstation/tgstation/assets/58055496/527b9bd1-4031-4a01-b4db-9e044270aa9b) https://github.com/tgstation/tgstation/assets/58055496/2ce870f5-b65d-46e5-8dc3-11646c789290 --- .../projectiles/guns/energy/beam_rifle.dm | 25 ++++++++++++------- code/modules/projectiles/projectile.dm | 5 ++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm index 1c5b025baea80..11399e9c24dad 100644 --- a/code/modules/projectiles/guns/energy/beam_rifle.dm +++ b/code/modules/projectiles/guns/energy/beam_rifle.dm @@ -71,6 +71,8 @@ var/current_zoom_x = 0 var/current_zoom_y = 0 + var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/trace = null + /obj/item/gun/energy/beam_rifle/apply_fantasy_bonuses(bonus) . = ..() delay = modify_fantasy_variable("delay", delay, -bonus * 2) @@ -192,16 +194,19 @@ if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) return aiming_lastangle = lastangle - var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new - P.gun = src - P.wall_pierce_amount = wall_pierce_amount - P.structure_pierce_amount = structure_piercing - P.do_pierce = projectile_setting_pierce + // ONLY ONE at once (since fire can sleep) + if(trace) + QDEL_NULL(trace) + trace = new + trace.gun = src + trace.wall_pierce_amount = wall_pierce_amount + trace.structure_pierce_amount = structure_piercing + trace.do_pierce = projectile_setting_pierce if(aiming_time) var/percent = ((100/aiming_time)*aiming_time_left) - P.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) + trace.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) else - P.color = rgb(0, 255, 0) + trace.color = rgb(0, 255, 0) var/turf/curloc = get_turf(src) var/atom/target_atom = current_user.client.mouse_object_ref?.resolve() @@ -211,8 +216,9 @@ return targloc = get_turf_in_angle(lastangle, curloc, 10) var/mouse_modifiers = params2list(current_user.client.mouseParams) - P.preparePixelProjectile(targloc, current_user, mouse_modifiers, 0) - P.fire(lastangle) + trace.preparePixelProjectile(targloc, current_user, mouse_modifiers, 0) + trace.fire(lastangle) + trace = null /obj/item/gun/energy/beam_rifle/process() if(!aiming) @@ -259,6 +265,7 @@ aiming_time_left = aiming_time aiming = FALSE QDEL_LIST(current_tracers) + QDEL_NULL(trace) stop_zooming(user) /obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 872bf0cdd5e48..43e4e160d06a1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -817,6 +817,8 @@ RegisterSignal(src, COMSIG_ATOM_ATTACK_HAND, PROC_REF(attempt_parry)) if(hitscan) process_hitscan() + if(QDELETED(src)) + return if(!(datum_flags & DF_ISPROCESSING)) START_PROCESSING(SSprojectiles, src) pixel_move(pixel_speed_multiplier, FALSE) //move it now! @@ -911,6 +913,9 @@ qdel(src) return //Kill! pixel_move(1, TRUE) + // No kevinz I do not care that this is a hitscan weapon, it is not allowed to travel 100 turfs in a tick + if(CHECK_TICK && QDELETED(src)) + return /obj/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE) if(!loc || !trajectory) From 1507792ec185d361cd52503279e183e71542b74a Mon Sep 17 00:00:00 2001 From: FearfulFurnishing <139661819+FearfulFurnishing@users.noreply.github.com> Date: Tue, 28 May 2024 15:45:06 -0500 Subject: [PATCH 42/49] Make Watcher Wreath Bounties Completable (#83523) ## About The Pull Request Initial PR here: https://github.com/NovaSector/NovaSector/pull/2694 This is a proposed fix for an issue reported downstream on https://github.com/NovaSector/NovaSector/issues/2198 and requested to be put upstream where watcher wreath bounties were not accepting the items they state they want. The root of the issue seemed to be the FALSE flags attached to the wanted_types. include_subtypes can be used for what might have been the intended effect of having only ice wreaths for the ice bounty and normal wreaths for the normal bounty. ## Why It's Good For The Game This bug would prevent someone from being able to do any bounties until the 5 minute timer to refresh the bounty options passed. Less wait time on undoable tasks means more time spent interacting with the round. ## Changelog :cl: fix: fixed watcher wreath bounties being incompletable /:cl: --- code/modules/cargo/bounties/mining.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index c49fc982a3ab9..933581bfdf9e2 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -46,16 +46,17 @@ /datum/bounty/item/mining/watcher_wreath name = "Watcher Wreaths" description = "Station 14's Research Director thinks they're onto a break-through on the cultural icons of some pagan beliefs. Ship them a few watcher wreaths for analysis." + include_subtypes = FALSE reward = CARGO_CRATE_VALUE * 15 required_count = 3 - wanted_types = list(/obj/item/clothing/neck/wreath = FALSE) + wanted_types = list(/obj/item/clothing/neck/wreath = TRUE) /datum/bounty/item/mining/icewing_wreath name = "Icewing Wreath" description = "We're getting some....weird messages from Station 14's Research Director. And most of what they said was incoherent. But they apparently want an icewing wreath. Could you send them one?" reward = CARGO_CRATE_VALUE * 30 required_count = 1 - wanted_types = list(/obj/item/clothing/neck/wreath/icewing = FALSE) + wanted_types = list(/obj/item/clothing/neck/wreath/icewing = TRUE) /datum/bounty/item/mining/bone_dagger name = "Bone Daggers" From 2a35fb650399c98f82892837a4fb08e9bd0b5c67 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Tue, 28 May 2024 15:45:42 -0500 Subject: [PATCH 43/49] Fix backwards disposals junction in main hall Icebox (#83472) ## About The Pull Request Fixes #83464 ## Changelog :cl: Melbert fix: The Bar on Icebox should receive less trash /:cl: --- _maps/map_files/IceBoxStation/IceBoxStation.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 26556306fd53c..c91658d62ab07 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -74302,8 +74302,8 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 +/obj/structure/disposalpipe/junction{ + dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) From e0ee0ccabac94d956bb03fb5a23317d40bca1c6e Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:46:52 +1200 Subject: [PATCH 44/49] Automatic changelog for PR #83523 [ci skip] --- html/changelogs/AutoChangeLog-pr-83523.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83523.yml diff --git a/html/changelogs/AutoChangeLog-pr-83523.yml b/html/changelogs/AutoChangeLog-pr-83523.yml new file mode 100644 index 0000000000000..2db25d83372e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83523.yml @@ -0,0 +1,4 @@ +author: "FearfulFurnishing" +delete-after: True +changes: + - bugfix: "fixed watcher wreath bounties being incompletable" \ No newline at end of file From 491940f098cf9add4bf47a79fd15b3ed9be83430 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:47:28 +1200 Subject: [PATCH 45/49] Automatic changelog for PR #83472 [ci skip] --- html/changelogs/AutoChangeLog-pr-83472.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83472.yml diff --git a/html/changelogs/AutoChangeLog-pr-83472.yml b/html/changelogs/AutoChangeLog-pr-83472.yml new file mode 100644 index 0000000000000..6eb62ab86bce6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83472.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - bugfix: "The Bar on Icebox should receive less trash" \ No newline at end of file From 293577ab8a85e1306b8c00be45e0da9c2c4e55fe Mon Sep 17 00:00:00 2001 From: Mey-Ha-Zah Date: Tue, 28 May 2024 16:49:12 -0400 Subject: [PATCH 46/49] New Contractor Sprites. (#83460) ## About The Pull Request Resprites the Contractor Suit and Baton ## Why It's Good For The Game They were showing their age and as the person who made them, it was up to me to replace them. ![image](https://github.com/tgstation/tgstation/assets/28636915/55afd3ca-2f53-41b1-86a0-8411738e2317) ## Changelog :cl: image: Revamped Contractor Gear. You'll stand out more now, but hey, that's why the syndicate contracts out work in the first place. /:cl: --- icons/mob/clothing/head/spacehelm.dmi | Bin 13146 -> 13104 bytes icons/mob/clothing/suits/spacesuit.dmi | Bin 33697 -> 34228 bytes icons/mob/inhands/weapons/melee_lefthand.dmi | Bin 6642 -> 14488 bytes icons/mob/inhands/weapons/melee_righthand.dmi | Bin 6485 -> 16631 bytes icons/obj/clothing/head/spacehelm.dmi | Bin 2192 -> 2170 bytes icons/obj/clothing/suits/spacesuit.dmi | Bin 4884 -> 4683 bytes icons/obj/weapons/baton.dmi | Bin 2527 -> 3005 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/head/spacehelm.dmi b/icons/mob/clothing/head/spacehelm.dmi index 181e5eb2e68656cfbff2b55917ace914ea8df8db..0b9f3d4a36eb40d521969c5eb46a6f6d29a65023 100644 GIT binary patch literal 13104 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 literal 13146 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 LDt%Qj4f=lozZVhR diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 79a362a0090072591bcc932bdd33106cbc36c45c..d1ac470b093ff5a14bc92a12ee01056e13f7e401 100644 GIT binary patch literal 14488 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 literal 6642 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 diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index 222f8955396c6324eb03708f74adba51ee356df7..8c18a06de3a24dc6b66833781345a482d3caa010 100644 GIT binary patch literal 16631 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 AM*si- literal 6485 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 TOSL$V00000NkvXXu0mjfA0J%; delta 1747 zcmV;^1}ypd5Reg&Bmpv!C8;Vq2m>4(9Po+&D=RA_BO}&%0HIhhiB13<9vl=D6b%gx zFfcGcKtQONY?1gLNjW@7N=R4gY)z1PlRXvys6zmbH~>mjY!ww1OdbGhDgY7`7Z@EX zBO)dk9U%Yz|2{oGyh{K8001*KJVQoIJ3d5KTVwoW8?=*C0rGz;Nkl4$ z6h@Phf%4MP(Q4;~fFK}R2gHej0(KU)2yLf<3Jlf`+W-F-=A4@_FV4BQOU#lrb9Y<& z_{h!X5R&>WVi+2Y=6{I!$hndyiag+R&SC}-lNGc~#A0_aZ*CZ033$IJNWgqTuV8sk zzzWc>(VThEFhYM%1tF;)2+|99>%$IU2tMRN;TI0GhEqW>lnTNgqyqQNgP}0!Ay31U zA^M5!(U4hR97DJVAMzjwh9iP7Bj|1~Rv>o(&s<8#^b_}6kPsp$}%mu`n}64 zBe?#9%Q_>t`J>AwDHsY){o;{$G)M?8O%1sT!T>=JN5}|1dj@(qLPqfUbI`*P(#K#V z9`pQSlpq)`Ex{QEzY?i1T!Ayh3hgHh*C1b`{e|g3E(+~ zJ1R}y;rzpey6<-tTW3iFFZIYGmlAhSK}!JU9_c`y-* z0wK=N5HB;EiCwTy|3UJttwbo4*xHh=@wjYlEwr9SqtR$I8qI%$$L{}>{h;6d-o10n zOs0}P_Iv4Vh_};hp2-P+6I}d+xew)p+1;`6o+4`=aKmDF%<~>0! zFL;9NH_oo0U;W-xFwf?$U_r9JI0k*{_aM)UV=&L=1#t`(m~Y)hKet=l^{d~5e@>?% zO{dvBlYu;wp>xC9+uMJE?C{&_imCsE{egI~s_)6#43~o#ML0mb@ zuP^$!-JMG>u56B0s_}M4sU{zeBS;~ zOi+@G39>mpB7bSV9Npvo_>Q<3$9sT_RMmP@gDsRDVWBXUy-|xACIW~6%E0TT>1)242yLxh5t5$2rCslu& z5_J2)lB^%hiDNLw<`r=aRwVr)9)ryKwtZ5qpKQRYWxuD&Ri7V}Z*Nx{ z^=7jHG@JECl@^rud#YUZ`9b;iAb5ZN^1KPWJU=G|-F`1A>Gv>6Npk$;U`g`%LEQ3? z+a3fP=fF$!V+6mTA1vmI(!5+LOY_sCQ!cmb@baP`{8lH=gUWuen93n=t)nTIDhOQb zXig80ki%0lwQKcy17G4sz5WX=_yzr-n4lyV6O`m)f=p`Hzz^QT%|?y!GroVIA51Co zk|IBp7ZZ?k_|=O^U=Dv za0M?e7(@B}$Lf4;!B-xPpyK{xW&QwyuLX>t;{Ic0KEGeV3PDS>w9*KSuB(1P;(VFcgvg2Czj zyY22JadV|ApI`8z_2%9CcS4Xl27~Qx$J@Wtb9#M;&pW;eet7=@K*6h7!9?5L|6nk5 zhBJPD?DvPgnWGT$(dc^O z3SRs0GPgW#t_)&=;{IdjlNewh55j*A5OdJGo=k4R?{+e|_CwL-YJ4@G9iUKfgx_#5 z9N_%^JwwpDySx1i$KXrn+q*kZ^hwYd-w^W?I74`UO#Nn=xPu$Hqn!BVC&3vE`hC`K p5paeuKWB0Mz|dJ}J&op}`2(t9Q)ZpNm`nfw002ovPDHLkV1oRzWg-9o diff --git a/icons/obj/clothing/suits/spacesuit.dmi b/icons/obj/clothing/suits/spacesuit.dmi index 84f84ac978e8578151d434f8285bed5e9530fa1c..922ad05c35e7a76a4ad25a90dc25acb2e3d2d4e2 100644 GIT binary patch delta 4208 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 u?HiaPz@0Q9ttZ`Wu#Mf?vx?5kz~ diff --git a/icons/obj/weapons/baton.dmi b/icons/obj/weapons/baton.dmi index e97547d851745edbf268bcd33a83814c9abbff30..2d5100ec4d414e571ef40938d318d3a3e5fb90b3 100644 GIT binary patch literal 3005 zcmV;u3qtgXP)004jp1^@s6jALRO0002IdQ@0+L}hbh za%pgMX>V=-0C=30jX?^7Fc3x8$teciN~u=pDx0Dd7kULrWY5=dv}aHS{jZO000WSNklZEO_R6^7r1 z1evOcVjQnY3o2@48R5Ee)fQAmT|+C?s)U*q*j}&{c~K)`tf-BZl2sz=xCrE;NTmgT zsZ#7eA&Wx`6;kB(2l7Hy1vRP(qK&mpvS2_9#4%Qd)i~%E&h*DKm zg;*>`eJIiuYT8NqLzj*32?J`)H!v{Zqdp#)3N`IiDl02(%Xhs2*?g6Vof}ya2n3{` z`vU(@6}?7$R~wMcH(z}9Yropxp~xD?TJxhU+J+02-Fp0|WE>2I*nFwt1HgsK?!Ygf zZH>p{h@N;)__fI312E#dvIDaD%oSf6{|9wXjQFlIAe+y8@rCg(|gO9?^pLYk;n$Pd|BbiJ}Hy<$HdB?`aq?_+Ruu*xw<}uoKFIy-C75~-J(kFo2 zHJ>iOh|Zgr0n^QQ@!~}c4-ZQ?C23?)zxl$f5((68-puApU3}(S zD_sND*VikdPzXpQFbH_wd`64xcs$PhB4s#&W3drU!s{_GC1%T8AznA&8 zG9b%)a>WNyS-M=ri= zUdzm-z{cJllttT61_Ult_QW3iVXsX7@V;FN0Ms8oF75V8s_1nM?f$pctXqfhF37&M zbGx>@^F%|tztM;nqCeW@wv~Pf%;k z_m?gI0RSB8>XY{AZ4JM1=#^WBeBlOM$cHP7wo!~g-F&)D@itk&R)JI1DRpI zmd}2O-~IF-0Dy+=&5G!8oX-FGpTBF!7iz$a_g2fIZTQBwMIy8FRZWJvWsKl-^IgCH z2nVBQWQ@TK^EDpzL+ykjm0I`hHOm)fK%|d>}HD7IcXTYfV z<%e(L)AN;YjZSoke3ARMI(D`Ep;vC{@`Y?d-0;SJF(T}I3oA{2smb|Gk1X?L;ST}m(c@b-f}NhyRIKb~zW)9$pSs(WVZ3a70M8g5 zgC!l1y7-I6e(HXo*UcxBT@1hI4rr@2A5hfTSD#h@=AT%w`HJHgWk6f5`3mIs?hYzj ztJeYm5;rGJ{Tnu4@%(~!!ERjhsm4o8&MxYPdSdfg!!O8yr-MNyH1~jP&9}g}aO_{d z{|M*DXK?oNHEgY3i}e*{h9+e5S;x=YfL79c=FYs~|E>pRQQ{mvYs%Sxn1go)_urLnJ`sFVBUsG}Q6n4FXs+H%B~~1RE%|!m7@##@>FNqh|946jRti6-0o|TY zmrdy=q&DAY@qc6H?j5P!Pc%QP0lkn_}ZeU|K4f*j5XkVKHOb|<{lLK zJ&O`GAD}fK0IXOFQ^g17JCL>`IgOt&g1wecmoD|aT`KdbQj4k8+!;0xV^WaiWTMCz>#3Vv;Q=Z?{dj+0dUv}3V7Ut|ZgOFo@c zzMlDH@wJ`TDc9dp1FEBsBA+gOsMx_vC=Z#J$% z#Px7$T!$qiI2WAKd?^X(cxL$`mmFsJqE!sPXahRoX5513Km6GvD6)f<~}gPM-Pn{Jd_%X!GH&CTR2NnC}k0X#;BW;b!jM zAvt;GyN_>b1iLw(j`_6woCfq#P!99u^RpVz?I+KCdcL6ny>Rl(r|0V$&?_g;e0qMy zF4$}Nbj+va>pltbQa&B?Y5BS%*h~3z%%|n+8gL-`u5ZQC#jUnsdnP;_YF4a1dFFeI zpYy{AZqKJKtbSxIBEPW}-iK?rsqdo*ri#s5TRBS*NsiYY2P*maO>He3m&0&j*xUd}=-` zKMBnTwDNm9fzQfcmUTet;#2ckg-J?2plDI^S%u5C`G97hTCn+?t)dJlviMgMS8|$= z&F6d-Y(UY)@9*#Oy%BlYXJkS)pF3pxe84v%FZ=fFi7YZ9o6kLRL_T1Df0u91o`^E{ zcm@=FmN=R2fa)9bt5%mnSpwV=-0C=30jX?^+Fc3x8nNtkyR>anVt8Ao2x@fOZVmjJDOduI6-rhyQg;t2n z<`4Y$evZfH)b?0+EzA_6@eU~FF=MiHR_t8{Vl*M5 z!~(=6s2eT$yE!D3wRaqpW*>$$`zMezVpWVrCoV+3yG5-uo0-;u1Bj8VdZNUl+LZ5G z6a6viye4aZ0Xa5(jdj<;3vG^vn4=G##Q*>Z7@CeJ!FDi9~ev^~A(Pw*AtK0L=VoG)jFb z!WD@`^l&%~_Qx0oDFR?Le`I7ts=ME4_8sj$QmItV&wU>N+074!!`biO{o(Drf8*;l zfHFUAemERPJRZ;fZ2t5LW-?#VmJ>ozLW(04Vcw=X{{J`G8LXpv*6Q&NpjK zkAa$|>7h^vl-sMy{PN~}vnn0|G)>b1fO314(tP6%8-*&J^UbO#0Gg)h&CSgKKw`e8 zX*#v}^QTwHLcsWJbElj+->k9&z|4mUNF)+M4KR*8v$L}#=7+;!)Ss;eMF`A% z7J^F52g(e9+5DNA8B9)23N_z2@+>SYh(ZI%9d?7kpzsjb@hdeSC?f!FF`sJWF?N0` zl|ofj6#$_AY_%)+m6#8d7y!4KFPhIfpFLwIlgXU@b>j;bUgH-H0Cne6^NpP!3D@wjmFDfpHF5NWzu(P$JK(I`B8On0>V*$-7j z4*OJm*S!>)NF)Hzh0yBFSyARw@B^wibX9iMGwf#~Hhe_$RRAQHFWv}Js$41nl1l|Z za!C<@rrLq#rrLpK0&W`>zo~Yht*Lh4Vllq3Md0M|E*$_`FI*G$c$aB(OM7qV%(jLG zXkDKOeYDK*kGA)QItcj%+b?7Um^|L4H`djlv91QEI>o#_V{H7dd;bIgoF5z#_WG8A z-!XP73Vng7)uTe((xdnjA{HEH0X1m7M zUU-TJx3`~}UhL=jF8eb!>>K%G#}@pIwN|xY6JG| ztOt-D6^!cvWxl`omQMk8A)q#2`}|8C0RDcyj9^W@@Xq%m-}W)kDg@N#Z{CtFhko+t z5yr1y72f%N4JpW5fS+*?vf}aJLLqKi*!#{q<%8O;8 zcc0(+1wRe^zUMRj;O<5M%6z}_ZAXB~<6Zj4yBYu}^Zm@X41gO}`!aOC8~AxsfEUcy zI=izQR3oF#c8qNNoX5Z`hxY62v5#t#2LRgIyY=c#Z`n59*l6?jieH{ArvOUx0ib$4 zN@_fiz5|SRgyNSc%dKDlWacxmMzIFBAL!Pv|0HlImW1#6@^IG3*EiK8xipVAUt9f| z)159O-}M1d;wveNLzV2M0wB3m03;We02pi2Gv5oXk7srHRD6r;aV?)qX;|hJ-pTK0IK?YEAvJ1jU$hX&LkcHyHw zpFqg@0EXIhSiyPL$7k5a$`@gL^Lj%x-$o_#9p4Db)Td7ssZSqp6sq_Y^SP}7sO$3; zzcfCVtzfp;n2SBe?4f^!*5@mJd3?u509Ldx7kiB4(!3?yxJN+2=P9r89o+{gqdxzx zliYIoh03Kx@Oh~czGG8Bk^1zDb_WzVrE-0`LIZ64Kx@p;RU z^8t9mc^;2aN#mWoo^tt4hjFdpThkQa<>ZUxi&}G3@;fRHfLA(S@e8Y>DZnp{SNt*` z1C90Rb1~Zbc*S>yUvdD9_30}wmPs0~_|Ef7ngaY>A1^zf>eSTLxfc^lG4beeO`xejp#N zb$07cH(v3@@{4{L5w`%a|G%E9^Qrk>5%==}M0Y+l-)rJ} zK7f z0C;!)@bF;ZWZ#j1T?mx<&dBxW1DxzT5;%OgFDC@beCOne^8tp32Lp!>_v!!qw*m^j zpH=b*z$#WYZwW$Q2jQLn&E7ds^8G4LoDTp1-%h_n%J-{We?9;J^qx4aQ}X>RSDz06 zDD!#Cb`eNz{;ud={i7QnkcLkNSq6aG{4`&gFGA{k0Ldl&`2eai$U-vJ$IC8tK7izs p{(J!0rvT~C2ar7gsyI|~{SS)L_2ceuZs!01002ovPDHLkV1gJQ`Jw;- From 7870a0bb7121cddd4409e9618923eacab4e950cd Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 08:51:14 +1200 Subject: [PATCH 47/49] Automatic changelog for PR #83460 [ci skip] --- html/changelogs/AutoChangeLog-pr-83460.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83460.yml diff --git a/html/changelogs/AutoChangeLog-pr-83460.yml b/html/changelogs/AutoChangeLog-pr-83460.yml new file mode 100644 index 0000000000000..859ba4611eeab --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83460.yml @@ -0,0 +1,4 @@ +author: "Mey-Ha-Zah" +delete-after: True +changes: + - image: "Revamped Contractor Gear. You'll stand out more now, but hey, that's why the syndicate contracts out work in the first place." \ No newline at end of file From c0e0e9289f7cb7df7bfcecaa76bd7a7bf6735e64 Mon Sep 17 00:00:00 2001 From: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Date: Tue, 28 May 2024 14:54:05 -0700 Subject: [PATCH 48/49] [no gbp] Fixes hilberts hotel alt click (#83431) ## About The Pull Request Base alt click would skip turfs as I did not think any had special alt click behaviors. I was mistaken. The comment was too. Note: Checking can_perform_action() does not work on turfs. I added some simple checks for turfs in its absence. ## Why It's Good For The Game Fixes #83430 ## Changelog :cl: add: Added a screentip for hilbert's hotel door fix: Fixed alt-click interaction with hilbert's hotel door /:cl: --------- Co-authored-by: san7890 --- code/_onclick/click_alt.dm | 22 +++++++++++++++++-- .../ruins/spaceruin_code/hilbertshotel.dm | 13 +++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm index bda0e849a6563..dfda35ebda9c8 100644 --- a/code/_onclick/click_alt.dm +++ b/code/_onclick/click_alt.dm @@ -24,8 +24,14 @@ client.loot_panel.open(tile) return - // Turfs don't have a click_alt currently, so this saves some time. - if(!isturf(target) && can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) + var/can_use_click_action = FALSE + if(isturf(target)) + // Turfs are special because they can't be used with can_perform_action + can_use_click_action = can_perform_turf_action(target) + else + can_use_click_action = can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY)) + + if(can_use_click_action) // If it has a signal handler that returns a click action, done. if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) return @@ -78,3 +84,15 @@ /atom/proc/click_alt(mob/user) SHOULD_CALL_PARENT(FALSE) return NONE + + +/// Helper proc to validate turfs. Used because can_perform_action does not support turfs. +/mob/proc/can_perform_turf_action(turf/target) + if(!CanReach(target)) // No error message for parity with SILENT_ADJACENCY + return FALSE + + if(incapacitated()) + to_chat(src, span_warning("You can't use this!")) + return FALSE + + return TRUE diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 8906a6d2555cb..b2e0e16f9a82a 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -302,6 +302,15 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) explosive_resistance = INFINITY var/obj/item/hilbertshotel/parentSphere +/turf/closed/indestructible/hoteldoor/Initialize(mapload) + . = ..() + register_context() + +/turf/closed/indestructible/hoteldoor/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_ALT_LMB] = "Peek through" + return CONTEXTUAL_SCREENTIP_SET + /turf/closed/indestructible/hoteldoor/proc/promptExit(mob/living/user) if(!isliving(user)) return @@ -345,6 +354,10 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) promptExit(user) /turf/closed/indestructible/hoteldoor/click_alt(mob/user) + if(user.is_blind()) + to_chat(user, span_warning("Drats! Your vision is too poor to use this!")) + return CLICK_ACTION_BLOCKING + to_chat(user, span_notice("You peak through the door's bluespace peephole...")) user.reset_perspective(parentSphere) var/datum/action/peephole_cancel/PHC = new From 2f6920105e097479ae1f2fdf2823e2e8fdc59f3b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 29 May 2024 09:55:54 +1200 Subject: [PATCH 49/49] Automatic changelog for PR #83431 [ci skip] --- html/changelogs/AutoChangeLog-pr-83431.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83431.yml diff --git a/html/changelogs/AutoChangeLog-pr-83431.yml b/html/changelogs/AutoChangeLog-pr-83431.yml new file mode 100644 index 0000000000000..0aa1c01e555ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83431.yml @@ -0,0 +1,5 @@ +author: "jlsnow301" +delete-after: True +changes: + - rscadd: "Added a screentip for hilbert's hotel door" + - bugfix: "Fixed alt-click interaction with hilbert's hotel door" \ No newline at end of file