From 706347fd848507c370dea2e04bf0e7447b8b4ce8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 22 Jan 2017 08:11:31 -0500 Subject: [PATCH] even more work --- code/datums/recipe.dm | 109 +++++++--------- code/datums/uplink_item.dm | 2 +- .../game/objects/effects/spawners/lootdrop.dm | 2 +- code/game/objects/items/stacks/medical.dm | 26 ---- .../objects/items/weapons/bee_briefcase.dm | 9 +- code/game/objects/items/weapons/kitchen.dm | 11 ++ code/modules/crafting/recipes.dm | 1 - code/modules/events/spacevine.dm | 12 +- .../food_and_drinks/drinks/bottler/bottler.dm | 7 +- .../drinks/bottler/bottler_recipes.dm | 5 +- code/modules/food_and_drinks/food/meat.dm | 10 +- code/modules/food_and_drinks/food/snacks.dm | 21 +++- .../kitchen_machinery/deep_fryer.dm | 6 +- .../kitchen_machinery/kitchen_machine.dm | 2 +- .../kitchen_machinery/processor.dm | 8 +- code/modules/hydroponics/beekeeping/beebox.dm | 9 +- code/modules/hydroponics/gene_modder.dm | 6 +- code/modules/hydroponics/grown/ambrosia.dm | 10 ++ code/modules/hydroponics/grown/banana.dm | 4 +- code/modules/hydroponics/grown/cereals.dm | 2 +- code/modules/hydroponics/grown/chili.dm | 20 +-- .../modules/hydroponics/grown/grass_carpet.dm | 6 +- code/modules/hydroponics/grown/kudzu.dm | 2 +- code/modules/hydroponics/grown/nettle.dm | 22 ++-- code/modules/hydroponics/grown/replicapod.dm | 24 +--- code/modules/hydroponics/grown/towercap.dm | 2 +- code/modules/hydroponics/growninedible.dm | 5 +- code/modules/hydroponics/hydroitemdefines.dm | 27 ++-- code/modules/hydroponics/plant_genes.dm | 4 +- .../carbon/human/interactive/functions.dm | 28 +---- .../simple_animal/friendly/farm_animals.dm | 68 +++++----- .../simple_animal/hostile/venus_human_trap.dm | 116 ++++++++++++++++++ icons/effects/spacevines.dmi | Bin 11746 -> 3923 bytes icons/mob/inhands/items_lefthand.dmi | Bin 177614 -> 177735 bytes icons/mob/inhands/items_righthand.dmi | Bin 176186 -> 176319 bytes icons/obj/kitchen.dmi | Bin 28891 -> 29204 bytes paradise.dme | 2 + 37 files changed, 321 insertions(+), 267 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index afe6c059d6d..95575387fbe 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -34,108 +34,88 @@ * */ /datum/recipe - var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice - var/list/items // example: = list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo - var/list/fruit // example: = list("fruit" = 3) - var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut - var/time = 100 // 1/10 part of second + var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice + var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo + var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut + var/time = 100 // 1/10 part of second var/byproduct // example: = /obj/item/weapon/kitchen/mould // byproduct to return, such as a mould or trash - /datum/recipe/proc/check_reagents(datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous . = 1 - for(var/r_r in reagents) + for (var/r_r in reagents) var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) - if(!(abs(aval_r_amnt - reagents[r_r])<0.5)) //if NOT equals - if(aval_r_amnt>reagents[r_r]) + if (!(abs(aval_r_amnt - reagents[r_r])<0.5)) //if NOT equals + if (aval_r_amnt>reagents[r_r]) . = -1 else return 0 - if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) + if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) return -1 return . -/datum/recipe/proc/check_fruit(obj/container) +/datum/recipe/proc/check_items(obj/container) //1=precisely, 0=insufficiently, -1=superfluous + if (!items) + if (locate(/obj/) in container) + return -1 + else + return 1 . = 1 - if(fruit && fruit.len) - var/list/checklist = list() - // You should trust Copy(). - checklist = fruit.Copy() - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) - continue - checklist[G.seed.kitchen_tag]-- - for(var/ktag in checklist) - if(!isnull(checklist[ktag])) - if(checklist[ktag] < 0) - . = 0 - else if(checklist[ktag] > 0) - . = -1 - break - return . - -/datum/recipe/proc/check_items(obj/container) - . = 1 - if(items && items.len) - var/list/checklist = list() - checklist = items.Copy() // You should really trust Copy - for(var/obj/O in container) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if(istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if(!found) - . = 0 - if(checklist.len) + var/list/checklist = items.Copy() + for (var/obj/O in container) + var/found = 0 + for (var/type in checklist) + if (istype(O,type)) + checklist-=type + found = 1 + break + if (!found) . = -1 + if (checklist.len) + return 0 return . //general version /datum/recipe/proc/make(obj/container) var/obj/result_obj = new result(container) - for(var/obj/O in (container.contents-result_obj)) + for (var/obj/O in (container.contents-result_obj)) O.reagents.trans_to(result_obj, O.reagents.total_volume) qdel(O) container.reagents.clear_reagents() - score_meals++ return result_obj // food-related /datum/recipe/proc/make_food(obj/container) var/obj/result_obj = new result(container) - for(var/obj/O in (container.contents-result_obj)) - if(O.reagents) + for (var/obj/O in (container.contents-result_obj)) + if (O.reagents) O.reagents.del_reagent("nutriment") O.reagents.update_total() O.reagents.trans_to(result_obj, O.reagents.total_volume) qdel(O) container.reagents.clear_reagents() - score_meals++ return result_obj -/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1) - if(!exact) +/proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj, exact = 1 as num) + if (!exact) exact = -1 var/list/datum/recipe/possible_recipes = new - for(var/datum/recipe/recipe in avaiable_recipes) - if(recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact && recipe.check_fruit(obj)==exact) + for (var/datum/recipe/recipe in avaiable_recipes) + if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==exact) possible_recipes+=recipe - if(possible_recipes.len==0) + if (possible_recipes.len==0) return null - else if(possible_recipes.len==1) + else if (possible_recipes.len==1) return possible_recipes[1] else //okay, let's select the most complicated recipe - var/highest_count = 0 + var/r_count = 0 + var/i_count = 0 . = possible_recipes[1] - for(var/datum/recipe/recipe in possible_recipes) - var/count = ((recipe.items)?(recipe.items.len):0) + ((recipe.reagents)?(recipe.reagents.len):0) + ((recipe.fruit)?(recipe.fruit.len):0) - if(count >= highest_count) - highest_count = count + for (var/datum/recipe/recipe in possible_recipes) + var/N_i = (recipe.items)?(recipe.items.len):0 + var/N_r = (recipe.reagents)?(recipe.reagents.len):0 + if (N_i > i_count || (N_i== i_count && N_r > r_count )) + r_count = N_r + i_count = N_i . = recipe return . @@ -149,7 +129,4 @@ var/count = 0 if(items && items.len) count += items.len - if(fruit && fruit.len) - for(var/ktag in fruit) - count += fruit[ktag] - return count + return count \ No newline at end of file diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 2c5b9375918..d54311921fd 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -305,7 +305,7 @@ var/list/uplink_items = list() name = "Ambrosia Cruciatus Seeds" desc = "Part of the notorious Ambrosia family, this species is nearly indistinguishable from Ambrosia Vulgaris- but its' branches contain a revolting toxin. Eight units are enough to drive victims insane." reference = "BRO" - item = /obj/item/seeds/ambrosiavulgarisseed/cruciatus + item = /obj/item/seeds/ambrosia/cruciatus cost = 2 job = list("Botanist") diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 5c82d07452c..546db62032c 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -128,7 +128,7 @@ /obj/item/stack/tape_roll = 10, ////////////////CONTRABAND STUFF////////////////// /obj/item/weapon/grenade/clown_grenade = 3, - /obj/item/seeds/ambrosiavulgarisseed/cruciatus = 3, + /obj/item/seeds/ambrosia/cruciatus = 3, /obj/item/weapon/gun/projectile/automatic/pistol/empty = 1, /obj/item/ammo_box/magazine/m10mm = 4, /obj/item/weapon/soap/syndie = 7, diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 2c6d04b9c06..0bfb45e1151 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -152,32 +152,6 @@ icon_state = "burnkit" heal_burn = 25 - - -//Medical Herbs// - - -/obj/item/stack/medical/bruise_pack/comfrey - name = "\improper Comfrey leaf" - singular_name = "Comfrey leaf" - desc = "A soft leaf that is rubbed on bruises." - icon = 'icons/obj/hydroponics_products.dmi' - icon_state = "alien3-product" - color = "#378C61" - heal_brute = 12 - - -/obj/item/stack/medical/ointment/aloe - name = "\improper Aloe Vera leaf" - singular_name = "Aloe Vera leaf" - desc = "A cold leaf that is rubbed on burns." - icon = 'icons/obj/hydroponics_products.dmi' - icon_state = "ambrosia-product" - color = "#4CC5C7" - heal_burn = 12 - - - //Splits// diff --git a/code/game/objects/items/weapons/bee_briefcase.dm b/code/game/objects/items/weapons/bee_briefcase.dm index 8a15bc7f517..7d2b718da82 100644 --- a/code/game/objects/items/weapons/bee_briefcase.dm +++ b/code/game/objects/items/weapons/bee_briefcase.dm @@ -46,13 +46,10 @@ to_chat(user, "The buzzing inside the briefcase swells momentarily, then returns to normal. Guess it was too cramped...") S.reagents.clear_reagents() S.update_icon() - else if(istype(I, /obj/item/weapon/plantspray)) - var/obj/item/weapon/plantspray/PS = I - user.drop_item(PS) - bees_left = max(0, (bees_left - PS.pest_kill_str)) - to_chat(user, "You spray [PS] into \the [src].") + else if(istype(I, /obj/item/weapon/reagent_containers/spray/pestspray)) + bees_left = max(0, (bees_left - 6)) + to_chat(user, "You spray [I] into [src].") playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) - qdel(PS) /obj/item/weapon/bee_briefcase/attack_self(mob/user as mob) if(!bees_left) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 183f07bb21c..069bf06ddfb 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -152,6 +152,17 @@ origin_tech = "materials=2;combat=4" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") +/obj/item/weapon/kitchen/knife/carrotshiv + name = "carrot shiv" + icon_state = "carrotshiv" + item_state = "carrotshiv" + desc = "Unlike other carrots, you should probably keep this far away from your eyes." + force = 8 + throwforce = 12 //fuck git + materials = list() + origin_tech = "biotech=3;combat=2" + attack_verb = list("shanked", "shivved") + /* * Rolling Pins */ diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 288dcfcd9c5..e86a08c9f4a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -6,7 +6,6 @@ var/time = 30 //time in deciseconds var/parts[] = list() //type paths of items that will be placed in the result var/chem_catalists[] = list() //like tools but for reagents - var/fruit[] = list() //grown products required by the recipe var/category = CAT_MISC // Recipe category /datum/crafting_recipe/proc/AdjustChems(var/obj/resultobj as obj) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 13929b95c4c..5d626284fad 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -283,8 +283,7 @@ /datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder) if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder)) - var/obj/structure/alien/resin/flower_bud_enemy/FBE = new /obj/structure/alien/resin/flower_bud_enemy(get_turf(holder)) - FBE.layer = holder.layer+0.1 + new /obj/structure/alien/resin/flower_bud_enemy(get_turf(holder)) /datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser) if(prob(25)) @@ -337,8 +336,8 @@ KZ.production = (master.spread_cap / initial(master.spread_cap)) * 5 mutations = list() set_opacity(0) - if(has_buckled_mobs()) - unbuckle_all_mobs(force=1) + if(buckled_mob) + unbuckle_mob() return ..() /obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R) @@ -500,7 +499,6 @@ icon_state = pick("Med1", "Med2", "Med3") energy = 1 set_opacity(1) - layer = 5 else icon_state = pick("Hvy1", "Hvy2", "Hvy3") energy = 2 @@ -509,10 +507,10 @@ SM.on_grow(src) /obj/effect/spacevine/proc/entangle_mob() - if(!has_buckled_mobs() && prob(25)) + if(!buckled_mob && prob(25)) for(var/mob/living/V in loc) entangle(V) - if(has_buckled_mobs()) + if(buckled_mob) break //only capture one mob at a time diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index c6b88b78c6c..81974b39c0e 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -213,12 +213,7 @@ for(var/i = 1, i <= slots.len, i++) var/obj/item/O = slots[i] if(istype(O, recipe.ingredients[i])) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O - if(G.seed && G.seed.kitchen_tag == recipe.tags[i]) - number_matches++ - else - number_matches++ + number_matches++ if(number_matches == 3) return recipe return null diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm index be7504afade..d79e93cb9cc 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm @@ -3,7 +3,6 @@ var/name = "" var/description = "" var/list/ingredients[3] - var/list/tags[3] var/datum/reagent/result = null @@ -12,12 +11,10 @@ name = "Example" description = "This is an example." ingredients = list(thing_1, thing_2, thing_3) - tags = list(null, "tag_2", null) result = "water" The ingredients list must have 3 non-null entries. -The tags list must have 3 entries, using null where a tag is unused. -Failing to ensure both lists have EXACTLY 3 entries (unless the system is updated in the future to use a different number) will result in runtimes. +Failing to ensure the list has EXACTLY 3 entries (unless the system is updated in the future to use a different number) will result in runtimes. There is no excuse to do this wrong now that there is an example for you. --FalseIncarnate */ diff --git a/code/modules/food_and_drinks/food/meat.dm b/code/modules/food_and_drinks/food/meat.dm index 4635f6eb9b1..19d8307c906 100644 --- a/code/modules/food_and_drinks/food/meat.dm +++ b/code/modules/food_and_drinks/food/meat.dm @@ -44,4 +44,12 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/ham name = "Ham" desc = "Taste like bacon." - list_reagents = list("protein" = 3, "porktonium" = 10) \ No newline at end of file + list_reagents = list("protein" = 3, "porktonium" = 10) + +/obj/item/weapon/reagent_containers/food/snacks/meat/meatwheat + name = "meatwheat clump" + desc = "This doesn't look like meat, but your standards aren't that high to begin with." + list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5) + filling_color = rgb(150, 0, 0) + icon_state = "meatwheat_clump" + bitesize = 4 \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 1802fd0fce1..df02249c3d1 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -27,12 +27,8 @@ user.visible_message("[user] finishes eating \the [src].") user.unEquip(src) //so icons update :[ Post_Consume(M) - if(trash) - if(ispath(trash,/obj/item)) - var/obj/item/TrashItem = new trash(user) - user.put_in_hands(TrashItem) - else if(istype(trash,/obj/item)) - user.put_in_hands(trash) + var/obj/item/trash_item = generate_trash(usr) + usr.put_in_hands(trash_item) qdel(src) return @@ -175,6 +171,19 @@ return +/obj/item/weapon/reagent_containers/food/snacks/proc/generate_trash(atom/location) + if(trash) + if(ispath(trash, /obj/item)) + . = new trash(location) + trash = null + return + else if(istype(trash, /obj/item)) + var/obj/item/trash_item = trash + trash_item.forceMove(location) + . = trash + trash = null + return + /obj/item/weapon/reagent_containers/food/snacks/Destroy() if(contents) for(var/atom/movable/something in contents) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 73607d4e3ab..d9b98c82724 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -48,11 +48,7 @@ return 0 for(var/Type in subtypesof(/datum/deepfryer_special)) var/datum/deepfryer_special/P = new Type() - if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I - if(G.seed.kitchen_tag != P.input) - continue - else if(!istype(I, P.input)) + if(!istype(I, P.input)) continue return P return 0 diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index ef7591e3955..5bae15b6b35 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -45,7 +45,7 @@ acceptable_items |= item for(var/reagent in recipe.reagents) acceptable_reagents |= reagent - if(recipe.items || recipe.fruit) + if(recipe.items) max_n_of_items = max(max_n_of_items,recipe.count_n_items()) else qdel(recipe) diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 5183fe6a4fa..8a4a154ea3d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -142,14 +142,10 @@ //END RECIPE DATUMS -/obj/machinery/processor/proc/select_recipe(var/X) +/obj/machinery/processor/proc/select_recipe(X) for(var/Type in subtypesof(/datum/food_processor_process) - /datum/food_processor_process/mob) var/datum/food_processor_process/P = new Type() - if(istype(X, /obj/item/weapon/reagent_containers/food/snacks/grown)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = X - if(G.seed.kitchen_tag != P.input) - continue - else if(!istype(X, P.input)) + if(!istype(X, P.input)) continue return P return 0 diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 9af1c4869a0..c8810b3078e 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -14,9 +14,16 @@ /mob/living/simple_animal/hostile/poison/bees/bee_friendly() return 1 +/mob/living/simple_animal/bot/bee_friendly() + if(paicard) + return 0 + return 1 + +/mob/living/simple_animal/diona/bee_friendly() + return 1 /mob/living/carbon/human/bee_friendly() - if(dna && dna.species && dna.species.id == "pod") //bees pollinate plants, duh. + if(get_species() == "Diona") //bees pollinate plants, duh. return 1 if((wear_suit && (wear_suit.flags & THICKMATERIAL)) && (head && (head.flags & THICKMATERIAL))) return 1 diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index b3ee983459b..208d76fd2a2 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -237,7 +237,7 @@ update_genes() update_icon() else - var/obj/item/I = usr.get_active_held_item() + var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/seeds)) if(!usr.drop_item()) return @@ -251,7 +251,7 @@ disk = null update_genes() else - var/obj/item/I = usr.get_active_held_item() + var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/disk/plantgene)) if(!usr.drop_item()) return @@ -383,7 +383,7 @@ ..() if(istype(W, /obj/item/weapon/pen)) var/t = stripped_input(user, "What would you like the label to be?", name, null) - if(user.get_active_held_item() != W) + if(user.get_active_hand() != W) return if(!in_range(src, user) && loc != user) return diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 554cba9f47e..95132f9ee1f 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -74,3 +74,13 @@ origin_tech = "biotech=6;materials=5" light_range = 3 seed = /obj/item/seeds/ambrosia/gaia + +// Ambrosia Cruciatus +/obj/item/seeds/ambrosia/cruciatus + product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/cruciatus + potency = 10 + mutatelist = list() + reagents_add = list("thc" = 0.15, "silver_sulfadiazine" = 0.15, "styptic_powder" = 0.1, "bath salts" = 0.20, "plantmatter" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/cruciatus + seed = /obj/item/seeds/ambrosia/cruciatus \ No newline at end of file diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index fc9e01b2372..03f032111f3 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -25,7 +25,7 @@ bitesize = 5 /obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) - user.visible_message("[user] is aiming [src] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.") playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) sleep(25) if(!user) @@ -49,7 +49,7 @@ throw_range = 7 /obj/item/weapon/grown/bananapeel/suicide_act(mob/user) - user.visible_message("[user] is deliberately slipping on [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1) return (BRUTELOSS) diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 66c5a17a841..fd5ea080ca3 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -83,7 +83,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") playsound(user, 'sound/effects/blobattack.ogg', 50, 1) - var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatwheat/M = new(get_turf(user)) + var/obj/item/weapon/reagent_containers/food/snacks/meat/meatwheat/M = new(get_turf(user)) user.drop_item() qdel(src) user.put_in_hands(M) diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 80d5089108d..81067dd17c0 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -74,22 +74,4 @@ var/mob/held_mob filling_color = "#F8F8FF" bitesize_mod = 4 - origin_tech = "biotech=4;magnets=5" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) - ..() - if(ismob(loc)) - held_mob = loc - processing_objects.Add(src) - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/process() - if(held_mob && loc == held_mob) - if(held_mob.is_holding(src)) - if(hasvar(held_mob,"gloves") && held_mob:gloves) - return - held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(10)) - to_chat(held_mob, "Your hand holding [src] burns!") - else - held_mob = null - ..() + origin_tech = "biotech=4;magnets=5" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index c7715a8bee3..f113074911c 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -43,10 +43,8 @@ GT = new stacktype(user.loc) GT.amount = grassAmt for(var/obj/item/stack/tile/T in user.loc) - if((T.type == stacktype) && (T.amount < T.max_amount)) - GT.merge(T) - if(GT.amount <= 0) - break + if((T.type == stacktype) && (T.amount < T.max_amount) && (T != GT)) + T.attackby(GT, user) qdel(src) return diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 5f9e596c828..a09e83ae955 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -22,7 +22,7 @@ return S /obj/item/seeds/kudzu/suicide_act(mob/user) - user.visible_message("[user] swallows the pack of kudzu seeds! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] swallows the pack of kudzu seeds! It looks like \he's trying to commit suicide..") plant(user) return (BRUTELOSS) diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 33d506a8c0d..7e9d318093c 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -44,24 +44,26 @@ attack_verb = list("stung") /obj/item/weapon/grown/nettle/suicide_act(mob/user) - user.visible_message("[user] is eating some of [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.") return (BRUTELOSS|TOXLOSS) /obj/item/weapon/grown/nettle/pickup(mob/living/user) ..() - if(!iscarbon(user)) + if(!ishuman(user)) return 0 - var/mob/living/carbon/C = user - if(C.gloves) + var/mob/living/carbon/human/H = user + if(H.gloves) return 0 - var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm" - var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone) + var/organ = ((H.hand ? "l_":"r_") + "arm") + var/obj/item/organ/external/affecting = H.get_organ(organ) if(affecting) - if(affecting.receive_damage(0, force)) - C.update_damage_overlays() - to_chat(C, "The nettle burns your bare hand!") + if(affecting.take_damage(0, force)) + H.UpdateDamageIcon() + to_chat(H, "The nettle burns your bare hand!") return 1 + + /obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity) if(!proximity) return if(force > 0) @@ -104,7 +106,7 @@ to_chat(M, "You are stunned by the powerful acid of the Deathnettle!") add_logs(user, M, "attacked", src) - M.adjust_blurriness(force/7) + M.AdjustEyeBlurry(force/7) if(prob(20)) M.Paralyse(force / 6) M.Weaken(force / 15) diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 3eb6fb3a890..710d92dfe49 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -6,7 +6,7 @@ icon_state = "seed-replicapod" species = "replicapod" plantname = "Replica Pod" - product = /mob/living/carbon/human //verrry special -- Urist + product = /mob/living/carbon/human/diona //verrry special -- Urist lifespan = 50 endurance = 8 maturation = 10 @@ -35,12 +35,12 @@ features = bloodSample.data["features"] factions = bloodSample.data["factions"] W.reagents.clear_reagents() - user << "You inject the contents of the syringe into the seeds." + to_chat(user, "You inject the contents of the syringe into the seeds.") contains_sample = 1 else - user << "The seeds reject the sample!" + to_chat(user, "The seeds reject the sample!") else - user << "The seeds already contain a genetic sample!" + to_chat(user, "The seeds already contain a genetic sample!") else return ..() @@ -66,30 +66,22 @@ else if(M.ckey == ckey && M.stat == DEAD && !M.suiciding) make_podman = 1 - if(isliving(M)) - var/mob/living/L = M - make_podman = !L.hellbound break else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key for(var/mob/M in player_list) - if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding) + if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == DEAD && !M.suiciding) if(isobserver(M)) var/mob/dead/observer/O = M if(!O.can_reenter_corpse) break make_podman = 1 - if(isliving(M)) - var/mob/living/L = M - make_podman = !L.hellbound ckey_holder = M.ckey break if(make_podman) //all conditions met! - var/mob/living/carbon/human/podman = new /mob/living/carbon/human(parent.loc) + var/mob/living/carbon/human/diona/podman = new /mob/living/carbon/human/diona(parent.loc) if(realName) podman.real_name = realName - else - podman.real_name = "Pod Person [rand(0,999)]" mind.transfer_to(podman) if(ckey) podman.ckey = ckey @@ -97,10 +89,6 @@ podman.ckey = ckey_holder podman.gender = blood_gender podman.faction |= factions - if(!features["mcolor"]) - features["mcolor"] = "#59CE00" - podman.hardset_dna(null,null,podman.real_name,blood_type,/datum/species/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman - podman.set_cloned_appearance() else //else, one packet of seeds. maybe two var/seed_count = 1 diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 144115303c6..0af7d6d0732 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -52,7 +52,7 @@ /obj/item/weapon/grown/log/attackby(obj/item/weapon/W, mob/user, params) - if(W.sharpness) + if(is_sharp(W)) user.show_message("You make [plank_name] out of \the [src]!", 1) var/obj/item/stack/plank = new plank_type(user.loc, 1 + round(seed.potency / 25)) var/old_plank_amount = plank.amount diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index cc47dcccee0..64d2eff90b7 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -58,7 +58,4 @@ if(!..()) //was it caught by a mob? if(seed) for(var/datum/plant_gene/trait/T in seed.genes) - T.on_throw_impact(src, hit_atom) - -/obj/item/weapon/grown/microwave_act(obj/machine/microwave/M) - return \ No newline at end of file + T.on_throw_impact(src, hit_atom) \ No newline at end of file diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index ea1977caeb7..8c85469c26d 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -33,7 +33,7 @@ reagents.add_reagent("weedkiller", 100) /obj/item/weapon/reagent_containers/spray/weedspray/suicide_act(mob/user) - user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.") return (TOXLOSS) /obj/item/weapon/reagent_containers/spray/pestspray // -- Skie @@ -55,7 +55,7 @@ reagents.add_reagent("pestkiller", 100) /obj/item/weapon/reagent_containers/spray/pestspray/suicide_act(mob/user) - user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.") return (TOXLOSS) /obj/item/weapon/cultivator @@ -92,10 +92,17 @@ edge = 1 /obj/item/weapon/hatchet/suicide_act(mob/user) - user.visible_message("[user] is chopping at [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] is chopping at \himself with the [src.name]! It looks like \he's trying to commit suicide.") playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return (BRUTELOSS) +/obj/item/weapon/hatchet/unathiknife + name = "duelling knife" + desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." + icon = 'icons/obj/weapons.dmi' + icon_state = "unathiknife" + attack_verb = list("ripped", "torn", "cut") + /obj/item/weapon/scythe icon_state = "scythe0" name = "scythe" @@ -113,13 +120,13 @@ hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/weapon/scythe/suicide_act(mob/user) - user.visible_message("[user] is beheading [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - if(iscarbon(user)) - var/mob/living/carbon/C = user - var/obj/item/bodypart/BP = C.get_bodypart("head") - if(BP) - BP.drop_limb() - playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) + user.visible_message("[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.droplimb(1, DROPLIMB_EDGE) + playsound(loc, pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg'), 50, 1, -1) return (BRUTELOSS) // ************************************* diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 5a2355df43d..b8b1e2346cc 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -313,10 +313,10 @@ /datum/plant_gene/trait/noreact/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) ..() - G.reagents.set_reacting(FALSE) + G.flags |= NOREACT /datum/plant_gene/trait/noreact/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) - G.reagents.set_reacting(TRUE) + G.flags &= ~NOREACT G.reagents.handle_reactions() diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index cce6c19c5e4..8b4a619b740 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -127,7 +127,7 @@ for(var/obj/machinery/hydroponics/tester in view(12,src)) considered[tester] = 1 - if(!tester.seed) + if(!tester.myseed) considered[tester] += 50 if(tester.weedlevel > 0) considered[tester] += 5 @@ -154,7 +154,7 @@ else if(HP.harvest || HP.dead) HP.attack_hand(src) - else if(!HP.seed) + else if(!HP.myseed) var/obj/item/seeds/SEED = new /obj/item/seeds/random(src) custom_emote(1, "[pick("gibbers","drools","slobbers","claps wildly","spits")] towards [TARGET], producing a [SEED]!") HP.attackby(SEED, src) @@ -403,26 +403,6 @@ ingredients += I I.forceMove(null) - for(var/P in R.fruit) - for(var/i = 1 to R.fruit[P]) - var/obj/item/I = locate(P) in allContents - if(I) - ingredients += I - I.forceMove(null) - continue - - I = locate(P) in rangeCheck - TARGET = I - if(I && !Adjacent(I)) - tryWalk(get_turf(I)) - sleep(get_dist(src, I)) - if(!I || !(I in rangeCheck)) - refundrecipe(ingredients) - return 0 - custom_emote(1, "[pick("gibbers","drools","slobbers","claps wildly","spits")], picking up [I].") - ingredients += I - I.forceMove(null) - // cheaply cook the ingredients into result sleep(R.time) for(var/obj/I in ingredients) @@ -579,8 +559,8 @@ var/highest_count = 0 var/datum/recipe/winner = null for(var/datum/recipe/R in available_recipes) - if(R.check_items(ingredientZone) >= 0 && R.check_fruit(ingredientZone) >= 0) - var/count = (R.items ? R.items.len : 0) + (R.fruit ? R.fruit.len : 0) + if(R.check_items(ingredientZone) >= 0) + var/count = (R.items ? R.items.len : 0) if(count > highest_count) highest_count = count winner = R diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 534ec607e6e..b1b31461b77 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -158,6 +158,7 @@ icon_living = "chick" icon_dead = "chick_dead" icon_gib = "chick_gib" + gender = FEMALE speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") speak_emote = list("cheeps") emote_hear = list("cheeps") @@ -201,9 +202,10 @@ var/global/chicken_count = 0 /mob/living/simple_animal/chicken name = "\improper chicken" desc = "Hopefully the eggs are good this season." - icon_state = "chicken" - icon_living = "chicken" - icon_dead = "chicken_dead" + gender = FEMALE + icon_state = "chicken_brown" + icon_living = "chicken_brown" + icon_dead = "chicken_brown_dead" speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") speak_emote = list("clucks","croons") emote_hear = list("clucks") @@ -212,62 +214,68 @@ var/global/chicken_count = 0 speak_chance = 2 turns_per_move = 3 butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 2) + var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg + var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "kicks the" attacktext = "kicks" - health = 10 - maxHealth = 10 + health = 15 + maxHealth = 15 + ventcrawler = 2 var/eggsleft = 0 - var/chicken_color + var/eggsFertile = TRUE + var/body_color + var/icon_prefix = "chicken" pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL can_hide = 1 can_collar = 1 + var/list/feedMessages = list("It clucks happily.","It clucks happily.") + var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + var/list/validColors = list("brown","black","white") gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY /mob/living/simple_animal/chicken/New() ..() - if(!chicken_color) - chicken_color = pick( list("brown","black","white") ) - icon_state = "chicken_[chicken_color]" - icon_living = "chicken_[chicken_color]" - icon_dead = "chicken_[chicken_color]_dead" + if(!body_color) + body_color = pick(validColors) + icon_state = "[icon_prefix]_[body_color]" + icon_living = "[icon_prefix]_[body_color]" + icon_dead = "[icon_prefix]_[body_color]_dead" pixel_x = rand(-6, 6) pixel_y = rand(0, 10) chicken_count += 1 /mob/living/simple_animal/chicken/death(gibbed) - ..() + ..(gibbed) chicken_count -= 1 -/mob/living/simple_animal/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) //feedin' dem chickens - var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O - if(G.seed.kitchen_tag == "wheat") - if(!stat && eggsleft < 8) - user.visible_message("\blue [user] feeds [O] to [name]! It clucks happily.","\blue You feed [O] to [name]! It clucks happily.") - user.drop_item() - qdel(O) - eggsleft += rand(1, 4) -// to_chat(world, eggsleft) - else - to_chat(user, "\blue [name] doesn't seem hungry!") +/mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params) + if(istype(O, food_type)) //feedin' dem chickens + if(!stat && eggsleft < 8) + var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" + user.visible_message(feedmsg) + user.drop_item() + qdel(O) + eggsleft += rand(1, 4) + //world << eggsleft else - to_chat(user, "\blue [name] doesn't seem interested in [O]!") + to_chat(user, "[name] doesn't seem hungry!") else ..() /mob/living/simple_animal/chicken/Life() . = ..() - if(. && prob(3) && eggsleft > 0) - visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]") + if((. && prob(3) && eggsleft > 0) && egg_type) + visible_message("[src] [pick(layMessage)]") eggsleft-- - var/obj/item/weapon/reagent_containers/food/snacks/egg/E = new(get_turf(src)) + var/obj/item/E = new egg_type(get_turf(src)) E.pixel_x = rand(-6,6) E.pixel_y = rand(-6,6) - if(chicken_count < MAX_CHICKENS && prob(10)) - processing_objects.Add(E) + if(eggsFertile) + if(chicken_count < MAX_CHICKENS && prob(25)) + processing_objects.Add(E) /obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 /obj/item/weapon/reagent_containers/food/snacks/egg/process() diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm new file mode 100644 index 00000000000..3033cdfc21e --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -0,0 +1,116 @@ + + +/obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures + name = "flower bud" + desc = "A large pulsating plant..." + icon = 'icons/effects/spacevines.dmi' + icon_state = "flower_bud" + layer = MOB_LAYER + 0.9 + opacity = 0 + canSmoothWith = list() + smooth = SMOOTH_FALSE + var/growth_time = 1200 + +/obj/structure/alien/resin/flower_bud_enemy/New() + ..() + var/list/anchors = list() + anchors += locate(x-2,y+2,z) + anchors += locate(x+2,y+2,z) + anchors += locate(x-2,y-2,z) + anchors += locate(x+2,y-2,z) + + for(var/turf/T in anchors) + var/datum/beam/B = Beam(T, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine) + B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow) + addtimer(src, "bear_fruit", growth_time) + +/obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit() + visible_message("the plant has borne fruit!") + new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src)) + qdel(src) + + +/obj/effect/ebeam/vine + name = "thick vine" + mouse_opacity = 1 + desc = "A thick vine, painful to the touch." + + +/obj/effect/ebeam/vine/Crossed(atom/movable/AM) + if(isliving(AM)) + var/mob/living/L = AM + if(!("vines" in L.faction)) + L.adjustBruteLoss(5) + to_chat(L, "You cut yourself on the thorny vines.") + + + +/mob/living/simple_animal/hostile/venus_human_trap + name = "venus human trap" + desc = "Now you know how the fly feels." + icon_state = "venus_human_trap" + layer = MOB_LAYER + 0.9 + health = 50 + maxHealth = 50 + ranged = 1 + harm_intent_damage = 5 + melee_damage_lower = 25 + melee_damage_upper = 25 + a_intent = I_HARM + attack_sound = 'sound/weapons/bladeslice.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 0 + faction = list("hostile","vines","plants") + var/list/grasping = list() + var/max_grasps = 4 + var/grasp_chance = 20 + var/grasp_pull_chance = 85 + var/grasp_range = 4 + del_on_death = 1 + +/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action() + if(..()) + for(var/mob/living/L in grasping) + if(L.stat == DEAD) + var/datum/beam/B = grasping[L] + if(B) + B.End() + grasping -= L + + //Can attack+pull multiple times per cycle + if(L.Adjacent(src)) + L.attack_animal(src) + else + if(prob(grasp_pull_chance)) + dir = get_dir(src,L) //staaaare + step(L,get_dir(L,src)) //reel them in + L.Weaken(3) //you can't get away now~ + + if(grasping.len < max_grasps) + grasping: + for(var/mob/living/L in view(grasp_range, src)) + if(L == src || faction_check(L) || (L in grasping) || L == target) + continue + for(var/t in getline(src,L)) + for(var/a in t) + var/atom/A = a + if(A.density && A != L) + continue grasping + if(prob(grasp_chance)) + L << "\The [src] has you entangled!" + grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine) + + break //only take 1 new victim per cycle + + +/mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target) + var/dist = get_dist(src,the_target) + Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine) + the_target.attack_animal(src) + + +/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target) + . = ..() + if(.) + if(the_target in grasping) + return 0 diff --git a/icons/effects/spacevines.dmi b/icons/effects/spacevines.dmi index a140679d3d8c67abc53480bb3bc1f46be5f42bf7..ee612f345e6b7936ca6ab307ff4140ee2fd1b2ce 100644 GIT binary patch delta 3859 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 VF7xRa*#HXw002ovPDHLkV1k(CTRQ*% delta 11736 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 diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 1003b7f7585af8e1910ae70efe0307e565df7816..4a1265fd3530c41c414128e78ac6f858809c21fa 100644 GIT binary patch delta 8644 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 delta 8522 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 diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 301a990639ee7c89e317d495d682c81099203020..fde65f1c949378670b0378993f0a8e3f59f4dd75 100644 GIT binary patch delta 7417 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 delta 7102 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 GWBwm5d%gVt diff --git a/paradise.dme b/paradise.dme index ba34f8505bf..1a65a76fc0e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1396,6 +1396,7 @@ #include "code\modules\hydroponics\grown\potato.dm" #include "code\modules\hydroponics\grown\pumpkin.dm" #include "code\modules\hydroponics\grown\random.dm" +#include "code\modules\hydroponics\grown\replicapod.dm" #include "code\modules\hydroponics\grown\root.dm" #include "code\modules\hydroponics\grown\tea_coffee.dm" #include "code\modules\hydroponics\grown\tobacco.dm" @@ -1694,6 +1695,7 @@ #include "code\modules\mob\living\simple_animal\hostile\statue.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\tree.dm" +#include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm" #include "code\modules\mob\living\simple_animal\hostile\winter_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm"