diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index f0747bc2f89..80964a3b108 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -255,4 +255,55 @@
icon_state = "strawbail2"
/obj/structure/flora/straw_bail/alt_2
- icon_state = "strawbail3"
\ No newline at end of file
+ icon_state = "strawbail3"
+
+/obj/structure/bush
+ name = "foliage"
+ desc = "Pretty thick scrub, it'll take something sharp and a lot of determination to clear away."
+ icon = 'icons/obj/flora/plants.dmi'
+ icon_state = "bush1"
+ density = 1
+ anchored = 1
+ layer = 3.2
+ var/indestructable = 0
+ var/stump = 0
+
+/obj/structure/bush/New()
+ if(prob(20))
+ opacity = 1
+
+/*
+/obj/structure/bush/Bumped(M as mob)
+ if (istype(M, /mob/living/simple_animal))
+ var/mob/living/simple_animal/A = M
+ A.loc = get_turf(src)
+ else if (istype(M, /mob/living/carbon/monkey))
+ var/mob/living/carbon/monkey/A = M
+ A.loc = get_turf(src)
+*/
+
+/obj/structure/bush/attackby(var/obj/I as obj, var/mob/user as mob, params)
+ //hatchets can clear away undergrowth
+ if(istype(I, /obj/item/weapon/hatchet) && !stump)
+ if(indestructable)
+ //this bush marks the edge of the map, you can't destroy it
+ user << "\red You flail away at the undergrowth, but it's too thick here."
+ else
+ user.visible_message("\red [user] begins clearing away [src].","\red You begin clearing away [src].")
+ spawn(rand(15,30))
+ if(get_dist(user,src) < 2)
+ user << "\blue You clear away [src]."
+ var/obj/item/stack/sheet/wood/W = new(src.loc)
+ W.amount = rand(3,15)
+ if(prob(50))
+ icon_state = "stump[rand(1,2)]"
+ name = "cleared foliage"
+ desc = "There used to be dense undergrowth here."
+ density = 0
+ stump = 1
+ pixel_x = rand(-6,6)
+ pixel_y = rand(-6,6)
+ else
+ qdel(src)
+ else
+ return ..()
\ No newline at end of file
diff --git a/code/modules/jungle/falsewall.dm b/code/modules/jungle/falsewall.dm
deleted file mode 100644
index d2d21628d55..00000000000
--- a/code/modules/jungle/falsewall.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-//simplified copy of /obj/structure/falsewall
-
-/obj/effect/landmark/falsewall_spawner
- name = "falsewall spawner"
-
-/obj/structure/temple_falsewall
- name = "wall"
- anchored = 1
- icon = 'icons/turf/walls.dmi'
- icon_state = "plasma0"
- opacity = 1
- var/closed_wall_dir = 0
- var/opening = 0
- var/mineral = "plasma"
- var/is_metal = 0
-
-/obj/structure/temple_falsewall/New()
- ..()
- spawn(10)
- if(prob(95))
- desc = pick("Something seems slightly off about it.","")
-
- var/junction = 0 //will be used to determine from which side the wall is connected to other walls
-
- for(var/turf/unsimulated/wall/W in orange(src,1))
- if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
- junction |= get_dir(src,W)
-
- closed_wall_dir = junction
- density = 1
- icon_state = "[mineral][closed_wall_dir]"
-
-/obj/structure/temple_falsewall/attack_hand(mob/user as mob)
- if(opening)
- return
-
- if(density)
- opening = 1
- if(is_metal)
- icon_state = "metalfwall_open"
- flick("metalfwall_opening", src)
- else
- icon_state = "[mineral]fwall_open"
- flick("[mineral]fwall_opening", src)
- sleep(15)
- src.density = 0
- set_opacity(0)
- opening = 0
- else
- opening = 1
- icon_state = "[mineral][closed_wall_dir]"
- if(is_metal)
- flick("metalfwall_closing", src)
- else
- flick("[mineral]fwall_closing", src)
- density = 1
- sleep(15)
- set_opacity(1)
- opening = 0
diff --git a/code/modules/jungle/jungle.dm b/code/modules/jungle/jungle.dm
deleted file mode 100644
index f22f0dede9a..00000000000
--- a/code/modules/jungle/jungle.dm
+++ /dev/null
@@ -1,345 +0,0 @@
-//some testin stuff
-
-#define PATH_SPREAD_CHANCE_START 90
-#define PATH_SPREAD_CHANCE_LOSS_UPPER 80
-#define PATH_SPREAD_CHANCE_LOSS_LOWER 50
-
-#define RIVER_SPREAD_CHANCE_START 100
-#define RIVER_SPREAD_CHANCE_LOSS_UPPER 65
-#define RIVER_SPREAD_CHANCE_LOSS_LOWER 50
-
-#define RANDOM_UPPER_X 100
-#define RANDOM_UPPER_Y 100
-
-#define RANDOM_LOWER_X 18
-#define RANDOM_LOWER_Y 18
-
-/area/jungle
- name = "jungle"
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "area"
- lighting_use_dynamic = 0
- luminosity = 1
-
-//randomly spawns, will create paths around the map
-/obj/effect/landmark/path_waypoint
- name = "path waypoint"
- icon_state = "x2"
- var/connected = 0
-
-/obj/effect/landmark/temple
- name = "temple entrance"
- icon_state = "x2"
- var/obj/structure/ladder/my_ladder
-
- New()
- //pick a random temple to link to
- var/list/waypoints = list()
- for(var/obj/effect/landmark/temple/destination/T in landmarks_list)
- waypoints.Add(T)
- if(!T)
- return
- else continue
- var/obj/effect/landmark/temple/destination/dest_temple = pick(waypoints)
- dest_temple.init()
-
- //connect this landmark to the other
- my_ladder = new /obj/structure/ladder(src.loc)
- my_ladder.id = dest_temple.my_ladder.id
- dest_temple.my_ladder.up = my_ladder
-
- //delete the landmarks now that we're finished
- qdel(dest_temple)
- qdel(src)
-
-/obj/effect/landmark/temple/destination/New()
- //nothing
-
-/obj/effect/landmark/temple/destination/proc/init()
- my_ladder = new /obj/structure/ladder(src.loc)
- my_ladder.id = rand(999)
- my_ladder.height = -1
-
- //loop over the walls in the temple and make them a random pre-chosen mineral (null is a stand in for plasma, which the walls already are)
- //treat plasma slightly differently because it's the default wall type
- var/mineral = pick("uranium","sandstone","gold","iron","silver","diamond","clown","plasma")
- //world << "init [mineral]"
- var/area/my_area = get_area(src)
- var/list/temple_turfs = get_area_turfs(my_area.type)
-
- for(var/turf/simulated/floor/T in temple_turfs)
-
- for(var/obj/effect/landmark/falsewall_spawner/F in T.contents)
- var/obj/structure/temple_falsewall/fwall = new(F.loc)
- fwall.mineral = mineral
- if(mineral == "iron")
- fwall.is_metal = 1
- qdel(F)
-
- for(var/obj/effect/landmark/door_spawner/D in T.contents)
- var/spawn_type
- if(mineral == "iron")
- spawn_type = text2path("/obj/machinery/door/airlock/vault")
- else
- spawn_type = text2path("/obj/machinery/door/airlock/[mineral]")
- new spawn_type(D.loc)
- qdel(D)
-
- for(var/turf/unsimulated/wall/T in temple_turfs)
- if(mineral != "plasma")
- T.icon_state = replacetext(T.icon_state, "plasma", mineral)
-
- /*for(var/obj/effect/landmark/falsewall_spawner/F in T.contents)
- //world << "falsewall_spawner found in wall"
- var/obj/structure/temple_falsewall/fwall = new(F.loc)
- fwall.mineral = mineral
- qdel(F)
-
- for(var/obj/effect/landmark/door_spawner/D in T.contents)
- //world << "door_spawner found in wall"
- T = new /turf/unsimulated/floor(T.loc)
- T.icon_state = "dark"
- var/spawn_type = text2path("/obj/machinery/door/airlock/[door_mineral]")
- new spawn_type(T)
- qdel(D)*/
-
-//a shuttle has crashed somewhere on the map, it should have a power cell to let the adventurers get home
-/area/jungle/crash_ship_source
- icon_state = "crash"
-
-/area/jungle/crash_ship_clean
- icon_state = "crash"
-
-/area/jungle/crash_ship_one
- icon_state = "crash"
-
-/area/jungle/crash_ship_two
- icon_state = "crash"
-
-/area/jungle/crash_ship_three
- icon_state = "crash"
-
-/area/jungle/crash_ship_four
- icon_state = "crash"
-
-//randomly spawns, will create rivers around the map
-//uses the same logic as jungle paths
-/obj/effect/landmark/river_waypoint
- name = "river source waypoint"
- var/connected = 0
-
-/obj/machinery/jungle_controller
- name = "jungle controller"
- desc = "a mysterious and ancient piece of machinery"
- var/list/animal_spawners = list()
-
-
-/obj/machinery/jungle_controller/initialize()
- world << "\red \b Setting up jungle, this may take a bleeding eternity..."
-
- //crash dat shuttle
- var/area/start_location = locate(/area/jungle/crash_ship_source)
- var/area/clean_location = locate(/area/jungle/crash_ship_clean)
- var/list/ship_locations = list(/area/jungle/crash_ship_one, /area/jungle/crash_ship_two, /area/jungle/crash_ship_three, /area/jungle/crash_ship_four)
- var/area/end_location = locate( pick(ship_locations) )
- ship_locations -= end_location.type
-
- start_location.move_contents_to(end_location)
- for(var/area_type in ship_locations)
- var/area/cur_location = locate(area_type)
- clean_location.copy_turfs_to(cur_location)
-
- //drop some random river nodes
- var/list/river_nodes = list()
- var/max = rand(1,3)
- var/num_spawned = 0
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!istype(J))
- continue
- if(!J.bushes_spawn)
- continue
- river_nodes.Add(new /obj/effect/landmark/river_waypoint(J))
- num_spawned++
-
- //make some randomly pathing rivers
- for(var/obj/effect/landmark/river_waypoint/W in landmarks_list)
- if (W.z != src.z || W.connected)
- continue
-
- W.connected = 1
- var/turf/cur_turf = new /turf/unsimulated/jungle/water(get_turf(W))
- var/turf/target_turf = get_turf(pick(river_nodes))
-
- var/detouring = 0
- var/cur_dir = get_dir(cur_turf, target_turf)
- //
- while(cur_turf != target_turf)
- //randomly snake around a bit
- if(detouring)
- if(prob(20))
- detouring = 0
- cur_dir = get_dir(cur_turf, target_turf)
- else if(prob(20))
- detouring = 1
- if(prob(50))
- cur_dir = turn(cur_dir, 45)
- else
- cur_dir = turn(cur_dir, -45)
- else
- cur_dir = get_dir(cur_turf, target_turf)
-
- cur_turf = get_step(cur_turf, cur_dir)
-
- var/skip = 0
- if(!istype(cur_turf, /turf/unsimulated/jungle) || istype(cur_turf, /turf/unsimulated/jungle/rock))
- detouring = 0
- cur_dir = get_dir(cur_turf, target_turf)
- cur_turf = get_step(cur_turf, cur_dir)
- continue
-
- if(!skip)
- var/turf/unsimulated/jungle/water/water_turf = new(cur_turf)
- water_turf.Spread(75, rand(65, 25))
-
- var/list/path_nodes = list()
-
- //place some ladders leading down to pre-generated temples
- max = rand(2,5)
- num_spawned = 0
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !J.bushes_spawn)
- continue
- new /obj/effect/landmark/temple(J)
- path_nodes.Add(new /obj/effect/landmark/path_waypoint(J))
- num_spawned++
-
- //put a native tribe somewhere
- num_spawned = 0
- while(num_spawned < 1)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !J.bushes_spawn)
- continue
- new /obj/effect/jungle_tribe_spawn(J)
- path_nodes.Add(new /obj/effect/landmark/path_waypoint(J))
- num_spawned++
-
- //place some random path waypoints to confuse players
- max = rand(1,3)
- num_spawned = 0
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !J.bushes_spawn)
- continue
- path_nodes.Add(new /obj/effect/landmark/path_waypoint(J))
- num_spawned++
-
- //get any path nodes placed on the map
- for(var/obj/effect/landmark/path_waypoint/W in landmarks_list)
- if (W.z == src.z)
- path_nodes.Add(W)
-
- //make random, connecting paths
- for(var/obj/effect/landmark/path_waypoint/W in path_nodes)
- if (W.connected)
- continue
-
- W.connected = 1
- var/turf/cur_turf = get_turf(W)
- path_nodes.Remove(W)
- var/turf/target_turf = get_turf(pick(path_nodes))
- path_nodes.Add(W)
- //
- cur_turf = new /turf/unsimulated/jungle/path(cur_turf)
-
- var/detouring = 0
- var/cur_dir = get_dir(cur_turf, target_turf)
- //
- while(cur_turf != target_turf)
- //randomly snake around a bit
- if(detouring)
- if(prob(20) || get_dist(cur_turf, target_turf) < 5)
- detouring = 0
- cur_dir = get_dir(cur_turf, target_turf)
- else if(prob(20) && get_dist(cur_turf, target_turf) > 5)
- detouring = 1
- if(prob(50))
- cur_dir = turn(cur_dir, 45)
- else
- cur_dir = turn(cur_dir, -45)
- else
- cur_dir = get_dir(cur_turf, target_turf)
-
- //move a step forward
- cur_turf = get_step(cur_turf, cur_dir)
-
- //if we're not a jungle turf, get back to what we were doing
- if(!istype(cur_turf, /turf/unsimulated/jungle/))
- cur_dir = get_dir(cur_turf, target_turf)
- cur_turf = get_step(cur_turf, cur_dir)
- continue
-
- var/turf/unsimulated/jungle/J = cur_turf
- if(istype(J, /turf/unsimulated/jungle/impenetrable) || istype(J, /turf/unsimulated/jungle/water/deep))
- cur_dir = get_dir(cur_turf, target_turf)
- cur_turf = get_step(cur_turf, cur_dir)
- continue
-
- if(!istype(J, /turf/unsimulated/jungle/water))
- J = new /turf/unsimulated/jungle/path(cur_turf)
- J.Spread(PATH_SPREAD_CHANCE_START, rand(PATH_SPREAD_CHANCE_LOSS_UPPER, PATH_SPREAD_CHANCE_LOSS_LOWER))
-
- //create monkey spawners
- num_spawned = 0
- max = rand(3,6)
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !J.bushes_spawn)
- continue
- animal_spawners.Add(new /obj/effect/landmark/animal_spawner/monkey(J))
- num_spawned++
-
- //create panther spawners
- num_spawned = 0
- max = rand(6,12)
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !istype(J) || !J.bushes_spawn)
- continue
- animal_spawners.Add(new /obj/effect/landmark/animal_spawner/panther(J))
- num_spawned++
-
- //create snake spawners
- num_spawned = 0
- max = rand(6,12)
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !istype(J) || !J.bushes_spawn)
- continue
- animal_spawners.Add(new /obj/effect/landmark/animal_spawner/snake(J))
- num_spawned++
-
- //create parrot spawners
- num_spawned = 0
- max = rand(3,6)
- while(num_spawned < max)
- var/turf/unsimulated/jungle/J = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), src.z)
- if(!J || !istype(J) || !J.bushes_spawn)
- continue
- animal_spawners.Add(new /obj/effect/landmark/animal_spawner/parrot(J))
- num_spawned++
-
-#undef PATH_SPREAD_CHANCE_START
-#undef PATH_SPREAD_CHANCE_LOSS_UPPER
-#undef PATH_SPREAD_CHANCE_LOSS_LOWER
-
-#undef RIVER_SPREAD_CHANCE_START
-#undef RIVER_SPREAD_CHANCE_LOSS_UPPER
-#undef RIVER_SPREAD_CHANCE_LOSS_LOWER
-
-#undef RANDOM_UPPER_X
-#undef RANDOM_UPPER_Y
-
-#undef RANDOM_LOWER_X
-#undef RANDOM_LOWER_Y
diff --git a/code/modules/jungle/jungle.dmi b/code/modules/jungle/jungle.dmi
deleted file mode 100644
index 76cfafb9ea6..00000000000
Binary files a/code/modules/jungle/jungle.dmi and /dev/null differ
diff --git a/code/modules/jungle/jungle_plants.dm b/code/modules/jungle/jungle_plants.dm
deleted file mode 100644
index 28fe2fd1d72..00000000000
--- a/code/modules/jungle/jungle_plants.dm
+++ /dev/null
@@ -1,121 +0,0 @@
-//*********************//
-// Generic undergrowth //
-//*********************//
-
-/obj/structure/bush
- name = "foliage"
- desc = "Pretty thick scrub, it'll take something sharp and a lot of determination to clear away."
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "bush1"
- density = 1
- anchored = 1
- layer = 3.2
- var/indestructable = 0
- var/stump = 0
-
-/obj/structure/bush/New()
- if(prob(20))
- opacity = 1
-
-/*
-/obj/structure/bush/Bumped(M as mob)
- if (istype(M, /mob/living/simple_animal))
- var/mob/living/simple_animal/A = M
- A.loc = get_turf(src)
- else if (istype(M, /mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/A = M
- A.loc = get_turf(src)
-*/
-
-/obj/structure/bush/attackby(var/obj/I as obj, var/mob/user as mob, params)
- //hatchets can clear away undergrowth
- if(istype(I, /obj/item/weapon/hatchet) && !stump)
- if(indestructable)
- //this bush marks the edge of the map, you can't destroy it
- user << "\red You flail away at the undergrowth, but it's too thick here."
- else
- user.visible_message("\red [user] begins clearing away [src].","\red You begin clearing away [src].")
- spawn(rand(15,30))
- if(get_dist(user,src) < 2)
- user << "\blue You clear away [src]."
- var/obj/item/stack/sheet/wood/W = new(src.loc)
- W.amount = rand(3,15)
- if(prob(50))
- icon_state = "stump[rand(1,2)]"
- name = "cleared foliage"
- desc = "There used to be dense undergrowth here."
- density = 0
- stump = 1
- pixel_x = rand(-6,6)
- pixel_y = rand(-6,6)
- else
- qdel(src)
- else
- return ..()
-
-//*******************************//
-// Strange, fruit-bearing plants //
-//*******************************//
-
-var/list/fruit_icon_states = list("badrecipe","kudzupod","reishi","lime","grapes","boiledrorocore","chocolateegg")
-var/list/reagent_effects = list("toxin","charcoal","ether","space_drugs","lsd","haloperidol")
-var/jungle_plants_init = 0
-
-/proc/init_jungle_plants()
- jungle_plants_init = 1
- fruit_icon_states = shuffle(fruit_icon_states)
- reagent_effects = shuffle(reagent_effects)
-
-/obj/item/weapon/reagent_containers/food/snacks/grown/jungle_fruit
- name = "jungle fruit"
- desc = "It smells weird and looks off."
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "orange"
- potency = 1
-
-/obj/structure/jungle_plant
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "plant1"
- desc = "Looks like some of that fruit might be edible."
- var/fruits_left = 3
- var/fruit_type = -1
- var/icon/fruit_overlay
- var/plant_strength = 1
- var/fruit_r
- var/fruit_g
- var/fruit_b
-
-
-/obj/structure/jungle_plant/New()
- if(!jungle_plants_init)
- init_jungle_plants()
-
- fruit_type = rand(1,7)
- icon_state = "plant[fruit_type]"
- fruits_left = rand(1,5)
- fruit_overlay = icon('code/modules/jungle/jungle.dmi',"fruit[fruits_left]")
- fruit_r = 255 - fruit_type * 36
- fruit_g = rand(1,255)
- fruit_b = fruit_type * 36
- fruit_overlay.Blend(rgb(fruit_r, fruit_g, fruit_b), ICON_ADD)
- overlays += fruit_overlay
- plant_strength = rand(20,200)
-
-/obj/structure/jungle_plant/attack_hand(var/mob/user as mob)
- if(fruits_left > 0)
- fruits_left--
- user << "\blue You pick a fruit off [src]."
-
- var/obj/item/weapon/reagent_containers/food/snacks/grown/jungle_fruit/J = new (src.loc)
- J.potency = plant_strength
- J.icon_state = fruit_icon_states[fruit_type]
- J.reagents.add_reagent(reagent_effects[fruit_type], 1+round((plant_strength / 20), 1))
- J.bitesize = 1+round(J.reagents.total_volume / 2, 1)
- J.attack_hand(user)
-
- overlays -= fruit_overlay
- fruit_overlay = icon('code/modules/jungle/jungle.dmi',"fruit[fruits_left]")
- fruit_overlay.Blend(rgb(fruit_r, fruit_g, fruit_b), ICON_ADD)
- overlays += fruit_overlay
- else
- user << "\red There are no fruit left on [src]."
diff --git a/code/modules/jungle/jungle_temple.dm b/code/modules/jungle/jungle_temple.dm
deleted file mode 100644
index a021631bb64..00000000000
--- a/code/modules/jungle/jungle_temple.dm
+++ /dev/null
@@ -1,398 +0,0 @@
-//randomly generated temples, indiana jones style (minus the cultists, probably)
-
-/area/jungle/temple_one
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple1"
-
-/area/jungle/temple_two
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple2"
-
-/area/jungle/temple_three
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple3"
-
-/area/jungle/temple_four
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple4"
-
-/area/jungle/temple_five
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple5"
-
-/area/jungle/temple_six
- name = "temple"
- lighting_use_dynamic = 1
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "temple6"
-
-/obj/effect/landmark/door_spawner
- name = "door spawner"
-
-//******//
-// Loot //
-//******//
-
-/obj/effect/landmark/glowshroom_spawn
- icon_state = "x3"
- invisibility = 101
- New()
- if(prob(10))
- new /obj/effect/glowshroom(src.loc)
- qdel(src)
-
-/obj/effect/landmark/loot_spawn
- name = "loot spawner"
- icon_state = "grabbed1"
- var/low_probability = 0
- New()
-
- switch(pick( \
- low_probability * 1000;"nothing", \
- 200 - low_probability * 175;"treasure", \
- 25 + low_probability * 75;"remains", \
- 25 + low_probability * 75;"plants", \
- 5; "blob", \
- 50 + low_probability * 50;"clothes", \
- "glasses", \
- 100 - low_probability * 50;"weapons", \
- 100 - low_probability * 50;"spacesuit", \
- "health", \
- 25 + low_probability * 75;"snacks", \
- 25;"alien", \
- "lights", \
- 25 - low_probability * 25;"engineering", \
- 25 - low_probability * 25;"coffin", \
- 25;"mimic", \
- 25;"viscerator", \
- ))
- if("treasure")
- var/obj/structure/closet/crate/C = new(src.loc)
- if(prob(33))
- //coins
-
- var/amount = rand(2,6)
- var/list/possible_spawns = list()
- for(var/coin_type in typesof(/obj/item/weapon/coin))
- possible_spawns += coin_type
-
- var/coin_type = pick(possible_spawns)
- for(var/i=0,iA sawblade shoots out of the ground and strikes you!"
- M.apply_damage(rand(5,10), BRUTE, sharp=1, edge=1)
-
- var/atom/myloc = src.loc
- var/image/flicker = image('code/modules/jungle/jungle.dmi',"sawblade")
- myloc.overlays += flicker
- spawn(8)
- myloc.overlays -= flicker
- qdel(flicker)
- //flick("sawblade",src)
- if("poison_dart")
- M << "\red You feel something small and sharp strike you!"
- M.apply_damage(rand(5,10), TOX)
-
- var/atom/myloc = src.loc
- var/image/flicker = image('code/modules/jungle/jungle.dmi',"dart[rand(1,3)]")
- myloc.overlays += flicker
- spawn(8)
- myloc.overlays -= flicker
- qdel(flicker)
- //flick("dart[rand(1,3)]",src)
- if("flame_burst")
- M << "\red A jet of fire comes out of nowhere!"
- M.apply_damage(rand(5,10), BURN)
-
- var/atom/myloc = src.loc
- var/image/flicker = image('code/modules/jungle/jungle.dmi',"flameburst")
- myloc.overlays += flicker
- spawn(8)
- myloc.overlays -= flicker
- qdel(flicker)
- //flick("flameburst",src)
- if("plasma_gas")
- //spawn a bunch of plasma
- if("n2_gas")
- //spawn a bunch of sleeping gas
- if("thrower")
- //edited version of obj/effect/step_trigger/thrower
- var/throw_dir = pick(1,2,4,8)
- M.visible_message("\red The floor under [M] suddenly tips upward!","\red The floor tips upward under you!")
-
- var/atom/myloc = src.loc
- var/image/flicker = image('code/modules/jungle/jungle.dmi',"throw[throw_dir]")
- myloc.overlays += flicker
- var/turf/my_turf = get_turf(loc)
- if(!my_turf.density)
- my_turf.density = 1
- spawn(8)
- my_turf.density = 0
- spawn(8)
- myloc.overlays -= flicker
- qdel(flicker)
-
- var/dist = rand(1,5)
- var/curtiles = 0
- while(M)
- if(curtiles >= dist)
- break
- if(M.z != src.z)
- break
-
- curtiles++
- sleep(1)
-
- var/predir = M.dir
- step(M, throw_dir)
- M.dir = predir
-
-//gives turf a different description, to try and trick players
-/obj/effect/step_trigger/trap/fake
- icon_state = "faketrap"
- name = "fake trap"
-
- New()
- if(prob(10))
- new /obj/effect/glowshroom(src.loc)
- if(prob(90))
- var/turf/T = get_turf(src)
- T.desc = pick("It looks a little dustier than the surrounding tiles.","It is somewhat ornate.","It looks a little darker than the surrounding tiles.")
- qdel(src)
-
-//50% chance of being a trap
-/obj/effect/step_trigger/trap/fifty
- icon_state = "trap"
- name = "fifty fifty trap"
- icon_state = "fiftytrap"
-
- New()
- if(prob(50))
- ..()
- else
- if(prob(10))
- new /obj/effect/glowshroom(src.loc)
- qdel(src)
diff --git a/code/modules/jungle/jungle_tribe.dm b/code/modules/jungle/jungle_tribe.dm
deleted file mode 100644
index 70dade70dbf..00000000000
--- a/code/modules/jungle/jungle_tribe.dm
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-/obj/item/projectile/jungle_spear
- damage = 10
- damage_type = TOX
- icon_state = "bullet"
-
-/obj/effect/jungle_tribe_spawn
- name = "campfire"
- desc = "Looks cosy, in an alien sort of way."
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "campfire"
- anchored = 1
- var/list/tribesmen = list()
- var/list/enemy_players = list()
- var/tribe_type = 1
-
-/obj/effect/jungle_tribe_spawn/New()
- processing_objects.Add(src)
- tribe_type = rand(1,5)
-
- var/num_tribesmen = rand(3,6)
- for(var/i=0,i[src] throws a spear at [target_mob]!", 1)
- flick(src, "native[my_type]_act")
-
- var/tturf = get_turf(target_mob)
- Shoot(tturf, src.loc, src)
diff --git a/code/modules/jungle/jungle_turfs.dm b/code/modules/jungle/jungle_turfs.dm
deleted file mode 100644
index ffc5391ed8f..00000000000
--- a/code/modules/jungle/jungle_turfs.dm
+++ /dev/null
@@ -1,178 +0,0 @@
-
-/turf/unsimulated/jungle
- var/bushes_spawn = 1
- var/plants_spawn = 1
- name = "wet grass"
- desc = "Thick, long wet grass"
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "grass1"
- var/icon_spawn_state = "grass1"
- luminosity = 3
-
- New()
- icon_state = icon_spawn_state
-
- if(plants_spawn && prob(40))
- if(prob(90))
- var/image/I
- if(prob(35))
- I = image('code/modules/jungle/jungle.dmi',"plant[rand(1,7)]")
- else
- if(prob(30))
- I = image('icons/obj/flora/ausflora.dmi',"reedbush_[rand(1,4)]")
- else if(prob(33))
- I = image('icons/obj/flora/ausflora.dmi',"leafybush_[rand(1,3)]")
- else if(prob(50))
- I = image('icons/obj/flora/ausflora.dmi',"fernybush_[rand(1,3)]")
- else
- I = image('icons/obj/flora/ausflora.dmi',"stalkybush_[rand(1,3)]")
- I.pixel_x = rand(-6,6)
- I.pixel_y = rand(-6,6)
- overlays += I
- else
- var/obj/structure/jungle_plant/J = new(src)
- J.pixel_x = rand(-6,6)
- J.pixel_y = rand(-6,6)
- if(bushes_spawn && prob(90))
- new /obj/structure/bush(src)
-
-/turf/unsimulated/jungle/clear
- bushes_spawn = 0
- plants_spawn = 0
- icon_state = "grass_clear"
- icon_spawn_state = "grass3"
-
-/turf/unsimulated/jungle/path
- bushes_spawn = 0
- name = "wet grass"
- desc = "thick, long wet grass"
- icon = 'code/modules/jungle/jungle.dmi'
- icon_state = "grass_path"
- icon_spawn_state = "grass2"
-
- New()
- ..()
- for(var/obj/structure/bush/B in src)
- qdel(B)
-
-/turf/unsimulated/jungle/proc/Spread(var/probability, var/prob_loss = 50)
- if(probability <= 0)
- return
-
- //world << "\blue Spread([probability])"
- for(var/turf/unsimulated/jungle/J in orange(1, src))
- if(!J.bushes_spawn)
- continue
-
- var/turf/unsimulated/jungle/P = null
- if(J.type == src.type)
- P = J
- else
- P = new src.type(J)
-
- if(P && prob(probability))
- P.Spread(probability - prob_loss)
-
-/turf/unsimulated/jungle/impenetrable
- bushes_spawn = 0
- icon_state = "grass_impenetrable"
- icon_spawn_state = "grass1"
- New()
- ..()
- var/obj/structure/bush/B = new(src)
- B.indestructable = 1
-
-//copy paste from asteroid mineral turfs
-/turf/unsimulated/jungle/rock
- bushes_spawn = 0
- plants_spawn = 0
- density = 1
- name = "rock wall"
- icon = 'icons/turf/walls.dmi'
- icon_state = "rock"
- icon_spawn_state = "rock"
-
-/turf/unsimulated/jungle/rock/New()
- spawn(1)
- var/turf/T
- if(!istype(get_step(src, NORTH), /turf/unsimulated/jungle/rock) && !istype(get_step(src, NORTH), /turf/unsimulated/wall))
- T = get_step(src, NORTH)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_s")
- if(!istype(get_step(src, SOUTH), /turf/unsimulated/jungle/rock) && !istype(get_step(src, SOUTH), /turf/unsimulated/wall))
- T = get_step(src, SOUTH)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_n", layer=6)
- if(!istype(get_step(src, EAST), /turf/unsimulated/jungle/rock) && !istype(get_step(src, EAST), /turf/unsimulated/wall))
- T = get_step(src, EAST)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_w", layer=6)
- if(!istype(get_step(src, WEST), /turf/unsimulated/jungle/rock) && !istype(get_step(src, WEST), /turf/unsimulated/wall))
- T = get_step(src, WEST)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_e", layer=6)
-
-/turf/unsimulated/jungle/water
- bushes_spawn = 0
- name = "murky water"
- desc = "thick, murky water"
- icon = 'icons/misc/beach.dmi'
- icon_state = "water"
- icon_spawn_state = "water"
-
-/turf/unsimulated/jungle/water/New()
- ..()
- for(var/obj/structure/bush/B in src)
- qdel(B)
-
-/turf/unsimulated/jungle/water/Entered(atom/movable/O)
- ..()
- if(istype(O, /mob/living/))
- var/mob/living/M = O
- //slip in the murky water if we try to run through it
- if(prob(10 + (M.m_intent == "run" ? 40 : 0)))
- M << pick("\blue You slip on something slimy.","\blue You fall over into the murk.")
- M.Stun(2)
- M.Weaken(1)
-
- //piranhas - 25% chance to be an omnipresent risk, although they do practically no damage
- if(prob(25))
- M << "\blue You feel something slithering around your legs."
- if(prob(50))
- spawn(rand(25,50))
- var/turf/T = get_turf(M)
- if(istype(T, /turf/unsimulated/jungle/water))
- M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE, sharp=1)
- if(prob(50))
- spawn(rand(25,50))
- var/turf/T = get_turf(M)
- if(istype(T, /turf/unsimulated/jungle/water))
- M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE, sharp=1)
- if(prob(50))
- spawn(rand(25,50))
- var/turf/T = get_turf(M)
- if(istype(T, /turf/unsimulated/jungle/water))
- M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE, sharp=1)
- if(prob(50))
- spawn(rand(25,50))
- var/turf/T = get_turf(M)
- if(istype(T, /turf/unsimulated/jungle/water))
- M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE, sharp=1)
-
-/turf/unsimulated/jungle/water/deep
- plants_spawn = 0
- density = 1
- icon_state = "water2"
- icon_spawn_state = "water2"
-
-/turf/unsimulated/jungle/temple_wall
- name = "temple wall"
- desc = ""
- density = 1
- icon = 'icons/turf/walls.dmi'
- icon_state = "plasma0"
- var/mineral = "plasma"
diff --git a/code/modules/jungle/misc_helpers.dm b/code/modules/jungle/misc_helpers.dm
deleted file mode 100644
index 6936a877dff..00000000000
--- a/code/modules/jungle/misc_helpers.dm
+++ /dev/null
@@ -1,123 +0,0 @@
-//put this here because i needed specific functionality, and i wanted to avoid the hassle of getting it onto svn
-
-
-/area/proc/copy_turfs_to(var/area/A , var/platingRequired = 0 )
- //Takes: Area. Optional: If it should copy to areas that don't have plating
- //Returns: Nothing.
- //Notes: Attempts to move the contents of one area to another area.
- // Movement based on lower left corner. Tiles that do not fit
- // into the new area will not be moved.
-
- if(!A || !src) return 0
-
- var/list/turfs_src = get_area_turfs(src.type)
- var/list/turfs_trg = get_area_turfs(A.type)
-
- var/src_min_x = 0
- var/src_min_y = 0
- for (var/turf/T in turfs_src)
- if(T.x < src_min_x || !src_min_x) src_min_x = T.x
- if(T.y < src_min_y || !src_min_y) src_min_y = T.y
-
- var/trg_min_x = 0
- var/trg_min_y = 0
- for (var/turf/T in turfs_trg)
- if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x
- if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y
-
- var/list/refined_src = new/list()
- for(var/turf/T in turfs_src)
- refined_src += T
- refined_src[T] = new/datum/coords
- var/datum/coords/C = refined_src[T]
- C.x_pos = (T.x - src_min_x)
- C.y_pos = (T.y - src_min_y)
-
- var/list/refined_trg = new/list()
- for(var/turf/T in turfs_trg)
- refined_trg += T
- refined_trg[T] = new/datum/coords
- var/datum/coords/C = refined_trg[T]
- C.x_pos = (T.x - trg_min_x)
- C.y_pos = (T.y - trg_min_y)
-
- var/list/toupdate = new/list()
-
- var/copiedobjs = list()
-
-
- moving:
- for (var/turf/T in refined_src)
- var/datum/coords/C_src = refined_src[T]
- for (var/turf/B in refined_trg)
- var/datum/coords/C_trg = refined_trg[B]
- if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos)
-
- var/old_dir1 = T.dir
- var/old_icon_state1 = T.icon_state
- var/old_icon1 = T.icon
-
- if(platingRequired)
- if(istype(B, /turf/space))
- continue moving
-
- var/turf/X = new T.type(B)
- X.dir = old_dir1
- X.icon_state = old_icon_state1
- X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
-
-
- var/list/mobs = new/list()
- var/list/newmobs = new/list()
-
- for(var/mob/M in T)
-
- if(!M.move_on_shuttle)
- continue // If we need to check for more mobs, I'll add a variable
- mobs += M
-
- for(var/mob/M in mobs)
- newmobs += DuplicateObject(M , 1)
-
- for(var/mob/M in newmobs)
- M.loc = X
-
-
-
- for(var/V in T.vars)
- if(!(V in list("type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity")))
- X.vars[V] = T.vars[V]
-
-// var/area/AR = X.loc
-
-// if(AR.lighting_use_dynamic)
-// X.opacity = !X.opacity
-// X.sd_set_opacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn
-
- toupdate += X
-
- refined_src -= T
- refined_trg -= B
- continue moving
-
-
-
-
- /*var/list/doors = new/list()
-
- if(toupdate.len)
- for(var/turf/simulated/T1 in toupdate)
- for(var/obj/machinery/door/D2 in T1)
- doors += D2
- if(T1.parent)
- air_master.groups_to_rebuild += T1.parent
- else
- air_master.tiles_to_update += T1
-
- for(var/obj/O in doors)
- O:update_nearby_tiles(1)*/
-
-
-
-
- return copiedobjs
diff --git a/code/modules/jungle/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
similarity index 68%
rename from code/modules/jungle/jungle_animals.dm
rename to code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
index a63fed946ea..7f705297dbd 100644
--- a/code/modules/jungle/jungle_animals.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm
@@ -1,49 +1,3 @@
-
-//spawns one of the specified animal type
-/obj/effect/landmark/animal_spawner
- icon_state = "x3"
- var/spawn_type
- var/mob/living/spawned_animal
- invisibility = 101
-
-/obj/effect/landmark/animal_spawner/New()
- if(!spawn_type)
- var/new_type = pick(subtypesof(/obj/effect/landmark/animal_spawner))
- new new_type(get_turf(src))
- qdel(src)
-
- processing_objects.Add(src)
- spawned_animal = new spawn_type(get_turf(src))
-
-/obj/effect/landmark/animal_spawner/process()
- //if any of our animals are killed, spawn new ones
- if(!spawned_animal || spawned_animal.stat == DEAD)
- spawned_animal = new spawn_type(src)
- //after a random timeout, and in a random position (6-30 seconds)
- spawn(rand(1200,2400))
- spawned_animal.loc = locate(src.x + rand(-12,12), src.y + rand(-12,12), src.z)
-
-/obj/effect/landmark/animal_spawner/Destroy()
- processing_objects.Remove(src)
- return ..()
-
-/obj/effect/landmark/animal_spawner/panther
- name = "panther spawner"
- spawn_type = /mob/living/simple_animal/hostile/panther
-
-/obj/effect/landmark/animal_spawner/parrot
- name = "parrot spawner"
- spawn_type = /mob/living/simple_animal/parrot
-
-/obj/effect/landmark/animal_spawner/monkey
- name = "monkey spawner"
- spawn_type = /mob/living/carbon/human/monkey
-
-/obj/effect/landmark/animal_spawner/snake
- name = "snake spawner"
- spawn_type = /mob/living/simple_animal/hostile/snake
-
-
//*********//
// Panther //
//*********//
@@ -112,7 +66,6 @@
/mob/living/simple_animal/hostile/snake
name = "snake"
desc = "A sinuously coiled, venomous looking reptile."
- icon = 'code/modules/jungle/jungle.dmi'
icon_state = "snake"
icon_living = "snake"
icon_dead = "snake_dead"
diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
index 2251f293b7d..6fc2c277519 100644
--- a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
+++ b/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
@@ -5,7 +5,6 @@
icon_state = "samak"
icon_living = "samak"
icon_dead = "samak_dead"
- icon = 'code/modules/jungle/jungle.dmi'
move_to_delay = 2
maxHealth = 125
health = 125
@@ -26,7 +25,6 @@
icon_state = "diyaab"
icon_living = "diyaab"
icon_dead = "diyaab_dead"
- icon = 'code/modules/jungle/jungle.dmi'
move_to_delay = 1
maxHealth = 25
health = 25
@@ -47,7 +45,6 @@
icon_state = "shantak"
icon_living = "shantak"
icon_dead = "shantak_dead"
- icon = 'code/modules/jungle/jungle.dmi'
move_to_delay = 1
maxHealth = 75
health = 75
@@ -66,7 +63,6 @@
icon_state = "yithian"
icon_living = "yithian"
icon_dead = "yithian_dead"
- icon = 'code/modules/jungle/jungle.dmi'
/mob/living/simple_animal/tindalos
name = "tindalos"
@@ -74,4 +70,3 @@
icon_state = "tindalos"
icon_living = "tindalos"
icon_dead = "tindalos_dead"
- icon = 'code/modules/jungle/jungle.dmi'
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 3829370cf4f..47a0c11e9b2 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/obj/flora/plants.dmi b/icons/obj/flora/plants.dmi
index da28d67ea2b..45686d168bc 100644
Binary files a/icons/obj/flora/plants.dmi and b/icons/obj/flora/plants.dmi differ
diff --git a/paradise.dme b/paradise.dme
index cd0d8bab931..ca72ecfc7da 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1229,14 +1229,6 @@
#include "code\modules\hydroponics\trays\tray_soil.dm"
#include "code\modules\hydroponics\trays\tray_tools.dm"
#include "code\modules\hydroponics\trays\tray_update_icons.dm"
-#include "code\modules\jungle\falsewall.dm"
-#include "code\modules\jungle\jungle.dm"
-#include "code\modules\jungle\jungle_animals.dm"
-#include "code\modules\jungle\jungle_plants.dm"
-#include "code\modules\jungle\jungle_temple.dm"
-#include "code\modules\jungle\jungle_tribe.dm"
-#include "code\modules\jungle\jungle_turfs.dm"
-#include "code\modules\jungle\misc_helpers.dm"
#include "code\modules\karma\karma.dm"
#include "code\modules\library\lib_items.dm"
#include "code\modules\library\lib_machines.dm"
@@ -1485,6 +1477,7 @@
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
+#include "code\modules\mob\living\simple_animal\hostile\jungle_animals.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs.dm"
#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"