From 3f48e8ae073026e34e491946c06c77e052d66fd2 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Wed, 19 Jul 2017 15:30:22 -0400 Subject: [PATCH] Attempted wilderness performance increase (#1841) * Attempted wilderness performance increase * might as well * Edit comments * Moves alien change out of polaris file --- code/game/objects/random/random.dm | 9 ++++ code/game/objects/random/random_vr.dm | 19 +++++++- .../living/simple_animal/aliens/alien_vr.dm | 32 +++++++++++++ .../mob/living/simple_animal/simple_animal.dm | 7 +++ maps/tether/tether-11-wild-surface.dmm | 10 ++--- maps/tether/tether_defines.dm | 45 +++++++++++++++++++ maps/tether/tether_things.dm | 20 +++++++++ vorestation.dme | 1 + 8 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/aliens/alien_vr.dm diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 7b781b93f2..b5ff29ccb6 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -5,6 +5,8 @@ icon_state = "rup" var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything + var/spawned_thing //VOREStation Edit + // creates a new object and deletes itself /obj/random/New() @@ -28,6 +30,13 @@ A.pixel_x = pixel_x A.pixel_y = pixel_y +//VOREStation Edit + spawned_thing = A + +/obj/random/Destroy() + spawned_thing = null + return ..() +//VOREStation Edit End /obj/random/single name = "randomly spawned object" diff --git a/code/game/objects/random/random_vr.dm b/code/game/objects/random/random_vr.dm index 5e15f54e21..b337bd5b6e 100644 --- a/code/game/objects/random/random_vr.dm +++ b/code/game/objects/random/random_vr.dm @@ -193,4 +193,21 @@ this_mob.minbodytemp = 200 return this_mob else - return mob \ No newline at end of file + return mob + +/obj/random/outside_mob/spawn_item() + ..() + var/datum/map_z_level/z_level = get_z_level_datum(spawned_thing) + if(!istype(z_level, /datum/map_z_level/tether/wilderness)) + return + if(!istype(spawned_thing, /mob/living/simple_animal)) + return + var/datum/map_z_level/tether/wilderness/wilderness = z_level + if(wilderness.activated) + return + var/mob/living/simple_animal/M = spawned_thing + wilderness.frozen_mobs += M + M.life_disabled = 1 + for(var/i = 1 to 20) //wander the mobs around so they aren't always in the same spots + step_rand(M) + sleep(2) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/aliens/alien_vr.dm b/code/modules/mob/living/simple_animal/aliens/alien_vr.dm new file mode 100644 index 0000000000..6595d7dd51 --- /dev/null +++ b/code/modules/mob/living/simple_animal/aliens/alien_vr.dm @@ -0,0 +1,32 @@ +/mob/living/simple_animal/hostile/alien/proc/disable_for_wilderness() + var/datum/map_z_level/z_level = get_z_level_datum(src) + if(!istype(z_level, /datum/map_z_level/tether/wilderness)) + return + var/datum/map_z_level/tether/wilderness/wilderness = z_level + if(wilderness.activated) + return + life_disabled = 1 + wilderness.frozen_mobs += src + for(var/i = 1 to 20) + step_rand(src) + sleep(2) + +/mob/living/simple_animal/hostile/alien/wilderness_spawn/New() + ..() + disable_for_wilderness() + +/mob/living/simple_animal/hostile/alien/drone/wilderness_spawn/New() + ..() + disable_for_wilderness() + +/mob/living/simple_animal/hostile/alien/sentinel/wilderness_spawn/New() + ..() + disable_for_wilderness() + +/mob/living/simple_animal/hostile/alien/queen/wilderness_spawn/New() + ..() + disable_for_wilderness() + +/mob/living/simple_animal/hostile/alien/queen/large/wilderness_spawn/New() + ..() + disable_for_wilderness() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0e121e1481..e987ec3500 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -154,6 +154,7 @@ var/follow_until_time = 0 // Give up following when we reach this time (0 = never) var/annoyed = 0 // Do people keep distract-kiting us? ////// ////// ////// + var/life_disabled = 0 //VOREStation Edit -- For performance reasons /mob/living/simple_animal/New() ..() @@ -256,6 +257,12 @@ icon_state = initial(icon_state) /mob/living/simple_animal/Life() + + //VOREStation Edit + if(life_disabled) + return 0 + //VOREStation Edit End + ..() //Health diff --git a/maps/tether/tether-11-wild-surface.dmm b/maps/tether/tether-11-wild-surface.dmm index b3b9781176..f5d31ad64e 100644 --- a/maps/tether/tether-11-wild-surface.dmm +++ b/maps/tether/tether-11-wild-surface.dmm @@ -155,12 +155,12 @@ "cY" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/outside/wilderness) "cZ" = (/turf/simulated/wall/sandstonediamond,/area/tether/surfacebase/temple) "da" = (/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) -"db" = (/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) -"dc" = (/mob/living/simple_animal/hostile/alien,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) -"dd" = (/mob/living/simple_animal/hostile/alien/sentinel,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) +"db" = (/mob/living/simple_animal/hostile/alien/drone/wilderness_spawn,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) +"dc" = (/mob/living/simple_animal/hostile/alien/wilderness_spawn,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) +"dd" = (/mob/living/simple_animal/hostile/alien/sentinel/wilderness_spawn,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) "de" = (/obj/item/weapon/material/star,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) -"df" = (/mob/living/simple_animal/hostile/alien/queen,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) -"dg" = (/obj/effect/decal/mecha_wreckage/phazon{anchored = 1; name = "rusted Phazon wreckage"},/mob/living/simple_animal/hostile/alien/queen/large,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) +"df" = (/mob/living/simple_animal/hostile/alien/queen/wilderness_spawn,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) +"dg" = (/obj/effect/decal/mecha_wreckage/phazon{anchored = 1; name = "rusted Phazon wreckage"},/mob/living/simple_animal/hostile/alien/queen/large/wilderness_spawn,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) "dh" = (/obj/item/weapon/cell/infinite,/obj/effect/gibspawner/human,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) "di" = (/obj/item/weapon/material/sword/katana,/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/temple) diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 6df6af4bad..37c8f80918 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -231,3 +231,48 @@ name = "Empty" flags = MAP_LEVEL_PLAYER transit_chance = 82 + +/datum/map_z_level/tether/wilderness + name = "Wilderness" + flags = MAP_LEVEL_PLAYER + var/activated = 0 + var/list/frozen_mobs = list() + +/datum/map_z_level/tether/wilderness/proc/activate_mobs() + if(activated && isemptylist(frozen_mobs)) + return + activated = 1 + for(var/mob/living/simple_animal/M in frozen_mobs) + M.life_disabled = 0 + frozen_mobs -= M + frozen_mobs.Cut() + +/datum/map_z_level/tether/wilderness/wild_1 + z = Z_LEVEL_SURFACE_WILDERNESS_1 + +/datum/map_z_level/tether/wilderness/wild_2 + z = Z_LEVEL_SURFACE_WILDERNESS_2 + +/datum/map_z_level/tether/wilderness/wild_3 + z = Z_LEVEL_SURFACE_WILDERNESS_3 + +/datum/map_z_level/tether/wilderness/wild_4 + z = Z_LEVEL_SURFACE_WILDERNESS_4 + +/datum/map_z_level/tether/wilderness/wild_5 + z = Z_LEVEL_SURFACE_WILDERNESS_5 + +/datum/map_z_level/tether/wilderness/wild_6 + z = Z_LEVEL_SURFACE_WILDERNESS_6 + +/datum/map_z_level/tether/wilderness/wild_crash + z = Z_LEVEL_SURFACE_WILDERNESS_CRASH + +/datum/map_z_level/tether/wilderness/wild_ruins + z = Z_LEVEL_SURFACE_WILDERNESS_RUINS + +/proc/get_z_level_datum(atom/A) + var/turf/T = get_turf(A) + var/datum/map_z_level/z_level = using_map.zlevels["[T.z]"] + if(z_level) + return z_level \ No newline at end of file diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index 527ef30cae..772a2ea845 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -81,6 +81,26 @@ else teleport_y = src.y +/obj/effect/step_trigger/teleporter/wild/Trigger(var/atom/movable/A) + ..() + var/datum/map_z_level/z_level = get_z_level_datum(A) + if(!istype(z_level, /datum/map_z_level/tether/wilderness)) + return + var/datum/map_z_level/tether/wilderness/wilderness = z_level + if(wilderness.activated) + return + if(isliving(A)) + var/mob/living/M = A + if(!M.is_dead() && M.client) + wilderness.activate_mobs() + return + for(var/mob/living/M in A) + if(!istype(M)) + continue + if(!M.is_dead() && M.client) + wilderness.activate_mobs() + return + /obj/effect/step_trigger/teleporter/wild/from_wild ..() teleport_z = Z_LEVEL_SURFACE_LOW diff --git a/vorestation.dme b/vorestation.dme index 80850b3bb3..43456d223d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1883,6 +1883,7 @@ #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\simple_animal_vr.dm" #include "code\modules\mob\living\simple_animal\aliens\alien.dm" +#include "code\modules\mob\living\simple_animal\aliens\alien_vr.dm" #include "code\modules\mob\living\simple_animal\aliens\creature.dm" #include "code\modules\mob\living\simple_animal\aliens\drone.dm" #include "code\modules\mob\living\simple_animal\aliens\faithless.dm"