From 2f36c20ee8ac7f9afba174ca4e42abed1e703949 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Mon, 26 Feb 2018 13:26:58 -0600 Subject: [PATCH 1/4] Speculative fix for some head sprite bugs (#4326) changes: Helmets no longer cover eyes and now cover hair by default. Mask, hair, and helmet sprites will now all be updated if one of them changes. This should fix issues with hair being visible when it shouldn't be, and masks mysteriously disappearing. Fixes #3326. --- code/modules/clothing/head/helmet.dm | 2 +- code/modules/mob/living/carbon/human/update_icons.dm | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index b12b0b0bf4b..011a1d4ec97 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -9,7 +9,7 @@ item_flags = THICKMATERIAL body_parts_covered = HEAD armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0) - flags_inv = HIDEEARS|HIDEEYES + flags_inv = HIDEEARS|BLOCKHEADHAIR cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE heat_protection = HEAD diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7219ab38168..f64a75582bc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -733,7 +733,7 @@ There are several things that need to be remembered: if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_head(var/update_icons=1) +/mob/living/carbon/human/update_inv_head(update_icons = TRUE, recurse = TRUE) if (QDELING(src)) return @@ -781,6 +781,10 @@ There are several things that need to be remembered: overlays_raw[HEAD_LAYER] = ovr || standing + if (recurse) + update_hair(FALSE) + update_inv_wear_mask(FALSE, FALSE) + if(update_icons) update_icons() @@ -905,7 +909,7 @@ There are several things that need to be remembered: update_icons() -/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) +/mob/living/carbon/human/update_inv_wear_mask(update_icons = TRUE, recurse = TRUE) if (QDELING(src)) return @@ -939,6 +943,10 @@ There are several things that need to be remembered: overlays_raw[FACEMASK_LAYER] = ovr || standing + if (recurse) + update_inv_head(FALSE, FALSE) + update_hair(FALSE) + if(update_icons) update_icons() From d02c9551fd903d0092d0d7d7207086c84544e811 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Mon, 26 Feb 2018 13:27:17 -0600 Subject: [PATCH 2/4] Map & Ore sanity (#4321) changes: SSatlas will now warn if it detects a compiled-in map. The asteroid gen no longer stops working if no smelter is mapped in. Multiple smelters can now be mapped in without all but one being nonfunctional. --- code/controllers/subsystems/initialization/atlas.dm | 5 +++++ code/controllers/subsystems/initialization/misc_early.dm | 5 +++++ code/modules/mining/machine_processing.dm | 9 +++------ code/world.dm | 5 +++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/code/controllers/subsystems/initialization/atlas.dm b/code/controllers/subsystems/initialization/atlas.dm index 830249b7683..77aa5a5eb5b 100644 --- a/code/controllers/subsystems/initialization/atlas.dm +++ b/code/controllers/subsystems/initialization/atlas.dm @@ -23,6 +23,11 @@ var/datum/controller/subsystem/atlas/SSatlas NEW_SS_GLOBAL(SSatlas) /datum/controller/subsystem/atlas/Initialize(timeofday) + // Quick sanity check. + if (world.maxx != WORLD_MIN_SIZE || world.maxy != WORLD_MIN_SIZE || world.maxz != 1) + world << "WARNING: Suspected pre-compiled map: things may break horribly!" + log_ss("atlas", "-- WARNING: Suspected pre-compiled map! --") + maploader = new var/datum/map/M diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm index 250f576c63d..14c50a7f15c 100644 --- a/code/controllers/subsystems/initialization/misc_early.dm +++ b/code/controllers/subsystems/initialization/misc_early.dm @@ -44,4 +44,9 @@ global_initialize_webhooks() + // Setup ore. + for(var/oretype in subtypesof(/ore)) + var/ore/OD = new oretype() + ore_data[OD.name] = OD + ..() diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 1d285ba1690..b7f9492cd83 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -177,12 +177,9 @@ for(var/alloytype in typesof(/datum/alloy)-/datum/alloy) alloy_data += new alloytype() - if(!ore_data || !ore_data.len) - for(var/oretype in typesof(/ore)-/ore) - var/ore/OD = new oretype() - ore_data[OD.name] = OD - ores_processing[OD.name] = 0 - ores_stored[OD.name] = 0 + for (var/O in ore_data) + ores_processing[O] = 0 + ores_stored[O] = 0 //Locate our output and input machinery. for (var/dir in cardinal) diff --git a/code/world.dm b/code/world.dm index 0086dd2fd75..d8c8029c731 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,5 +1,6 @@ #define WORLD_ICON_SIZE 32 #define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 +#define WORLD_MIN_SIZE 32 /* The initialization of the game happens roughly like this: @@ -56,8 +57,8 @@ var/global/datum/global_init/init = new () area = /area/space view = "15x15" cache_lifespan = 0 //stops player uploaded stuff from being kept in the rsc past the current session - maxx = 32 // So that we don't get map-window-popin at boot. DMMS will expand this. - maxy = 32 + maxx = WORLD_MIN_SIZE // So that we don't get map-window-popin at boot. DMMS will expand this. + maxy = WORLD_MIN_SIZE #define RECOMMENDED_VERSION 510 From 0401d9cb1b1e401d9d1e4abdddf9a5068ee0f71c Mon Sep 17 00:00:00 2001 From: Werner <1331699+Arrow768@users.noreply.github.com> Date: Fri, 2 Mar 2018 19:49:11 +0100 Subject: [PATCH 3/4] Update Travis to 512.1401 --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7ccee0f611a..79eb8a8fd70 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,15 +3,14 @@ sudo: false env: global: - BYOND_MAJOR="511" - BYOND_MINOR="1385" + BYOND_MAJOR="512" + BYOND_MINOR="1401" MACRO_COUNT=77 FLYWAY_BUILD="4.2.0" matrix: - USE_MAP=aurora - USE_MAP=runtime - USE_MAP=exodus - - USE_MAP=runtime BYOND_MAJOR="512" BYOND_MINOR="1401" cache: directories: From 122096cf80ee263aa3ed1cc8b8b81cce7b7dc137 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Mon, 5 Mar 2018 13:22:17 -0600 Subject: [PATCH 4/4] Minor Explosion Fixes (#4351) changes: - Sleeps in ex_act() should no longer stall explosions (this could sometimes be significant). - ZAS should no longer runtime when CSRFZ checks a non-simulated turf. - throw_at() sleeps should no longer delay droplimb() calls. --- code/ZAS/Turf.dm | 5 ++++- code/game/atoms.dm | 1 + code/modules/organs/organ_external.dm | 23 +++++++++++++---------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index ae0db944fd3..d3755da97f5 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -78,11 +78,14 @@ GET_ZONE_NEIGHBOURS(src, check_dirs) . = check_dirs for(var/dir in csrfz_check) - //for each pair of "adjacent" cardinals (e.g. NORTH and WEST, but not NORTH and SOUTH) if((dir & check_dirs) == dir) //check that they are connected by the corner turf var/turf/simulated/T = get_step(src, dir) + if (!istype(T)) + . &= ~dir + continue + var/connected_dirs GET_ZONE_NEIGHBOURS(T, connected_dirs) if(connected_dirs && (dir & reverse_dir[connected_dirs]) == dir) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a5f49c70f77..8c210c30bb7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -160,6 +160,7 @@ L.source_atom.update_light() /atom/proc/ex_act() + set waitfor = FALSE return /atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c2a9b465cea..3f67275dc75 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -735,6 +735,12 @@ Note that amputating the affected organ does in fact remove the infection from t DISMEMBERMENT ****************************************************/ +/obj/item/organ/external/proc/post_droplimb(mob/living/carbon/human/victim) + victim.updatehealth() + victim.UpdateDamageIcon() + victim.regenerate_icons() + dir = 2 + //Handles dismemberment /obj/item/organ/external/proc/droplimb(var/clean, var/disintegrate = DROPLIMB_EDGE, var/ignore_children = null) @@ -781,11 +787,7 @@ Note that amputating the affected organ does in fact remove the infection from t victim.organs |= stump stump.update_damages() - spawn(1) - victim.updatehealth() - victim.UpdateDamageIcon() - victim.regenerate_icons() - dir = 2 + addtimer(CALLBACK(src, .proc/post_droplimb, victim), 0) switch(disintegrate) if(DROPLIMB_EDGE) @@ -797,7 +799,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(!clean) //Throw limb around. if(src && istype(loc,/turf)) - throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + INVOKE_ASYNC(src, /atom/movable/.proc/throw_at, get_edge_target_turf(src,pick(alldirs)), rand(1,3), 30) dir = 2 if(DROPLIMB_BURN) new /obj/effect/decal/cleanable/ash(get_turf(victim)) @@ -812,19 +814,20 @@ Note that amputating the affected organ does in fact remove the infection from t if(victim.species.blood_color) gore.basecolor = victim.species.blood_color gore.update_icon() - gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + INVOKE_ASYNC(gore, /atom/movable/.proc/throw_at, get_edge_target_turf(src, pick(alldirs)), rand(1,3), 30) for(var/obj/item/organ/I in internal_organs) I.removed() if(istype(loc,/turf)) - I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + INVOKE_ASYNC(I, /atom/movable/.proc/throw_at, get_edge_target_turf(src, pick(alldirs)), rand(1,3), 30) + var/turf/Tloc = get_turf(src) for(var/obj/item/I in src) if(I.w_class <= 2) qdel(I) continue - I.loc = get_turf(src) - I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) + I.forceMove(Tloc) + INVOKE_ASYNC(I, /atom/movable/.proc/throw_at, get_edge_target_turf(src, pick(alldirs)), rand(1,3), 30) qdel(src)