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/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 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 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/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") 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/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) 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) 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 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.