From 8219ababc5d89f92f43f09a1a4abecaa493e15f0 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sun, 17 Jun 2018 15:04:58 -0400 Subject: [PATCH] Makes fruit growing code on the Alraune organ based instead of implant based. Organizes the list to make it in alphabetical order. --- code/__defines/mobs_vr.dm | 3 + code/global_vr.dm | 40 +++--- .../living/carbon/human/human_defines_vr.dm | 2 +- .../carbon/human/species/station/alraune.dm | 130 ++++++++++++++++-- .../vore/fluffstuff/custom_items_vr.dm | 72 ---------- 5 files changed, 140 insertions(+), 107 deletions(-) diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index 2e3f8b0760..0a2e49d907 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -13,6 +13,9 @@ #define O_ORCH "orchestrator" #define O_FACT "refactory" +//Alraune organs +#define A_FRUIT "fruit gland" + //species defines #define SPECIES_AKULA "Akula" #define SPECIES_ALRAUNE "Alraune" diff --git a/code/global_vr.dm b/code/global_vr.dm index 4170750ee4..154613a4bb 100644 --- a/code/global_vr.dm +++ b/code/global_vr.dm @@ -7,28 +7,28 @@ return 1 var/global/list/acceptable_fruit_types= list( - "chili", - "berry", - "tomato", - "eggplant", - "apple", "ambrosia", + "apple", + "banana", + "berry", + "cabbage", + "carrot", + "cherry", + "chili", + "eggplant", "grape", "greengrapes", - "peanut", - "cabbage", - "banana", - "potato", - "onion", - "soybean", - "wheat", - "rice", - "carrot", - "whitebeet", - "sugarcane", - "watermelon", - "pumpkin", - "lime", "lemon", + "lime", + "onion", "orange", - "cherry") \ No newline at end of file + "peanut", + "potato", + "pumpkin", + "rice", + "soybean", + "sugarcane", + "tomato", + "watermelon", + "wheat", + "whitebeet") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm index f21caae5e7..d7617da72e 100644 --- a/code/modules/mob/living/carbon/human/human_defines_vr.dm +++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm @@ -7,4 +7,4 @@ var/flapping = 0 var/vantag_pref = VANTAG_NONE //What's my status? var/impersonate_bodytype //For impersonating a bodytype - var/fruit_type = "apple" // Decides the frruit type. Not used outside of Alraunes \ No newline at end of file + var/fruit_type = "apple" // Decides the fruit type. Not used outside of Alraunes \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index a52377f0b2..4aa39470c6 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -50,7 +50,8 @@ /mob/living/carbon/human/proc/succubus_drain, /mob/living/carbon/human/proc/succubus_drain_finalize, /mob/living/carbon/human/proc/succubus_drain_lethal, - /mob/living/carbon/human/proc/bloodsuck) //Give them the voremodes related to wrapping people in vines and sapping their fluids + /mob/living/carbon/human/proc/bloodsuck, + /mob/living/carbon/human/proc/alraune_fruit_select) //Give them the voremodes related to wrapping people in vines and sapping their fluids color_mult = 1 icobase = 'icons/mob/human_races/r_human_vr.dmi' @@ -88,19 +89,9 @@ O_KIDNEYS = /obj/item/organ/internal/kidneys/alraune, O_BRAIN = /obj/item/organ/internal/brain/alraune, O_EYES = /obj/item/organ/internal/eyes/alraune, + A_FRUIT = /obj/item/organ/internal/fruitgland, ) -/datum/species/alraune/equip_survival_gear(var/mob/living/carbon/human/H) - ..() - - var/implanter = /obj/item/weapon/implanter/reagent_generator/fruit_implant - var/obj/item/weapon/implanter/reagent_generator/fruit_implant/implant = new implanter - - if(H.backbag == 1) - H.equip_to_slot_or_del(implant, slot_r_hand) - else - H.equip_to_slot_or_del(implant, slot_in_backpack) - /datum/species/alraune/can_breathe_water() return TRUE //eh, why not? Aquatic plants are a thing. @@ -345,10 +336,121 @@ /obj/item/organ/internal/liver/alraune icon = 'icons/mob/species/alraune/organs.dmi' icon_state = "phytoextractor" - name = "phytoextractor" + name = "enzoretector" desc = "A bulbous gourd-like structure." +//Begin fruit gland and its code. +/obj/item/organ/internal/fruitgland //Amazing name, I know. + icon = 'icons/mob/species/alraune/organs.dmi' + icon_state = "phytoextractor" + name = "fruit gland" + desc = "A bulbous gourd-like structure." + organ_tag = A_FRUIT + var/generated_reagents = list("sugar" = 2) //This actually allows them. This could be anything, but sugar seems most fitting. + var/usable_volume = 250 //Five fruit. + var/transfer_amount = 50 + var/empty_message = list("Your have no fruit on you.", "You have a distinct lack of fruit..") + var/full_message = list("You have a multitude of fruit that is ready for harvest!", "You have fruit that is ready to be picked!") + var/emote_descriptor = list("fruit right off of the Alraune!", "a fruit from the Alraune!") + var/verb_descriptor = list("grabs", "snatches", "picks") + var/self_verb_descriptor = list("grab", "snatch", "pick") + var/short_emote_descriptor = list("picks", "grabs") + var/self_emote_descriptor = list("grab", "pick", "snatch") + var/fruit_type = "apple" + var/mob/organ_owner = null + var/gen_cost = 0.5 +/obj/item/organ/internal/fruitgland/New() + ..() + create_reagents(usable_volume) + + +/obj/item/organ/internal/fruitgland/process() + if(!owner) return + var/obj/item/organ/external/parent = owner.get_organ(parent_organ) + var/before_gen + if(parent && generated_reagents && organ_owner) //Is it in the chest/an organ, has reagents, and is 'activated' + before_gen = reagents.total_volume + if(reagents.total_volume < reagents.maximum_volume) + if(organ_owner.nutrition >= gen_cost) + do_generation() + + if(reagents) + if(reagents.total_volume == reagents.maximum_volume * 0.05) + to_chat(organ_owner, "[pick(empty_message)]") + else if(reagents.total_volume == reagents.maximum_volume && before_gen < reagents.maximum_volume) + to_chat(organ_owner, "[pick(full_message)]") + +/obj/item/organ/internal/fruitgland/proc/do_generation() + organ_owner.nutrition -= gen_cost + for(var/reagent in generated_reagents) + reagents.add_reagent(reagent, generated_reagents[reagent]) + + +/mob/living/carbon/human/proc/alraune_fruit_select() //So if someone doesn't want fruit/vegetables, they don't have to select one. + set name = "Select fruit" + set desc = "Select what fruit/vegetable you wish to grow." + set category = "Object" + var/obj/item/organ/internal/fruitgland/fruit_gland + for(var/F in contents) + if(istype(F, /obj/item/organ/internal/fruitgland)) + fruit_gland = F + break + + if(fruit_gland) + var/selection = input(src, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", fruit_gland.fruit_type) as null|anything in acceptable_fruit_types + if(selection) + fruit_gland.fruit_type = selection + verbs |= /mob/living/carbon/human/proc/alraune_fruit_pick + verbs -= /mob/living/carbon/human/proc/alraune_fruit_select + fruit_gland.organ_owner = src + fruit_gland.emote_descriptor = list("fruit right off of [fruit_gland.organ_owner]!", "a fruit from [fruit_gland.organ_owner]!") + + else + to_chat(src, "You lack the organ required to produce fruit.") + return + +/mob/living/carbon/human/proc/alraune_fruit_pick() + set name = "Pick Fruit" + set desc = "Pick fruit off of [src]." + set category = "Object" + set src in view(1) + + //do_reagent_implant(usr) + if(!isliving(usr) || !usr.canClick()) + return + + if(usr.incapacitated() || usr.stat > CONSCIOUS) + return + + var/obj/item/organ/internal/fruitgland/fruit_gland + for(var/I in contents) + if(istype(I, /obj/item/organ/internal/fruitgland)) + fruit_gland = I + break + if (fruit_gland) //Do they have the gland? + if(fruit_gland.reagents.total_volume < fruit_gland.transfer_amount) + to_chat(src, "[pick(fruit_gland.empty_message)]") + return + + var/datum/seed/S = plant_controller.seeds["[fruit_gland.fruit_type]"] + S.harvest(usr,0,0,1) + + var/index = rand(0,2) + + if (usr != src) + var/emote = fruit_gland.emote_descriptor[index] + var/verb_desc = fruit_gland.verb_descriptor[index] + var/self_verb_desc = fruit_gland.self_verb_descriptor[index] + usr.visible_message("[usr] [verb_desc] [emote]", + "You [self_verb_desc] [emote]") + else + visible_message("[src] [pick(fruit_gland.short_emote_descriptor)] a fruit.", + "You [pick(fruit_gland.self_emote_descriptor)] a fruit.") + + fruit_gland.reagents.remove_any(fruit_gland.transfer_amount) + +//End of fruit gland code. /datum/species/alraune/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H) ASSERT(to_copy) @@ -394,4 +496,4 @@ /datum/species/alraune/get_race_key() var/datum/species/real = all_species[base_species] - return real.race_key \ No newline at end of file + return real.race_key diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index a61c7c836d..680dac91f7 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -2006,75 +2006,3 @@ icon = 'icons/vore/custom_items_vr.dmi' icon_state = "penlightlynn" - -//Fruit Implants for Alraune -/obj/item/weapon/implant/reagent_generator/fruit_implant - name = "fruit enabling implant" - desc = "This is an implant that hastens Alraune's fruit production." - generated_reagents = list("sugar" = 2) //This actually allows them. This could be anything, but sugar seems most fitting. - usable_volume = 250 //Five fruit. - transfer_amount = 50 - empty_message = list("Your have no fruit on you.", "You have a distinct lack of fruit..") - full_message = list("You have a multitude of fruit that is ready for harvest!", "You have fruit that is ready to be picked!") - emote_descriptor = list("fruit right off of the Alraune!", "a fruit from the Alraune!") //These are changed below - var/verb_descriptor = list("grabs", "snatches", "picks") - var/self_verb_descriptor = list("grab", "snatch", "pick") - var/short_emote_descriptor = list("picks", "grabs") - self_emote_descriptor = list("grab", "pick", "snatch") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_fruit_implant - -/obj/item/weapon/implant/reagent_generator/fruit_implant/implanted(mob/living/carbon/human/source) - if(source.species.name != SPECIES_ALRAUNE) - to_chat(source, "Perhaps using this implant as a non Alraune was a bad idea...") //You wasted it. Good job. - return 1 - processing_objects += src - to_chat(source, "You implant [source] with \the [src].") - emote_descriptor = list("fruit right off of [source]!", "a fruit from [source]!") - var/selection = input(source, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", source.fruit_type) as null|anything in acceptable_fruit_types - if(selection) - source.fruit_type = selection - source.verbs |= assigned_proc - return 1 - -/obj/item/weapon/implanter/reagent_generator/fruit_implant - implant_type = /obj/item/weapon/implant/reagent_generator/fruit_implant - -/mob/living/carbon/human/proc/use_reagent_implant_fruit_implant() - set name = "Pick Fruit" - set desc = "Pick fruit off of [src]." - set category = "Object" - set src in view(1) - - //do_reagent_implant(usr) - if(!isliving(usr) || !usr.canClick()) - return - - if(usr.incapacitated() || usr.stat > CONSCIOUS) - return - - var/obj/item/weapon/implant/reagent_generator/fruit_implant/rimplant - for(var/I in contents) - if(istype(I, /obj/item/weapon/implant/reagent_generator)) - rimplant = I - break - if (rimplant) - if(rimplant.reagents.total_volume < rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return - - var/datum/seed/S = plant_controller.seeds["[fruit_type]"] //crosses fingers EVEN HARDER than last one. - S.harvest(usr,0,0,1) - - var/index = rand(0,2) - - if (usr != src) - var/emote = rimplant.emote_descriptor[index] - var/verb_desc = rimplant.verb_descriptor[index] - var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", - "You [self_verb_desc] [emote]") - else - visible_message("[src] [pick(rimplant.short_emote_descriptor)] a fruit.", - "You [pick(rimplant.self_emote_descriptor)] a fruit.") - - rimplant.reagents.remove_any(rimplant.transfer_amount)