diff --git a/code/game/machinery/bees.dm b/code/game/machinery/bees.dm
index 68b2838e70d..27a317a91a3 100644
--- a/code/game/machinery/bees.dm
+++ b/code/game/machinery/bees.dm
@@ -1,5 +1,5 @@
-/obj/effect/bee
+/mob/living/simple_animal/bee
name = "bees"
icon = 'icons/obj/apiary_bees_etc.dmi'
icon_state = "bees1"
@@ -11,162 +11,154 @@
var/mob/target_mob
var/obj/machinery/apiary/parent
pass_flags = PASSGRILLE|PASSTABLE
+ turns_per_move = 6
+ var/obj/machinery/hydroponics/my_hydrotray
-/obj/effect/bee/New(loc, var/obj/machinery/apiary/new_parent)
+/mob/living/simple_animal/bee/New(loc, var/obj/machinery/apiary/new_parent)
..()
- processing_objects.Add(src)
parent = new_parent
+ verbs -= /atom/movable/verb/pull
-/obj/effect/bee/Del()
- processing_objects.Remove(src)
+/mob/living/simple_animal/bee/Del()
if(parent)
parent.owned_bee_swarms.Remove(src)
..()
-/obj/effect/bee/process()
+/mob/living/simple_animal/bee/Life()
+ ..()
- //if we're strong enough, sting some people
- var/overrun = strength - 5 + feral / 2
- if(prob(max( overrun * 10 + feral * 10, 0)))
- var/mob/living/carbon/human/M = locate() in src.loc
- if(M)
- var/sting_prob = 100
- var/obj/item/clothing/worn_suit = M.wear_suit
- var/obj/item/clothing/worn_helmet = M.head
- if(worn_suit)
- sting_prob -= worn_suit.armor["bio"]
- if(worn_helmet)
- sting_prob -= worn_helmet.armor["bio"]
+ if(stat == CONSCIOUS)
+ //if we're strong enough, sting some people
+ var/overrun = strength - 5 + feral / 2
+ if(prob(max( overrun * 10 + feral * 10, 0)))
+ var/mob/living/carbon/human/M = pick(range(1,src))
+ if(M)
+ var/sting_prob = 100
+ var/obj/item/clothing/worn_suit = M.wear_suit
+ var/obj/item/clothing/worn_helmet = M.head
+ if(worn_suit)
+ sting_prob -= worn_suit.armor["bio"]
+ if(worn_helmet)
+ sting_prob -= worn_helmet.armor["bio"]
- if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) )
- M.apply_damage(overrun / 2 + mut / 2, BRUTE)
- M.apply_damage(overrun / 2 + toxic / 2, TOX)
- M << "\red You have been stung!"
- M.flash_pain()
+ if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) )
+ M.apply_damage(overrun / 2 + mut / 2, BRUTE)
+ M.apply_damage(overrun / 2 + toxic / 2, TOX)
+ M << "\red You have been stung!"
+ M.flash_pain()
- //if we're chasing someone, get a little bit angry
- if(target_mob && prob(10))
- feral++
+ //if we're chasing someone, get a little bit angry
+ if(target_mob && prob(10))
+ feral++
- //calm down a little bit
- var/move_prob = 40
- if(feral > 0)
- if(prob(feral * 10))
- feral -= 1
- else
- //if feral is less than 0, we're becalmed by smoke or steam
- if(feral < 0)
- feral += 1
-
- if(target_mob)
- target_mob = null
- target_turf = null
- if(strength > 5)
- //calm down and spread out a little
- var/obj/effect/bee/B = new(get_turf(pick(orange(src,1))))
- B.strength = rand(1,5)
- src.strength -= B.strength
- if(src.strength <= 5)
- src.icon_state = "bees[src.strength]"
- B.icon_state = "bees[B.strength]"
- if(src.parent)
- B.parent = src.parent
- src.parent.owned_bee_swarms.Add(B)
-
- //make some noise
- if(prob(0.5))
- src.visible_message("\blue [pick("Buzzzz.","Hmmmmm.","Bzzz.")]")
-
- //smoke, water and steam calms us down
- var/calming = 0
- var/list/calmers = list(/obj/effect/effect/chem_smoke, /obj/effect/effect/water, /obj/effect/effect/foam, /obj/effect/effect/steam, /obj/effect/mist)
-
- for(var/this_type in calmers)
- var/obj/effect/check_effect = locate() in src.loc
- if(check_effect.type == this_type)
- calming = 1
- break
-
- if(calming)
+ //calm down a little bit
if(feral > 0)
- src.visible_message("\blue The bees calm down!")
- feral = -10
- target_mob = null
- target_turf = null
-
- for(var/obj/effect/bee/B in src.loc)
- if(B == src)
- continue
-
- if(feral > 0)
- src.strength += B.strength
- del(B)
- src.icon_state = "bees[src.strength]"
- if(strength > 5)
- icon_state = "bees_swarm"
- else if(prob(10))
- //make the other swarm of bees stronger, then move away
- var/total_bees = B.strength + src.strength
- if(total_bees < 10)
- B.strength = min(5, total_bees)
- src.strength = total_bees - B.strength
-
- B.icon_state = "bees[B.strength]"
- if(src.strength <= 0)
- del(src)
- return
- src.icon_state = "bees[B.strength]"
- var/turf/simulated/floor/T = get_turf(get_step(src, pick(1,2,4,8)))
- density = 1
- if(T.Enter(src, get_turf(src)))
- src.loc = T
- density = 0
- break
-
- if(target_mob)
- if(target_mob in view(src,7))
- target_turf = get_turf(target_mob)
+ if(prob(feral * 10))
+ feral -= 1
else
- for(var/mob/living/carbon/M in view(src,7))
- target_mob = M
+ //if feral is less than 0, we're becalmed by smoke or steam
+ if(feral < 0)
+ feral += 1
+
+ if(target_mob)
+ target_mob = null
+ target_turf = null
+ if(strength > 5)
+ //calm down and spread out a little
+ var/mob/living/simple_animal/bee/B = new(get_turf(pick(orange(src,1))))
+ B.strength = rand(1,5)
+ src.strength -= B.strength
+ if(src.strength <= 5)
+ src.icon_state = "bees[src.strength]"
+ B.icon_state = "bees[B.strength]"
+ if(src.parent)
+ B.parent = src.parent
+ src.parent.owned_bee_swarms.Add(B)
+
+ //make some noise
+ if(prob(0.5))
+ src.visible_message("\blue [pick("Buzzzz.","Hmmmmm.","Bzzz.")]")
+
+ //smoke, water and steam calms us down
+ var/calming = 0
+ var/list/calmers = list(/obj/effect/effect/chem_smoke, \
+ /obj/effect/effect/water, \
+ /obj/effect/effect/foam, \
+ /obj/effect/effect/steam, \
+ /obj/effect/mist)
+
+ for(var/this_type in calmers)
+ var/mob/living/simple_animal/check_effect = locate() in src.loc
+ if(check_effect.type == this_type)
+ calming = 1
break
- if(target_turf)
- var/turf/next_turf = get_step(src.loc, get_dir(src,target_turf))
+ if(calming)
+ if(feral > 0)
+ src.visible_message("\blue The bees calm down!")
+ feral = -10
+ target_mob = null
+ target_turf = null
+ wander = 1
+
+ for(var/mob/living/simple_animal/bee/B in src.loc)
+ if(B == src)
+ continue
+
+ if(feral > 0)
+ src.strength += B.strength
+ del(B)
+ src.icon_state = "bees[src.strength]"
+ if(strength > 5)
+ icon_state = "bees_swarm"
+ else if(prob(10))
+ //make the other swarm of bees stronger, then move away
+ var/total_bees = B.strength + src.strength
+ if(total_bees < 10)
+ B.strength = min(5, total_bees)
+ src.strength = total_bees - B.strength
+
+ B.icon_state = "bees[B.strength]"
+ if(src.strength <= 0)
+ del(src)
+ return
+ src.icon_state = "bees[B.strength]"
+ var/turf/simulated/floor/T = get_turf(get_step(src, pick(1,2,4,8)))
+ density = 1
+ if(T.Enter(src, get_turf(src)))
+ src.loc = T
+ density = 0
+ break
+
+ if(target_mob)
+ if(target_mob in view(src,7))
+ target_turf = get_turf(target_mob)
+ wander = 0
+ else
+ for(var/mob/living/carbon/M in view(src,7))
+ target_mob = M
+ break
+
+ if(target_turf)
+ Move(get_step(src, get_dir(src,target_turf)))
- //hacky, but w/e
- var/old_density = -1
- if(target_mob && get_dist(src, target_mob) <= 1)
- old_density = target_mob.density
- target_mob.density = 0
- density = 1
- if(next_turf.Enter(src, get_turf(src)))
- src.loc = next_turf
- density = 0
if(src.loc == target_turf)
target_turf = null
- if(target_mob && old_density != -1)
- target_mob.density = old_density
+ wander = 1
else
//find some flowers, harvest
//angry bee swarms don't hang around
if(feral > 0)
- move_prob = 60
+ turns_per_move = rand(1,3)
else if(feral < 0)
- move_prob = 0
- else
- var/obj/machinery/hydroponics/H = locate() in src.loc
- if(H)
- if(H.planted && !H.dead && H.myseed)
- move_prob = 1
-
- //chance to wander around
- if(prob(move_prob))
- var/turf/simulated/floor/T = get_turf(get_step(src, pick(1,2,4,8)))
- density = 1
- if(T.Enter(src, get_turf(src)))
- src.loc = T
- density = 0
+ turns_since_move = 0
+ else if(!my_hydrotray || my_hydrotray.loc != src.loc || !my_hydrotray.planted || my_hydrotray.dead || !my_hydrotray.myseed)
+ var/obj/machinery/hydroponics/my_hydrotray = locate() in src.loc
+ if(my_hydrotray)
+ if(my_hydrotray.planted && !my_hydrotray.dead && my_hydrotray.myseed)
+ turns_per_move = rand(20,50)
+ else
+ my_hydrotray = null
pixel_x = rand(-12,12)
pixel_y = rand(-12,12)
diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm
index 9bd9a45bfb3..982feec1f2a 100644
--- a/code/game/machinery/bees_apiary.dm
+++ b/code/game/machinery/bees_apiary.dm
@@ -22,6 +22,7 @@
var/bees_in_hive = 0
var/list/owned_bee_swarms = list()
+ var/hydrotray_type = /obj/machinery/hydroponics
//overwrite this after it's created if the apiary needs a custom machinery sprite
/obj/machinery/apiary/New()
@@ -69,7 +70,7 @@
else
user << "\blue You begin to dislodge the dead apiary from the tray."
if(do_after(user, 50))
- new /obj/machinery/hydroponics(src.loc)
+ new hydrotray_type(src.loc)
new /obj/item/apiary(src.loc)
user << "\red You dislodge the apiary from the tray."
del(src)
@@ -112,11 +113,11 @@
if(swarming > 0)
swarming -= 1
if(swarming <= 0)
- for(var/obj/effect/bee/B in src.loc)
+ for(var/mob/living/simple_animal/bee/B in src.loc)
bees_in_hive += B.strength
del(B)
else if(bees_in_hive < 10)
- for(var/obj/effect/bee/B in src.loc)
+ for(var/mob/living/simple_animal/bee/B in src.loc)
bees_in_hive += B.strength
del(B)
@@ -144,7 +145,7 @@
health += max(nutrilevel - 1, round(-health / 2))
bees_in_hive += max(nutrilevel - 1, round(-bees_in_hive / 2))
if(owned_bee_swarms.len)
- var/obj/effect/bee/B = pick(owned_bee_swarms)
+ var/mob/living/simple_animal/bee/B = pick(owned_bee_swarms)
B.target_turf = get_turf(src)
//clear out some toxins
@@ -161,7 +162,7 @@
//make some new bees
if(bees_in_hive >= 10 && prob(bees_in_hive * 10))
- var/obj/effect/bee/B = new(get_turf(src), src)
+ var/mob/living/simple_animal/bee/B = new(get_turf(src), src)
owned_bee_swarms.Add(B)
B.mut = mut
B.toxic = toxic
@@ -193,7 +194,7 @@
/obj/machinery/apiary/proc/die()
if(owned_bee_swarms.len)
- var/obj/effect/bee/B = pick(owned_bee_swarms)
+ var/mob/living/simple_animal/bee/B = pick(owned_bee_swarms)
B.target_turf = get_turf(src)
B.strength -= 1
if(B.strength <= 0)
@@ -204,7 +205,7 @@
health = 0
/obj/machinery/apiary/proc/angry_swarm(var/mob/M)
- for(var/obj/effect/bee/B in owned_bee_swarms)
+ for(var/mob/living/simple_animal/bee/B in owned_bee_swarms)
B.feral = 50
B.target_mob = M
@@ -215,7 +216,7 @@
if(bees_in_hive >= 5)
spawn_strength = 6
- var/obj/effect/bee/B = new(get_turf(src), src)
+ var/mob/living/simple_animal/bee/B = new(get_turf(src), src)
B.target_mob = M
B.strength = spawn_strength
B.feral = 5
diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm
index cbfc2b3bd7f..01ed5bfa407 100644
--- a/code/game/machinery/bees_items.dm
+++ b/code/game/machinery/bees_items.dm
@@ -17,7 +17,7 @@
/obj/item/weapon/bee_net/attack_self(mob/user as mob)
var/turf/T = get_step(get_turf(user), user.dir)
- for(var/obj/effect/bee/B in T)
+ for(var/mob/living/simple_animal/bee/B in T)
if(B.feral < 0)
caught_bees += B.strength
del(B)
@@ -38,7 +38,7 @@
while(caught_bees > 0)
//release a few super massive swarms
while(caught_bees > 5)
- var/obj/effect/bee/B = new(src.loc)
+ var/mob/living/simple_animal/bee/B = new(src.loc)
B.feral = 5
B.target_mob = M
B.strength = 6
@@ -46,7 +46,7 @@
caught_bees -= 6
//what's left over
- var/obj/effect/bee/B = new(src.loc)
+ var/mob/living/simple_animal/bee/B = new(src.loc)
B.strength = caught_bees
B.icon_state = "bees[B.strength]"
B.feral = 5
diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm
index 265e3aec36e..5d187b337c7 100644
--- a/code/game/machinery/hydroponics.dm
+++ b/code/game/machinery/hydroponics.dm
@@ -779,6 +779,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
var/obj/machinery/apiary/A = new(src.loc)
A.icon = src.icon
A.icon_state = src.icon_state
+ A.hydrotray_type = src.type
del(src)
return
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index c5c24814a2a..94c1d350ddc 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -350,6 +350,8 @@ commented out in r5061, I left it because of the shroom thingies
excavate_find(5, src.finds[1])
else if(prob(50))
src.finds.Remove(src.finds[1])
+ if(prob(50))
+ artifact_debris()
if(do_after(user,P.digspeed))
user << "\blue You finish [P.drill_verb] the rock."
@@ -387,8 +389,8 @@ commented out in r5061, I left it because of the shroom thingies
B = new(src)
if(artifact_find)
B.artifact_find = artifact_find
- else if(src.excavation_level + P.excavation_amount >= 100)
- artifact_debris()
+ else if(artifact_find && src.excavation_level + P.excavation_amount >= 100)
+ artifact_debris(1)
gets_drilled(B ? 0 : 1)
return
@@ -528,73 +530,60 @@ commented out in r5061, I left it because of the shroom thingies
var/obj/effect/suspension_field/S = locate() in src
if(!S || S.field_type != get_responsive_reagent(F.find_type))
if(X)
- src.visible_message("\red[pick("[display_name] crumbles away into dust","[display_name] breaks apart","[display_name] collapses onto itself")].")
+ src.visible_message("\red[pick("[display_name] crumbles away into dust","[display_name] breaks apart")].")
del(X)
src.finds.Remove(F)
-/turf/simulated/mineral/proc/artifact_debris()
+/turf/simulated/mineral/proc/artifact_debris(var/severity = 0)
//cael's patented random limited drop componentized loot system!
+ severity = max(min(severity,1),0)
var/materials = 0
var/list/viable_materials = list(1,2,4,8,16,32,64,128,256)
- var/num_materials = rand(1,5)
+ var/num_materials = rand(1,3 + severity*2)
for(var/i=0, i