From f2ddeb57b153b47e5013bfacebf64731827f7154 Mon Sep 17 00:00:00 2001 From: Waseemq1235 <42235601+Waseemq1235@users.noreply.github.com> Date: Sat, 11 May 2024 13:56:56 +0200 Subject: [PATCH 01/12] ARES reception bell unique description and longer cooldown (#6271) # About the pull request - Gives the ARES reception bell a unique description to let people know that it notifies WJs. - Increases the cooldown of the ARES reception bell from 5 to 60 seconds. **!! fyi I have no idea what changelog tags would be appropriate so I just went with QOL. Feel free to change if needed. !!** # Explain why it's good for the game Increased cooldown is to prevent spam. Happened on a previous round and was quite annoying. I don't see a need to be able to send an announcement every 5 seconds. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: XQ qol: Updated the ARES reception bell's description to inform players it notifies Working Joes when rung. qol: Increased the ARES reception bell's cooldown from 5 to 60 seconds. /:cl: --- code/modules/paperwork/desk_bell.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index ddd4a9dc5d58..87eb24d1ca3e 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -96,6 +96,8 @@ /obj/item/desk_bell/ares name = "AI core reception bell" + desc = "The cornerstone of any customer service job. This one is linked to ARES and will notify any active Working Joes upon being rung." + ring_cooldown_length = 60 SECONDS // Prevents spam /obj/item/desk_bell/ares/ring_bell(mob/living/user) if(broken_ringer) From b220960c444e2c79b64b230de3cd8ef8c95bae58 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sat, 11 May 2024 13:01:04 +0100 Subject: [PATCH 02/12] Automatic changelog for PR #6271 [ci skip] --- html/changelogs/AutoChangeLog-pr-6271.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6271.yml diff --git a/html/changelogs/AutoChangeLog-pr-6271.yml b/html/changelogs/AutoChangeLog-pr-6271.yml new file mode 100644 index 000000000000..a868132fe8d2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6271.yml @@ -0,0 +1,5 @@ +author: "XQ" +delete-after: True +changes: + - qol: "Updated the ARES reception bell's description to inform players it notifies Working Joes when rung." + - qol: "Increased the ARES reception bell's cooldown from 5 to 60 seconds." \ No newline at end of file From d57a276286afb9102519a11b70a8cd0eb8e31371 Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Sat, 11 May 2024 07:57:21 -0400 Subject: [PATCH 03/12] block() syntax refactor for 515 (#6265) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/14267245/2e632945-877b-4030-b392-4a0a0d4ea23d) https://www.byond.com/docs/ref/#/proc/block With the move to 515, updates the `turf.dm` defines to make use of the new `block()` syntax, removing unnecessary `locate()` calls. Removed the out-of-bounds guards as Lummox's post implies it is no longer necessary and there were no issues in testing. Reviewed existing use of `block()` or the defines. Removed `locate()` anywhere it was no longer necessary due to the new syntax. Switched to the defines where helpful. Any `for` loop using the turf list was changed to `var/turf/... as anything...` if there would be no side effects. # Explain why it's good for the game Making full use of new functionality. More consistent use of `block()`. Fewer calls to `locate()` and more use of `as anything` can't hurt. # Testing Photographs and Procedure Boots without obvious issue. Checked Almayer and LV624, both look generated correctly. Shuttles launch and land correctly. Vehicles collide correctly. # Changelog No player-facing changes. Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/__DEFINES/turfs.dm | 22 +++++++++++-------- code/__HELPERS/unsorted.dm | 3 +-- code/controllers/subsystem/interior.dm | 3 +-- code/controllers/subsystem/mapping.dm | 4 +--- code/datums/components/overlay_lighting.dm | 2 +- code/datums/shuttles.dm | 6 +---- code/datums/tutorial/_tutorial.dm | 8 +------ code/game/world.dm | 8 ++----- code/modules/buildmode/submodes/area_edit.dm | 2 +- code/modules/buildmode/submodes/fill.dm | 5 ++--- code/modules/cm_tech/techtree.dm | 7 +++--- code/modules/holidays/halloween/decorators.dm | 9 ++------ code/modules/mapping/map_template.dm | 20 +++-------------- code/modules/mapping/reader.dm | 5 +---- .../space_management/space_reservation.dm | 3 +-- .../xenomorph/abilities/queen/queen_powers.dm | 2 +- code/modules/nightmare/nmtasks/mapload.dm | 4 +--- .../modules/nightmare/nmtasks/mapscheduler.dm | 3 +-- code/modules/shuttle/shuttle.dm | 8 ++----- code/modules/tents/folded_tents.dm | 3 +-- code/modules/unit_tests/unit_test.dm | 2 +- code/modules/vehicles/interior/interior.dm | 6 ++--- .../vehicles/multitile/multitile_movement.dm | 17 ++++++++------ 23 files changed, 54 insertions(+), 98 deletions(-) diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm index b9a80d4ab257..158c66754e18 100644 --- a/code/__DEFINES/turfs.dm +++ b/code/__DEFINES/turfs.dm @@ -1,23 +1,27 @@ #define RANGE_TURFS(RADIUS, CENTER) \ -block( \ - locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \ - locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \ -) + block( \ + (CENTER).x-(RADIUS), (CENTER).y-(RADIUS), (CENTER).z, \ + (CENTER).x+(RADIUS), (CENTER).y+(RADIUS), (CENTER).z \ + ) #define RECT_TURFS(H_RADIUS, V_RADIUS, CENTER) \ block( \ - locate(max((CENTER).x-(H_RADIUS),1), max((CENTER).y-(V_RADIUS),1), (CENTER).z), \ - locate(min((CENTER).x+(H_RADIUS),world.maxx), min((CENTER).y+(V_RADIUS),world.maxy), (CENTER).z) \ + (CENTER).x-(H_RADIUS), (CENTER).y-(V_RADIUS), (CENTER).z, \ + (CENTER).x+(H_RADIUS), (CENTER).y+(V_RADIUS), (CENTER).z \ ) ///Returns all turfs in a zlevel -#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) +#define Z_TURFS(ZLEVEL) block(1, 1, (ZLEVEL), world.maxx, world.maxy, (ZLEVEL)) -/// Returns a list of turfs in the rectangle specified by BOTTOM LEFT corner and height/width, checks for being outside the world border for you +/// Returns a list of turfs in the rectangle specified by BOTTOM LEFT corner and height/width #define CORNER_BLOCK(corner, width, height) CORNER_BLOCK_OFFSET(corner, width, height, 0, 0) /// Returns a list of turfs similar to CORNER_BLOCK but with offsets -#define CORNER_BLOCK_OFFSET(corner, width, height, offset_x, offset_y) ((block(locate(corner.x + offset_x, corner.y + offset_y, corner.z), locate(min(corner.x + (width - 1) + offset_x, world.maxx), min(corner.y + (height - 1) + offset_y, world.maxy), corner.z)))) +#define CORNER_BLOCK_OFFSET(corner, width, height, offset_x, offset_y) \ + block( \ + (corner).x + (offset_x), (corner).y + (offset_y), (corner).z, \ + (corner).x + ((width) - 1) + (offset_x), (corner).y + ((height) - 1) + (offset_y), (corner).z \ + ) /// Returns an outline (neighboring turfs) of the given block #define CORNER_OUTLINE(corner, width, height) ( \ diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index aa23131847d7..7e4c5676c8d1 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -729,8 +729,7 @@ if(orange) turfs -= get_turf(center) . = list() - for(var/V in turfs) - var/turf/T = V + for(var/turf/T as anything in turfs) . += T . += T.contents if(areas) diff --git a/code/controllers/subsystem/interior.dm b/code/controllers/subsystem/interior.dm index e2b845f833d7..b0bacc7d2b72 100644 --- a/code/controllers/subsystem/interior.dm +++ b/code/controllers/subsystem/interior.dm @@ -21,8 +21,7 @@ SUBSYSTEM_DEF(interior) var/list/bounds = template.load(locate(bottom_left.x + (INTERIOR_BORDER_SIZE / 2), bottom_left.y + (INTERIOR_BORDER_SIZE / 2), bottom_left.z), centered = FALSE) - var/list/turfs = block( locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) + var/list/turfs = block(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ], bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]) var/list/areas = list() for(var/turf/current_turf as anything in turfs) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 1d137aa7d8ae..4e6da51c60f3 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -363,9 +363,7 @@ SUBSYSTEM_DEF(mapping) if(!level_trait(z,ZTRAIT_RESERVED)) clearing_reserved_turfs = FALSE CRASH("Invalid z level prepared for reservations.") - var/turf/A = get_turf(locate(SHUTTLE_TRANSIT_BORDER,SHUTTLE_TRANSIT_BORDER,z)) - var/turf/B = get_turf(locate(world.maxx - SHUTTLE_TRANSIT_BORDER,world.maxy - SHUTTLE_TRANSIT_BORDER,z)) - var/block = block(A, B) + var/block = block(SHUTTLE_TRANSIT_BORDER, SHUTTLE_TRANSIT_BORDER, z, world.maxx - SHUTTLE_TRANSIT_BORDER, world.maxy - SHUTTLE_TRANSIT_BORDER, z) for(var/turf/T as anything in block) // No need to empty() these, because they just got created and are already /turf/open/space/basic. T.turf_flags = UNUSED_RESERVATION_TURF diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 8288453f7b24..2868899dee3f 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -175,7 +175,7 @@ LAZYINITLIST(affected_turfs) if(range <= 2) //Range here is 1 because actual range of lighting mask is 1 tile even if it says that range is 2 - for(var/turf/lit_turf in RANGE_TURFS(1, current_holder.loc)) + for(var/turf/lit_turf as anything in RANGE_TURFS(1, current_holder.loc)) lit_turf.dynamic_lumcount += lum_power affected_turfs += lit_turf else diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 0eba86add45d..7254ae7e98d2 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -58,11 +58,7 @@ . = ..() if(!.) return - var/list/turfs = block( locate(.[MAP_MINX], .[MAP_MINY], .[MAP_MINZ]), - locate(.[MAP_MAXX], .[MAP_MAXY], .[MAP_MAXZ])) - for(var/i in 1 to turfs.len) - var/turf/place = turfs[i] - + for(var/turf/place as anything in block(.[MAP_MINX], .[MAP_MINY], .[MAP_MINZ], .[MAP_MAXX], .[MAP_MAXY], .[MAP_MAXZ])) // ================== CM Change ================== // We perform atom initialization of the docking_ports BEFORE skipping space, // because our lifeboats have their corners as object props and still diff --git a/code/datums/tutorial/_tutorial.dm b/code/datums/tutorial/_tutorial.dm index f228c051a77d..ddeddddd0407 100644 --- a/code/datums/tutorial/_tutorial.dm +++ b/code/datums/tutorial/_tutorial.dm @@ -101,13 +101,7 @@ GLOBAL_LIST_EMPTY_TYPED(ongoing_tutorials, /datum/tutorial) /datum/tutorial/proc/verify_template_loaded() // We subtract 1 from x and y because the bottom left corner doesn't start at the walls. var/turf/true_bottom_left_corner = reservation.bottom_left_turfs[1] - // We subtract 1 from x and y here because the bottom left corner counts as the first tile - var/turf/top_right_corner = locate( - true_bottom_left_corner.x + initial(tutorial_template.width) - 1, - true_bottom_left_corner.y + initial(tutorial_template.height) - 1, - true_bottom_left_corner.z - ) - for(var/turf/tile as anything in block(true_bottom_left_corner, top_right_corner)) + for(var/turf/tile as anything in CORNER_BLOCK(true_bottom_left_corner, initial(tutorial_template.width), initial(tutorial_template.height))) // For some reason I'm unsure of, the template will not always fully load, leaving some tiles to be space tiles. So, we check all tiles in the (small) tutorial area // and tell start_tutorial to abort if there's any space tiles. if(istype(tile, /turf/open/space)) diff --git a/code/game/world.dm b/code/game/world.dm index 5aecfe851051..6a792d1a4e41 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -332,9 +332,7 @@ GLOBAL_LIST_INIT(reboot_sfx, file2list("config/reboot_sfx.txt")) if(!map_load_z_cutoff) return // var/area/global_area = GLOB.areas_by_type[world.area] // We're guaranteed to be touching the global area, so we'll just do this -// var/list/to_add = block( -// locate(old_max + 1, 1, 1), -// locate(maxx, maxy, map_load_z_cutoff)) +// var/list/to_add = block(old_max + 1, 1, 1, maxx, maxy, map_load_z_cutoff) // global_area.contained_turfs += to_add /world/proc/increase_max_y(new_maxy, map_load_z_cutoff = maxz) @@ -345,9 +343,7 @@ GLOBAL_LIST_INIT(reboot_sfx, file2list("config/reboot_sfx.txt")) if(!map_load_z_cutoff) return // var/area/global_area = GLOB.areas_by_type[world.area] // We're guarenteed to be touching the global area, so we'll just do this -// var/list/to_add = block( -// locate(1, old_maxy + 1, 1), -// locate(maxx, maxy, map_load_z_cutoff)) +// var/list/to_add = block(1, old_maxy + 1, 1, maxx, maxy, map_load_z_cutoff) // global_area.contained_turfs += to_add /world/proc/incrementMaxZ() diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm index 3c2a07c687d3..57b82e30fd3b 100644 --- a/code/modules/buildmode/submodes/area_edit.dm +++ b/code/modules/buildmode/submodes/area_edit.dm @@ -66,7 +66,7 @@ var/choice = alert("Are you sure you want to fill area?", "Area Fill Confirmation", "Yes", "No") if(choice != "Yes") return - for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + for(var/turf/T as anything in block(get_turf(cornerA),get_turf(cornerB))) storedarea.contents.Add(T) log_admin("Build Mode: [key_name(c)] set the area of the region from [AREACOORD(cornerA)] through [AREACOORD(cornerB)] to [storedarea].") diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm index 59142e712602..52212a9c57c5 100644 --- a/code/modules/buildmode/submodes/fill.dm +++ b/code/modules/buildmode/submodes/fill.dm @@ -49,8 +49,7 @@ if(LAZYACCESS(modifiers, LEFT_CLICK)) //rectangular if(LAZYACCESS(modifiers, CTRL_CLICK)) var/list/deletion_area = block(get_turf(cornerA),get_turf(cornerB)) - for(var/deleted_turfs in deletion_area) - var/turf/T = deleted_turfs + for(var/turf/T as anything in deletion_area) for(var/atom/movable/AM in T) qdel(AM) T.ScrapeAway(INFINITY, CHANGETURF_DEFER_CHANGE) @@ -59,7 +58,7 @@ var/choice = alert("Your selected area is [selection_size] tiles! Continue?", "Large Fill Confirmation", CONFIRM_YES, CONFIRM_NO) if(choice != CONFIRM_YES) return - for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + for(var/turf/T as anything in deletion_area) if(ispath(objholder,/turf)) T = T.ChangeTurf(objholder) T.setDir(BM.build_dir) diff --git a/code/modules/cm_tech/techtree.dm b/code/modules/cm_tech/techtree.dm index a027789185ef..d272c19ab5cf 100644 --- a/code/modules/cm_tech/techtree.dm +++ b/code/modules/cm_tech/techtree.dm @@ -62,9 +62,8 @@ // (The `+ 2` on both of these is 1 for a buffer tile, and 1 for the outer `/turf/closed/void`.) var/area_max_x = longest_tier * 2 + 2 var/area_max_y = length(all_techs) * 3 + 2 - for(var/t in block(locate(1, 1, zlevel.z_value), locate(area_max_x, area_max_y, zlevel.z_value))) - var/turf/pos = t - for(var/A in pos) + for(var/turf/pos as anything in block(1, 1, zlevel.z_value, area_max_x, area_max_y, zlevel.z_value)) + for(var/A as anything in pos) qdel(A) if(pos.x == area_max_x || pos.y == area_max_y) @@ -83,7 +82,7 @@ var/x_offset = (longest_tier - tier_length) + 1 var/datum/tier/T = tree_tiers[tier] - for(var/turf/pos in block(locate(x_offset, y_offset, zlevel.z_value), locate(x_offset + tier_length*2, y_offset + 2, zlevel.z_value))) + for(var/turf/pos as anything in block(x_offset, y_offset, zlevel.z_value, x_offset + tier_length*2, y_offset + 2, zlevel.z_value)) pos.ChangeTurf(/turf/open/blank) pos.color = "#000000" LAZYADD(T.tier_turfs, pos) diff --git a/code/modules/holidays/halloween/decorators.dm b/code/modules/holidays/halloween/decorators.dm index 6575ed5ba665..fb12cf96cd82 100644 --- a/code/modules/holidays/halloween/decorators.dm +++ b/code/modules/holidays/halloween/decorators.dm @@ -25,8 +25,7 @@ var/list/turf/valid_turfs = list() var/list/ground_levels = SSmapping.levels_by_trait(ZTRAIT_GROUND) for(var/ground_z in ground_levels) - var/list/turf/all_turfs = block(locate(1, 1, ground_z), locate(world.maxx, world.maxy, ground_z)) - for(var/turf/open/turf in all_turfs) + for(var/turf/open/turf in Z_TURFS(ground_z)) if(turf.is_groundmap_turf) var/valid = TRUE for(var/atom/movable/movable as anything in turf.contents) @@ -42,11 +41,7 @@ if(!length(valid_turfs)) break var/turf/considered_turf = pick(valid_turfs) - var/x_min = max(1, considered_turf.x - exclusion_range) - var/y_min = max(1, considered_turf.y - exclusion_range) - var/x_max = min(world.maxx, considered_turf.x + exclusion_range) - var/y_max = min(world.maxy, considered_turf.y + exclusion_range) - var/list/turf/denied_turfs = block(locate(x_min, y_min, considered_turf.z), locate(x_max, y_max, considered_turf.z)) + var/list/turf/denied_turfs = RANGE_TURFS(exclusion_range, considered_turf) valid_turfs -= denied_turfs picked_turfs += considered_turf diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 50a343635de9..0fe22535201e 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -48,18 +48,7 @@ var/list/obj/docking_port/stationary/ports = list() var/list/area/areas = list() - var/list/turfs = block( - locate( - bounds[MAP_MINX], - bounds[MAP_MINY], - bounds[MAP_MINZ] - ), - locate( - bounds[MAP_MAXX], - bounds[MAP_MAXY], - bounds[MAP_MAXZ] - ) - ) + var/list/turfs = block(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ], bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]) for(var/turf/current_turf as anything in turfs) var/area/current_turfs_area = current_turf.loc areas |= current_turfs_area @@ -163,12 +152,9 @@ return /datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE) - var/turf/placement = T if(centered) - var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z) - if(corner) - placement = corner - return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z)) + return RECT_TURFS(floor(width / 2), floor(height / 2), T) + return CORNER_BLOCK(T, width, height) //for your ever biggening badminnery kevinz000 diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 424ab22ae4ac..6b4675e3bade 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -355,10 +355,7 @@ // SSmapping.build_area_turfs(z_index) if(!no_changeturf) - var/list/turfs = block( - locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) - for(var/turf/T as anything in turfs) + for(var/turf/T as anything in block(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ], bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) //we do this after we load everything in. if we don't, we'll have weird atmos bugs regarding atmos adjacent turfs T.AfterChange(CHANGETURF_IGNORE_AIR) diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm index 3c47ac3b5c2a..63ec6485e3f3 100644 --- a/code/modules/mapping/space_management/space_reservation.dm +++ b/code/modules/mapping/space_management/space_reservation.dm @@ -131,8 +131,7 @@ if(!final) continue passing = TRUE - for(var/I in final) - var/turf/checking = I + for(var/turf/checking as anything in final) if(!(checking.turf_flags & UNUSED_RESERVATION_TURF)) passing = FALSE break diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index f5adf2940d6b..cb9d4c4f5e65 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -819,7 +819,7 @@ return var/list/alerts = list() - for(var/i in RANGE_TURFS(floor(width/2), T)) + for(var/i as anything in RANGE_TURFS(floor(width/2), T)) alerts += new /obj/effect/warning/alien(i) if(!do_after(Q, time_taken, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) diff --git a/code/modules/nightmare/nmtasks/mapload.dm b/code/modules/nightmare/nmtasks/mapload.dm index a49bbbabdde5..052cb069baec 100644 --- a/code/modules/nightmare/nmtasks/mapload.dm +++ b/code/modules/nightmare/nmtasks/mapload.dm @@ -70,11 +70,9 @@ var/list/bounds = parsed.bounds if(length(bounds) < 6) return - var/list/turf_block = block( locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) var/list/area/arealist = list() var/list/atom/atomlist = list() - for(var/turf/turf as anything in turf_block) + for(var/turf/turf as anything in block(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ], bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) atomlist += turf if(turf.loc) arealist |= turf.loc diff --git a/code/modules/nightmare/nmtasks/mapscheduler.dm b/code/modules/nightmare/nmtasks/mapscheduler.dm index 34ceecafb876..b97193eadb21 100644 --- a/code/modules/nightmare/nmtasks/mapscheduler.dm +++ b/code/modules/nightmare/nmtasks/mapscheduler.dm @@ -22,8 +22,7 @@ var/list/tainted = list() for(var/list/bounds as anything in tainted_bounds) - var/list/TT = block( locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), - locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) + var/list/TT = block(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ], bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]) tainted |= TT for(var/turf/T as anything in tainted) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 5e8d1db63716..9ae7b77d6533 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -105,9 +105,7 @@ ///returns turfs within our projected rectangle in no particular order /obj/docking_port/proc/return_turfs() var/list/L = return_coords() - var/turf/T0 = locate(L[1],L[2],z) - var/turf/T1 = locate(L[3],L[4],z) - return block(T0,T1) + return block(L[1], L[2], z, L[3], L[4], z) /obj/docking_port/proc/return_center_turf() var/list/L = return_coords() @@ -159,9 +157,7 @@ //Debug proc used to highlight bounding area /obj/docking_port/proc/highlight(_color) var/list/L = return_coords() - var/turf/T0 = locate(L[1],L[2],z) - var/turf/T1 = locate(L[3],L[4],z) - for(var/turf/T in block(T0,T1)) + for(var/turf/T as anything in block(L[1], L[2], z, L[3], L[4], z)) T.color = _color T.maptext = null if(_color) diff --git a/code/modules/tents/folded_tents.dm b/code/modules/tents/folded_tents.dm index fe1a748b750d..6496810f1a85 100644 --- a/code/modules/tents/folded_tents.dm +++ b/code/modules/tents/folded_tents.dm @@ -69,8 +69,7 @@ /obj/item/folded_tent/proc/get_deployment_area(turf/ref_turf) RETURN_TYPE(/list/turf) - var/turf/block_end_turf = locate(ref_turf.x + dim_x - 1, ref_turf.y + dim_y - 1, ref_turf.z) - return block(ref_turf, block_end_turf) + return CORNER_BLOCK(ref_turf, dim_x, dim_y) /obj/item/folded_tent/attack_self(mob/living/user) . = ..() diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 30eae6eef44e..8d04a51bcc19 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -64,7 +64,7 @@ GLOBAL_VAR_INIT(focused_test, focused_test()) /datum/unit_test/Destroy() QDEL_LIST(allocated) // clear the test area - for (var/turf/turf in block(locate(1, 1, run_loc_floor_bottom_left.z), locate(world.maxx, world.maxy, run_loc_floor_bottom_left.z))) + for (var/turf/turf as anything in Z_TURFS(run_loc_floor_bottom_left.z)) for (var/content in turf.contents) if (istype(content, /obj/effect/landmark)) continue diff --git a/code/modules/vehicles/interior/interior.dm b/code/modules/vehicles/interior/interior.dm index 240c59e46fc5..6aaeb6439176 100644 --- a/code/modules/vehicles/interior/interior.dm +++ b/code/modules/vehicles/interior/interior.dm @@ -118,7 +118,7 @@ var/list/passengers var/list/bounds = get_bound_turfs() - for(var/turf/T in block(bounds[1], bounds[2])) + for(var/turf/T as anything in block(bounds[1], bounds[2])) for(var/atom/A in T) if(isliving(A)) LAZYADD(passengers, A) @@ -322,7 +322,7 @@ /datum/interior/proc/find_entrances() var/list/bounds = get_bound_turfs() - for(var/turf/T in block(bounds[1], bounds[2])) + for(var/turf/T as anything in block(bounds[1], bounds[2])) var/obj/effect/landmark/interior/spawn/entrance/E = locate() in T if(E) LAZYADD(entrance_markers, E) @@ -332,6 +332,6 @@ /datum/interior/proc/handle_landmarks() var/list/bounds = get_bound_turfs() - for(var/turf/T in block(bounds[1], bounds[2])) + for(var/turf/T as anything in block(bounds[1], bounds[2])) for(var/obj/effect/landmark/interior/L in T) L.on_load(src) diff --git a/code/modules/vehicles/multitile/multitile_movement.dm b/code/modules/vehicles/multitile/multitile_movement.dm index 9e2e652c7610..58df8dbb9538 100644 --- a/code/modules/vehicles/multitile/multitile_movement.dm +++ b/code/modules/vehicles/multitile/multitile_movement.dm @@ -141,15 +141,18 @@ /obj/vehicle/multitile/proc/can_move(direction) var/can_move = TRUE - var/turf/min_turf = locate(x + bound_x / world.icon_size, y + bound_y / world.icon_size, z) - var/turf/max_turf = locate(min_turf.x + (bound_width / world.icon_size) - 1, min_turf.y + (bound_height / world.icon_size) - 1, z) - var/list/old_turfs = block(min_turf, max_turf) + var/bound_x_tiles = bound_x / world.icon_size + var/bound_y_tiles = bound_y / world.icon_size + var/turf/min_turf = locate(x + bound_x_tiles, y + bound_y_tiles, z) + + var/bound_width_tiles = bound_width / world.icon_size + var/bound_height_tiles = bound_height / world.icon_size + var/list/old_turfs = CORNER_BLOCK(min_turf, bound_width_tiles, bound_height_tiles) var/turf/new_loc = get_step(src, direction) - min_turf = locate(new_loc.x + bound_x / world.icon_size, new_loc.y + bound_y / world.icon_size, z) - max_turf = locate(min_turf.x + (bound_width / world.icon_size) - 1, min_turf.y + (bound_height / world.icon_size) - 1, z) + min_turf = locate(new_loc.x + bound_x_tiles, new_loc.y + bound_y_tiles, z) - for(var/turf/T in block(min_turf, max_turf)) + for(var/turf/T as anything in CORNER_BLOCK(min_turf, bound_width_tiles, bound_height_tiles)) // only check the turfs we're moving to if(T in old_turfs) continue @@ -264,7 +267,7 @@ break var/list/bounds = interior.get_bound_turfs() - for(var/turf/T in block(bounds[1], bounds[2])) + for(var/turf/T as anything in block(bounds[1], bounds[2])) for(var/atom/movable/A in T) if(A.anchored) continue From 78319a26db46e5b0e1008bed21c2d6da6559881d Mon Sep 17 00:00:00 2001 From: ihatethisengine <115417687+ihatethisengine@users.noreply.github.com> Date: Sat, 11 May 2024 15:25:53 +0300 Subject: [PATCH 04/12] Xenos cannot pylon working comms anymore (#6241) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # About the pull request First of all, it looks like a simple oversight. You cannot turn on pyloned comms tower, but for some reason it works the other way around — you can pylon working tower. Don't think this was intended. Secondly, I think it's a little too boring that you can get both pylon and working comms if you have corrupted xenos. It would be more interesting if you needed to choose between these options. # Explain why it's good for the game Consistency, balance, important choices. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: ihatethisengine balance: only disabled comms can be pyloned /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/game/machinery/telecomms/presets.dm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 459eddc4a544..2e792bdff09a 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -306,6 +306,11 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) else update_icon() +/obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/update_state() + ..() + if(inoperable()) + handle_xeno_acquisition(get_turf(src)) + /// Handles xenos corrupting the tower when weeds touch the turf it is located on /obj/structure/machinery/telecomms/relay/preset/tower/mapcomms/proc/handle_xeno_acquisition(turf/weeded_turf) SIGNAL_HANDLER @@ -328,12 +333,15 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) if(SSticker.mode.is_in_endgame) return + if(operable()) + return + if(ROUND_TIME < XENO_COMM_ACQUISITION_TIME) - addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (XENO_COMM_ACQUISITION_TIME - ROUND_TIME)) + addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (XENO_COMM_ACQUISITION_TIME - ROUND_TIME), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) return if(!COOLDOWN_FINISHED(src, corruption_delay)) - addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (COOLDOWN_TIMELEFT(src, corruption_delay))) + addtimer(CALLBACK(src, PROC_REF(handle_xeno_acquisition), weeded_turf), (COOLDOWN_TIMELEFT(src, corruption_delay)), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) return var/obj/effect/alien/weeds/node/pylon/cluster/parent_node = weeded_turf.weeds.parent From ebe178d124fa7f6202c9324c634b20655edaeca4 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sat, 11 May 2024 13:30:58 +0100 Subject: [PATCH 05/12] Automatic changelog for PR #6241 [ci skip] --- html/changelogs/AutoChangeLog-pr-6241.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6241.yml diff --git a/html/changelogs/AutoChangeLog-pr-6241.yml b/html/changelogs/AutoChangeLog-pr-6241.yml new file mode 100644 index 000000000000..df21a7fee856 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6241.yml @@ -0,0 +1,4 @@ +author: "ihatethisengine" +delete-after: True +changes: + - balance: "only disabled comms can be pyloned" \ No newline at end of file From 11a19097c88c59868fd2d7679a16156c0e3a5dc3 Mon Sep 17 00:00:00 2001 From: Git-Nivrak <59925169+Git-Nivrak@users.noreply.github.com> Date: Sat, 11 May 2024 15:27:56 +0300 Subject: [PATCH 06/12] Instant delimb nerf (#6240) # About the pull request Limbs can now only be delimbed if they are fractured # Explain why it's good for the game Instant delimbs based on nothing but rng from one slash are unfun to play against # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: balance: Limbs will now only be delimb-able if they are fractured /:cl: --- code/modules/organs/limbs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index 3cf8dae2a2c6..ea9a68bb9c41 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -367,7 +367,7 @@ var/no_perma_damage = owner.status_flags & NO_PERMANENT_DAMAGE var/no_bone_break = owner.chem_effect_flags & CHEM_EFFECT_RESIST_FRACTURE if(previous_brute > 0 && !is_ff && body_part != BODY_FLAG_CHEST && body_part != BODY_FLAG_GROIN && !no_limb_loss && !no_perma_damage && !no_bone_break) - if(CONFIG_GET(flag/limbs_can_break) && brute_dam >= max_damage * CONFIG_GET(number/organ_health_multiplier)) + if(CONFIG_GET(flag/limbs_can_break) && brute_dam >= max_damage * CONFIG_GET(number/organ_health_multiplier) && (status & LIMB_BROKEN)) var/cut_prob = brute/max_damage * 5 if(prob(cut_prob)) limb_delimb(damage_source) From 31e7280971c08d579ae55f1bf8bd5483e7720370 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sat, 11 May 2024 13:38:24 +0100 Subject: [PATCH 07/12] Automatic changelog for PR #6240 [ci skip] --- html/changelogs/AutoChangeLog-pr-6240.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6240.yml diff --git a/html/changelogs/AutoChangeLog-pr-6240.yml b/html/changelogs/AutoChangeLog-pr-6240.yml new file mode 100644 index 000000000000..9c234c576280 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6240.yml @@ -0,0 +1,4 @@ +author: "Git-Nivrak" +delete-after: True +changes: + - balance: "Limbs will now only be delimb-able if they are fractured" \ No newline at end of file From 42011844e44a1b56646ed102840dfd125a1aebf1 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Sat, 11 May 2024 13:45:08 +0100 Subject: [PATCH 08/12] Handheld distress beacons now require a reason input. (#6261) # About the pull request We get a lot of people that trigger the beacons without any apparent reason, no faxes or anything like that, so we have no idea WHY they want whatever they're calling for. In some cases like with CMB ERT it can be more obvious, but this just makes things simpler. # Explain why it's good for the game Stops people spamming them for no reason & gives admins some QOL # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Added a reason input field to handheld distress beacons. /:cl: --- code/game/objects/items/handheld_distress_beacon.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/handheld_distress_beacon.dm b/code/game/objects/items/handheld_distress_beacon.dm index 5764604c9a2f..73c9415dbfad 100644 --- a/code/game/objects/items/handheld_distress_beacon.dm +++ b/code/game/objects/items/handheld_distress_beacon.dm @@ -37,7 +37,11 @@ if(active) to_chat(user, "[src] is already active!") - return + return FALSE + var/reason = tgui_input_text(user, "What is the reason for activating this beacon?", "Distress Reason") + if(!reason) + return FALSE + active = TRUE update_icon() @@ -52,7 +56,7 @@ for(var/client/admin_client in GLOB.admins) if((R_ADMIN|R_MOD) & admin_client.admin_holder.rights) playsound_client(admin_client,'sound/effects/sos-morse-code.ogg',10) - message_admins("[key_name(user)] has used a [beacon_type]! [CC_MARK(user)] [beacon_call_buttons](DENY) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]") + message_admins("[key_name(user)] has used a [beacon_type] for the reason '[SPAN_ORANGE(reason)]'! [CC_MARK(user)] [beacon_call_buttons](DENY) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]") to_chat(user, SPAN_NOTICE("A distress beacon request has been sent to [recipient].")) /// CMB distress beacon held by CMB Marshal for signalling distress to Anchorpoint Station From 937d2d4ad76fecf0d833ab578d8ff14abde1be8c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sat, 11 May 2024 13:49:39 +0100 Subject: [PATCH 09/12] Automatic changelog for PR #6261 [ci skip] --- html/changelogs/AutoChangeLog-pr-6261.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6261.yml diff --git a/html/changelogs/AutoChangeLog-pr-6261.yml b/html/changelogs/AutoChangeLog-pr-6261.yml new file mode 100644 index 000000000000..280c260d2dee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6261.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Added a reason input field to handheld distress beacons." \ No newline at end of file From 31b42f96acae54c6c7cb0cdfa07693913d9c4c7c Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Sat, 11 May 2024 14:13:09 +0100 Subject: [PATCH 10/12] Restraints now show up on examine. (#6252) # About the pull request As title says, this makes handcuffs/legcuffs appear on examine. # Explain why it's good for the game Depending on various overlapping sprites/locations, it can be difficult to tell if someone is restrained just by looking at them. This adds to examine something that should have been there to start with. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Handcuffs & Legcuffs now appear on examine. /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/modules/mob/living/carbon/human/examine.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 563d0f4107e9..dcbab12c7291 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -160,6 +160,13 @@ if(wear_id) msg += "[t_He] [t_is] [wear_id.get_examine_location(src, user, WEAR_ID, t_He, t_his, t_him, t_has, t_is)].\n" + //Restraints + if(handcuffed) + msg += SPAN_ORANGE("[capitalize(t_his)] arms are restrained by [handcuffed].\n") + + if(legcuffed) + msg += SPAN_ORANGE("[capitalize(t_his)] ankles are restrained by [legcuffed].\n") + //Admin-slept if(sleeping > 8000000) msg += SPAN_HIGHDANGER("This player has been slept by staff.\n") From 3028a833c2f7fea98694d485f251de5462190f7b Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sat, 11 May 2024 14:17:27 +0100 Subject: [PATCH 11/12] Automatic changelog for PR #6252 [ci skip] --- html/changelogs/AutoChangeLog-pr-6252.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6252.yml diff --git a/html/changelogs/AutoChangeLog-pr-6252.yml b/html/changelogs/AutoChangeLog-pr-6252.yml new file mode 100644 index 000000000000..3d1819a15ae9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6252.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Handcuffs & Legcuffs now appear on examine." \ No newline at end of file From 62d8082ed5143e5104773e166724f93dd6df2513 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 12 May 2024 01:17:39 +0000 Subject: [PATCH 12/12] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-6240.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6241.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6252.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6261.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6271.yml | 5 ----- html/changelogs/archive/2024-05.yml | 12 ++++++++++++ 6 files changed, 12 insertions(+), 21 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6240.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6241.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6252.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6261.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6271.yml diff --git a/html/changelogs/AutoChangeLog-pr-6240.yml b/html/changelogs/AutoChangeLog-pr-6240.yml deleted file mode 100644 index 9c234c576280..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6240.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Git-Nivrak" -delete-after: True -changes: - - balance: "Limbs will now only be delimb-able if they are fractured" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6241.yml b/html/changelogs/AutoChangeLog-pr-6241.yml deleted file mode 100644 index df21a7fee856..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6241.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ihatethisengine" -delete-after: True -changes: - - balance: "only disabled comms can be pyloned" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6252.yml b/html/changelogs/AutoChangeLog-pr-6252.yml deleted file mode 100644 index 3d1819a15ae9..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6252.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - rscadd: "Handcuffs & Legcuffs now appear on examine." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6261.yml b/html/changelogs/AutoChangeLog-pr-6261.yml deleted file mode 100644 index 280c260d2dee..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6261.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - rscadd: "Added a reason input field to handheld distress beacons." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6271.yml b/html/changelogs/AutoChangeLog-pr-6271.yml deleted file mode 100644 index a868132fe8d2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6271.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "XQ" -delete-after: True -changes: - - qol: "Updated the ARES reception bell's description to inform players it notifies Working Joes when rung." - - qol: "Increased the ARES reception bell's cooldown from 5 to 60 seconds." \ No newline at end of file diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index 9dd1a6b71965..93fb07c6b993 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -115,3 +115,15 @@ iloveloopers: - rscadd: Adds in a new incinerator smoke tank that turns any reagent inside it into chemsmoke when fired. +2024-05-12: + Git-Nivrak: + - balance: Limbs will now only be delimb-able if they are fractured + XQ: + - qol: Updated the ARES reception bell's description to inform players it notifies + Working Joes when rung. + - qol: Increased the ARES reception bell's cooldown from 5 to 60 seconds. + ihatethisengine: + - balance: only disabled comms can be pyloned + realforest2001: + - rscadd: Handcuffs & Legcuffs now appear on examine. + - rscadd: Added a reason input field to handheld distress beacons.