From 878e5b71d58f940acd8f2033cb38aab908e9ee86 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Sun, 25 Feb 2018 00:11:23 +0000 Subject: [PATCH 01/23] Fixes vasilissan flags --- .../living/carbon/human/species/station/station_special_vr.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 9f74592b8e..cdfebdbd04 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 From 08291c5b6b67250a9e66eff2b7f61687488b4ac6 Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Sat, 24 Feb 2018 21:47:04 -0500 Subject: [PATCH 02/23] FIXES GAZER BEING DUMB YET AGAIN ***EVERY TIME IT'S SOMETHING*** --- code/modules/mob/new_player/sprite_accessories_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 7a0503d13a..e7b6968842 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 From 1ccf40092b8f5375a56eae4788aa3db594f6c63c Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Sat, 24 Feb 2018 22:43:50 -0500 Subject: [PATCH 03/23] SORRY ABOUT THE SECOND COMMIT, BUT IT TURNS OUT GAZER IS **DOUBLE DUMB** --- icons/mob/human_face_vr.dmi | Bin 32127 -> 32124 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_face_vr.dmi b/icons/mob/human_face_vr.dmi index a99dc11c458c4d43a49c9deb12bf2aedef37004c..9ffa67f0d81f609d52d19cc1a3df611667b75ae2 100644 GIT binary patch delta 525 zcmV+o0`mR;`T_j<0gxnr=6Y0EbVOxyV{&P5bZKvH004NLwU*Cr+b|4=&+$_T?Rmqt z7Q5v#q!@B&UqPU3+F~qI4kg7+pS}kJOS(ft4cN^FzMuYllquhvUr)dHFJ||=Z%!zQ zBAcyw{Q9lgEYxLhw&vkSv++oS&+ALdkkM?-9Y@ByX48=*vo+s;n@uk;;rjdsN+^S! z0}$JEfgeACC+w(=f?7VqjDnpO?}6l;fr26cod*F8$dpyw97Bi-&|wG~1FmSiwna4C z^{|Wz>;S`{@;$-RAk7*XM>`8(jzVyIbXOsN!`0YuH9A~{4_7C|)f#Cp zMl?6mht;S9s~0tXEQqRm^50f-v7?Aw^q2|KSa*K)iPeyvKNdv(p9{K3Qe|4o9wjn? z^+2jp|CMMpe+qG;11Tr)Kw|Skto)stV7amOd-L?NGrQ+~^A6u(fA)Pl4O{>KAOJ~3 PK~#90?A`gZBLZA|po02x delta 525 zcmV+o0`mR*`T_s?0gxnr>3URHbVOxyV{&P5bZKvH004NLwU*0n+b|GC*Vb1M$+|__ z2Hkm6I4HbGet{TDBXKNhC=W?1&ewNgpmGW{9v0|M0?y^*3}5%=$J5XKi`hNzn-fZ+ z$YyIEKR+~^g}Us`)_nWgY&_E7^W`UH$Y{3ajw9n;v*}2Z*_tnZ&88Qa@bdi|N+^S! z0}$J^!jB)o6L!=_K`ozQM!`;t_ds&aKtU0J&VzskWXdXTjv+(^=r9D00ar9$+aj9j zdRRsUc7S0}`5xf_lZHc5H5U*`V|k)C5Y2k&&TynOJpT#K9M~K1S7faiP27d=%E~ z9}?>XRI8bI48+5yHijtR0_vKdBcC%+_^#*z&zNjN86ey~NCNO^@r<{deMOG8lXs{8 zM`+=au+y==a7NLw$AZW@G$ChVyshCCIoeqOa}qe7HIxuGUDq z8qwTL??$5zT)e39V?k8ilm9lF)s7;v>M;|fv2Ok96Bk2z{#X$Ce-3Dsq{_6EJxXK( z>w#3I{v*+9UJ7xd11UT3Kw|Sktb9&QuvicD*X?_6o?dol_q=a@0n_t;BsoQVmjD1D P07*naRCt`T9Rgo_w?F?g From a088e53e714d33626dfb4e7640836c8a60311b14 Mon Sep 17 00:00:00 2001 From: Leshana Date: Sun, 25 Feb 2018 00:58:10 -0500 Subject: [PATCH 04/23] Fix runtime on universal pipe adaptor update_icons --- code/ATMOSPHERICS/pipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 9f025138a1..86bfe96304 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() ..() From 37ad176a168dfb3271eb6d40fd860452ff2466b0 Mon Sep 17 00:00:00 2001 From: Leshana Date: Sun, 25 Feb 2018 00:59:26 -0500 Subject: [PATCH 05/23] Workaround for appearance_bro not initialized Unfortuantely BYOND's initialization order is strange, and the appearance_bro var is only half initialized when map starts to load, causing errors. We temporarily fix by moving it to be a global-scoped global. --- code/controllers/subsystems/overlays.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 6d7581e126..352102e175 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) From 07f89c26b7bd113e82b6bcb6fc17534d8404fb0b Mon Sep 17 00:00:00 2001 From: Leshana Date: Sun, 25 Feb 2018 01:00:15 -0500 Subject: [PATCH 06/23] Convert fire alarms to use add_overlay() A good first test. --- code/game/machinery/alarm.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 76eafc2a05..6a435ef388 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) From 00f8ae5cd8614d3ffcc3365b0d03fd1735a319da Mon Sep 17 00:00:00 2001 From: Leshana Date: Sun, 25 Feb 2018 02:02:57 -0500 Subject: [PATCH 07/23] Convert turfs to use add_overlays(), eliminating the turf_overlay_holder! - Converted as much as I could find about turf overlays to use add_overlay(). - This should be enough to stop BYOND from crashing, so we can eliminate the turf_overlay_holder hack. - This also lets us remove the anti-corruption hacks from walls and open space. - ZAS gas overlays can use priority overlays, so this also fixes the gas-goes-away-when-crowbarring-plating issue. - Stuff like that --- code/ZAS/Turf.dm | 4 +- code/_helpers/unsorted.dm | 9 +- code/controllers/subsystems/floor_decals.dm | 28 ------ code/game/turfs/flooring/flooring_decals.dm | 24 +++-- code/game/turfs/flooring/flooring_premade.dm | 9 +- .../turfs/flooring/turf_overlay_holder.dm | 95 ------------------- code/game/turfs/simulated.dm | 15 ++- code/game/turfs/simulated/floor.dm | 2 +- code/game/turfs/simulated/floor_icon.dm | 35 ++++--- code/game/turfs/simulated/floor_types.dm | 37 +++----- .../game/turfs/simulated/outdoors/outdoors.dm | 9 +- code/game/turfs/simulated/outdoors/snow.dm | 3 +- code/game/turfs/simulated/wall_icon.dm | 14 +-- code/game/turfs/simulated/wall_types.dm | 12 +-- code/game/turfs/simulated/wall_types_vr.dm | 4 +- code/game/turfs/simulated/water.dm | 7 +- code/game/turfs/snow/snow.dm | 4 +- code/game/turfs/space/cracked_asteroid.dm | 9 +- code/game/turfs/unsimulated/beach.dm | 4 +- code/modules/holodeck/HolodeckObjects.dm | 2 +- code/modules/multiz/turf.dm | 19 +--- maps/tether/submaps/beach/_beach.dm | 2 +- vorestation.dme | 2 - 23 files changed, 99 insertions(+), 250 deletions(-) delete mode 100644 code/controllers/subsystems/floor_decals.dm delete mode 100644 code/game/turfs/flooring/turf_overlay_holder.dm diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index a309cd3a08..f61d1cf4fc 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 724f5789d8..92ad017cd2 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 39e4515d0d..0000000000 --- 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/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 84a243e35f..ea9a7f77fb 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 abb5d7a1ba..0cdcc8b175 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 c12f727a0b..0000000000 --- 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 789ec20a17..e156588937 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 f906335819..9f3a8e67b0 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 940a170cdb..1faf198ced 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 07c686df99..3c4856cf00 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 13d983a9e1..cd358b7d5e 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 8e60c925e5..9926c4704a 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 2dac063723..b8a0980de4 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 d6eb1578b7..eae30c6cb4 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 90d389bf53..4d939c2004 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 a47578f102..e4b762d733 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 b09275ca41..a8ccd5b63b 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 b9f43af82e..dae0d5a129 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 57dee24951..28cebacb8a 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 09b525114b..c7f8f275bf 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/multiz/turf.dm b/code/modules/multiz/turf.dm index d52f16706b..ae44c58412 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/maps/tether/submaps/beach/_beach.dm b/maps/tether/submaps/beach/_beach.dm index 54f8e149f7..e96c75641b 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/vorestation.dme b/vorestation.dme index 95ed5cd4cc..8afb99c066 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -196,7 +196,6 @@ #include "code\controllers\subsystems\air.dm" #include "code\controllers\subsystems\airflow.dm" #include "code\controllers\subsystems\atoms.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" @@ -1211,7 +1210,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" From cccec497e3a1dcb52f168318e08305ab3167b772 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sun, 25 Feb 2018 12:02:11 -0500 Subject: [PATCH 08/23] Gives prometheans the trash eater trait. --- .../mob/living/carbon/human/species/station/prometheans_vr.dm | 1 + 1 file changed, 1 insertion(+) 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 8baa490800..c3fc9d7d9e 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, From 970dc7fd3cd2187d3b84ec409b0745eb334cf9f7 Mon Sep 17 00:00:00 2001 From: Heroman3003 Date: Mon, 26 Feb 2018 05:25:23 +1000 Subject: [PATCH 09/23] Added new Handy sprites and possibility for new ones --- .../silicon/robot/robot_modules/station.dm | 2 ++ .../silicon/robot/robot_modules/station_vr.dm | 26 ++++++++++++++++++ .../mob/living/silicon/robot/robot_vr.dm | 7 +++++ icons/mob/robots_vr.dmi | Bin 0 -> 3813 bytes 4 files changed, 35 insertions(+) create mode 100644 icons/mob/robots_vr.dmi 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 f77637aa05..3d404de6b3 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 63227dba64..4e9c61ed19 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 + src.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,27 @@ 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" = "vr-handy-service", + "Handy - Hydro" = "vr-handy-hydro" + ) + +/obj/item/weapon/robot_module/robot/clerical/general //VR Handy sprites + vr_sprites = list( + "Handy" = "vr-handy-clerk" + ) + +/obj/item/weapon/robot_module/robot/janitor //VR Handy sprites + vr_sprites = list( + "Handy" = "vr-handy-janitor" + ) + /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 6bf2f77c0d..b2167114c5 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -17,6 +17,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 +71,9 @@ cleaned_human << "[src] cleans your face!" return return + +/mob/living/silicon/robot/proc/vr_sprite_check() + if(findtext(src.icon_state, "vr-", 1, 4)) + src.icon = 'icons/mob/robots_vr.dmi' + else + src.icon = 'icons/mob/robots.dmi' \ No newline at end of file diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e50fa1d6862584ea557525fe7e3a7dee37b904ec GIT binary patch literal 3813 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 literal 0 HcmV?d00001 From 909907df801c20e7df8223fab7fca76b8fcc9ea9 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Sun, 25 Feb 2018 20:41:10 +0000 Subject: [PATCH 10/23] Enables pilot loadout options --- vorestation.dme | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vorestation.dme b/vorestation.dme index 95ed5cd4cc..a9b40a88e9 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2804,6 +2804,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" From 6407ded832ad940f418561c043db2a0e2af7ceed Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 26 Feb 2018 08:28:14 +1000 Subject: [PATCH 11/23] dog sprites won't disappear now --- code/modules/mob/living/silicon/robot/robot_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index b2167114c5..f3af4e5405 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -73,7 +73,7 @@ return /mob/living/silicon/robot/proc/vr_sprite_check() - if(findtext(src.icon_state, "vr-", 1, 4)) + if(findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots.dmi')) src.icon = 'icons/mob/robots_vr.dmi' - else + else if(src.icon == 'icons/mob/robots_vr.dmi') src.icon = 'icons/mob/robots.dmi' \ No newline at end of file From 22103c05e4d6727361332caef8e822248c406f3a Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 26 Feb 2018 11:20:32 +1000 Subject: [PATCH 12/23] fixed blinking of new sprites --- code/modules/mob/living/silicon/robot/robot_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index f3af4e5405..3603063b6f 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -75,5 +75,5 @@ /mob/living/silicon/robot/proc/vr_sprite_check() if(findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots.dmi')) src.icon = 'icons/mob/robots_vr.dmi' - else if(src.icon == 'icons/mob/robots_vr.dmi') + else if(!findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots_vr.dmi')) src.icon = 'icons/mob/robots.dmi' \ No newline at end of file From 5dd6e79421a1da75029e5be28a90e73159a3d05e Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 26 Feb 2018 11:26:11 +1000 Subject: [PATCH 13/23] fixed blinking of new sprites properly --- code/modules/mob/living/silicon/robot/robot_vr.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 3603063b6f..f1f1a3ce58 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -6,6 +6,7 @@ var/pounce_cooldown_time = 40 var/leap_at var/dogborg = FALSE + var/original_icon = 'icons/mob/robots.dmi' /mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs(1)) set name = "Robot Nom" @@ -74,6 +75,7 @@ /mob/living/silicon/robot/proc/vr_sprite_check() if(findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots.dmi')) + src.original_icon = src.icon src.icon = 'icons/mob/robots_vr.dmi' - else if(!findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots_vr.dmi')) - src.icon = 'icons/mob/robots.dmi' \ No newline at end of file + else if(!findtext(src.icon_state, "vr-", 1, 4)) + src.icon = src.original_icon \ No newline at end of file From 87ced91dc80964efd41dfd3c4f5506f3ce97df11 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Mon, 26 Feb 2018 11:36:25 +1000 Subject: [PATCH 14/23] missing overlays added to robots_vr --- icons/mob/robots_vr.dmi | Bin 3813 -> 17936 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi index e50fa1d6862584ea557525fe7e3a7dee37b904ec..2e2ec21b8129fd1b0fd0a300d808d590c02396f8 100644 GIT binary patch literal 17936 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 literal 3813 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 From d077d0239c382d8d09310930382639ba517e89d1 Mon Sep 17 00:00:00 2001 From: Heroman3003 Date: Mon, 26 Feb 2018 14:33:12 +1000 Subject: [PATCH 15/23] Added mining, security and standard Handies (for full set) --- .../silicon/robot/robot_modules/station_vr.dm | 15 +++++++++++++++ icons/mob/robots_vr.dmi | Bin 17936 -> 26953 bytes 2 files changed, 15 insertions(+) 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 4e9c61ed19..19d058ce6b 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 @@ -81,6 +81,21 @@ "Handy" = "vr-handy-janitor" ) +/obj/item/weapon/robot_module/robot/security/general //VR Handy sprites + vr_sprites = list( + "Handy" = "vr-handy-sec" + ) + +/obj/item/weapon/robot_module/robot/miner //VR Handy sprites + vr_sprites = list( + "Handy" = "vr-handy-miner" + ) + +/obj/item/weapon/robot_module/robot/standard //VR Handy sprites + vr_sprites = list( + "Handy" = "vr-handy-standard" + ) + /obj/item/weapon/robot_module/robot/knine name = "k9 robot module" sprites = list( diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi index 2e2ec21b8129fd1b0fd0a300d808d590c02396f8..fb79753914435d6b58f422374143115fa4d22471 100644 GIT binary patch literal 26953 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⃥Pl{6v#JD!Z1oT*DiSV}u z!Hf8Gp>zjmPg#6@$snH~{_W-R|KczZ&s14W*KN!($Ug~eA;y(aJ@TNW6Q1oQgrc}s z%PCx&i$1>25mJs-Wg6V~7*w;>I-}?)a%&NL5C%$__5jOd-%NLiD6S9Ok^?+}ONMA`3?PgmCeuqNyE zJH(M(Ts1@8?{rRfs8Em1xQ`g$9BTQHP-O%ha{1$q!Vu8+oi4j1XdO?kQ$wnZH~!V8 zPSx~z&tc}VVhNN1s;zK!!tDSQy&mOPxWxXanf}j>;9rSU|3+(RBuM_3u{Ws)?cvm4 z#BQn)eRV6)g?k(1NaxVnv^Lz6qwqDsLvB_{{!OQB2aT|BhM?uvAl-rQ!cClklx7tR z`B%kfiW(NmB068S zQF5>G^opply^Sr`PHS86DH3OX(eXCION_LjT@EaeMtdgz{|ER$81c-!Ut2%OeD^|J7R*aoWr0kW(86ONclad`H7Y~}iY*mnMf zb;P2N1jTB+VPRqV$nzU-%0Shksx)|t14ONO`rS+x4qoL literal 17936 zcmcJ%2UJsCxA(h4SDK=L)F6oTB3)Wg1Zjdu2c-z1NJjw$LLwF{2&hyMq97d%9R&#; zlp?)Gx*!mc-a`9U9-rqu=e_4U-?;ald&kgWvdvz5uDRO(x8_{?=~ctaj7K?-LJ-8L zt8?iZ1i|dVUky4Ma3!ogBMAJ{5oBt4=MwU^qo1449XD?;2)g?=zq9IAz4WO^6IK<^ z9>^*j-Ra5^R65E0U5$?Dp57E&C*&|yxzzbB`q-`bkE{~?>iqEHcah*T*E1I8S z-C3;h)b$l8$Q|-LaE>+Vk%#^p3JC)obXlG;YSrFa!jWqFi=Y z91sPo3KhCL-+U{Q;U9c@2}fvx@&~MsW}LeeczHf(vX#F(>c#srwhb)}nzOS!&(F5p z`dmNrgMe%QO#LzG0q(H8Ztgm;V25_QX~8*O(D^C^@j<$mE|}hZyI6(3%565fbm;YD zhV#`03d%0bB|6=^{Jt+71nT=v9~s)W6?eqH35F|H42jJbPydcHq8rLIx7zsF(PYVb zyyY5piS(fN>|^iWUj0(KdV4vSoY!T>Q)f7xbZerWPM@Qqlc6b>zK=&UWd6Eiv}MrI zS$|<>EhjZ0@wfWY?TU_HBUtr)eZSAw`RKyZ zUojHSw)2d}D(^Yki!|rn^f9@NCenGLhYu#&5MpmHVt*Wnt#57BdzI6+)rTH#{j#Hg zLT*nioeR9_Evh{FrI)J-|9N?9+m+~g&uD>m@;!7ozbEU6~>b?jU90XXe-*%VbG+$3~;_2;G? z3_4gGJ81W@&bvs!mZ8rO#!6t62eH@f?BLS*+1VoE6NybOJedVDTTR*Bulj#UB(UV$ z9g+sR57(Lxk3hoW;+ITJPNamA+=iwD(!S0;BrJyYSUr6BkO~+D3lU3 z@1{zcO*_TGaokw#B2*-gHA}+oAd(E{?6s>@*eM&I0@D#D!YKUQdHl zCmXhjU-YyC&2b_Q)RiEWwcQ0G4Ld<~fi8?8fsgLuF{hgU zP2c@5o&V1*{He4>;MONMdw$DT7=@`U+fT))iq-3(f;c%>svOT!^Ucu?jJG;f3nHdo zBStdSG1#pl?yJmIetEr72-c`Vu4exJLt9QC@jEq^15vS1#0SGv!eP5qpO%Ck7cIn~ zE=WClxh`YG{pb60$=Ey{a)9w*%D+FE!G zzU)oe&s^7sEu%4jxn39QTFivjWrrZS=jK@N-MqueQq!@l{js>VYjRCq-1V`69y;^9 zG~-LJ^SoZW5x*y^I6gdAMe(#KoLz<`sv^ zMuYH{b0r}>LDnCyF+@?1=l^>CvR5tdD1>LkNI{kb*6AH-j5Xip-Mi-930|dm9`>MoXWc&Qnf=n)zH{Nhs+D^vFodxj21W21LDg%WVm(JuWfI#|;w<}a zZZ#({w}c@VFX+vqfdPTxMRN-;tSr=CM|3BA zFVmMJFhk_umq6p|xl2=N*VrLpV%U`=23lT^n88k3TzfnsNcFBJCZD0s=X4Fgi4p>O`f) zTLty@VAqNm>`%?o%-CD{KeSI*uisomjz7kAq4%u)gY_u_pPA1S6AM6#maBX?s2I(+EFD4lWXSUqPFZ>M;fw^Tj2 z1Gb3dL0FT9W$sGYCNXOe%HxH^xMJp5Fne&s4@Y^j3qO83bKO^04{mRn?E6Nmve<=? z($~|1?}+^Qsv_K>dcqz1&E3AbcqcWxdR?D(hOp?P#O>E#6=&_mcX`yZ9YL>RO8Ez9CTw{C@GXknq++`Y=Dy z_2MzHhLB30RzE)oYObs(0OcF9$!lrBG2LT^HB&@Nw8hr_Y!3uv2B&)G5$t*0^4nE& z{^h`Zw-(aZi@gDlHLafN`0cdV#=U+pb>l{hixC%0L>L4}8 zynvfP*B}bet?FwheC$KxdD=fd(1;5fHZ2`<-M91A6+VUMYUMt^d{@;Ww(@(GF~>}< zQLtV47|j|~jKa=w`}XSwRVVc!3I{3gh7c$rRoMJx$zEVLtWw;+oht} z5AUE45S6nz^rnwCM1_Prf8G^8?p~a=Nz6YK8+j#qwrxIsJwG0HX#AsMiVNwvzpV@% ztg+}WZ>))p;D^vDI}H7}s*!@lplR)#4iW?*371ph{mDLS*Sw>Ru*7EaBCGCwAIT9n z#3U>O-9y#HznrJGFIg886?Ka9U&1e|IAB#$s>cr~wll)S#M)Evp9LeX;W zsK%o7Gh@h=_+GFZiZHc1FPeA>dYoowZ2Z0?X~{bx+x2i49&+YzqRj+Wy>?k$n_!Fk z;s5)E4C1j`km~85BwEbn4>!+yy-$5DGq5KZdTIocH!Uojc1?apSf>@jKBC$H0;=wI?HYApUXawJy0Q zt}EAIpM{2R_>D8t)+*OHt<$o}!=P6gI#@*o<3+pb%>XwwPRezg>x;*!`Rr(mUDi>p ziaL(@_hFFBGE#BTRsi1hx#+=q<18FBm-rDVMCj81l4B|FbwzmL-%NY2;xnSRa_SWx(7G`Vv&uYTF9K|;sL^^510xY$$}n*-?-ZA^iu>P51h&JI4MDStqy+lhoP zL`rwF=i;=2*P4~Lv_E5Ht5@@F1fgYHWPS7i6C^xVVI~UtIT$s1hkfp}#QGjBga_q8 z-jwO3R%*>Vw0x+e8r|%;4$||{Nb6k2?Opgd5nJUFL^1rH2TlF1*Vu;nILU!yZtnKJ zCAM6{8e7hn6WGvri#Ec4-;zP2d+Rk=Z-RICj=LoH7Ej8qr_5bI`j;|5&&|iA3J=Qn zy>Y}*s`SNrr~uSme5iB&NhfnF=C#Xyy(!HJkyI6E&IEdeS3=cnv$Rk$E70_w7HmD8 z?sWbGSi|$OTAK=A2$3gdR{xNITv6_nBHKuJ9BV{QUd1ZbRh zBVFWP;9(iDQBQ7}7QIWrmh0x`AGvGI%*?dkUeeY?TXRVB;s3s~t3#=*dznhQ$IVbR z>+OT_IklcNhI=bLI~9*_RnqOdxzyAq%#pi><2lf~je?xDI|;Kpw~t#}4(X26x9reC zvsNn{IXR+&p|c*!b4Fs6Y$GroEJgHs;~X)z)!t%)ityBh+a~+1T~>7?b(+J+xethZ z2Friko@r-hCQ=x9Z1rgk&@u)*7l4&|3w~d9j=lf4pD}M6cC#^zy&!v`T?MpdMtDa{ zxmT=AWPZdaCX;-4fBoGIih##p+VWrL&;hY5OO(eSSWdhgkfVd01XjVNHpwJ#QBeW?ck2 z!vDs=os2FC-wbkJ`v5gqc)O466(Ag~-^3O?=1W)s z3ac@M7)s}wXrz(9JEJh1O1_*9MwkszhA2FRGl1x}Jultr}H~1At zoIi&aC_nW=A4H+k-vk;@dO$VULsO1-@FSo$uTFUALy*9zA@`8EaDMQ6-M<7T6@f*E zqx`hu$m2*`Daq0$vKVxD8(A%}@*-hbyJKJ~$xg3jsphAQ!%>YXV9=q#(VB0wln0(Qr2DL( zfhIS0$_`Cxqs03ZZyo-awmJFY#~rSN{ykppFUimz>Q$eoj3@G-$K#Maoe8R0XBYh5 z1nTj0(wH53=MZpw6}=~RXFUi8#Sd=@6KSBMBs=PNOXv)vI=3t4^t(W^QEV^7uFQqi z#A|WZcC@yD@ndS6bRv(*Q87|Pn@1#%^2}hI@P!U#zUucjW2htfOZbP?^3~zM1>~~Z zZs4{4mal@}&D#d_P-)65B=mtvdUrtX#*1M@;0~MF=7Lkq!UD||?OTd{5n zh{J2mV4l$f;}@u2P0OL#`?Or?M(lD_3^vP4l8%Q))g*OwQGeL7OOx}c2RFk}4f&Ip zF8UgsjiIvfC`?}Wz=OX8uu*};{U1H4-QBsGUKNbDlloedXO16eDc6J>P6;oQ6zrWtLox_GezCXSY?jU}OpLx{pe~r+ z7UNwX9VK5Dl~vev9<#p+(OiU`N+vJdyVYp}?umHbFZi-WkIGBM`w$=UM@BaV<^z^j zyS0TAy4p{jq`(pBA@;XMmf9*2Rtf13uniuezak^ntkYZqBjBqTb{Xv)*YAe;J?T() zFTVDeRj956xorJKVb=plzd?MJs>qe2H5$TD+6gd5T*mVI2kMBjp8Wv|5^ok=-h5#j zR}q~GY#UZrvfAFBBGxqRPp7aU!*Pp&&ci(YX2&4uTpew);=9u0jMunpp_b6qk6+a` z>H*^P(`3=+HMxG+jO1AAJb73l1+L#3OB?3HAZ`~=K8#K|K(Ox7q1{7`(m5DW=Crn0 z@1^ujHJE?#HEbys*%tz>4uiYEZbzTl@jahsWlTX$lm-VMEQC=3so}LoQIGKgTbU51 zqa)N~@KsOxCLP{9ld)u9ypZkXULAH+bNT!Cs2-q-rLslFOVslTzKtk zTLtMe^xMs^fO=r%5m-ZRlst1?f(i6_gB}}kSH(9Q6?HS9tJ5X#RJ`w6T_2Fz8SD}$ zPmV8axOVliFFx|-5k~Xe*L6x3OZlgm!u1z}eF*kd^HK2Mg>S&5C}`Addslf=6oql{ zZ*pVHUn%zNn0G^txm@-GmHP3;r}XBk>O!Cb)@r{%k{yWdgfZmhVj^F3dP;^#qlLl53u|sSP_ts+;>$|vSwv7^r6)fK56=*qhs&KZ8;$B&xpof$}puqBA+Ex zq->Mk2tT@($j6Mmr)7iQGnEIT-ZJhrC8RXk_lQ6u9*^Jc$(p6SN=nLfOl9_29B@uC zClWuRub>?Xqj2^|=HJA?;HUBkq}f%gEjyE!JRx3l*fc!Us(lr^iJy3;0*d(~d|QL)gEcl5y{$*TSF3;AwlYHB`ezGKM{gT+`+A$vJ2 z2agvQqD?sn1s>8i8;i%3rs4&BTo7i9iq?lIkyXM^-5X`X1s140>WTX;O1rgiZ0}-u zt!jA$#Xwq{{6Hf;*{cgH6w1THE3FI zrMl95MvB0xmSQie8FEQ9Zi;Q^w-OgZjeg|g=dYp_4+nlej-F{o+x;39HieV<<0L!g zb(hPKI$^V`|JMm=eD%4E)cwEe`QwmD)xVMX8;56bm7n65QK>b@K|dq?uN%xz)Z4ar z@8reGGh01f=ho%>1w5}Dv2FEY1j0Uk5*?WDx7{JrWnX^`Ggi|?!_?B}opNzsLeh!# z#>H~?k00-?K5qWVIFtFbH_-gY31LzOFV($0QirQU z7Zp`2ouqPhDoyby{4(a9wvzkY|B@47|=;J+W zb@Nj(?@GW;tqvQd{T03M=*`-Z*`!}DU+>6_(GGPccF7t$!WzTlZx z@&36~&}gp5sa2AwHTYsG9a6q(?Wb|*R|0-i)J55+H46_Klw3(10JCU|!_zo&2P4ax zVgj~)E^6zWrmae7*+jUH?eH)9&~0UmUQ}>GM9NMyFs_Cj1BR8p`0U2_NgPl<0k*^8 ztZLrb6w=@Nqk`!dz&+u|y@e{6&2#5l*TY7RYXhH_x-QiamV>H0LNvFHbgzrCc<9F* zPfMo@?;+UU7aXbRA^)4O+YWG4;b{xe1FM7n?8g^_bE<`L}$Q4x1abiF-!fdMI)T2x^zDJEvoeXI|SIeY*)w!E+St>@FP+y0a`_MB46 zsH|Fxu2iV9-O$w;F>Cm-F;Gq!xtyqjXDQ_jMv!bWX(dGS&_UC7Vmqn@1G-t5x=wgC z=LLE()$Cx)&-^eb$UNk6PLAGF#2vYdC85I3LI2@Tgqp0t>}~PwzaR-LYSST95O?b* zp{&C!21}fM6M4_}RhrfX6<@MxtTY?tpN=hDiswz;&zAE)LTDx9pu^?(`3fML)}~_Kb{K}wg*Emqv;6(I3n^|34WGIgH*_l`G7#J zgX@9;Jv3N4VMT|8Wq82(4^|Y0b@^GX+JGP}jpJXCNn*kCq%$+T^>2_Gq|%yy{u}xL z5B{rTz?YLhNIZ4d3fR33nCnQHpuoE#4GJWT z4aXA}A?T{r4T<8F%d*U@r}yX5JGMSMa%@4%FT`BR5iS+Xaj~(j%`(5A&c1y6LCSnA zOR{Sf-m~=ZIqM~I<@3pv&qc6C!)Py%yH6qifsMH&C$XHIEA`(|tq)#|$ z|L7t%k|z(DVZXY3K06`X!wz%~)wqi0fe|&Lh`eJC#ILcOUytWD(Dp4Gp~DqgJr7;3 z(Vp2K=L|_)D7RzSM^45+&q3Pi2Av_3oMrZyN&v;&ioV1Ev$@d9BKnH#*4~l*V9IsP z_wF?+fxn|+?}iSfpuG+=Bu#^ix<)c}AOM%`(Ob~=QmfP~niX2!o?<=jNfmcbX1_ns z?&3-oZj`b3c@0+@E2(yvSp&HqqDE$t=|FqGL}}`GzR3;cV-=8Gx8#=s4yZH6`nk~P zU4x*__v}b?<@;_iaP^z-fPh-4NKmuk_|=v*a&7Z^w~tTLF1YartnTkT+p*3jTXPuuAvm_oCf~dFfRU20^8EckCvYjWyffYO)N@>x z(!BaxnVIz-qiQ4q!sIYjIkwwB-qP!?ie^Jox~(X>>gAh7Tp-Xu%Ss0j_#QXEwmjqV z2+x)e*n%8vup{(m^jfF$;?;e8QzM%$>ssGo+y+Z;wnM-z+-RMW{sp8iMu`3lkN&Xdh5q zZ8u=jQ2QzMO9X56xY5N zr;lR-ZZCAOuXK~BZ|xjZDH)tV$iheMx0m*kJUJF7hRq|wS4jrD$(x~la$*~$09WSA zwxwx2ltjGq6EUckaX;1vR3!t$JY zw!qb+8a&RoAevlCuHc`gJFBR%q}Yy-eaMdOd&|=l{8D8f$@(s;I-vNLwH%>C?w&+V zplQ=mLMcl63TdZidLnvCl%e+CsiAP&m{JvvfJslE zJ#GaCk7mB_)TgRhiK9B$Ds{{(di&vcXm z&H`wbXjig66&VY*UjO6*fJRMJVwSZtH_9ECy}D^91?}7`Y1P&QL*g=dWNV6ah=tE} zG1Wx$K7uVKKZAZ&CmpFdFVa=TX^6h8>d&ork5_=6WQyMNiRx2bX>#liU8oCPxJH8N z=Xp}B)>*>9jrJRIgsr+34A}h%IZJ78Wylm6=np%ARomZRzO$ee=K1YIN;3yTc>VpI z8~IsFbZun_#BSlWX4g3(ut%b7t;!Q@%rfu{$waHlYh=34(IW`mdvi56qRRS(6#bAO zWeqC3TD#*>af@74Tc9W%8z%3&x!a1>AZlA4%Ib$ff@^P%?!Tl)0q;11heP9cE!ZVf znK_;q?!tukJr8$oRG{od3Cy#&!~H?lW9;vrP=<8aj{xBnvQ;_MB-QZtD+LUo3l(n^ zEr_**%n->SL#46I#hVb>wN$$f8++``mD~~5?p*!4YoImk9!jIiHV2+4=#DA=c@4GIw+zM6r5I_?D7C{G8&8cc-b%}eW9LgG+C6=KltSICmywf##i9m zh6z_+b{G1(o>*Im|K9vFbm3VJzJ8)+;frrNlPb6+ZKE1qDXrqo%@i(>CzIaL9PG5H zbSsP2s#uJ2@V$cU*w~&u_g}OY8Z9PjX1?_MS8TAnQ*ED#-JJ)4qA2`fZJsaUS^i>nfKcrOGCA^9<|9`CQOFWfH4C% zxE(P1sYr62ggO4Zk|xG?Gl?nG<g#$lDJhq7eZTGr>iu%ar^36$CpYyCSt^m&9rhz29!lPb*9gmQ;V*y=A2mk(!S+Rx9~AhJNlqF^PBA z=obr=A&K|65Y&fBArwtpicO{^hvZt@Z1FH|CnM(14Q~QIETcWhtN3ow@`;fa9U?PJ zV^1UVcf{q#?WN1ZZ&(1#5#O+TD=iFP549F2nm|nfP{k5w^v-LY2UEW;endm3?t0-> ziMV?ZMhxMh8EhgH$1ZuH#ar@m?@aY;yydF)`dV7mbzfP6?( zv8&g2Uu+N2sQ9?Tf8bRvu6+F#lGs5p^uRMBMURb0+OxV|Ec80%?$kNma>_mbBLxb} zXJ6R!fMv3SD=BLeXBS*q0w67p9MM7Fz|)iAEV_xN>>B{gx*P#!`+E~CC5rxaPh;M- zs_%9_Up)~{iCf@9og)=P22LRXP)!B9GIH#jLglRs(~VEm)O0%9AZSoB_&8Se82}TF zHTB-8UunDcLIwH9FdYSd?TDe%^cpKd#REY?K_IW;OG`GU?T^wNU)+lw%6@=Z@wK@3J7K5WbEUz-I_&UR0+&>u$uVOn<;a~ ztlx_ep?fDVH?LU>M40Vc{>FTOKiT{(wsnJYb>YiO^bztnJ!w0bx1g~;TpPgu0im{T zMx#2p$e^T4wcVr}h5YdV;6qm4$2gdM*Zi)a`Tg)WY;&WJ^V<1ge3kp>xdCeO1P$^o zN58ckaA^P%5VawfkuOiYdZeb9x$0CjM4oS15Tk8(tawT{`1Z30m`{aC%RB;mW0VHM ze@A|RHgYOQguiY@KLB_MXvt*8VQ37{lAv#Xkk;!1s=`4Sh{l-Q%KyD4_BPz)Or>Iv zG%O3{e|4+EbgP+Bjzkpu6rXsWpz)Uhrsl)OFn#p;nvwdDZqO&sMb{Jo=69{pD! zU~dc+W|3}iBupG;uPOXmS3_qk2o(#L0`Ps&X`^FvT1aQGk2lI8E; z&^&iSg>PZxkz|sK`-`xij+8dS zpNT1+emMBR0tBSK>+kZ1ay$J~LM;mvz;V4meb8Ga?d`aY|4-Pd7qYJp*1MSRN}#N) zKDRLy1G_0}0&j|dF3}V2jYLkb7Dfc~2MGs>6XO8^1$bxtR{BZq5UbK5`xf@~X(`M{x^_>Q5fL?~pc z#s7KW<5=j_qK*zaXpUCi{^tDCQYIbJ%sh+O5uLob*Dxc;o9`)KsUL6sJ3T2+Wdg7i z9g&Wh|CJ#v{Hf(WuVgnig>=co#MJZy;qbcTK+Jk|;sY`vCFnFPE}Qu2;tf)rL_k zp$}A{@r9vcV_dyK&w%{63w*U27FXr4NuFT#o2DL6hkylCC$f?ksM{`}%o5gguE&_mn-W@3=L&z+T%KMnwq$kZQv=4iNWJ#)DcC6mxv~myi zx&?B|gqW{;XM^k_l>c&hsYt1LcC(n>XznnLwzr-1bK_QEDZmyhZuoO#?l< z0nD`2uN_8b{`zibJ8R2vpxiZq-@xQYUHL9K){RY;GUX>oCDnIY*{-Vue!RwPJ9cME?(O34QI}o(Mc&>SiLqsL+x7lsRR^V**_R^7a8=Tj2*qfzB&u?^v`hMf2Ld#njN#P9U)**pC_#=6sq8iD#M457CHm9YHP**Pb8{~p~i>6tkHGr z&gVPju%4(p;l6w*EF`x-JRMCKWC=jr{y#9czW6s?Hz{w0o)N(U#f5x zT(paFEgf5yk=tYv^ITqo{oWnT3+c!AC-Kl+z8N~Rf%+5b*)2^n>q#97&BzW7#(7&l zbSv_&&CohJX0=W+KG|4fQSGk6SDja8AhvGgACS`)@9+rEJ3%w=_1+cM|sUSC&2 ztm6zj2Ve`KDsBHCajsPOsRRIW<=eSozI0cVFS@ zd(+ZtoTP~JA}li3*l9`v>uUncMnD&jt94)b3qvlp9XUKsB?=JmDah6FL_p#?hURXt zn%73^FK7>TgaDkL1M#!6m^eLPwV(o9d&$mf2Q$;8sY~W+A`U(dSAPl?+kcOUvFtzj zNZHT%-HG{L{WRD(IAztDNy|@VQ2C#%zELY)x2VGld2)v?@Kvz#0)@{|A2QmacmT?Sy!zz7(Ves3}X%T-b6Vnd~ z?`*kJ-`fR_Ly+*|&!}U0y)Ivioli?hF#g&lnJyx+RwH$N0J?sVLAUU=9?s1n@8Qgn9(qZJ;^}7zTL6UFH zkQj!|;F6-N867fTKtPEco&o`*zd}`mQ8$eH0zptLS@C18!&NKJGwNXW6&H9KOg0n?O?;560#szhaM7Fjvz+jdYgUr{xIG2V0139j}o`9NBmfdV{jRXKC(tT&d8pwY9Yen}|@A5fIA$&*3rtE-dxz4Lee@Eyqzj^jJ=z;0ifo&79{R)Jh-!t}6S4;RmW4e=X5i zCGNX!taH!1K=I}`kUpV4R~6r-RPZok-lF8xn_&;*CpfqPBCbFMwv^|J1(`(mnYX&kCwCCUR0!j z4(`t4EP)V%=)Tqs${rsqtq7V*`ygdlU0P~3W5k~f=VnN}4>j>D_uF_gl3fWhzL>M5 z(&^(K6(d*I*3t{_Kk(Z~%JjMHaC&lbQd(X8qfMY~$JEMKrf|)zSuwT^%9O{>>)V$O z8Xp1y`Ki1nl8C#a9kMDMWN2Gw_h$Fp@C<>n06FyDOKB?V1EQ3a3Y03yrP~XifMN(P z8!c|0p0O&!!#*YXYJ9LyX$8k1iU11UsLS}djHKm8b~^|v87};YOOkc>zVAOK|L*9) ze@SC|ldKq7N1qg1yeLkb^c|Du<4SH200hy|(GkC`iPMhPKSwQ*pP#>)@`m$sSpdQi z{l$oPbr@v+AsWK3TsZ}YgVesZZ6rwJY&#%QBgpn)KyMX6Ana~tqy@5}jjp`db1*p( zSyn2bCQAv~S1xG1%7<^U4X%Kz%EQB*2Rpx7WI(U(x~;_hDkUI~n9DGT8o;!L*(Kd~ zdw|73%p#15~T#Pybl$bx90QAY0Ehk5>n_>vv-?)7e=^_ zl~{2@y%M8GeodVGc27xg{Iom>Ct#23!!$^tU>G7Z@~d76m{I_lb(RkX@(5TEd*=!^ zt6QPv*QMq2{Q{stAM-_otv*%crI)@RBOV^}YC0MKiuTB4@*q&-KvQXfk1eX=ySD&a z0xYab)kVLVZN3RbKUa4xQDc9kiqk-IySg21bR<5G1E+Uv{X$@%#GD9&eDp_G3s|Bpdn`D7%*@go zM(bKZ4u>L)N+lvcCnpB%88~-}OP&HPk6@$3tnX9lLxV`4TGDt|S-`YtgvwF+msl*k zpCEkG7%^`6si?>=k!NO*j7&lS0FmWT6xjg2%7SGDf`re{J@1hc6N~r$X7f>n=`)b$ zM?%wrVgRfqDUM}^DBjkWm@|T-YS88EXvG8$Pi>G`+4dNrgD45bz}A+Xr4x&{UIK)~ z!QDY0ytSA#D|wZi^GWn5TmR{Qy$h`vlEdqO<#jD9 z@yws&B~N}6P0}tIzdWc~khB<2R{MZhTR(C$PC3_T!?wW`ZOg=lA(N4ir`#Tw{ScS)#@|o^(1R*w!te7LGLSGg z0g>A|PwT$xv{CO?ZLB7I;_Q>oSV;S5k?BjVaT1i3$Z20$QeXYE(oOrM2s z*^(Gk1LSRiZ_ilJgxo_uxPKmb7sn703!Zro(!Ti}zGb<8yY(IER_rp+3jPo$Yv*?vGcU9eAJ zEwfGtNS-g)*&Dal$k?et98wvn@01jAA3k$4Hv}V=E#n5exq`E{-7fmBea*i`Q#RZy zhYkS}a5C?$8A02!jQP18^|jCj)Y*pC+4@$B!0auwIX&SEa*IAX7#{s7R323fvi!zH+~R~~g68R#C# zii#y!mmt?X2MCg{L1y892xCS`Oq~@){T^*1F|AwD_jGb;%`>leL+YV5~`?xZbr5I0(Eaf%uO+$hNMO)_It^8-*knFhe8 z^r0arEUL;-8;)sN&>|n|pgc%^1+q}6j_2w~#_Qi>?gPByqlt>9#&ELc!HFTn`J zvQJ?(TqR(EPB@$z+wN?Vv2iD`b=bGsyC<8A?f@lDXH!%S?bD9*Nu6IxzrhC7CYaQpiD ze%k1_(Y&=brfZj{exX68c>DQQ``as9NXv3sDtjRF8(>*gAH+`r4dWLYikAyIkotE~ z#_MMl)hwXG&1A;&rwGyRk2fkQyo%@)7+~9!J|1A;LGwtXFB9|Bd@2kyA&yzvOT{;r zT9t?UBhgjff-}S3RM6f^r=2eldJxqD70^N9;3FyjmUK^tbhIBNi06wvmY|;kUo)lV@N4xF?kVp`}_84UY=J z5^_+GeFQ9wFH;g>P{EB&{=YY@!BsFmTo3ndBROybxlWZpWXdG%yLunEdU~2sqj&oA z@lbWk3uXJ@Bd;$CZ4a0YE`U!M#l zZjGvL2!P;aQS+l1@-~&a?<5sevx6fbp~3C7G#{z_m>>FL=|s30qBvo_asI@my!SHW zbH^~+ipM=fBp9p!;JA|G3q$T8d-x@~dFcHZ`|sowh006S2ad z8~IV2>!c1vm6cA_XPh1KDz@UpfD-LBPpgtm274OZ-bJt9$iu$&)kF3-~Nshn$;aZra^TUw?OUfVEr-ovx55U;1ZMN`xU z&_eMG3Q2w}(SJ#%)oASZ0eRD95D7wsJ&`x15m$ylCeR(Aah8QBOHIwpL@j&@{)iMm z@J(-TP=3zH=wH9xXh9aVj*~aSt*wETVipcRj4hw+?S+WEZI&TtzL5*{ZV>*Ld z;(ZcB-YTAH-x3*XS2fX~uN-<%&Cw9?mpXK=hkrQS?*XmHKOTDtG#`*I;79`yptRsf z!^iv)__ZXdde_Sr!EpyLCZ9r-DTc7G1C4oQvE*E~u!K1(l!y>DA2^4-PPb$31h#+q zl^^=^fJ4|+4m|&d!>xG_dUnbd?%=ss9VQHawHASI$hAkg-uN%e>-mzhZx+jgZX9ng zWhsPp{Dkg+r30gNcINs+<2-qJEY2Wzqn#xMKP1yG^Q^l-pV^yZ&Hwb1t0A-E(a+z0 zk50Mv^G*v~nf|Q&*cq8|t&CrL>NM{->is||);|Uk-bith_**7h!{q;2ERMC+K+7s55n_1p=og$R^G8r@;gPvmPv@$~Hc@kQ ze-5Y5p5gv;M*Y7z=llQSXz>61mYtB%dk{qRll)$Qe>+J3pN$-M`x^e8;`7(J7|nKz zKTZ};lDZC(d~?116T3XB`-sn;NZesept$M*jZS#QrPKzV{uN9!cKUF&FJq>%eni|V z-#gA{qdm?oE>JSuE>x-2^7F?hgBQWvSaCxA4%=6A>KC!d6(of;>)@e}(sX}rTT%^p z=6O)Sr=}^U^Jt|FK04WxUlwC<>LW+Cq^ge&XTFuP6GE4}9(l9GFlyBPo&6);s;;lR zqRq7oT|~SU*F`19D9AZ;(l8OUQa6vWXi`Lc!J8SCk!!UCLym3H*^n^_>#*E`$VXsb zWKA~Ln=Q9JKGy9`x5xMcX=*(X%G}3STq^s>AWMD|0e?lOt`hl;1b?C)|8vj(x8DBi zy$ApEr(A-ly;YFES_i(ppSg_>Nxr^Z)>E_t_A&K8k<8=&2*D@WS_9y~VZOxLE*qvj zup)hlP2$M;vB2kXibUxYeo|6+5He^-z>yG60PngI^CKFU|9=RbEZ88$e!n+mafIn`=o8_8+d*6oa z%Q0L1`c+5AQP$+2G3PwYtB3t_s{Rg3=97OjG5N?CSB5}!uXuk3qv{HO!(K7(4GPB@sRBCBew@X+yCX=9RGPr`TwYs|KER$ d!sH=jG*N%Wr^BZYyy6AY)iS*F@uGd${{j&xdCUL+ From 55121258bc6bff55cf4e85ba275d3a3b64ea9442 Mon Sep 17 00:00:00 2001 From: Heroman3003 Date: Tue, 27 Feb 2018 07:59:33 +1000 Subject: [PATCH 16/23] Fixed some funky code. --- .../silicon/robot/robot_modules/station_vr.dm | 16 +++++++------- .../mob/living/silicon/robot/robot_vr.dm | 20 +++++++++++++----- icons/mob/robots_vr.dmi | Bin 26953 -> 26951 bytes 3 files changed, 23 insertions(+), 13 deletions(-) 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 19d058ce6b..75517b86c7 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 @@ -49,7 +49,7 @@ return /obj/item/weapon/robot_module/proc/vr_add_sprites() // Adds sprites from this file into list of avialible ones for global modules - src.sprites += vr_sprites + sprites += vr_sprites return /obj/item/weapon/robot_module/robot/medical/surgeon/vr_new() //Surgeon Bot @@ -67,33 +67,33 @@ /obj/item/weapon/robot_module/robot/clerical/butler //VR Handy sprites vr_sprites = list( - "Handy - Service" = "vr-handy-service", - "Handy - Hydro" = "vr-handy-hydro" + "Handy - Service" = "handy-service", + "Handy - Hydro" = "handy-hydro" ) /obj/item/weapon/robot_module/robot/clerical/general //VR Handy sprites vr_sprites = list( - "Handy" = "vr-handy-clerk" + "Handy" = "handy-clerk" ) /obj/item/weapon/robot_module/robot/janitor //VR Handy sprites vr_sprites = list( - "Handy" = "vr-handy-janitor" + "Handy" = "handy-janitor" ) /obj/item/weapon/robot_module/robot/security/general //VR Handy sprites vr_sprites = list( - "Handy" = "vr-handy-sec" + "Handy" = "handy-sec" ) /obj/item/weapon/robot_module/robot/miner //VR Handy sprites vr_sprites = list( - "Handy" = "vr-handy-miner" + "Handy" = "handy-miner" ) /obj/item/weapon/robot_module/robot/standard //VR Handy sprites vr_sprites = list( - "Handy" = "vr-handy-standard" + "Handy" = "handy-standard" ) /obj/item/weapon/robot_module/robot/knine diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index f1f1a3ce58..2dd54a1e06 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -7,6 +7,16 @@ 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" @@ -74,8 +84,8 @@ return /mob/living/silicon/robot/proc/vr_sprite_check() - if(findtext(src.icon_state, "vr-", 1, 4) && (src.icon == 'icons/mob/robots.dmi')) - src.original_icon = src.icon - src.icon = 'icons/mob/robots_vr.dmi' - else if(!findtext(src.icon_state, "vr-", 1, 4)) - src.icon = src.original_icon \ No newline at end of file + 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/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi index fb79753914435d6b58f422374143115fa4d22471..1640981e46f5dc8ac6802a1ad14f63db76490d0f 100644 GIT binary patch delta 269 zcmV+o0rLLI(gDZP0gxnr>v~jJbVOxyV{&P5bZKvH004NLtH=A-$O16B!pBxE)0)_nKeH4pWPAdp_3zV@-aX|y}n5? zd7B+HcJER+^4~6Bj+9L%XsqJc#50An2{fSTS5jEd2^va@FE%HCO3>Ke$-g|CpC0C& z33hJWY&qV}?xe6Zm>C*sqc%zkrpX6;i|GgA-+Jc91fL_S!dhSig|@&F3axq$SD#gFqLltWj5YSh7VV*ve~X)8O2+Eo T8vp=cM#TXrPh(cm9X*KXXxZmQ&MXb96m1S-{S4~-k#B%S~(EskRlB9^InQE zxZ+`Oc$LCa`1IxHk&7(^gH0M#x>CH_NIg`yk-`PeFwjzbu)R=!hQZ6i{^`;E_~(9L zk=Z>x@zG| zA9ae2&azvB(L`C*>tW8Vj$+PLC}R#*$YTz!Zsh*HRiWHr|F30> Date: Mon, 26 Feb 2018 20:27:13 -0500 Subject: [PATCH 17/23] Readds NIF examine text Recoded it a little different. The verb is in OOC, if you have a NIF. It's saved as part of the NIF, so if your head explodes and you lose your NIF, you'll need to describe your new one. Also fixes an unrelated bug where ghosts examining people print all sorts of crazy messages about being able to trample people. --- .../mob/living/carbon/human/examine.dm | 2 +- .../mob/living/carbon/human/examine_vr.dm | 19 +++++-------- code/modules/nifsoft/nif.dm | 28 ++++++++++++++++++- code/modules/vore/eating/living_vr.dm | 6 ---- code/modules/vore/eating/vore_vr.dm | 6 ---- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index bedb652f38..36e3853295 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 9d86241dd1..12c7b23135 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -141,23 +141,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/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 614ce79d4c..19cd74b885 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,7 @@ 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() + examine_msg = save_data["examine_msg"] || "There's a certain spark to their eyes." //If given a human on spawn (probably from persistence) if(ishuman(newloc)) @@ -110,6 +112,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 +141,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 +576,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 they cleaned it entirely + if(!new_flavor) + nif.examine_msg = null + 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 ed9fe0ae16..78cb2845bf 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. @@ -236,8 +234,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 @@ -257,8 +253,6 @@ src.allowmobvore = P.allowmobvore src.vore_organs = list() src.vore_taste = P.vore_taste - src.nif_examine = P.nif_examine - src.conceal_nif = P.conceal_nif src.can_be_drop_prey = P.can_be_drop_prey src.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 4988faa81e..b67978c2cf 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 @@ -109,8 +107,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 @@ -134,8 +130,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 From 37240ecec2d4927fecb7b7deeb574b47ef85cd8c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 26 Feb 2018 20:40:13 -0500 Subject: [PATCH 18/23] Upgrade byond version for Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fc1c93b83c..5a3b08a14a 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" From dd230dd2d7b5c264da74a1f1a3a45781f08fa451 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 27 Feb 2018 15:04:17 -0500 Subject: [PATCH 19/23] Fixes #3147 Fixes gateway shuttler button id string. --- maps/tether/tether-02-surface2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index 51329c8d0c..d84b9b0036 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" }, From fa67c6d0130024f4b64fb3390a7148f3cdd6b344 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 27 Feb 2018 15:09:03 -0500 Subject: [PATCH 20/23] Fixes #3104 Removes stray wire, sets pixelx/y on AI display --- maps/tether/tether-06-station2.dmm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index b2740b3521..8fee696396 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" = ( From c34cf7000e228ae26ad1c6d38148805862f06042 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Tue, 27 Feb 2018 17:34:05 -0500 Subject: [PATCH 21/23] Gives them the trash eater command --- .../mob/living/carbon/human/species/station/prometheans_vr.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c3fc9d7d9e..70ab7f577b 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 @@ -21,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 ) From 31e25a09e1a1746849f557ef65a15cf909fea00e Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Wed, 28 Feb 2018 08:38:59 +1000 Subject: [PATCH 22/23] Updated sprites for security and medical intercoms --- icons/obj/radio_vr.dmi | Bin 23702 -> 27557 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/radio_vr.dmi b/icons/obj/radio_vr.dmi index f26ff6c3f66cf9a8b6857f855a87535c7d89495b..77d695cf23c0dc554621007c2cf92f435befbb2b 100644 GIT binary patch literal 27557 zcmb@uXIxY5*6tgM6lnrdq$2_%U8G4BM4Ez12O)q6Nbj8l0Yy596zNrv-i!1mpme2I zL7MayN=S0<_&jU9YrSjlbAIpM=L2PiFf%jfyvKEoG5#Z=k2RFZE;C$)KpmyQk)h*xS!Lc2qd5b2wty{k`r^R#$m z><9&@$FyH=vt(TkC81$B!5tSY`Jh#TMZV_2rhaTu&v3)DrUhruJE+d8fD@-LRIe ze76#9AbUwtAU-WRw19UaEwIf!e{s9!^Ecly`cl#QMhlW>K1809W=QIUOW!l6SZ*XA zv+Wf(W*WS}l`umR&puexvM@#*+l|*HE?h4%GqEI)nZhAWHX)NR2_RlCk}_H@c}g%` zzF1mu8aBcfScOM7myEl1=p<~QYoVl@8yZw}`#?Etc{p&>^gazwIzoYRo#h69TO-M9 zf_s^crIhdV2#8L7H3Qo3;7?B_yJ)KS<<{VBus*d`{!~2fqjvqO?S0MtX5BYWgE(H( zn&OtUVe;V0ci+;^2VEp;aWHp%8Znh|jmPEMpeJ9HA z$$^76O-fZ#=!s3H4$ojiNcueyS99limk@Ce^C#0mqqMDVemR&?Xysgm`IuP-4EJS* z2jfew$BqyP8$|W~J#DYltu%ix?Ul5X)_V`h7<|9XwTQ3SD-9<->H82Tvb!ehdVB4pp|oLDb}e19)iq;Ra?P`K!C6#Pl#M8mji_0e zYnogB3jVz-BLPfo_pab)srTYgfz8js|J?indGX@Kj&%m!y(?YT&+V!;O{?Q#VitFH zcca5sC4a4~D1Dc{cO|$GKV?HuQ1Arlz(q*UjzXcFM?3x*$A(aV|VLJysx4v+~MHaHYOJUHhNRUS;bPwHa0fO4NKOmjpYptKFlmg zM)(lcJN-b3&)>V? zHf&1G7_bbQvLk?0*VLTJJm|6yaBPM<{+Q0774SO@frvqoQMY(_c$_^NjpJ=AJa(^p znwYS(RPC6YP@rvN86hoI8Zyji?J7-vEnMv3WM^OJGiqVNoR?w3mX^$Qb{oO>lR6ms z&JHU7czyP>=q-f3?`ubmosYYeRG3fcS{hyRl8o#ZJ8FG14~Luc3yt}$YZhv zZS;&qCd5B~tmAW)-u3FupuZ+z7}=hO4m&Ap&R+J?G|GCW}enZtHM*2R@hc=vQ; zOO&MRYJo$mnUQ1^i%eL9>)O)fcg-RP_zr{kc!^O+gKI|j$UtFAPY{Ld+vh3KOM?xr zuWZSmJd(v+xH8EwfG5BMJ317`w&|{3H9amWGiwjLG}-K1_Zud4k@g?gmf0~h+k2# zx3|~c!f5GnSGtX^3V6Vls4^#~E>#WS#q|Y$c^+aW^znLM4Bw2Hcdb3q6vD2xhn_zmoo51YPX5nD*8g_B{hu4pxLGCc(TP^`C)=IF=a!_ zt77Yn;PZ>q9yvtgK)5xc%dVh|`flR0@>;w-iFlrS30s4;WbLiU(1?#;EN2@}Wg+Rc zeHGUf=XJ^iamtZ$4|>U+wx?@M0_h_km@Rx0Z0$!~D)@+sUohHEH+|UN46nPr^_=Mf zE){s|9zoFZTSgvFU-D&M&o3$O#(3w{$LF_2qEgu?!yl$gUt@(|2=9gGL0Ecz^~F8W zqpOePq0-lUC=9NR(1(Yz7!EpC2hE3im;gQ1#-6E2I}4=SEtx@w8`s{wwof0_^Vid&E^Qj{eP&-3{y*r*qqNb)x?v>8_bY&e$1+$Rj*Jqe5nBT#T z3)u;+Z5<<{@UE`=lXhZ9$HzG0xCn|l`W%H1=#odGPAO$4({xtNf%m(Rry;lb3@Y)H zBs&kuO#RHS>-j#Vl|9#5-0zWDcv6lz6?f=z#P~5q!Ws@+_g;Gz**`GAKBPxamxvYED z{G{|2q%AddO2JRvj4aHxZ0XnMZVAs85x$vaswH9jb0_Bo^S=AOjThy(`8gzD1)J=b z%_U!8B{>mF(6QqORZ=X!E`f}@7-%%V`np0O0x^;bX`NacQ zgt#N3w$;1pd_&H4HNv3`b9T5U?0sMn!6;7N*ViWjM>pLSq)Na4O$}u{zD-U9(P|+<`T6M0}D1nSYx;=@Gi)L0cp3mhl zgVRBAdXL>ghFHYoP!f-Ovo*F8pOHvpg=sr3B%lfzN7*Xr{h6AWnD|+tLXKI6&MU)@ z^RLvQN0}35J^0TrJ1}J6L)IIdsQkqv_(E~zmsa*wlJDScTSetem_^q!51;mO>`;_G zYu}xKzp1rXJUz>>eJs4bLFA%Xg~!c`5xuP!dGEwb+yp}iBQLNxR`Xmq#yj9_C|}#u`-Rx9gArH z5@L9%Q2V&32rj=rWjfj5@6jISOScg6@guF@@o}_rHBLJ0B@q<4xeePU)WP-p6{|c; zLd(~dr5NJ0KFr?Q+I%=DwcpDTT@Ur$7VV~Dwnswn*Csa0Nyvp>j*{NEv=8M}3y7L9 z2}f?j`CT+yeMzTly%A#zrw!ar;%yGzqJ{FT=$)WSwLwA-GI{a4$k|TX^u>$3 zg%1+%VP~P+@Xa;N<+KH9N>OC%xg`PYOfExd0H&mLDJ(oZ$5M`)n=mpm@=28(9PRgG zZ0wUIbh=R(r%g|m;iq((My0R-J4;+YZEk)(iAa60nzy%i>JJ?5Ywu7j>H_H#d_n>F zKQ`RFCIXy`aJP4M9vB)LK5kvUSG_H=Cf=TOearT2ScKziabw~+DPCKxoHo(6ZmelP zb4wx`*#c!dD{756jb!L#dzL7$jHF+vvyh(NmY+P>g zKI~+<-SOR9Da?z>)b)_|MzD8kCexyASu^bkIPdt!9-CWR!J~O))-!~^)C2n4&qxl< z&kk0SUZ(Nb=`o)%d!|HWWw8sct=-*iWA_W*Uptc(Oo94~mKGHB@|XDFN{?wuLtz#f zTgu;CcH37wt4dR0eakm<#uT4D%3X%|$A{rjx)H~OXc51*p5Db&Qhd3px$!;e-5a!^ zOyq)9vdmb8mX+Y%wbj151i>Du-R2NSerQx7M=OZrcbnyrj;FXKg0O(8Jb1{NYt@qw z>LfXFMvM$%Xx3g&SNDr5RLrL7qE~h*I>8_MJ^U=$fp3^pph5vXA3gl6a?&>A)Ubl| zm7F!3-<4-Oi5X|@()`MAPiR)V(?qN;5ALR&%r9FiN1dV>oqLk=>VLOfh9r4f(UyKL zGxtlm>wOhLMdeszp0pK*x;c5`Fmb@9himbcJE+#ML|T)-kWYy&nG;!09yH7-H9yHv zci>wz*BrGMHnFsP(@hPxNA}$MKJjDzQqueI7SS505B4l|%BFaCYb9TUWrf!nsD=zQ zbyzx?*)Db8+DznsgQ~Vl3h{cw;9(#5A@mKCDa1=ckaJH5cS~{*9(exh+XX=#75>kA z>!H^y&?(JZc_Q`J4I=6i<(t=8o+sI}N-91QvsOAy>O^Ptv?~?i*ZXfqNi=xN8>HUi zzIWv=`*>>N)0^(by*N>~nUvr7Q}CXBnj=t&ieh`K&$j--l*oQB2xIsQp*L_gUgbxS zO^tuAi{Tf97^DTp9gck_;Ah~l(BBUzkjG#*IsZqScj(q{<`oz76}(`zzCAY?d^91R z+j<*6_41=3y1SFr$eD`90md{^a<*m|9>~6-x*$5l^Mn}2Z?Zk4jTFAlP zdW|WdsrHOZKE{^PMr1Qz;;n6L_CKH5i!t_Fia;_;O8B>yDF&PrZ6J1xiKI?V|SkYJ*SYkM&&}dWHcG;UhpF01#%g)zwWR%#bojzK@-iOS zBSD}~9Q**0xivrm5&dR~>k+cV{qa(6L*e+iE+nRz{9x}Jj)$AuBAW9X4n&lY0;2N3 z*0#tgYAXd?0z$;WAxzg?5$=Ol{w+Ap7&FAw6^2IBZ=Z+EkyQ6gk%eg^oRja^DfCy7i{YUNMQvVsOW9=E~_T zj3t>N#d&uL2_c;r!|N0*XWtlw@2m$7D^^J))nsEd!^^MxuG@d z@*seFySZ7zp=Sa&x7ASvKALe9{SfokDv(G2NpDSE?A%V92q!NNgkS`wd$hale%TCr za$h4!%w{MixAQw{)83iiKR;(KkZ@tP)LH2??+gAuvU0eDmrlqI-&NKR6DWq#qC4qG z8$ER*RT`&bu=jEqGs@eo<6wfst9p}lU+C>zV_`kbD;!PH`&wGz<;JdikawhgvW|ST zW%yvt)fBnLkhhT&f~$=i*LNegE~`a@XlA=}U&>XaocdbMXHV_&KfBdDKMbrxCufjo zPdD;l74z0lnaIKPYnQn`@T+KQ(pfqY#UC6TNW8?ed&fStTk&hjdoW6f+e!?0DU*;1 zd~gDO9qG9;Wi!N}Tb`(6ti@jKkIQA^NzaJkH{F;Q`BLQh9T?Mc*Zz&SzT%fIwrfl@ z`Sw9E0A#toq81^63Hb=hXgnK-`9ORP5B)Onq0T!GCY8^X=|-Web-AreI++!vaCt%y z8K*XR7^hhXvsd+hE0ll*4Y0WTQ#< zrP!aL@b1cQ@GW;fH-9%WKTnXK6TT^Nh3)85kKe%J7299CD53$*@P_H(cWCs-G+Y(9 z{Mjub{*7J742fo+ap=qH!qz(iU?)BaAWFOr)tSP1_4AX5;bq$x6ItHVAHnwuw4y_~ zgK7**E;RVQV&z0~W;hJp9uHB4=c)fWq+Keujj}t2KQe?X@##OKahNmj>_06tO!cMt zIaW@nEFmITevN4|S-;}z`HOHfx$TWr-WHAG7L(8qH>)cn!?LLt2KV=$?51%r894qiWYmG4Sh#SQrgH?o) zAhfJ{z-Ue8B*SCwry8bemU|>W65`_7C`#X0%*|Fy6(8NvP#6MIrO%RNa#BS52E zO5HI^6F#N(CHDHGG701FAFa%m=YPMox2A!g6CSdIsNcRWhf;p-*Mg^l8F|Ep!aEBX z$!uK^ldrujgtVMRY*$n+Je5`-JAAIIBWrquEq~y&@e&R{hW3ofLO{~y$vAR72K|Z+ z>?&(rurB(Dbq+tLRgP7N;pha(73VXCjqq*UjucC^j?u^G2_aDOOc4D}1P#a`1(IG6 z`P+s@Mz38h7Mea8h*6hIX;z=!9&8m3~ytMFqZaGpiL!xc={voCS!}c0Bdc z2QTQ`&0Oz^dyM}g1Oopd1fik~$9mMG3n}_z&@?&|(_bIZ!iY~yV?KH_nZ@ z_=kun)5VxOUGYur{wO98wTIpp-*@dZr;q5A8Qd}UW5s^?_@*f&b%Rr)U*CGAHj>vY zI`b9m&hIj@+}7Ho{59ypdC0WD#)&}140C~TT96yWL!um9(WHl5S-lHDlY_SrKTp#d zu1$tU6dXl8ZN#q!vR8NON}Cqh$d4b_?IxI{1Ay)iJ!1~n3mhqE{ioU}^5dMl1+1*B zIFAxcf@dsTFL@?CG)0L$BQ9Lh#L}}ttfTXfh#@TpPl$J4x*_@>3-{UG^YQsC6r@-X zgPsmJI*Ck0OW$rA2?oDWog?{iY`kq)_a$OhSNT;IEkcfc4t{ZcAwufo?E;CQ)Dgi~ zm~G@)bSyjeF&A$guv7$=(S&R&OCGFaGt`qyD)0{r@6hZbHhMuZQF#0DykYO{ki90F zQ^N=eHvZ@Zt;@}uyN-~%8)Zy};|qENS2tLtbH;IS<^M_~l8VUwy9}`XQwD&AaL#Q# zur`3d3}GFWb9+#O_bg1{j%#hKxMPb@#jVDyfPY5)@J-3!yT?ghxAlw0zV3EqN2DJo z3gWy&tL3~vDJMWwF^{i}kvpL(yUR0VFSYr;!PSM9bv?u%O@SsC-5P8T+q0Pr;z<2K zH%Urv_o!H3Y3Q8d#EEhF*k}~0dH${L(K~ee=C0?xXZ$%JhL4I?Ob!hB=&I7a_*HZI zJhx}q<+(?F47y$MJj5~RXo9P-m`HQoSIIi?XhJF%Zm0OSr_X`s-UOxpd%-x8^1$>f zB*x&~0L=k6;{S`yz5)|+)uG`V&F629CRkhU$T@!_w#Z;KISol%t?(MUlu9Z^OU=w@ zXdD*I|NXj2n9^q#Q6mz*(HDj)m|iv%F=x#8rm8AxPYEUohdbE?1w`@j@%5cQ633)m=@Gjek8=Wtr8Gr*ujX5SOpNVIVkS3TL8%{N`bhVAaB!_^R<6f8G`msc`zK0CEjN2sTB?pyuJOH%SD2falXke2_h#vne|rb7wLg4b9K`k+*{V6q%KkPbXLVcvHm85XA;wFTQh?q5hHso6=hE zE9GQPYOC}S1N0rBHs8`?NouC{am_JDbfmq5wximx1l#Cn+dC#&?JT7hycP9~J2;P5 zw<^Av<2BGX|2*FD! zvOmTU8A?uDd-={Ed07;g*+_ijmBs)u1p?#5-|5*tO%5^P3;?~4QUs3w?=qUBOn7xs zR*pSXZJ_dl&@&RN`MU;Afm_Hvx=je_snq>0zL~wN5Yt^PM$-n)@0+uxo;Pi5#|m{Q zp&0v_+OsA!rIb8N==kN)XYRJPypYAXI>I1n+*T@iWo5!0XeATmF|e2c7S*-2m)Ck* zymORMH32L~R%65FckkXcz5T%ttt`+|T-?tbMSTn8ZQL2sq00|A(0d*F(r4MkKn(hO zzf!@z!%FSDFkKq#RLG~l?r5s3D*{WuHxP$#wb!rx$&>r=D`e3**f(Q3fW=CjFX17O zsL5J)5+GY)lSVZ*@lt3XM>_ZYC8dX{5+m5eK(EAb1+jwP2~(`Pzc%Yl2M(q~CgLMy z>qWILE+_|Mb#HsyUgh?UZ?%sqY8hB!&?8EM=lQwx`_r)xq}_grU~>eUV+yPiSkV=q zZUyGsB){(7r(ixKEn|LpUro)z-n=-duQQtL^4Ma?@883)(nn527~Aig9ad9s@`LLY z-QAO9Y!j#waoSV{tSnxbJc1gOlT zEHygJ6h^)J8*jh;F*qd5{!%)D&-e|o>hj3kT;$GD4Z*!b2FP)J4l0sX@CzNA#H=5Yu`t7 zkA;K9siLmlnUj}?y*o|v*dh9{31PfKnCG@mXw9P7=yB;xqGUcgjCgB-FrnkUQNuktW8fUh6-GmdZc*zSIi zOF;2Jc(eYsCaQtA9yD)@;B7^QS%1~-{XQK@G&YA}Kyk_tsL7inJr+F-Bsuv_nhNN@ zfNQ!ud!{k9Q02ub0V0u`u7}TYWpPPKH(0)XcNsrD$F5&#L&LDR{OhhAXwZ1vvxy5A zB`77$F4@*HYi#&L9JGe-O-T6f3qLY+u{)OCfs$)wm72;;y%Mr!#uizfyhWzTjWub-Y0&h%Apq=Q_fU9 z6+N5!B&$O`E3a_2{B1hlKFvgRSWO~-5P-N9xRUU&TRp&hz`v$%zYF$Lq&*${kz?@D zMwDJ0r_2W_Ddo?_)zxn7e)E@eZ!iXq%VkrswQ-M_ca-27VEqFsV2%a0!~3^c0fmnK z!mlCS?}+nrzO8+u+iM~^Jb?x0t#_Qi_}S_gWOhJIdvQ0h_b4ezx|xO zviphuO6$drlf*FdM?CyR(O&7p@jit&t8Y%d^d0)%yGx8}2&r8kd*;XAWyVr|q~`mo zl4@tiSZCG-kD&C~t7UU>%YgxA$_bYvq6q3ZN;v8mqVQdAiHdFLKHf+P?tgk2_GYqU zcZEp@)~JOKDX-Fc-%icPnqxEXe6-!L`rm#09!lLMJ9) zr~QOIDZEf$gU{!L!^>L;qr9o*tyRO{6S(~w%6CT;ge)vAm*!-Ag+{Eeq(TwQo<#fH zQLH`14Gq?kKKOLZ8aKGO-sHBfuHnkWx^&peJL3kF`Q7R8y31_w94OFVS+cUCzp=hJ z%rTwyA1r_cw#HnI_uwBnvj*{Q{2 zo<#P;BgF)XHnIZkH>&%#e{V62aOL0O)=Ud*H*Je5yhTq+kaeTqmWgfA7}rkH=RQK* z4%6t1@QR1fyu|CTjovy=AZrPYx(dA7)5~I9y`~S9zzMSYbn~eS+&-HQm11OAZi@CZ zn}Mb<+D6+Hly$P2(1(YxhBuK7gNPM7Ydg2KJyHUWfTiG(#>>gzP4l&P-kTPXK5IwE zpzkAjr!h&jwPF@SN$hstB=3zAbMf;tua%6)98s)8@~ZkNqC=Mwt$DIEWInE3lYV~# z6kDtX4Eo33&>m6Hj6x-|Keav+t!5gfYbk<5FjmiRkB$cHR9Ba)9~ffac6x%WYRylI zR@0e$x`J9iOEW#tyL?T%^&*sPi(6yY%ht@-r_{ngqs|3 zzX?Swb(teab=Jqqhwuz3)AvX~bwLGwJ%M=rPtEx{?axLFQLGQOzWP6`D+GTuNWu*5 zfc7iXzMT*#Nj$yN$|jKI$Z|edQor#rrTo@3x5AbC{r5Qk&ENJF6ynAUM0qVoisRBt zib$4)dIuS#QZBZ>p~;d1P{0~NfK`V7_*yefzhf`Z1kF9O9};akMY;{kWvt;?{hc|y zgq4WDjB3)PBqd2WZFXfP6|k+?iZt&wKGt-k+lg_Ah){zDe24g=L9D)?Ly>NYOC0r$ z_rGkRNCsLy{QxpXvD5xwe#2@a00Ue{3R`C^b{04XM4TGQ_2llnw6;ZRd$=!s{i>Gh zT#eaDm+{(rMYsok_NEIfPRjM!z4^4Q^#eMz`;L~5uCa%kYbm@%R$E)UV8^r%=CBEs(}S`L3sXY|9Z( zhzGiCbG0(pB$}T~+xgxFjp-rvg`O16vbOZZ7FHVM@$vB_)Ho8bEMtETO9u36A@WdY z#vVWVp*PCC?DWSE?N&~jN;#h`YCqz2{#+7s*x5=VJL8keyF#7rBr)s6z^_gf{nFFc z4(5gy;|XQHmoxwxaS2k*Bohb}%?zVwp!F(U@M>KTU{&hH=R!r5Uk&))etaQcVHEjJ z1stao=mN^qt(H1JKOA}FwI$3Q7JfDj2QM=RDR*3u-SXZ*LIOk?7kV%=XlX=cJ&R?6gabDfHTC|y z?=JBI!of;k<1YPODf=W*ak?qbS)8_IA}J|*?DN3WvHwLUnSeW&veSjdhAbT1ZYR1< z)H~Z9J}Lgts7m8YSa{-VUp93ri$z>odCx*`A@Z&Qer4{nyMDRpt3r>VR7pIDg!jP> z$SxJp3~f)3k3tL@oKAGIGRV(N)s$Sn3Lua9zDhMa|9Te1Q+%DGr2NBmKxGQR{2ET;*;(9#Bg{$c?Cs z01+z<;x!4U7ct?F0L~)u>-x8qj@g|2y=xQW8s5mQ#@bq4otgd}BgbaW)DV*`&9u8T zR)eYS5!XbVR{O8%E1lFGmo}FFnzC|c6W4p2ao7FUV1}F~;(1pKQ(j)4NyFl!6tPd! ztMt4GAaKsd<}Y4wV$Ug%y~R!n3h($gx!79;9J%~D&!?*ysrH?zsZ3_Ri(hHVJQ}QH zlO%8+MMkP=#Yrp>@%vVNm*!TS&0RisMaBy z044NVN}ygZ-a7jI;tX8zpTJ$p#Ip1*&5 zs&sBDn(u|VZR2sIEd;rz3=8Qt4_-W7(|h{vk|=Lb?%hZaa-ddXkmX|;%sYeSYxbr>(g2roc;wN($MGU zzWGQ*s!oeF(mmW>_O$6WUY5m$NW0^}1a(SVivbEcBA4{h=6x~Hklo~UhB(`33 zlR=cci3{u`qOzOtA;0rm>+9(OiFZ>#AS%pXmu6!6H>yi2Ez$Ij2Gx?Q$4(b}TktOUvV0=uzi zKvr~T^r+G#vp5);NP+HezU($z@2qedZX3C4L&cBWZ9#I!`isx|pJ*0N!%>EMo(bp) zC_JsvU#yBKC|(G**SjZCeYhqCf$Z+G3cR`_dvs-dXExM*bG(7$Lwqpyg3`OdzDmil z$qNn(wqA@DCFV8HgtiF!IM3VA$l~b{G|SQnnjD4cQ?_15=8VZI4xTlyv%uCc z5>bv;4<*;?T-P+%FNPHu@l3FB zLxY#gmcF#42cO4E6jR`rxOeaPnhw75>Q`BkjTajP>6v&dz4bj?xx0ffu44rvt2{Ei z$H2f~(g}XWk#~YUXE;=lwUj5E1fF9nlDPg;X8_2W_j>$&u`c9YTwH8wY6MuWS38zY zORH0!z)|{2>i6xKOs(?CK!yY`}K& zmpt80X*b#=yw+9@4j6{mp@B#^i2>s;!~=GfI~6o&9a#MTvU%b zJao3vp)wbE+dZ&c@LyH~ky22gAP23tQ47JxEhXc2P zE9JS#~CMARotmBpk%HXrY=D%xdHA8xkequXJC$0s>#Sw9}!k_jJxRKN4 z6cF+GqySGbjOyvE*Ym(DR+3;^9k!4qOL(@Ekt zUki-LH{8M~o8K`;3`lf7U%e&_9H$AVd~F)IpGkCixsK*Y12nnmd2Cvb`dU6CGJJl2 zlGqQ!T}rg+$iYOF&H3>9z&vUQd1AhsVF_9feN9HrSonIsX>0V+iaPc+`WYRYDA!yX9-{{5Vvv@s zCS8T7`s8GWm7xSSBBiNvv!EGEBz_!Mo+$_!i^Cy3%6`y#Q)QoX`>+OVAl@VoyXO4|RUa(LgQ6Gq?A@ORDa zgO86=w2jF=Y{mHl9K8>qOI}3?{3>g!J6PfqYjN z_~d}$&ezPjm`3P*&o6SsFy;%J>0W~@CJOFyBX7;foi4phwLP>e^LgTr%0XSEwHyd~ zo$hGjK*-3-l)7QtZcyV7?7>YyA7rekh6KL2WkeZ*?1b^Kc#u}B?ft1(byPr|= zlV3XT{k~v?Su-bHD3FDlubqTY zI7Wu~uU^oW!gy~XJ{*4Yx6J>I=pGbgI9EoZ@_!xDy~DE@bVMSwAld5|vS=QN3(Ut& zcBHoK(%OW_m#RmD(Wx2Jh#VAJ>->yl8t2_%c+2Ss>}+#RR#MId_Ul5rEAS9c!4B-C zEcXUUSzAP>ErgS__@+JVBI&Y{QYNEr^xW1?bn1ZOo%`*aCIT!!sotCJ6gt8ZFmNlnIs{07FN6Y(qxp;?N>c@KKYos zBHj^CN|jWiBjaC|3;{i7G;%##tz5GhOx==aHgw+?2mQ0t$hp#`ZsIuOiFVsS`uo>K z3qZbRtvnu#wQM5rPS2tNeTG@>o(eo<{GQY^2D=vE%Wz`|I`1(y53jSpm7#9l<~E*X z83Cu6crTPY9Rg|JFm9O*VMSTLx-uk1_%10a+IOdqu2vAbgD18^jtOv$Ufk8zU6Qg} zK6)u}n#}leK|6FeDVRE7+3?lL=USIgj>ki?RsP0Cl8_e3Hfl!)x(>Sg$T2m{8=CmG z%eA7ZhrhNj=mjyu-;p0Ao4+L@_sY64MsG1G6sIPbYn&Lishl0^Oi$#H<2hqrx-4XI z=YpR5;8%uR4ZY1w)P33(BGW)_rkz8&1EIJ1888M-IaGCzHIxhzEn>l%_>E@%1HLL0 z8flv7pL6tf@25ScB>Q@kj`j^81D!SXWDq!#S;?y?M}85nlQ%H*(b;zFnlGk1XsFXvAO~yLW>r9Fg30tx<6^P`Zw%y|PfG z91n^F_Vk<%6#f+@$vVVO*2=Q*r^q-J=pUb;#JQ^QpWjvw7P>O^=LC-^vtEKUo&Sc) zj710N5${FANsr%VwcDAr%yI`es|CP^CeYbxn&h+Wm+?BqaU5wQTP-o8PLo;(=1Dqr zatBPO`|YdS933_vu{Xzy&Mo#|kGeHw#9B`}p8Z7AB|d*#%>1_-mMG9`+~k%AjbqAApnXH2!M;4D_-xivfkUMA9RR*_;qgScbG<;>1B zL!c1xD<0$2@XSj#iNHidk`1JLYZ#`7$Fx&xFEI10$`df%&`I=O)t)%n66#`0ll6pT zs-A#mz8Sq$X28)3n7>0SH&Sgny6DrVCuln? z#;CA7?4t62O{n~@>6Ujf6QE0qi!JjI9yVgRr};I70*Vb*#$lT)!Is1b&SeS~LC_?; zeF9(u&^a=zlUn@E+6Fd2Rh0t3x?s3NzeLw5 zZu=S;8BO*Gf&=@OSLeS+wKY|zctN%LVbB`e9k*H6v=0cjG!t(fvrz(Fa|qpc%`>D0YMhagR7LjAMe>Z2wzyJY-T`h>GvIBSY+igwmJatIC}n-Mhr9 z!vs;?hDap9Nm3pk(X~=5c%whzt60-kP4WHuXfHPN_SF0dx7KI-K(OIG z&^!&SVTLrRK|q;4Y|`u{_?xzAFRugZQ<{n_B~Wl2o2IMCZj}S9M%R#<(0Lr*jXU9Y z^ya3gf71-5zWO2DD|tC@V|~31Og7*_Y{*$4F%bZX`N@>G#z0I%fAHaB@(U51Mnz#G z!;VCBQwN17s0|E0Y7VrosaunpF0Mo#ckhEybVB1f<^CZ zjpu~*lk6yej(j<`LO>1SSQ}wtm@|Kz#lN@6sulZ@6CC~H4E1x$JqcFkL$31sBE9L% z^2R4i|J*~~73=WhE~@V%BRFw=zYgVG_J1NCyBbkieOEkXPn(=SZ_DP)+{y>cw zBe4Fjj-3^WB&fnGp8HZqq1h$n|Czo&UCXcauSsR)08OJv-=YeNPXz!$0%TGYXk&uJ zjPwsz18_tL#MQ-;WS{@F=uH4Q#BI`o?%ZIx9RPuQsy8}MlCX_2k28lA4Q0B^moGOh z8EIxLC5RA6zXXV+&o)U7*>!p^CJ}u=3H5HU+ID?L-;b~uNL3@ zH9Zr9C6naNk10OkuMeGtO1;?o9rN>VgYhTB?)ipo1b}te;qh0$5!qCs-$XUJP5z^F z@ZMdB6ce^N{g5l}@yhrAKy65B7(EJl-Y4LC?iMcTULuG=8-`#x(U=(supA&wdcCJe zA#?RNyQ0G2SsHrxJD~X%4(%!4yTTF$p|l<1vrc$=z>y4{3U+RIUMNf*eH&~Vei4td zM=o+MPLtC7W1>OguZf0g9NE5@trLBheQB$nq&N{q4duj%7HeI-gTFwW3cvue{&6V^ zU+V|fw~y&R09)ZP!2oIdCOBaR@}Mjx0Solr*4?WzCc*zOF^|t?)Jny=rM(XadWVKi zDxq3hK^YlRAq%rEBrwtO9dL;N`0ZPcTCAN}`PW@Ky?Ud@GZOSHAP~kl>lq>E2IDv(*cj>o@*IBQze% z%LUmc=Mq$!WGluA!kM~t&S*DSxIU>^2r9Q&WOS8RkBP^FwRyf;nmpo2kGy1kDBW{E zz!e(7g;Go>aof@xG6i2mW)OuwM{q)b#$8UIR|$jZ1ZP8Oh|PGKwinzdjO#Z`8-s-) zWmIgA$T9=9z2v<6M0lNpyBQIFqk;}W=B)d*S2sw>E7SmY^k9n`%E(EdcqRHZ37t6@ z4D7%v2jJ}hiuwl20eGnE;a2RRWl3c=0U|mAy%^}I$b|QD%ImHWCsMaDn91$_)_ha{ zRciqJ@H)Fmiyq*wBZX7!+at|%(jj{?Jx)o=$J~mg#_FZ`y;rckrGvg}wy*Nm6{;*U zM(qPYO`Bxm>4k#XcZHg(<7~}-3D;}=C~XXnid#pml`xOh19Frwnar6WJ4_a}#l^%> z3ncOu;Oq+Q@w{qyCUArE63fA05&pVMLqMjb-;?o{XN>rZG9!DgOAF>+1cbF*hQ*bz zDf3B9U!MozRs}I8(JC=57rBSmY1d3H4SC<}_~0FM)U($@G!lm9dxZ88i++GoG`w=+ zyMRn@+(ET=Umy{R=lrXY;`586UaE+(y0S4P)tpEMl6bX=`_BdC#;Y_w-{dXphGGFx z))unS48iK_()Xi_s)^rTU2b2ey>^v0PX?W zZYkdDkDQZ2tZi*ckf+#L>G#yEo!1Rws{Yb+-;xj=z(Gajg~)%Vr8mNRxZ`u04gNH- zsc?Q61Rx?+IQm@q2Z8>d83p5tq!J4zo`eeVcIi`2*xgBr!^K1)3K-9`nE%rA%Z+Cx zy1bwrNx0}Q(=~CQDZzx>BnItAoZBimr;3?u%RsmLsbJdfYvZQs#8c4A{3IFofb4z6 zx$|Q}$;~BV$rkpR{`uoq>}B=-DmqZ<9?l8#XDmyMfAz7-ctGMcHC0A~?cLeyY25{T_ z-ldS)+}&+hB-@=#R+R5nA8=Fbv32FyjYS&x_5E2FCWez3~v=)HwjLf{1TE zGtLjxUD;0A_N^n#nfwa<*_8s+kt zgmU4g*Ifc^eijw>07+{9eG)6obMQqvTLb9fU!M!0E2*!^_ixjw6r5o9Hnz5}w*lo8 zzCg41%NrvF}$(_Jp zX%-O^KbSFf*|xX%7a7iLtecQrVgQcn50?tK64))f86KVoxn&ElfWqleOop_6m97V2fU8U`5{ozOg)r$cCSPm;8(-aVy=#FZb)vl z*!K5*Ad~7zjjH$5k}v&l=xXN5r!>EfvZHTdfYdy?_$GhOOYVrGVI=HzQBrG#Y|Hw{ zD7iAlNcfN9Yy{Ny?B0AWh>Cv@elFri_JA7|ulVg883=@G{#;r6QgZ7F$DKqz#B{zJ zO_E!}{!d}yzqyBQccv?Ba>p@lU}T}i(&?=z7|CEL`7Id9fjY}{M|H=bzjhj7-ZCvd zb;~lS)ZCyl1vx@TSK-!mNT=3z^*>dC{gJv5r@Y6YE^kI^EN#qpF#J#;*9j$#InpEG z-`phuy6m;d8jJU=)lPUTUuMp)TjXkaY7CVKr3$s+fDX-?iISJ-Ry(`+VTY@12Vb)t zRvvVVv-MEdhE!Wr;r<(fNF$I~sA9@#yDt4OD0uq!=mO`zjV>sh6M~cr1bS!+m|!xK zlCK#)3>(JZDDwm{xYGzeAcgJt2QJ>b4@Me5CfH^D`k$X`@!vk?;(xw*BYP$0i1g8D z5x^My70-JJlG90ziqvDvU)=3dcUI98u(W-p^!Z_UI_n+m+|LnxE@oYc3?*uW`@Zy2 z_jrJsKcyC2T{;ZGs*|C!5yxZf?3HWKhB!jEQvi5v$!i_p5i zh*F5@HDBufAn4_c406PBeh|t8Ir$%x3mv1p8XW2q)f)zr^>ug684WpO&|Aqd=n7S# zq1IN44Y|)x6yXC25FDZ+2sV62EF{dFFilk9{cHZ_5&-hI)FBAq;djKcm4wc#gf>`x zgAXpg-8+wV05|fDWRHN+XF6CyG!s{`!*Q~cZ9bpifAOgZ9LUv207MO#%L?PKAr2#6s3U3FK-GbK)L zX_Oj8xUNYl-sSlM9LB%RGi?1EP{{FbK%vWdcv}3^G@1hw!jDhtsG*Ya|X2Zr<>bZ(`mq(!hgl=*3=zCS~5*8s#OiSm}uRV98DynZNNa^M{pgm!yW%Rkw($K6yN6Hnd#w9 zK8iE>vkfHMfEEtE4hK2$mD-t*WzSVhQ|{a5wVv;jurqBsuOPYbf`T-h>!_MM>@-5` z25bFgZHHg}i8_e7?V!W}Tal{|ZyUv=rwc?ZQv7d+)5`ouic6QkAS2`G0^_J0;;lOt zjC0=o81QTp7pL z?`B7xQ6VJc;dsL}(lBM7+~okjm9XpGJ2?|t)jc?8jKLb`ydk>Sl0+F(t{gPbB>?@A z1+bjY!WcMCYyNcr;qc$)(Ae7Q(4#MVRp2Wlm1sc0tpLf-x}AJP@fGK5`~hw}WXhua zuV@UW0{@;yaN?gLyF{v4^W&+0(9waxv!V7xG+GVF>1}HrI2^=!EKv61&IY*r=M3J0 z6P=M`kE$pyu%iYq{tP7`+zx4=+#dGtlR_1I4%JL zJz#Y8#L1oiUyPZrhS%#n)9C~}kw%ay%R!jGuq*$oN?!q0TI;>lPuGE8CcJqld4M}2 z@;bP1I0g@DI_U4nVcq(_(t$$#vA~4$B)W3XFLjP8dr|MNO*DLOA-1%445@M5rim#g z@v!gfPH}EjC~)AYgm>=M7G$HWeBv!t)IGjh4yiz3KmhH0T7-ykNazm)fVn&=hNn$p zpD%?9wTlr8mwn{J3`#=WXxPoaEW3c3rMfMw!10`x-j- zi$}B*B(JaWfxdTQi#h0kKXgXUUx_bg2QV^Fhz}=fDZrZm6^lGvVp)drWv*sDf@$v^ zn3?sHfoozw{oq4#P=~4UmCHmD`6Zs-G*DVfdVZ?yfQ0oiaz`1X|3S;XiT01)`cq9j zVMs(kbUMhW0S%-KXOk_MT8vl2Q=(_so6B3oIe6`H7PlKd`7H5^{)p|?|D!2B4BxaF z?Ifa&2-sZ?G{I;sK)JC1*$o~>^Ej9+#1=pKkYWCR9}@1!6z_Ro2j*JCldFm@aH*|f zN-zd6Ac@-TfDcp!Q;MSh5f$IL+Mj#+YO%*@Fbqu(>=o21aG9NeYJhK4@+k*2@%(l+bt^Z(U=;CBf12PXgp3INydqBMkA8cI+c z!1XA>@wY;JZtY3N&4?!CN%GAbY5>nXF#+gwE?`IPwA*j#0{hOWPM&H7T647p7inOi zzv=^`p+Y`PDs!MN%aAENr%#%4Q>?W+UZvE>IO`!Q&x7R_m zQU%4-|L^s>94^=5_7^fB*mtqMY8a%#8DnZjHmcDd^%`Xii9_IYPGGZcCYoa&adPK~ zg8{1H`)cGQ_8)*`kHlYSbQ>MDRx#%szi8*v(ne-JTyF4dOn=*?wdnOB6%3H2QL$v| z$x>@CHp7*UJ;t&bo#M&1Wk%mD`lM)E!ch5)JiE&wR;ASs9ep`ii9i|vmC9$*{ z8X)rB0hO%6_?H3XGmNPCeMx)W%q{To`6aT-;m~NwEui#3hjEBm3ykB*vw;B5jj&LQ zNy)V4z~V?IWW*jzztMTnNSwul3&shraHe6(C69!Lfxb8VU##!t#h35)NKv6w9{}b! zZKPLxe#~i9x`asKkMsgnVM}b01YN;)oG3s;2`5kGey4ptS@GRj=~Bi@4CU{s6ff}g zdm~TTx%BG)oUS3(emD1(P65`_%haL;uKod)j7SmFSii@l{CwAN76X zQ+}KS*fb^Qzn8gud|xlT#c5!0Fc6@! zRM0mLMTmEmKdEF* zKJ)eP&;Kwb^IgBZ*5_YN$&lwFDy+l6x zoL5-Jb|BJ7+vGYaDP|>@8eQjBbMcA7T#+)LSK@iL*p4$~n~E_d_`uH7UsN&2n!>n6 z;8y|lY5+*_|3du#Q>C|w0Gj&|U1JdjxKc#em+b|&%fsa0UD|W7-;2K{4F*ZQg4UPC zP+cN<``-$qXf2Gn13;6v`u)FE3BS5lQQhq+cWMnkMH0^_7tOmX9I=(KYFDAAs zp+7`c`BCsNGb558^^qiusC11NmU`yxL;-2sT%&)Toa{rvWS z0zo!d+tCK3llu5DoP_!J36z-M316r05R`}dz6&@Z6$zrq2Idw>T?|=&9ZUu0)%Lw@ z|79ix%e6rIyqs)Nt1vxMj)S}x8DUg4*yT$-zgdL zQUgcV00D?U*lrO*GV(t!0DiCe!~lUm<|TTF^AgH)ZmM8jB7|LSC7Ee;kJsbv+>}0; z&uZxtf2W7(p4UU`c5Aai1zb_4(GOG>} z68yW2MCA4bVEwFOqR-=!w7}Cmz}v6LsTL;Fz9sMEBPLDgzIn$7;1Mige?wUy>T*BX zp=VEt06q7mf-JtS{NLQ2B;yj)ohdGS!Dt3uoWJ%R*{eszifWueX9< zN@NOwJWG_PZhUC{^14V=ke+&^gLV|KVG-InV4n4tR@JZs$w+fr=m%0}u6`khmk zck|KSWmLw|-p`SA*XxhvFylo+Jqz8IHNw4 zLJwjy#0lT92en)vSkq)7FQXUd2TR)Dwp~7KbGFwg`Ye~~sPu>cEo8npOeJ^VJGq=R z?TzeG+>^$#+a1KdOJ!;GkgrZY3g5NjU7jAEmLOm{QAjfEXK{kHXasu^Oa8alXIYA# zHuAmtv>mN=Q_kk)^}=WbB?i`mB8aCD23oPlA}@D1hs;9w{cY%9ryv>}@JVf?+Un}H zjKnv&xlK;eaM9DR{Py2^Otdizp_0`>PKgsR?by{@c?;8}Up};TKkXE4oAq0?-?B6c zw0_HDqU?wW`IWDof_NrI=s{$mo3Xx2p0soj{wV#VWT`()D<0gR^B9 zk=dD@e(YsJ*Ro2Me?WdXI&nk6225Edx@E=WzOy_06zGMXrm{bjJ=Vvn!n|BLzHbzr zkku^s%?wY&BEluL?glkvhGQ>3M@Vm{mD(^O#0g#7uMjRWODgr^gpvvN9xT;2GCwap zN;(%5V(YUv*9;8W546s3i@;gK+An&U!XEOPfRZiy7SPR=^x>HnU1Z4{E!9(MAtEr63N1k_Z7|s_}4} z@YGa8(x2y$6h6MZn%7!-a|6{~T^y}Q8&#gr1t_squ`5Nj4sL6|M>{#^rFYNK1@C<( zVVylT*xbUC@6+#~*_TufQxNEiE|dVrHm4EEjc7lW|9mIORJ;dR_w%z6k$V* z5SK#0(-c7WRO(KQlvY!1GoKd~7l%1}nr3md7|Gq|&cO6q`5_j#;@~z^O?WoHy*6g3 zX+eumrXB)5?sN^`|e6aWb)3_8#yS&_0=x8hw&z9&A|A0 zn2IPI_AL4`JtIh0zxd@H9V^t7$RvwRd^Bg+u2S?s{l0ev<%eKtu+loAnYq6r zg&ke$NShjS(8$qPf2KOOekHdde`DVXrfcIj0!L*0<62w2P!7kRP4P*iqAL&5?eS_t z1Sbc4DnT`*jjn*-#=lIX>^xnQ@+r67pW-WSi;WH7P|tWE4g8c?EpJU2?G5p0lMX~l z`+eL}1G`&q9amDNSvx&GevJ8E$Wz9|BPAzqunyze;j}z5V+ZGsvoyK<(Q}=lSCQJ? zvw|07IVUAQw@i247hsk0IhB~0n8(I}Sp{*jVzTG}PViM*4OR^$3u~-BD4r#iZ85@z z##Maq6PWGo$#9rijB13I(idNb?c6jz6^V;kc9bqw=O!2SUC*cn>NXbr&BTcSNi2v^;%OW4oy0xJ)A0Hf(G-pN;cY%`mu1ySU>Sq=7y<2sxsK zEvZOq=;F!FlJ<^1;{bb}%$uh4&3!hs5!mCQBrkF6}9@5_4DHco&MjyKf|aK0qR3@?o&LOU_hw5#Guc3JqPh$S2J5lg5V9#_jHlGPU~ zm|hxrLE2jJW7knmjP7l$_`t!5#q=?}J>I_qd(0UOcFprd1d1lha@SA8(H_4ScQhiC zzr(prkq{A~O--U7s;REdSYi%EMrbGh*N;E6`^`o2?q8zyl1_1DT3M$(1``VO7Z+5(IiE96sNRQtTJzh)%YCQ?O_6*q*#! z4*eEd12{MR`Q^pM2bKYqafY+V>0`*<{Ruh5%E)vPm(G&#Q&o}jZF#*e;dO3wN-y+&D`4KurW|xdr&_1?Nsrtd*v3L zy&4SDU9CN%hc7C_1TNRFE>9m7ZgE=LgbSF{yoXv(^7ic`uc63 zgHk^WW%dFq*sl5788X36fN$JgwO0L-nV~UO%aY|mKj4GAoYosO?9|rSrTbD!M(f(K zzhHptLeLyrS_yIoj6M;u13n z)YaW>T(v;~scwu%}Ip zy;thLu&7%#**f^OkGT8QU~iX)v_7DG_@z9@r|JG^;{CQ)ib7omeo?~SHx+AVMIw~0 zUI6(t)Rr)>oSWDNCSMNNa>-Z#h=PJyDPZCxhYUGOe5Q{$J_UP@+NnMUTA3ORXe-vd!a__hrmjhsCsn$ zS*A1My9zXf;YT-6M2|iOy@7e%$-(=L8HdNXol0C7;672z4DUkX0dr)~kSkPOzQdv|aIN8P$t_?LgO8ydQTv_+r z91)L%0_a5>^0cv)&m2O_&3s%R9grRFbw1?1a3Q;LPa_%2T* zqq8SiUn2*(2xsAj^I>sxn_hSa^E!{>IW3-|bJO-^Cx(ZI1#TUX;_ohwq=?y({#sq# z%0y-~WAig}Dk^Tg;1Nq7QE`i4hL%Kej7pO-;zB#rH_XhaDq`%9LAwFSVsZQRO(KT< zKv_^w&{p!S+FM*nBZ1cN^+F{Mo=GJT*U%N6DeigFwnxL=f<|6m0q4I8@8CS5^2J`P zA$=07syC)>I{z*|f3`iAeaIO^$G>hRh5_?!Egn!!SB%wZqklQWrNCMnG;OT_aTCzZ& zLY||Qw;y!q+?|!A z1P&A9w2q)C{4?ev$g`JySP}m4B731OwxU9EWh<6lM$BdPCbZ9;r-}XYf}ad3)t2#u zAZi5h9swfO^(T@t*6aG&-kc4HaFj!L$OZtxqBl#!Y5e9q(O=m3@1ux?E*@yIXj*gB@(9JL9SplRgmVbuQmNV>YqWji$dqQ444q$vHXxbC8`@R_5 zmWC>Y5f*ZadvIA9#?BDD@3OA{VeFxpt>8mx_L!SOG0Jc#upKlyUNJPJ1y#g?t*SS( z)Qh*Ce6M_VAY1Kq`-nZx8L2=r(}yv$J_AmGk-qA=%AMjX zvCpuXC31>!@$nrq&B23(u7)EPeHblc#E*b@=C}4f9d3RVVoZA-r#meO1w~u5Se(3d z>VfhZEUs2?%X96JQWc#?rr_b1dngbrvrU@UjzIu~G+c+}YCbLyizioP8s7@`k3Uf) z$NaNyKi-_Ya=?GNGuL~f+F=5Flv3?q*Wy}WxwZH$#>T{CXt}1OL}ap+ii_#WVDGK2 zg9zp|JWs91o%s#5n#19+(4id_LgrjH2_$s$J!q9f#V`roEMPEdIRsd0SU)ZJ1$Lfw zK?fq>o9~p5Ux98wt|>+v0Z!uCu;{O=r+51DWeETzHXOkE-pB=~vay{Xgd0vHY{ofV z7gG*XOuurEy6GN2E3T_!x9Q7>1#3Bv%7C8@sMXN!<_3I2&I9@(dHC|4M{++^-H9sy z-RHA7ei3drOSFr@`lL$E{sw0m!qVlERG6yP1ybkl@0&X~5iwHE-)(Q?Y>QXMp|U@X zet=i|+pJ^;O*bds(a;fcg8t?9;nQec5el1Ui0gTx+^w^!|j<% z&u^$sf1H*#ppMXYZu%4sQ#G_C`(_oCiNLc#AF}E>!1|uv-L;)*3M}g2RQ8jFeU4{U z@ObZ3Mv_%lMh|YOAePoEfQ!$kL-D?D6%{sBQnnQhVtCh2_DZ;%fJ`_nY(NRwC?7HZ zR(t$-wrG&7e)METb+rRX;U994dcdS2%}1#*ZPl(+R`!^nxjt9z&>_>=<#Y1wx8_l7 z`aJ$iTwh-nET0V&&=+4AP1X8j^|a9%=nLGIg5UaKvEt@;j4SFe)HR@lPO*wX$s*R@ZeyoK ztYcojWR#Sa&bjlIZ?erWb=P^t&0$i7QI5(O4x8DgK#Jd;Q}=6d=g&x0V2L)nTlfSv zQ`*C1&a`2x>2nrsVb1DIr9aI?nsL;_odKGhkbx_Oe$mGQ8 z47%H@mErJkLc>1f{~)EF|8Rd_?+R|yKUQ>~95EOo!!NC`qwt9nE0XIIdcW8>~KlF*C9p(RQ@aA4q_K%4Y-vEZS zY!&RJwFUxeTj_|}IinM*6>DL8^+F@_RXg0*M3Z&&!41cfCAk|8(aBqEHt4NI3fHe) z=gufK35OHHvKdZ&x+!Wqq44VzMIxrcno!BSwtuX|B0yh=oKb%ZL9vk2;b|8^_n(Ik}8^?PwDOV(PcYF3nmt9Dm^)J?7ay_lJ=XuKLe1^hSz; za>d;rH9b_oZlLiEP*=~>v!<~Hwf(%3L(M+RBo8v_SNBrhix^iArwyo4}mKhO4W86U7Mz0Hqia8+k?R zK0l~IrlRtCJ3AEKvvoksT`@K$YDl2u%IJQhf8Os0Bb5U8@_6(}c>l(Ytg0$z@X_I5 zz1EEB-i^mZMY(#3IoSME8{+ouOV7bqGR0F20EGY+eMzmc$A-hjGY|aO^#|1_+GZm$DCceD9e9L4@D@EDAHizaywa>8Nd1*dPL096M zZSmn_N7?JgCX2_P(9;`xt&SLH0VPH7$fuA_(=S|HnU75pIz1RnrNFUE3YCeAn>RQm z-5@WuYKV&KGkE&cgIk7QE8)O8G9u!Qx8jMVXi=0zMCd~0h_$;{?@?LelzGj^{$^o& z+Rb7np^)UJt+b^lsCc=Ge#6 zjjc~-n+^*p$x1+;IcEu0R7!tnu`YQU4Qu!Z5Q zu#yBD@1}eJrM-TgkdP4Y^QR*(FKehu9r@Y2(Vie{d)1%UT# zIL1d(N@}+8cth>_bq07rDcW74{>z=;TGJ$=C(MA5%UrIlt%V>U&zyuQ!3WtgeFNB| zqECaH|3CqNv<%FSDs0?4ca z7S?TKVKIg#ELg3*yaeCIMQ+$HEG?Ws-L7W^Wgoa#>R;aK!@?aGB_t$*D)PX-HNXl6 z1h|A=G;cM}m;*64Jg06?>-DCZJy~%3 PEl5YhK)vLuZP0%JA$pC? literal 23702 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 MQopZOs$vuNUnppW^8f$< From 66f2acb931d77c46b40c8d0818287ed9fd7ab9b5 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 27 Feb 2018 11:34:57 -0500 Subject: [PATCH 23/23] Handle NIF examine saving string vs null --- code/modules/nifsoft/nif.dm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 19cd74b885..da4594d557 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -70,7 +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() - examine_msg = save_data["examine_msg"] || "There's a certain spark to their eyes." + 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)) @@ -591,10 +596,10 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //They clicked cancel or meanwhile lost their NIF if(!nif || isnull(new_flavor)) return //No changes - //Sanitize or they cleaned it entirely + //Sanitize or user cleaned it entirely if(!new_flavor) - nif.examine_msg = null - nif.save_data -= "examine_msg" + nif.examine_msg = "" + nif.save_data["examine_msg"] = "" else nif.examine_msg = new_flavor nif.save_data["examine_msg"] = new_flavor