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: 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/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/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/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/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/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() 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) diff --git a/code/world.dm b/code/world.dm index f3760002c2f..9942f4311c1 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: @@ -53,8 +54,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