diff --git a/.travis.yml b/.travis.yml index fc1c93b83c6..5a3b08a14a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ sudo: false env: global: - BYOND_MAJOR="512" - - BYOND_MINOR="1403" + - BYOND_MINOR="1411" - MACRO_COUNT=4 matrix: - TEST_DEFINE="MAP_TEST" TEST_FILE="code/_map_tests.dm" RUN="0" diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 9f025138a18..86bfe96304b 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -1279,7 +1279,7 @@ universal_underlays(node2) else universal_underlays(,dir) - universal_underlays(dir, -180) + universal_underlays(,turn(dir, -180)) /obj/machinery/atmospherics/pipe/simple/visible/universal/update_underlays() ..() diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index a309cd3a082..f61d1cf4fc4 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -6,9 +6,9 @@ /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) if(LAZYLEN(graphic_add)) - overlays += graphic_add + add_overlay(graphic_add, priority = TRUE) if(LAZYLEN(graphic_remove)) - overlays -= graphic_remove + cut_overlay(graphic_remove, priority = TRUE) /turf/proc/update_air_properties() var/block = c_airblock(src) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 724f5789d8e..92ad017cd21 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -800,7 +800,6 @@ proc/GaussRandRound(var/sigma,var/roundto) var/old_dir1 = T.dir var/old_icon_state1 = T.icon_state var/old_icon1 = T.icon - var/old_overlays = T.overlays.Copy() var/old_underlays = T.underlays.Copy() var/old_decals = T.decals ? T.decals.Copy() : null @@ -808,11 +807,9 @@ proc/GaussRandRound(var/sigma,var/roundto) X.set_dir(old_dir1) X.icon_state = old_icon_state1 X.icon = old_icon1 - X.overlays = old_overlays + X.copy_overlays(T, TRUE) X.underlays = old_underlays X.decals = old_decals - if(old_decals) - X.apply_decals() //Move the air from source to dest var/turf/simulated/ST = T @@ -838,14 +835,10 @@ proc/GaussRandRound(var/sigma,var/roundto) if(shuttlework) var/turf/simulated/shuttle/SS = T SS.landed_holder.leave_turf() - else if(turftoleave) T.ChangeTurf(turftoleave) - T.apply_decals() - else T.ChangeTurf(get_base_turf_by_area(T)) - T.apply_decals() refined_src -= T refined_trg -= B diff --git a/code/controllers/subsystems/floor_decals.dm b/code/controllers/subsystems/floor_decals.dm deleted file mode 100644 index 39e4515d0d7..00000000000 --- a/code/controllers/subsystems/floor_decals.dm +++ /dev/null @@ -1,28 +0,0 @@ -// -// Floor Decals Initialization Subsystem -// This is part of the giant decal hack that works around a BYOND bug where DreamDaemon will crash if you -// update overlays on turfs too much. -// The master_controller on Polaris used to init decals prior to initializing areas (which initilized turfs) -// Now that we switched to subsystems we still want to do the same thing, so this takes care of it. -// -SUBSYSTEM_DEF(floor_decals) - name = "Floor Decals" - init_order = INIT_ORDER_DECALS - flags = SS_NO_FIRE - -/datum/controller/subsystem/floor_decals/Initialize(timeofday) - if(floor_decals_initialized) - return ..() - to_world_log("Initializing Floor Decals") - admin_notice("Initializing Floor Decals", R_DEBUG) - var/list/turfs_with_decals = list() - for(var/obj/effect/floor_decal/D in world) - var/T = D.add_to_turf_decals() - if(T) turfs_with_decals |= T - CHECK_TICK - for(var/item in turfs_with_decals) - var/turf/T = item - if(T.decals) T.apply_decals() - CHECK_TICK - floor_decals_initialized = TRUE - return ..() diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 6d7581e1268..352102e1755 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -11,6 +11,8 @@ SUBSYSTEM_DEF(overlays) var/list/overlay_icon_state_caches // Cache thing var/list/overlay_icon_cache // Cache thing +var/global/image/appearance_bro = new() // Temporarily super-global because of BYOND init order dumbness. + /datum/controller/subsystem/overlays/PreInit() overlay_icon_state_caches = list() overlay_icon_cache = list() @@ -90,7 +92,7 @@ SUBSYSTEM_DEF(overlays) icon_cache[icon] = . /atom/proc/build_appearance_list(old_overlays) - var/static/image/appearance_bro = new() + // var/static/image/appearance_bro = new() // Moved to be superglobal due to BYOND insane init order stupidness. var/list/new_overlays = list() if (!islist(old_overlays)) old_overlays = list(old_overlays) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 76eafc2a05e..6a435ef3889 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -824,7 +824,7 @@ FIRE ALARM alarms_hidden = TRUE /obj/machinery/firealarm/update_icon() - overlays.Cut() + cut_overlays() if(panel_open) set_light(0) @@ -847,8 +847,7 @@ FIRE ALARM if("blue") set_light(l_range = 2, l_power = 0.5, l_color = "#1024A9") if("red") set_light(l_range = 4, l_power = 2, l_color = "#ff0000") if("delta") set_light(l_range = 4, l_power = 2, l_color = "#FF6633") - - overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]") + add_overlay("overlay_[seclevel]") /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) if(detecting) diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 84a243e35f9..ea9a7f77fbc 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -14,17 +14,29 @@ var/list/floor_decals = list() if(newcolour) color = newcolour ..(newloc) -// Hack to workaround byond crash bug /obj/effect/floor_decal/initialize() - if(!floor_decals_initialized || !loc || QDELETED(src)) - return add_to_turf_decals() - var/turf/T = get_turf(src) - if(T) //VOREStation Edit - T.apply_decals() initialized = TRUE return INITIALIZE_HINT_QDEL +// This is a separate proc from initialize() to facilitiate its caching and other stuff. Look into it someday. +/obj/effect/floor_decal/proc/add_to_turf_decals() + if(supplied_dir) + set_dir(supplied_dir) // TODO - Why can't this line be done in initialize/New()? + var/turf/T = get_turf(src) + if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor)) + var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[T.layer]" + var/image/I = floor_decals[cache_key] + if(!I) + I = image(icon = icon, icon_state = icon_state, dir = dir) + I.layer = T.layer + I.color = color + I.alpha = alpha + floor_decals[cache_key] = I + LAZYADD(T.decals, I) // Add to its decals list (so it remembers to re-apply after it cuts overlays) + T.add_overlay(I) // Add to its current overlays too. + return T + /obj/effect/floor_decal/reset name = "reset marker" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index abb5d7a1ba0..0cdcc8b1756 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -230,9 +230,8 @@ oxygen = 0 nitrogen = 0 -/turf/simulated/floor/reinforced/n20/New() - ..() - sleep(-1) +/turf/simulated/floor/reinforced/n20/initialize() + . = ..() if(!air) make_air() air.adjust_gas("sleeping_agent", ATMOSTANK_NITROUSOXIDE) @@ -411,11 +410,11 @@ . = ..() /turf/snow/update_icon() - overlays.Cut() + cut_overlays() for(var/d in crossed_dirs) var/amt = crossed_dirs[d] for(var/i in 1 to amt) - overlays += icon(icon, "footprint[i]", text2num(d)) + add_overlay(image(icon, "footprint[i]", text2num(d))) //**** Here ends snow **** \ No newline at end of file diff --git a/code/game/turfs/flooring/turf_overlay_holder.dm b/code/game/turfs/flooring/turf_overlay_holder.dm deleted file mode 100644 index c12f727a0b8..00000000000 --- a/code/game/turfs/flooring/turf_overlay_holder.dm +++ /dev/null @@ -1,95 +0,0 @@ -// -// Initialize floor decals! Woo! This is crazy. -// - -var/global/floor_decals_initialized = FALSE - -// The Turf Decal Holder -// Since it is unsafe to add overlays to turfs, we hold them here for now. -// Since I want this object to basically not exist, I am modeling it in part after lighting_overlay -/atom/movable/turf_overlay_holder - name = "turf overlay holder" - density = 0 - simulated = 0 - anchored = 1 - layer = TURF_LAYER - icon = null - icon_state = null - mouse_opacity = 0 - // auto_init = 0 - -/atom/movable/turf_overlay_holder/initialize() - // doesn't need special init - initialized = TRUE - return INITIALIZE_HINT_NORMAL - -/atom/movable/turf_overlay_holder/New(var/atom/newloc) - ..() - verbs.Cut() - var/turf/T = loc - T.overlay_holder = src - -/atom/movable/turf_overlay_holder/Destroy() - if(loc) - var/turf/T = loc - if(T.overlay_holder == src) - T.overlay_holder = null - . = ..() - -// Variety of overrides so the overlays don't get affected by weird things. -/atom/movable/turf_overlay_holder/ex_act() - return - -/atom/movable/turf_overlay_holder/singularity_act() - return - -/atom/movable/turf_overlay_holder/singularity_pull() - return - -/atom/movable/turf_overlay_holder/forceMove() - return 0 //should never move - -/atom/movable/turf_overlay_holder/Move() - return 0 - -/atom/movable/turf_overlay_holder/throw_at() - return 0 - -/obj/effect/floor_decal/proc/add_to_turf_decals() - if(src.supplied_dir) src.set_dir(src.supplied_dir) - var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor)) - var/cache_key = "[src.alpha]-[src.color]-[src.dir]-[src.icon_state]-[T.layer]" - var/image/I = floor_decals[cache_key] - if(!I) - I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir) - I.layer = T.layer - I.color = src.color - I.alpha = src.alpha - floor_decals[cache_key] = I - if(!T.decals) T.decals = list() - //world.log << "About to add img:\ref[I] onto decals at turf:\ref[T] ([T.x],[T.y],[T.z]) which has appearance:\ref[T.appearance] and decals.len=[T.decals.len]" - T.decals += I - return T - // qdel(D) - src.loc = null - src.tag = null - -// Changes to turf to let us do this -/turf - var/atom/movable/turf_overlay_holder/overlay_holder = null - -// After a turf change, destroy the old overlay holder since we will have lost access to it. -/turf/post_change() - var/atom/movable/turf_overlay_holder/TOH = locate(/atom/movable/turf_overlay_holder, src) - if(TOH) - qdel(TOH) - ..() - -/turf/proc/apply_decals() - if(decals) - if(!overlay_holder) - overlay_holder = new(src) - overlay_holder.overlays = src.decals - else if(overlay_holder) - overlay_holder.overlays.Cut() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 789ec20a178..e1565889378 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -21,16 +21,15 @@ spawn(0) wet = wet_val if(wet_overlay) - overlays -= wet_overlay - wet_overlay = null - wet_overlay = image('icons/effects/water.dmi',src,"wet_floor") - overlays += wet_overlay + cut_overlay(wet_overlay) + wet_overlay = image('icons/effects/water.dmi', icon_state = "wet_floor") + add_overlay(wet_overlay) sleep(800) if(wet == 2) sleep(3200) wet = 0 if(wet_overlay) - overlays -= wet_overlay + cut_overlay(wet_overlay) wet_overlay = null /turf/simulated/proc/freeze_floor() @@ -38,14 +37,14 @@ return wet = 3 // icy if(wet_overlay) - overlays -= wet_overlay + cut_overlay(wet_overlay) wet_overlay = null wet_overlay = image('icons/turf/overlays.dmi',src,"snowfloor") - overlays += wet_overlay + add_overlay(wet_overlay) spawn(5 MINUTES) wet = 0 if(wet_overlay) - overlays -= wet_overlay + cut_overlay(wet_overlay) wet_overlay = null /turf/simulated/clean_blood() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index f9063358193..9f3a8e67b08 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -60,7 +60,7 @@ //This proc auto corrects the grass tiles' siding. /turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) - overlays.Cut() + cut_overlays() // VOREStation Edit - We are flooring switching to plating, swap out old_decals for decals. if(flooring) var/tmp/list/underfloor_decals = old_decals diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 940a170cdb3..1faf198cedb 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -15,7 +15,7 @@ var/image/no_ceiling_image = null if(lava) return - overlays.Cut() + cut_overlays() if(flooring) // Set initial icon and strings. @@ -38,17 +38,17 @@ var/image/no_ceiling_image = null var/turf/simulated/floor/T = get_step(src, step_dir) if(!istype(T) || !T.flooring || T.flooring.name != flooring.name) has_border |= step_dir - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)) // There has to be a concise numerical way to do this but I am too noob. if((has_border & NORTH) && (has_border & EAST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)) if((has_border & NORTH) && (has_border & WEST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)) if((has_border & SOUTH) && (has_border & EAST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)) if((has_border & SOUTH) && (has_border & WEST)) - overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)) if(flooring.flags & TURF_HAS_CORNERS) // As above re: concise numerical way to do this. @@ -56,37 +56,36 @@ var/image/no_ceiling_image = null if(!(has_border & EAST)) var/turf/simulated/floor/T = get_step(src, NORTHEAST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST)) if(!(has_border & WEST)) var/turf/simulated/floor/T = get_step(src, NORTHWEST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)) if(!(has_border & SOUTH)) if(!(has_border & EAST)) var/turf/simulated/floor/T = get_step(src, SOUTHEAST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)) if(!(has_border & WEST)) var/turf/simulated/floor/T = get_step(src, SOUTHWEST) if(!(istype(T) && T.flooring && T.flooring.name == flooring.name)) - overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST) + add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)) - // Hack workaround to byond crash bug - //if(decals && decals.len) - //overlays |= decals - apply_decals() + // Re-apply floor decals + if(LAZYLEN(decals)) + add_overlay(decals) if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo icon = 'icons/turf/flooring/plating.dmi' icon_state = "dmg[rand(1,4)]" else if(flooring) if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]") // VOREStation Edit - Eris overlays + add_overlay(get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]")) // VOREStation Edit - Eris overlays if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]") // VOREStation Edit - Eris overlays + add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]")) // VOREStation Edit - Eris overlays if(weather_overlay) - overlays += weather_overlay + add_overlay(weather_overlay) if(update_neighbors) for(var/turf/simulated/floor/F in range(src, 1)) @@ -97,7 +96,7 @@ var/image/no_ceiling_image = null // Show 'ceilingless' overlay. var/turf/above = GetAbove(src) if(above && isopenspace(above) && !istype(src, /turf/simulated/floor/outdoors)) // This won't apply to outdoor turfs since its assumed they don't have a ceiling anyways. - overlays |= no_ceiling_image + add_overlay(no_ceiling_image) /turf/simulated/floor/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0) if(!flooring_cache[cache_key]) diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 07c686df993..3c4856cf004 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -15,17 +15,19 @@ var/list/decals New(var/location = null, var/turf/simulated/shuttle/turf) + ..(null) my_turf = turf /obj/landed_holder/proc/land_on(var/turf/T) //Gather destination information - var/old_dest_type = T.type - var/old_dest_dir = T.dir - var/old_dest_icon_state = T.icon_state - var/old_dest_icon = T.icon - var/list/old_dest_overlays = T.overlays.Copy() - var/list/old_dest_underlays = T.underlays.Copy() - var/list/old_dest_decals = T.decals ? T.decals.Copy() : null + var/obj/landed_holder/new_holder = new(null) + new_holder.turf_type = T.type + new_holder.dir = T.dir + new_holder.icon = T.icon + new_holder.icon_state = T.icon_state + new_holder.copy_overlays(T, TRUE) + new_holder.underlays = T.underlays.Copy() + new_holder.decals = T.decals ? T.decals.Copy() : null //Set the destination to be like us T.Destroy() @@ -33,7 +35,7 @@ new_dest.set_dir(my_turf.dir) new_dest.icon_state = my_turf.icon_state new_dest.icon = my_turf.icon - new_dest.overlays = my_turf.overlays + new_dest.copy_overlays(my_turf, TRUE) new_dest.underlays = my_turf.underlays new_dest.decals = my_turf.decals //Shuttle specific stuff @@ -43,18 +45,9 @@ new_dest.join_flags = my_turf.join_flags new_dest.join_group = my_turf.join_group - if(new_dest.decals) - new_dest.apply_decals() - - //Tell the new turf about what was there before - new_dest.landed_holder = new(turf = new_dest) - new_dest.landed_holder.turf_type = old_dest_type - new_dest.landed_holder.dir = old_dest_dir - new_dest.landed_holder.icon = old_dest_icon - new_dest.landed_holder.icon_state = old_dest_icon_state - new_dest.landed_holder.overlays = old_dest_overlays - new_dest.landed_holder.underlays = old_dest_underlays - new_dest.landed_holder.decals = old_dest_decals + // Associate the holder with the new turf. + new_holder.my_turf = new_dest + new_dest.landed_holder = new_holder //Update underlays if necessary (interior corners won't have changed). if(new_dest.takes_underlays && !new_dest.interior_corner) @@ -70,11 +63,9 @@ new_source.set_dir(dir) new_source.icon_state = icon_state new_source.icon = icon - new_source.overlays = overlays + new_source.copy_overlays(src, TRUE) new_source.underlays = underlays new_source.decals = decals - if(new_source.decals) - new_source.apply_decals() else new_source = my_turf.ChangeTurf(get_base_turf_by_area(my_turf),,1) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 13d983a9e1b..cd358b7d5ef 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -44,7 +44,9 @@ var/list/outdoor_turfs = list() planet_controller.unallocateTurf(src) else // This is happening during map gen, if there's no planet_controller (hopefully). outdoor_turfs -= src - qdel(weather_overlay) + if(weather_overlay) + cut_overlay(weather_overlay) + qdel_null(weather_overlay) update_icon() /turf/simulated/post_change() @@ -67,15 +69,14 @@ var/list/outdoor_turfs = list() var/image/I = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir) I.plane = 0 turf_edge_cache[cache_key] = I - overlays += turf_edge_cache[cache_key] + add_overlay(turf_edge_cache[cache_key]) /turf/simulated/proc/get_edge_icon_state() return icon_state /turf/simulated/floor/outdoors/update_icon() - overlays.Cut() - update_icon_edge() ..() + update_icon_edge() /turf/simulated/floor/outdoors/mud name = "mud" diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index 8e60c925e54..9926c4704ad 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -17,10 +17,9 @@ . = ..() /turf/simulated/floor/outdoors/snow/update_icon() - overlays.Cut() ..() for(var/d in crossed_dirs) - overlays += image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d)) + add_overlay(image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d))) /turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/weapon/shovel)) diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 2dac063723b..b8a0980de41 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -47,36 +47,36 @@ if(!damage_overlays[1]) //list hasn't been populated generate_overlays() - overlays.Cut() + cut_overlays() var/image/I if(!density) I = image('icons/turf/wall_masks.dmi', "[material.icon_base]fwall_open") I.color = material.icon_colour - overlays += I + add_overlay(I) return for(var/i = 1 to 4) I = image('icons/turf/wall_masks.dmi', "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1)) I.color = material.icon_colour - overlays += I + add_overlay(I) if(reinf_material) if(construction_stage != null && construction_stage < 6) I = image('icons/turf/wall_masks.dmi', "reinf_construct-[construction_stage]") I.color = reinf_material.icon_colour - overlays += I + add_overlay(I) else if("[reinf_material.icon_reinf]0" in icon_states('icons/turf/wall_masks.dmi')) // Directional icon for(var/i = 1 to 4) I = image('icons/turf/wall_masks.dmi', "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1)) I.color = reinf_material.icon_colour - overlays += I + add_overlay(I) else I = image('icons/turf/wall_masks.dmi', reinf_material.icon_reinf) I.color = reinf_material.icon_colour - overlays += I + add_overlay(I) if(damage != 0) var/integrity = material.integrity @@ -87,7 +87,7 @@ if(overlay > damage_overlays.len) overlay = damage_overlays.len - overlays += damage_overlays[overlay] + add_overlay(damage_overlays[overlay]) return /turf/simulated/wall/proc/generate_overlays() diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index d6eb1578b7f..eae30c6cb43 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -224,15 +224,7 @@ /turf/simulated/shuttle/wall/voidcraft/update_icon() if(stripe_color) - overlays = list() //VOREStation Edit - Another place with overlay nonsense. + cut_overlays() var/image/I = image(icon = src.icon, icon_state = "o_[icon_state]") I.color = stripe_color - //VOREStation Add - Shenanigans around this because of the bullshit byond bug - var/pre_overlays = overlays.len - overlays.Add(I) - var/post_overlays = overlays.len - if(post_overlays != (pre_overlays + 1)) - world.log << "Corrupted overlays on [x],[y],[z] voidcraft wall" - new type(src) - return - //VOREStation Add End + add_overlay(I) diff --git a/code/game/turfs/simulated/wall_types_vr.dm b/code/game/turfs/simulated/wall_types_vr.dm index 90d389bf53b..4d939c2004d 100644 --- a/code/game/turfs/simulated/wall_types_vr.dm +++ b/code/game/turfs/simulated/wall_types_vr.dm @@ -26,7 +26,7 @@ var/list/flesh_overlay_cache = list() /turf/simulated/flesh/update_icon(var/update_neighbors) - overlays.Cut() + cut_overlays() if(density) icon = 'icons/turf/stomach_vr.dmi' @@ -37,7 +37,7 @@ var/list/flesh_overlay_cache = list() var/place_dir = turn(direction, 180) if(!flesh_overlay_cache["flesh_side_[place_dir]"]) flesh_overlay_cache["flesh_side_[place_dir]"] = image('icons/turf/stomach_vr.dmi', "flesh_side", dir = place_dir) - T.overlays += flesh_overlay_cache["flesh_side_[place_dir]"] + add_overlay(flesh_overlay_cache["flesh_side_[place_dir]"]) if(update_neighbors) for(var/direction in alldirs) diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index a47578f1029..e4b762d7333 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -16,7 +16,6 @@ update_icon() /turf/simulated/floor/water/update_icon() - overlays.Cut() ..() // To get the edges. icon_state = water_state var/image/floorbed_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = under_state) @@ -129,16 +128,16 @@ var/list/shoreline_icon_cache = list() // Water sprites are really annoying, so let BYOND sort it out. /turf/simulated/floor/water/shoreline/update_icon() underlays.Cut() - overlays.Cut() + cut_overlays() ..() // Get the underlay first. var/cache_string = "[initial(icon_state)]_[water_state]_[dir]" if(cache_string in shoreline_icon_cache) // Check to see if an icon already exists. - overlays += shoreline_icon_cache[cache_string] + add_overlay(shoreline_icon_cache[cache_string]) else // If not, make one, but only once. var/icon/shoreline_water = icon(src.icon, "shoreline_water", src.dir) var/icon/shoreline_subtract = icon(src.icon, "[initial(icon_state)]_subtract", src.dir) shoreline_water.Blend(shoreline_subtract,ICON_SUBTRACT) shoreline_icon_cache[cache_string] = shoreline_water - overlays += shoreline_icon_cache[cache_string] + add_overlay(shoreline_icon_cache[cache_string]) diff --git a/code/game/turfs/snow/snow.dm b/code/game/turfs/snow/snow.dm index b09275ca410..a8ccd5b63be 100644 --- a/code/game/turfs/snow/snow.dm +++ b/code/game/turfs/snow/snow.dm @@ -26,12 +26,12 @@ . = ..() /turf/snow/update_icon() - overlays.Cut() + cut_overlays() for(var/d in crossed_dirs) var/amt = crossed_dirs[d] for(var/i in 1 to amt) - overlays += icon(icon, "footprint[i]", text2num(d)) + add_overlay(image(icon, "footprint[i]", text2num(d))) /turf/snow/snow2 name = "snow" diff --git a/code/game/turfs/space/cracked_asteroid.dm b/code/game/turfs/space/cracked_asteroid.dm index b9f43af82e2..dae0d5a1296 100644 --- a/code/game/turfs/space/cracked_asteroid.dm +++ b/code/game/turfs/space/cracked_asteroid.dm @@ -10,7 +10,8 @@ /turf/space/cracked_asteroid/is_space() // So people don't start floating when standing on it. return FALSE -/turf/space/cracked_asteroid/New() - ..() - spawn(2 SECONDS) - overlays.Cut() \ No newline at end of file +// u wot m8? ~Leshana +// /turf/space/cracked_asteroid/New() +// ..() +// spawn(2 SECONDS) +// overlays.Cut() diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index 57dee24951e..28cebacb8ab 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -17,7 +17,7 @@ /turf/unsimulated/beach/water/New() ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1) + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1)) /turf/simulated/floor/beach name = "Beach" @@ -56,4 +56,4 @@ /turf/simulated/floor/beach/water/New() ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)) diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 09b525114b3..c7f8f275bfb 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -107,7 +107,7 @@ /turf/simulated/floor/holofloor/desert/New() ..() if(prob(10)) - overlays += "asteroid[rand(0,9)]" + add_overlay("asteroid[rand(0,9)]") /obj/structure/holostool name = "stool" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index bedb652f381..36e38532957 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -302,7 +302,7 @@ msg += attempt_vr(src,"examine_bellies",args) //VOREStation Code msg += attempt_vr(src,"examine_pickup_size",args) //VOREStation Code msg += attempt_vr(src,"examine_step_size",args) //VOREStation Code - msg += attempt_vr(src,"nif_examine",args) //VOREStation Code + msg += attempt_vr(src,"examine_nif",args) //VOREStation Code if(mSmallsize in mutations) msg += "[T.He] [T.is] small halfling!\n" diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index 0d9dd889f57..d976dc50b1b 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -130,23 +130,18 @@ return FALSE -/mob/living/carbon/human/proc/examine_pickup_size(mob/living/carbon/human/H) +/mob/living/carbon/human/proc/examine_pickup_size(mob/living/H) var/message = "" - if(isliving(src) && (H.get_effective_size() - src.get_effective_size()) >= 0.50) + if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.50) message = "They are small enough that you could easily pick them up!\n" return message - -/mob/living/carbon/human/proc/examine_step_size(mob/living/carbon/human/H) +/mob/living/carbon/human/proc/examine_step_size(mob/living/H) var/message = "" - if(isliving(src) && (H.get_effective_size() - src.get_effective_size()) >= 0.75) + if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.75) message = "They are small enough that you could easily trample them!\n" return message -/mob/living/carbon/human/proc/nif_examine(mob/living/carbon/human/H) - var/message = "" - if(!src.nif || src.conceal_nif || !src.nif_examine) //Do they have a nif, do they have the NIF concealed, and do they have a NIF examine message? - return "" //If so, no message. - else - message += "[src.nif_examine]\n" - return message +/mob/living/carbon/human/proc/examine_nif(mob/living/carbon/human/H) + if(nif && nif.examine_msg) //If you have one set, anyway. + return "[nif.examine_msg]\n" diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm index 8baa490800a..70ab7f577b5 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans_vr.dm @@ -9,6 +9,7 @@ mob_size = MOB_MEDIUM num_alternate_languages = 1 //Let's at least give them one appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR + trashcan = 1 //They have goopy bodies. They can just dissolve things within them. inherent_verbs = list( /mob/living/carbon/human/proc/shapeshifter_select_shape, /mob/living/carbon/human/proc/shapeshifter_select_colour, @@ -20,7 +21,8 @@ /mob/living/carbon/human/proc/succubus_drain, /mob/living/carbon/human/proc/succubus_drain_finalize, /mob/living/carbon/human/proc/succubus_drain_lethal, - /mob/living/carbon/human/proc/slime_feed + /mob/living/carbon/human/proc/slime_feed, + /mob/living/proc/eat_trash ) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 3797899d96f..56a35acc968 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -279,8 +279,9 @@ //primitive_form = "Monkey" //I dunno. Replace this in the future. + flags = NO_MINOR_CUT spawn_flags = SPECIES_CAN_JOIN - appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR | NO_MINOR_CUT + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR flesh_color = "#AFA59E" //Gray-ish. Not sure if this is really needed, but eh. base_color = "#333333" //Blackish-gray diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index f77637aa05b..3d404de6b37 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -51,6 +51,8 @@ var/global/list/robot_modules = list( if(R.radio) R.radio.recalculateChannels() + vr_add_sprites() //Vorestation Edit: For vorestation only sprites + R.set_module_sprites(sprites) R.choose_icon(R.module_sprites.len + 1, R.module_sprites) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 63227dba64d..75517b86c78 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -14,6 +14,7 @@ LANGUAGE_DAEMON = 0, LANGUAGE_ENOCHIAN = 0 ) + var/vr_sprites = list() /obj/item/weapon/robot_module/robot/clerical languages = list( @@ -47,6 +48,10 @@ /obj/item/weapon/robot_module/proc/vr_new() // Any Global modules, just add them before the return (This will also affect all the borgs in this file) return +/obj/item/weapon/robot_module/proc/vr_add_sprites() // Adds sprites from this file into list of avialible ones for global modules + sprites += vr_sprites + return + /obj/item/weapon/robot_module/robot/medical/surgeon/vr_new() //Surgeon Bot src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. . = ..() //Any Global vore modules will come from here @@ -55,6 +60,42 @@ src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. . = ..() //Any Global vore modules will come from here +/obj/item/weapon/robot_module/robot/medical/crisis //Allows Crisis module to use Handy sprite + vr_sprites = list( + "Handy" = "handy-med" + ) + +/obj/item/weapon/robot_module/robot/clerical/butler //VR Handy sprites + vr_sprites = list( + "Handy - Service" = "handy-service", + "Handy - Hydro" = "handy-hydro" + ) + +/obj/item/weapon/robot_module/robot/clerical/general //VR Handy sprites + vr_sprites = list( + "Handy" = "handy-clerk" + ) + +/obj/item/weapon/robot_module/robot/janitor //VR Handy sprites + vr_sprites = list( + "Handy" = "handy-janitor" + ) + +/obj/item/weapon/robot_module/robot/security/general //VR Handy sprites + vr_sprites = list( + "Handy" = "handy-sec" + ) + +/obj/item/weapon/robot_module/robot/miner //VR Handy sprites + vr_sprites = list( + "Handy" = "handy-miner" + ) + +/obj/item/weapon/robot_module/robot/standard //VR Handy sprites + vr_sprites = list( + "Handy" = "handy-standard" + ) + /obj/item/weapon/robot_module/robot/knine name = "k9 robot module" sprites = list( diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 6bf2f77c0dd..2dd54a1e063 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -6,6 +6,17 @@ var/pounce_cooldown_time = 40 var/leap_at var/dogborg = FALSE + var/original_icon = 'icons/mob/robots.dmi' + var/vr_icons = list( + "handy-hydro", + "handy-service", + "handy-clerk", + "handy-janitor", + "handy-miner", + "handy-standard", + "handy-sec" + ) //List of all used sprites that are in robots_vr.dmi + /mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs(1)) set name = "Robot Nom" @@ -17,6 +28,7 @@ return feed_grabbed_to_self(src,T) /mob/living/silicon/robot/updateicon() + vr_sprite_check() ..() if(dogborg == TRUE && stat == CONSCIOUS) if(sleeper_g == TRUE) @@ -70,3 +82,10 @@ cleaned_human << "[src] cleans your face!" return return + +/mob/living/silicon/robot/proc/vr_sprite_check() + if((icon_state in vr_icons) && (icon == 'icons/mob/robots.dmi')) + original_icon = icon + icon = 'icons/mob/robots_vr.dmi' + else if(!(icon_state in vr_icons)) + icon = original_icon \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 7a0503d13a8..e7b6968842c 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -27,7 +27,7 @@ name = "Hairmaw (Liquidfirefly)" icon = 'icons/mob/human_face_vr.dmi' icon_state = "maw_hair" - ckeys_allowed = list("Liquidfirefly") + ckeys_allowed = list("liquidfirefly") do_colouration = 0 citheronia_colorable diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index d52f16706be..ae44c584121 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -73,7 +73,7 @@ * Update icon and overlays of open space to be that of the turf below, plus any visible objects on that turf. */ /turf/simulated/open/update_icon() - overlays = list() // Edit - Overlays are being crashy when modified. + cut_overlays() // Edit - Overlays are being crashy when modified. update_icon_edge()// Add - Get grass into open spaces and whatnot. var/turf/below = GetBelow(src) if(below) @@ -86,12 +86,7 @@ bottom_turf.plane = src.plane bottom_turf.color = below.color underlays = list(bottom_turf) - // Hack workaround to byond crash bug - Include the magic overlay holder object. - overlays += below.overlays - // if(below.overlay_holder) - // overlays += (below.overlays + below.overlay_holder.overlays) - // else - // overlays += below.overlays + copy_overlays(below) // get objects (not mobs, they are handled by /obj/zshadow) var/list/o_img = list() @@ -104,16 +99,10 @@ temp2.overlays += O.overlays // TODO Is pixelx/y needed? o_img += temp2 - var/overlays_pre = overlays.len - overlays += o_img - var/overlays_post = overlays.len - if(overlays_post != (overlays_pre + o_img.len)) //Here we go! - world.log << "Corrupted openspace turf at [x],[y],[z] being replaced. Pre: [overlays_pre], Post: [overlays_post]" - new /turf/simulated/open(src) - return //Let's get out of here. + add_overlay(o_img) if(!below_is_open) - overlays += over_OS_darkness + add_overlay(over_OS_darkness) return 0 return PROCESS_KILL diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 614ce79d4c8..da4594d5575 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -32,7 +32,8 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable var/tmp/list/nifsofts[TOTAL_NIF_SOFTWARE] // All our nifsofts var/tmp/list/nifsofts_life = list() // Ones that want to be talked to on life() var/owner // Owner character name - + var/examine_msg //Message shown on examine. + var/tmp/vision_flags = 0 // Flags implants set for faster lookups var/tmp/health_flags = 0 var/tmp/combat_flags = 0 @@ -69,6 +70,12 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Put loaded data here if we loaded any save_data = islist(load_data) ? load_data.Copy() : list() + var/saved_examine_msg = save_data["examine_msg"] + + //If it's an empty string, they want it blank. If null, it's never been saved, give default. + if(isnull(saved_examine_msg)) + saved_examine_msg = "There's a certain spark to their eyes." + examine_msg = saved_examine_msg //If given a human on spawn (probably from persistence) if(ishuman(newloc)) @@ -110,6 +117,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable human = H human.nif = src stat = NIF_INSTALLING + H.verbs |= /mob/living/carbon/human/proc/set_nif_examine return TRUE return FALSE @@ -138,6 +146,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable SC.brainmobs = list() stat = NIF_PREINSTALL vis_update() + H.verbs |= /mob/living/carbon/human/proc/set_nif_examine H.nif = null human = null install_done = null @@ -572,3 +581,25 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable playsound(T,'sound/effects/slime_squish.ogg',50,1) else return ..() + +/mob/living/carbon/human/proc/set_nif_examine() + set name = "NIF Appearance" + set desc = "If your NIF alters your appearance in some way, describe it here." + set category = "OOC" + + if(!nif) + verbs -= /mob/living/carbon/human/proc/set_nif_examine + to_chat(src,"You don't have a NIF, not sure why this was here.") + return + + var/new_flavor = sanitize(input(src,"Describe how your NIF alters your appearance, like glowy eyes or metal plate on your head, etc. Be sensible. Clear this for no examine text. 128ch max.","Describe NIF", nif.examine_msg) as null|text, max_length = 128) + //They clicked cancel or meanwhile lost their NIF + if(!nif || isnull(new_flavor)) + return //No changes + //Sanitize or user cleaned it entirely + if(!new_flavor) + nif.examine_msg = "" + nif.save_data["examine_msg"] = "" + else + nif.examine_msg = new_flavor + nif.save_data["examine_msg"] = new_flavor diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 4bdb4eec0ae..4b7fabc1d1a 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -15,8 +15,6 @@ var/vore_taste = null // What the character tastes like var/no_vore = 0 // If the character/mob can vore. var/openpanel = 0 // Is the vore panel open? - var/conceal_nif = 0 // Do they wish to conceal their NIF from examine? - var/nif_examine = "There's a certain spark to their eyes" //The examine text of their NIF. This is the default placeholder. var/noisy = 0 // Toggle audible hunger. var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr. var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time. @@ -188,8 +186,6 @@ P.allowmobvore = src.allowmobvore P.belly_prefs = src.vore_organs P.vore_taste = src.vore_taste - P.nif_examine = src.nif_examine - P.conceal_nif = src.conceal_nif P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -209,8 +205,6 @@ digestable = P.digestable allowmobvore = P.allowmobvore vore_taste = P.vore_taste - nif_examine = P.nif_examine - conceal_nif = P.conceal_nif can_be_drop_prey = P.can_be_drop_prey can_be_drop_pred = P.can_be_drop_pred diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index a04d920084f..dcef2a45777 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -45,8 +45,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/allowmobvore = 1 var/list/belly_prefs = list() var/vore_taste - var/conceal_nif - var/nif_examine var/can_be_drop_prey var/can_be_drop_pred @@ -103,8 +101,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE S["allowmobvore"] >> allowmobvore S["belly_prefs"] >> belly_prefs S["vore_taste"] >> vore_taste - S["conceal_nif"] >> conceal_nif - S["nif_examine"] >> nif_examine S["can_be_drop_prey"] >> can_be_drop_prey S["can_be_drop_pred"] >> can_be_drop_pred @@ -128,8 +124,6 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE S["allowmobvore"] << allowmobvore S["belly_prefs"] << belly_prefs S["vore_taste"] << vore_taste - S["conceal_nif"] << conceal_nif - S["nif_examine"] << nif_examine S["can_be_drop_prey"] << can_be_drop_prey S["can_be_drop_pred"] << can_be_drop_pred diff --git a/icons/mob/human_face_vr.dmi b/icons/mob/human_face_vr.dmi index a99dc11c458..9ffa67f0d81 100644 Binary files a/icons/mob/human_face_vr.dmi and b/icons/mob/human_face_vr.dmi differ diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi new file mode 100644 index 00000000000..1640981e46f Binary files /dev/null and b/icons/mob/robots_vr.dmi differ diff --git a/icons/obj/radio_vr.dmi b/icons/obj/radio_vr.dmi index f26ff6c3f66..77d695cf23c 100644 Binary files a/icons/obj/radio_vr.dmi and b/icons/obj/radio_vr.dmi differ diff --git a/maps/tether/submaps/beach/_beach.dm b/maps/tether/submaps/beach/_beach.dm index 54f8e149f7e..e96c75641bc 100644 --- a/maps/tether/submaps/beach/_beach.dm +++ b/maps/tether/submaps/beach/_beach.dm @@ -147,7 +147,7 @@ /turf/simulated/floor/beach/coastwater/New() ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water","layer"=MOB_LAYER+0.1) + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water","layer"=MOB_LAYER+0.1)) // -- Areas -- // diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index 51329c8d0c5..d84b9b0036d 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -287,7 +287,7 @@ "aR" = ( /obj/machinery/door/blast/shutters{ dir = 2; - id = "PubPrep"; + id = "GateShut"; layer = 3.3; name = "Gateway Shutter" }, diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index b2740b35217..8fee6963965 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -6988,11 +6988,6 @@ pixel_y = 3 }, /obj/item/weapon/circuitboard/autolathe, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/item/weapon/circuitboard/scan_consolenew{ pixel_x = 6; pixel_y = -3 @@ -8725,10 +8720,6 @@ }, /obj/item/device/multitool, /obj/item/clothing/glasses/meson, -/obj/machinery/ai_status_display{ - pixel_x = 32; - pixel_y = 0 - }, /obj/machinery/light/small, /turf/simulated/floor/plating, /area/storage/tech) @@ -8745,6 +8736,10 @@ /obj/item/device/t_scanner, /obj/item/clothing/glasses/meson, /obj/item/device/multitool, +/obj/machinery/ai_status_display{ + pixel_x = 0; + pixel_y = -32 + }, /turf/simulated/floor/plating, /area/storage/tech) "oI" = ( diff --git a/vorestation.dme b/vorestation.dme index 8e67a77faaf..2ed7d60c9b4 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -199,7 +199,6 @@ #include "code\controllers\subsystems\airflow.dm" #include "code\controllers\subsystems\atoms.dm" #include "code\controllers\subsystems\bellies_vr.dm" -#include "code\controllers\subsystems\floor_decals.dm" #include "code\controllers\subsystems\garbage.dm" #include "code\controllers\subsystems\lighting.dm" #include "code\controllers\subsystems\machines.dm" @@ -1214,7 +1213,6 @@ #include "code\game\turfs\flooring\flooring_premade.dm" #include "code\game\turfs\flooring\flooring_vr.dm" #include "code\game\turfs\flooring\shuttle_vr.dm" -#include "code\game\turfs\flooring\turf_overlay_holder.dm" #include "code\game\turfs\initialization\init.dm" #include "code\game\turfs\initialization\maintenance.dm" #include "code\game\turfs\simulated\floor.dm" @@ -2808,6 +2806,9 @@ #include "maps\southern_cross\items\clothing\sc_suit.dm" #include "maps\southern_cross\items\clothing\sc_under.dm" #include "maps\southern_cross\job\outfits.dm" +#include "maps\southern_cross\loadout\loadout_head.dm" +#include "maps\southern_cross\loadout\loadout_suit.dm" +#include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\structures\closets\misc.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm"