From 4a4f26ee176cc54a22cfe8779e9ea8b66e3a7006 Mon Sep 17 00:00:00 2001 From: DeityLink Date: Wed, 19 Jul 2017 07:09:47 +0200 Subject: [PATCH] bees 2 --- __DEFINES/setup.dm | 20 ++ code/game/machinery/bees_apiary.dm | 206 +++++++++++++----- code/game/machinery/bees_items.dm | 3 +- code/modules/admin/admin.dm | 1 + code/modules/admin/topic.dm | 41 +++- code/modules/events/infestation.dm | 48 ++-- code/modules/mob/living/simple_animal/bees.dm | 79 +++---- icons/obj/apiary_bees_etc.dmi | Bin 15990 -> 16335 bytes 8 files changed, 264 insertions(+), 134 deletions(-) diff --git a/__DEFINES/setup.dm b/__DEFINES/setup.dm index dea6325c55d..2883f9e695c 100644 --- a/__DEFINES/setup.dm +++ b/__DEFINES/setup.dm @@ -680,6 +680,26 @@ SEE_PIXELS 256 #define BEE_HEADING_HOME 3 #define BEE_SWARM 4 +#define LOC_KITCHEN 0 +#define LOC_ATMOS 1 +#define LOC_INCIN 2 +#define LOC_CHAPEL 3 +#define LOC_LIBRARY 4 +#define LOC_HYDRO 5 +#define LOC_VAULT 6 +#define LOC_TECH 7 + +#define VERM_MICE 0 +#define VERM_LIZARDS 1 +#define VERM_SPIDERS 2 +#define VERM_SLIMES 3 +#define VERM_BATS 4 +#define VERM_BORERS 5 +#define VERM_MIMICS 6 +#define VERM_ROACHES 7 +#define VERM_GREMLINS 8 +#define VERM_BEES 9 + #define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. //Damage things diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index 46c7951c388..2ec552e4487 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -1,7 +1,5 @@ //http://www.youtube.com/watch?v=-1GadTfGFvU -#define HONEYCOMB_COST 15 - /obj/machinery/apiary name = "apiary tray" icon = 'icons/obj/hydroponics.dmi' @@ -10,7 +8,7 @@ anchored = 1 var/nutrilevel = 0 var/yieldmod = 1 - var/mut = 1 + var/damage = 1 var/toxic = 0 var/lastcycle = 0 @@ -18,15 +16,17 @@ var/beezeez = 0 var/list/pollen = list() - var/list/queen_bees_inside = 0 - var/list/worker_bees_inside = 0 + var/queen_bees_inside = 0 + var/worker_bees_inside = 0 var/list/bees_outside_hive = list() var/hydrotray_type = /obj/machinery/portable_atmospherics/hydroponics var/obj/item/weapon/reagent_containers/glass/consume = null - machine_flags = FIXED2WORK | WRENCHMOVE + var/wild = 0 + + machine_flags = WRENCHMOVE /obj/machinery/apiary/New() ..() @@ -71,9 +71,18 @@ if(90 to INFINITY) to_chat(user, "It's full of honey!") +/obj/machinery/apiary/Cross(atom/movable/mover, turf/target, height=1.5, air_group = 0) + if(air_group || (height==0)) + return 1 + + if(istype(mover) && mover.checkpass(PASSTABLE)) + return 1 + else + return 0 + /obj/machinery/apiary/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. if(istype(Proj ,/obj/item/projectile/energy/floramut)) - mut++ + damage = round(rand(0,3))//0, 1, or 2 brute damage per stings...per bee in a swarm else if(istype(Proj ,/obj/item/projectile/energy/florayield)) if(!yieldmod) yieldmod += 1 @@ -88,6 +97,8 @@ /obj/machinery/apiary/attackby(var/obj/item/O as obj, var/mob/user as mob) if(..()) return + if (wild) + return if(istype(O, /obj/item/queen_bee)) if(user.drop_item(O)) nutrilevel = min(15,nutrilevel+15) @@ -249,22 +260,44 @@ queen_bees_inside-- lastBees.addBee(new/datum/bee/queen_bee(src)) -/obj/machinery/apiary/Cross(atom/movable/mover, turf/target, height=1.5, air_group = 0) - if(air_group || (height==0)) - return 1 - - if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 - else +/obj/machinery/apiary/proc/exile_swarm(var/obj/machinery/apiary/A) + if (A == src) return 0 + if (A.queen_bees_inside > 0 || is_type_in_list(/datum/bee/queen_bee,A.bees_outside_hive)) + return 0 + var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee, get_turf(src), src) + var/datum/bee/queen_bee/new_queen = new(src) + queen_bees_inside-- + B_mob.addBee(new_queen) + for (var/i = 1 to 10) + var/datum/bee/B = new(src) + B_mob.addBee(B) + worker_bees_inside-- + new_queen.setHome(A) + return 1 + +/obj/machinery/apiary/proc/angry_swarm(var/mob/M = null) + for(var/datum/bee/B in bees_outside_hive) + B.angerAt(M) + + var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee, get_turf(src), get_turf(src), src) + for (var/i=1 to worker_bees_inside) + var/datum/bee/B = new(src) + B_mob.addBee(B) + worker_bees_inside-- + bees_outside_hive.Add(B) + B.angerAt(M) + B_mob.update_icon() + /obj/machinery/apiary/process() - if(world.time > (lastcycle + cycledelay)) + if(world.time > (lastcycle + cycledelay))//about 10 seconds by default lastcycle = world.time - if(!queen_bees_inside && !worker_bees_inside) + + if(!queen_bees_inside && !worker_bees_inside)//if the apiary is empty, let's not waste time processing it return - //handle beezeez + //HANDLE BEEZEEZ if(beezeez > 0) beezeez -= 1 @@ -273,7 +306,7 @@ if(toxic > 0) toxic = max(0, toxic - 1) - //handle nutrients + //HANDLE NUTRILEVEL nutrilevel -= worker_bees_inside / 20 + queen_bees_inside /4 + bees_outside_hive.len / 10 //Bees doing work need more nutrients nutrilevel += 2 * reagents.trans_to(consume, reagents.total_volume * 2 / 100) @@ -284,14 +317,19 @@ if (R == NUTRIMENT) continue reagents.del_reagent(R.id,update_totals=0) - // There's currently no queen in the hive, and we've got some spare royal jelly, let's make a new queen + nutrilevel = min(max(nutrilevel,-10),100) + + + //PRODUCING QUEEN BEES if(reagents.get_reagent_amount(ROYALJELLY) >= 5 && nutrilevel > 10 && queen_bees_inside <= 0 && worker_bees_inside > 1) queen_bees_inside++ reagents.remove_reagent(ROYALJELLY, 5) worker_bees_inside-- - if(nutrilevel > 10 && queen_bees_inside > 0 && worker_bees_inside < 20)// We got a bunch of nutrients and a queen is here, let's make more bees - worker_bees_inside++ + + //PRODUCING WORKER BEES + if(nutrilevel > 10 && queen_bees_inside > 0 && worker_bees_inside < 20) + worker_bees_inside += queen_bees_inside else if (nutrilevel < -5 && worker_bees_inside >= 10)// We're getting in dire need of nutrients, let's starve bees so others can survive nutrilevel += 3 worker_bees_inside-- @@ -300,11 +338,8 @@ var/datum/bee/B = pick(bees_outside_hive) B.homeCall() - nutrilevel = min(max(nutrilevel,-10),100) - - - //handle toxins + //HANDLE TOXICITY var/list/toxic_reagents = list( TOXIN = 2, STOXIN = 1, @@ -330,6 +365,8 @@ for(var/datum/reagent/R in consume.reagents.reagent_list) if (toxic_reagents.Find(R.id)) toxic += R.volume * toxic_reagents[R.id] + if (R.id == MUTAGEN) + damage = round(rand(0,3)) if(toxic > 0) toxic = max(0,toxic-0.1) @@ -364,33 +401,98 @@ consume.reagents.clear_reagents() -/obj/machinery/apiary/proc/exile_swarm(var/obj/machinery/apiary/A) - if (A == src) - return 0 - if (A.queen_bees_inside > 0 || is_type_in_list(/datum/bee/queen_bee,A.bees_outside_hive)) - return 0 - var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee, get_turf(src), src) - var/datum/bee/queen_bee/new_queen = new(src) - queen_bees_inside-- - B_mob.addBee(new_queen) - for (var/i = 1 to 10) - var/datum/bee/B = new(src) - B_mob.addBee(B) - worker_bees_inside-- - new_queen.setHome(A) - return 1 +///////////////////////////WILD BEEHIVES//////////////////////////// -/obj/machinery/apiary/proc/angry_swarm(var/mob/M = null) - for(var/datum/bee/B in bees_outside_hive) - B.angerAt(M) +/obj/machinery/apiary/wild + name = "angry-bee hive" + icon = 'icons/obj/apiary_bees_etc.dmi' + icon_state = "apiary-wild" + density = 1 + anchored = 1 + nutrilevel = 100 + damage = 1.5 + toxic = 2.5 - var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee, get_turf(src), get_turf(src), src) - for (var/i=1 to worker_bees_inside) - var/datum/bee/B = new(src) - B_mob.addBee(B) - worker_bees_inside-- - bees_outside_hive.Add(B) - B.angerAt(M) - B_mob.update_icon() + cycledelay = 50 -#undef HONEYCOMB_COST + queen_bees_inside = 1 + worker_bees_inside = 20 + wild = 1 + + var/health = 100 + +/obj/machinery/apiary/wild/New() + ..() + reagents.add_reagent(ROYALJELLY,5) + reagents.add_reagent(HONEY,75) + reagents.add_reagent(NUTRIMENT, 4) + reagents.add_reagent(SUGAR, 16) + update_icon() + + +/obj/machinery/apiary/wild/bullet_act(var/obj/item/projectile/P) + ..() + if(P.damage && P.damtype != HALLOSS) + health -= P.damage + updateHealth() + + +/obj/machinery/apiary/wild/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(..()) + return + if(istype(O, /obj/item/queen_bee)) + to_chat(user, "This type of bee hive isn't fit for domesticated bees.") + else if(istype(O, /obj/item/beezeez)) + to_chat(user, "Don't you think they're energetic enough?") + else if(O.force) + user.delayNextAttack(10) + if(queen_bees_inside || worker_bees_inside) + to_chat(user,"You hit \the [src] with your [O].") + angry_swarm(user) + + playsound(get_turf(src), O.hitsound, 50, 1, -1) + health -= O.force + updateHealth() + +/obj/machinery/apiary/wild/proc/updateHealth() + if(health <= 0) + visible_message("\The [src] falls apart.") + + if (queen_bees_inside || worker_bees_inside) + empty_beehive() + + for (var/datum/bee/B in bees_outside_hive) + B.home = null + + harvest_honeycombs() + + qdel(src) + +/obj/machinery/apiary/wild/process() + if(world.time > (lastcycle + cycledelay)) + lastcycle = world.time + + if(!queen_bees_inside && !worker_bees_inside) + return + + //PRODUCING WORKER BEES + if(worker_bees_inside < 20) + worker_bees_inside += queen_bees_inside + + //making noise + if(prob(10)) + playsound(get_turf(src), 'sound/effects/bees.ogg', min(20+(reagents.total_volume),100), 1) + + //sending out bees to KILL + if(worker_bees_inside >= 10 && bees_outside_hive.len < 15) + var/turf/T = get_turf(src) + var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee, T, src) + var/datum/bee/B = new(src) + worker_bees_inside-- + bees_outside_hive.Add(B) + B_mob.addBee(B) + B.angerAt() + +/obj/machinery/apiary/wild/update_icon() + overlays.len = 0 + return diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm index 7ef53ad7216..ae94746c44a 100644 --- a/code/game/machinery/bees_items.dm +++ b/code/game/machinery/bees_items.dm @@ -35,7 +35,8 @@ for (var/datum/bee/BEES in B.bees) caught_bees.Add(BEES) BEES.home = null - B.home.bees_outside_hive.Remove(BEES) + if (B.home) + B.home.bees_outside_hive.Remove(BEES) qdel(B) B = null user.visible_message("[user] nets some bees.","You net up some of the becalmed bees.") diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ac1d41294ca..66d659322ee 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -784,6 +784,7 @@ var/global/floorIsLava = 0 Trigger an Alien infestation
Spawn an Alien silently
Trigger a Spider infestation
+ Spawn a vermin infestation
Spawn a hostile creature infestation
Trigger a Carp migration
Trigger mobs of your choice appearing out of thin air
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 91e29f50dab..5704601baee 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -3000,14 +3000,7 @@ to_chat(world, "NOT THE BEES!") world << sound('sound/effects/bees.ogg') for(var/mob/living/M in player_list) - var/mob/living/simple_animal/bee/BEE = new(get_turf(M)) - for (var/i = 1 to 16) - var/datum/bee/B = new() - B.toxic = 5 - B.mut = 2 - B.state = BEE_OUT_FOR_ENEMIES - BEE.addBee(B) - BEE.updateState = 1 + var/mob/living/simple_animal/bee/swarm/BEE = new(get_turf(M)) BEE.target = M if("virus") @@ -3394,6 +3387,38 @@ hardcore_mode = 0 to_chat(world, "
Hardcore mode has been disabled
") to_chat(world, "Starvation will no longer kill player-controlled characters.") + if("vermin_infestation") + var/list/locations = list( + "RANDOM" = null, + "kitchen" = LOC_KITCHEN, + "atmospherics" = LOC_ATMOS, + "incinerator" = LOC_INCIN, + "chapel" = LOC_CHAPEL, + "library" = LOC_LIBRARY, + "vault" = LOC_VAULT, + "technical storage" = LOC_TECH, + ) + var/list/vermins = list( + "RANDOM" = null, + "mice" = VERM_MICE, + "lizards" = VERM_LIZARDS, + "spiders" = VERM_SPIDERS, + "slimes" = VERM_SLIMES, + "bats" = VERM_BATS, + "borers" = VERM_BORERS, + "mimics" = VERM_MIMICS, + "roaches" = VERM_ROACHES, + "gremlins" = VERM_GREMLINS, + "bees" = VERM_BEES, + ) + var/ov = vermins[input("What vermin should infest the station?", "Vermin Infestation") in vermins] + var/ol = locations[input("Where should they spawn?", "Vermin Infestation") in locations] + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","VI") + message_admins("[key_name_admin(usr)] has triggered an infestation of vermins.", 1) + var/datum/event/infestation/infestation_event = new() + infestation_event.override_location = ol + infestation_event.override_vermin = ov if("hostile_infestation") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","HI") diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index 9f53a600eee..49e43677c37 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -1,21 +1,4 @@ -#define LOC_KITCHEN 0 -#define LOC_ATMOS 1 -#define LOC_INCIN 2 -#define LOC_CHAPEL 3 -#define LOC_LIBRARY 4 -#define LOC_HYDRO 5 -#define LOC_VAULT 6 -#define LOC_TECH 7 -#define VERM_MICE 0 -#define VERM_LIZARDS 1 -#define VERM_SPIDERS 2 -#define VERM_SLIMES 3 -#define VERM_BATS 4 -#define VERM_BORERS 5 -#define VERM_MIMICS 6 -#define VERM_ROACHES 7 -#define VERM_GREMLINS 8 /datum/event/infestation announceWhen = 15 @@ -23,10 +6,15 @@ var/locstring var/vermstring var/vermin = VERM_MICE + var/override_location = null + var/override_vermin = null /datum/event/infestation/start() var/location = pick(LOC_KITCHEN, LOC_ATMOS, LOC_INCIN, LOC_CHAPEL, LOC_LIBRARY, LOC_HYDRO, LOC_VAULT, LOC_TECH) + if (override_location) + location = override_location + var/spawn_area_type //TODO: These locations should be specified by the map datum or by the area. //Area datums, any day now @@ -60,7 +48,10 @@ var/list/spawn_types = list() var/max_number = 4 - vermin = pick(VERM_MICE, VERM_LIZARDS, VERM_SPIDERS, VERM_SLIMES, VERM_BATS, VERM_BORERS, VERM_MIMICS, VERM_ROACHES, VERM_GREMLINS) + vermin = pick(VERM_MICE, VERM_LIZARDS, VERM_SPIDERS, VERM_SLIMES, VERM_BATS, VERM_BORERS, VERM_MIMICS, VERM_ROACHES, VERM_GREMLINS, VERM_BEES) + + if (override_vermin) + vermin = override_vermin switch(vermin) if(VERM_MICE) @@ -96,6 +87,10 @@ spawn_types = /mob/living/simple_animal/hostile/gremlin vermstring = "gremlins" max_number = 4 //2 to 4 + if(VERM_BEES) + spawn_types = /obj/machinery/apiary/wild + vermstring = "angry bees" + max_number = 2 var/number = rand(2, max_number) @@ -121,20 +116,3 @@ warning = "Drive them away!" //DF reference command_alert(new /datum/command_alert/vermin(vermstring, locstring, warning)) - -#undef LOC_KITCHEN -#undef LOC_ATMOS -#undef LOC_INCIN -#undef LOC_CHAPEL -#undef LOC_LIBRARY -#undef LOC_HYDRO -#undef LOC_VAULT -#undef LOC_TECH - -#undef VERM_MICE -#undef VERM_LIZARDS -#undef VERM_SPIDERS -#undef VERM_SLIMES -#undef VERM_BATS -#undef VERM_MIMICS -#undef VERM_GREMLINS diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index 52b7d071991..a2f4cad239e 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -4,7 +4,7 @@ #define FATIGUE_PER_POLLINATIONS 4//how much extra fatigue does the bee receive from performing a successful pollination (if set to 0, the bee won't stop until there are no more flowers in range) #define FATIGUE_TO_RETURN 20//once reached, the bee will head back to its hive -#define BOREDOM_TO_RETURN 20//once reached, the bee will head back to its hive +#define BOREDOM_TO_RETURN 30//once reached, the bee will head back to its hive //////////////////////BEE DATUMS/////////////////////////////////////// @@ -12,7 +12,7 @@ /datum/bee var/mob/living/simple_animal/bee/mob = null var/obj/machinery/apiary/home = null - var/mut = 1//the brute damage dealt by a sting. Set when leaving the hive (spawning). + var/damage = 1//the brute damage dealt by a sting. Set when leaving the hive (spawning). var/toxic = 0//the extra toxic damage dealt by a sting. Set when leaving the hive (spawning). var/health = 10 var/maxHealth = 10 @@ -27,7 +27,7 @@ ..() if (spawner) home = spawner - mut = spawner.mut + damage = spawner.damage toxic = spawner.toxic /datum/bee/proc/goPollinate() @@ -42,8 +42,9 @@ mob.updateState = 1 /datum/bee/proc/homeCall() - state = BEE_HEADING_HOME - mob.updateState = 1 + if (home)//Hive-less bees never calm down + state = BEE_HEADING_HOME + mob.updateState = 1 /datum/bee/proc/Die() if (mob) @@ -79,7 +80,7 @@ icon_state = "bee_dead" anchored = 0 mouse_opacity = 1 - plane = MOB_PLANE + plane = LYING_MOB_PLANE /obj/effect/decal/cleanable/bee/New() ..() @@ -105,7 +106,7 @@ can_butcher = 0 var/updateState = 0//if set to 1, the bee mob will check if it should split based on its bee datums' intents - var/state = null + var/state = BEE_ROAMING var/atom/destination = null var/list/bees = list() var/mob/target = null @@ -214,7 +215,7 @@ /mob/living/simple_animal/bee/adjustBruteLoss(var/amount) if(status_flags & GODMODE) - return 0 //godmode + return 0 while (amount > 0 && bees.len) var/datum/bee/B = pick(bees) @@ -223,7 +224,10 @@ amount = 0 else amount -= B.health + current_physical_damage -= B.damage/2 + current_poison_damage -= B.toxic/2 B.Die() + if (bees.len <= 0) qdel(src) update_icon() @@ -231,16 +235,16 @@ //CUSTOM PROCS /mob/living/simple_animal/bee/proc/addBee(var/datum/bee/B) - var/total_mut = 0 + var/total_brute = 0 var/total_toxic = 0 bees.Add(B) B.mob = src home = B.home for (var/datum/bee/BEE in bees) - total_mut += BEE.mut + total_brute += BEE.damage total_toxic += BEE.toxic - current_physical_damage = max(2,round((bees.len+total_mut)/2)) - current_poison_damage = max(1,round((bees.len+total_toxic)/10)) + current_physical_damage = total_brute/2 + current_poison_damage = total_toxic/2 update_icon() /mob/living/simple_animal/bee/proc/panic_attack(mob/damagesource) @@ -265,7 +269,7 @@ if(stat != DEAD) - //SPLITTING THE SWARM DEPENDING ON THEIR INTENT + //SPLITTING THE SWARM DEPENDING ON THEIR INTENT if (updateState) updateState = 0 var/list/swarmers = list() @@ -319,10 +323,7 @@ state = BEE_OUT_FOR_ENEMIES - - - ///////////////////////////CALMING STUFF///////////////////////////////////////// - + //CALMING BEES var/list/calmers = list( /obj/effect/decal/chemical_puff, /obj/effect/effect/smoke/chem, @@ -346,10 +347,10 @@ updateState = 1 break - ////////////////ATTACKING STUFF/////////////////////////////////////////// if(stat == CONSCIOUS) + //ATTACKING TARGET var/mob/living/carbon/human/M = target if(calmed > 0) @@ -376,20 +377,20 @@ sting_prob -= min(worn_suit.armor["bio"],70) // Is it sealed? I can't get to 70% of your body. if(worn_helmet) sting_prob -= min(worn_helmet.armor["bio"],30) // Is your helmet sealed? I can't get to 30% of your body. - if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) ) // Try to sting! If you're not moving, think about stinging. - M.apply_damage(current_physical_damage, BRUTE) // Stinging. The more mutated I am, the harder I sting. - M.apply_damage(current_poison_damage, TOX) // Bee venom based on how angry I am and how many there are of me! + if(prob(sting_prob)) + M.apply_damage(current_physical_damage, BRUTE) + M.apply_damage(current_poison_damage, TOX) to_chat(M, "You have been stung!") M.flash_pain() - ///////////////////////NOISE STUFF + //MAKING NOISE if(prob(1)) if(prob(50)) src.visible_message("[pick("Buzzzz.","Hmmmmm.","Bzzz.")]") - playsound(get_turf(src), 'sound/effects/bees.ogg', min(20*bees.len,100), 1) + playsound(get_turf(src), 'sound/effects/bees.ogg', min(20 * bees.len, 100), 1) - ////////////////////////GROUPING STUFF + //(DE)GROUPING WITH OTHER BEES for(var/mob/living/simple_animal/bee/B_mob in src.loc) if(B_mob == src) continue @@ -410,33 +411,34 @@ visited_plants.Add(B_mob.visited_plants) qdel(B_mob) - //spreading out a bit - if(bees.len > 1 && pollinating <= 0 && prob(bees.len*2)) + //SPREADING OUT + if(bees.len > 1 && pollinating <= 0 && prob(bees.len*2) && state != BEE_SWARM) var/mob/living/simple_animal/bee/B_mob = getFromPool(/mob/living/simple_animal/bee,get_turf(src)) var/datum/bee/B = pick(bees) B_mob.addBee(B) bees.Remove(B) B_mob.calmed = calmed B_mob.state = state + B_mob.target = target B_mob.update_icon() B_mob.home = home B_mob.visited_plants.Add(visited_plants) B_mob.Move(get_turf(pick(orange(src,1)))) - ///////////////TARGETING PEOPLE - + //REACHING FOR MOBS if(state == BEE_OUT_FOR_ENEMIES) var/turf/target_turf = null - if(target && target in view(src,7)) + if(target && target in view(src,7) && target.stat != DEAD) target_turf = get_turf(target) wander = 0 else + target = null var/list/nearbyMobs = list() for(var/mob/living/G in view(src,7)) if (istype(G,/mob/living/simple_animal/bee)) var/mob/living/simple_animal/bee/B = G - if (B.home == home)//we'll allow bees to fight bees from other hives + if (B.home == home || (B.home.wild && home.wild))//we'll allow bees to fight bees from other hives, unless they're both from wild hives continue if (G.flags & INVULNERABLE) continue if (G.stat != DEAD) @@ -448,7 +450,7 @@ else for (var/datum/bee/B in bees) B.bored++ - if (B.fatigue > BOREDOM_TO_RETURN) + if (B.bored > BOREDOM_TO_RETURN && B.home && !B.home.wild) B.homeCall() if(target_turf) @@ -459,8 +461,7 @@ if(src.loc == target_turf) wander = 1 - //////////////TARGETING FLOWERS - + //REACHING FOR FLOWERS if(state == BEE_OUT_FOR_PLANTS && pollinating <= 0) var/turf/target_turf = null if(target_plant && target_plant in view(src,7)) @@ -500,8 +501,7 @@ wander = 1 - //////////////TARGETING APIARY - + //REACHING FOR HOME if(state == BEE_HEADING_HOME || state == BEE_SWARM) wander = 0 var/turf/target_turf = get_turf(home) @@ -520,6 +520,9 @@ update_icon() + +////////////////////////////////UPDATE ICON///////////////////////////////// + /mob/living/simple_animal/bee/update_icon() overlays.len = 0 @@ -545,7 +548,7 @@ -////////////////////////////BEE PRESETS////////////////////////////////////////////////// +////////////////////////////BEE PRESETS///////////////////////////////////// /mob/living/simple_animal/bee/adminSpawned/New(loc, var/obj/machinery/apiary/new_home) ..() @@ -565,7 +568,7 @@ ..() var/datum/bee/B = new() B.toxic = 5 - B.mut = 2 + B.damage = 2 B.state = BEE_OUT_FOR_ENEMIES state = BEE_OUT_FOR_ENEMIES addBee(B) @@ -577,7 +580,7 @@ for (var/i = 1 to 20) var/datum/bee/B = new() B.toxic = 5 - B.mut = 2 + B.damage = 2 B.state = BEE_OUT_FOR_ENEMIES addBee(B) state = BEE_OUT_FOR_ENEMIES diff --git a/icons/obj/apiary_bees_etc.dmi b/icons/obj/apiary_bees_etc.dmi index 531675d93262a3c1f3f13aeb26ef3ede760a86da..0094128598c6586ea49e78f5eb0f8d6610b506ce 100644 GIT binary patch literal 16335 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 z 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 ZA(LTeVgC@n1^1H!DvHk)isZ}!{u_NT*{A>j