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