diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index e51b4825cc0..6bdf71c5254 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -15,9 +15,11 @@
/obj/machinery/portable_atmospherics/New()
..()
-
- air_contents.volume = volume
- air_contents.temperature = T20C
+ //VOREStation Edit - Fix runtime
+ if(air_contents)
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ //VOREStation Edit End
return 1
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 54e9b58cbf5..655aa012a01 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -190,7 +190,12 @@
var/clr
if(get_trait(TRAIT_BIOLUM_COLOUR))
clr = get_trait(TRAIT_BIOLUM_COLOUR)
- splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr)
+ //VOREStation Edit Start - Tons of super bright super long range lights everywhere is annoying and laggy, so let's limit it a bit.
+ var/blight = get_trait(TRAIT_BIOLUM)
+ if(blight >= 5)
+ blight = 5
+ splat.set_light(blight, 0.5, l_color = clr)
+ //VOREStation Edit End
var/flesh_colour = get_trait(TRAIT_FLESH_COLOUR)
if(!flesh_colour) flesh_colour = get_trait(TRAIT_PRODUCT_COLOUR)
if(flesh_colour) splat.color = get_trait(TRAIT_PRODUCT_COLOUR)
@@ -836,8 +841,12 @@
var/clr
if(get_trait(TRAIT_BIOLUM_COLOUR))
clr = get_trait(TRAIT_BIOLUM_COLOUR)
- product.set_light(get_trait(TRAIT_BIOLUM), l_color = clr)
-
+ //VOREStation Edit Start - Tons of super bright super long range lights everywhere is annoying and laggy, so let's limit it a bit.
+ var/blight = get_trait(TRAIT_BIOLUM)
+ if(blight >= 5)
+ blight = 5
+ product.set_light(blight, 0.5, l_color = clr)
+ //VOREStation Edit End
if(get_trait(TRAIT_STINGS))
product.force = 1
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index 393089ebff0..e820af130ed 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -77,6 +77,10 @@
spread_chance = 0
/obj/effect/plant/New(var/newloc, var/datum/seed/newseed, var/obj/effect/plant/newparent)
+ //VOREStation Edit Start
+ if(istype(loc, /turf/simulated/open))
+ qdel(src)
+ //VOREStation Edit End
..()
if(!newparent)
@@ -159,7 +163,12 @@
var/clr
if(seed.get_trait(TRAIT_BIOLUM_COLOUR))
clr = seed.get_trait(TRAIT_BIOLUM_COLOUR)
- set_light(1+round(seed.get_trait(TRAIT_POTENCY)/20), l_color = clr)
+ //VOREStation Edit Start - Tons of super bright super long range lights everywhere is annoying and laggy, so let's limit it a bit.
+ var/blight = 1+round(seed.get_trait(TRAIT_POTENCY)/20)
+ if(blight >= 5)
+ blight = 5
+ set_light(blight, 0.5, l_color = clr)
+ //VOREStation Edit End
return
else
set_light(0)
diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm
index eebcbc93892..f85209884b0 100644
--- a/code/modules/hydroponics/spreading/spreading_growth.dm
+++ b/code/modules/hydroponics/spreading/spreading_growth.dm
@@ -4,8 +4,10 @@
var/list/cardinal_neighbors = list()
for(var/check_dir in cardinal)
var/turf/simulated/T = get_step(get_turf(src), check_dir)
- if(istype(T))
+ //VOREStation Edit Start - Vines can go up/down stairs, but don't register that they have done this, so do so infinitely, which is annoying and laggy.
+ if(istype(T) && !istype(check_dir, /turf/simulated/open)) //Let's not have them go on open space where you can't really get to them.
cardinal_neighbors |= T
+ //VOREStation Edit End
return cardinal_neighbors
/obj/effect/plant/proc/update_neighbors()
@@ -114,6 +116,10 @@
//spreading vines aren't created on their final turf.
//Instead, they are created at their parent and then move to their destination.
/obj/effect/plant/proc/spread_to(turf/target_turf)
+ //VOREStation Edit Start - Vines can go up/down stairs, but don't register that they have done this, so do so infinitely, which is annoying and laggy.
+ if(istype(target_turf, /turf/simulated/open))
+ return
+ //VOREStation Edit End
var/obj/effect/plant/child = new(get_turf(src),seed,parent)
spawn(1) // This should do a little bit of animation.
diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm
index f396b00dbf3..4a9e37e30e7 100644
--- a/code/modules/hydroponics/trays/tray_soil.dm
+++ b/code/modules/hydroponics/trays/tray_soil.dm
@@ -41,6 +41,10 @@
icon_state = "blank"
/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/New(var/newloc,var/datum/seed/newseed)
+ //VOREStation Addition Start
+ if(istype(loc, /turf/simulated/open) || istype(loc, /turf/space))
+ qdel(src)
+ //VOREStation Addition End
..()
seed = newseed
dead = 0
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
index 97f5e636f5b..be4e903681e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/softdog.dm
@@ -263,4 +263,53 @@
visible_message("[src] stops playing dead.", runemessage = "[src] stops playing dead")
else
M.visible_message("The petting was interrupted!!!", runemessage = "The petting was interrupted")
- return
\ No newline at end of file
+ return
+
+/mob/living/simple_mob/vore/woof/hostile/aweful
+ maxHealth = 100
+ health = 100
+ var/killswitch = FALSE
+
+
+/mob/living/simple_mob/vore/woof/hostile/aweful/Initialize()
+ . = ..()
+ var/thismany = (rand(25,500)) / 100
+ resize(thismany, animate = FALSE, uncapped = TRUE, ignore_prefs = TRUE)
+
+/mob/living/simple_mob/vore/woof/hostile/aweful/death()
+ . = ..()
+ if(killswitch)
+ visible_message("\The [src] evaporates into nothing...")
+ qdel(src)
+ return
+ var/thismany = rand(0,3)
+ var/list/possiblewoofs = list(/mob/living/simple_mob/vore/woof/hostile/aweful/melee, /mob/living/simple_mob/vore/woof/hostile/aweful/ranged)
+ if(thismany == 0)
+ visible_message("\The [src] evaporates into nothing...")
+ if(thismany >= 1)
+ var/thiswoof = pick(possiblewoofs)
+ new thiswoof(loc, src)
+ visible_message("Another [src] appears!")
+ if(thismany >= 2)
+ var/thiswoof = pick(possiblewoofs)
+ new thiswoof(loc, src)
+ visible_message("Another [src] appears!")
+ if(thismany >= 3)
+ var/thiswoof = pick(possiblewoofs)
+ new thiswoof(loc, src)
+ visible_message("Another [src] appears!")
+ qdel(src)
+
+/mob/living/simple_mob/vore/woof/hostile/aweful/melee
+
+ movement_cooldown = 0
+
+ ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile
+
+/mob/living/simple_mob/vore/woof/hostile/aweful/ranged
+ movement_cooldown = 0
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof
+
+ projectiletype = /obj/item/projectile/awoo_missile
+ projectilesound = 'sound/voice/long_awoo.ogg'
diff --git a/code/modules/multiz/stairs.dm b/code/modules/multiz/stairs.dm
index 5ce4b2ec264..59e6374895c 100644
--- a/code/modules/multiz/stairs.dm
+++ b/code/modules/multiz/stairs.dm
@@ -148,10 +148,12 @@
// Or if we fell down the openspace
if((top in oldloc) || oldloc == GetAbove(src))
return
-
+ //VOREStation Addition Start
+ if(istype(AM, /obj/effect/plant))
+ return
+ //VOREStation Addition End
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
-
if(AM.pulledby) // Animating the movement of pulled things is handled when the puller goes up the stairs
return
@@ -199,7 +201,10 @@
/obj/structure/stairs/bottom/use_stairs_instant(var/atom/movable/AM)
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
-
+ //VOREStation Addition Start
+ if(istype(AM, /obj/effect/plant))
+ return
+ //VOREStation Addition End
if(isliving(AM))
var/mob/living/L = AM
@@ -401,10 +406,12 @@
// Or if we climb up the middle
if((bottom in oldloc) || oldloc == GetBelow(src))
return
-
+ //VOREStation Addition Start
+ if(istype(AM, /obj/effect/plant))
+ return
+ //VOREStation Addition End
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
-
if(AM.pulledby) // Animating the movement of pulled things is handled when the puller goes up the stairs
return
@@ -450,10 +457,12 @@
/obj/structure/stairs/top/use_stairs_instant(var/atom/movable/AM)
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
-
+ //VOREStation Addition Start
+ if(istype(AM, /obj/effect/plant))
+ return
+ //VOREStation Addition End
if(isliving(AM))
var/mob/living/L = AM
-
if(L.grabbed_by.len) // Same as pulledby, whoever's holding you will keep you from going down stairs.
return