diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index ec835aee6dd..a8a55ff532f 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -145,3 +145,9 @@ sound = list('sound/creatures/pig1.ogg', 'sound/creatures/pig2.ogg') emote_hear = list("snorts.") emote_see = list("sniffs around.") + +/datum/ai_planning_subtree/random_speech/killer_tomato + speech_chance = 3 + speak = list("gnashes.", "growls lowly.", "snarls.") + emote_hear = list("gnashes.") + emote_see = list("salivates.") diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index ed6481ae2df..88d8f4a6247 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -228,11 +228,16 @@ //entirely independent vars (not related to the action or story type) var/static/list/something_pool = list( + /mob/living/basic/bat, /mob/living/basic/carp, /mob/living/basic/carp/magic, /mob/living/basic/carp/magic/chaos, /mob/living/basic/cow, /mob/living/basic/cow/wisdom, + /mob/living/basic/giant_spider, + /mob/living/basic/giant_spider/hunter, + /mob/living/basic/killer_tomato, + /mob/living/basic/lizard, /mob/living/basic/mouse, /mob/living/basic/pet/dog/breaddog, /mob/living/basic/pet/dog/corgi, @@ -248,16 +253,11 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast, /mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/blob/blobbernaut/independent, - /mob/living/basic/giant_spider, - /mob/living/basic/giant_spider/hunter, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/killertomato, - /mob/living/basic/lizard, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, /mob/living/simple_animal/hostile/morph, /mob/living/simple_animal/hostile/mushroom, - /mob/living/basic/bat, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet/cat, diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm index 4596047da61..008d9d698e0 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm @@ -354,7 +354,7 @@ var/static/list/permitted_mobs = list( /mob/living/basic/wumborian_fugu, /mob/living/simple_animal/hostile/skeleton, - /mob/living/simple_animal/hostile/killertomato, + /mob/living/basic/killer_tomato, /mob/living/simple_animal/hostile/ooze, /mob/living/simple_animal/hostile/illusion, /mob/living/basic/carp, diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 80f48a2c615..4f66a1dd792 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1132,7 +1132,7 @@ * Upon using strange reagent on a tray, it will spawn a killer tomato or killer tree at random. */ /obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood - var/list/livingplants = list(/mob/living/basic/tree, /mob/living/simple_animal/hostile/killertomato) + var/list/livingplants = list(/mob/living/basic/tree, /mob/living/basic/killer_tomato) var/chosen = pick(livingplants) var/mob/living/C = new chosen(get_turf(src)) C.faction = list(FACTION_PLANTS) diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index 738d1dc103d..c47a3298a4c 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -439,6 +439,15 @@ spawned_simplemob.melee_damage_lower += round(our_seed.potency * mob_melee_multiplier) spawned_simplemob.melee_damage_upper += round(our_seed.potency * mob_melee_multiplier) spawned_simplemob.move_to_delay -= round(our_seed.production * mob_speed_multiplier) + + if(isbasicmob(spawned_mob)) + var/mob/living/basic/spawned_basicmob = spawned_mob + spawned_basicmob.melee_damage_lower += round(our_seed.potency * mob_melee_multiplier) + spawned_basicmob.melee_damage_upper += round(our_seed.potency * mob_melee_multiplier) + // basic mob speeds aren't exactly equivalent to simple animal's "move to delay" but this seems balanced enough. + var/calculated_speed = initial(spawned_basicmob.speed) - round((our_seed.production * mob_speed_multiplier), 0.01) + spawned_basicmob.set_varspeed(calculated_speed) + our_plant.forceMove(our_plant.drop_location()) spawned_mob.visible_message(span_notice("[our_plant] growls as it suddenly awakens!")) qdel(our_plant) @@ -446,7 +455,7 @@ /// Killer Tomato's transformation gene. /datum/plant_gene/trait/mob_transformation/tomato dangerous = TRUE - killer_plant = /mob/living/simple_animal/hostile/killertomato + killer_plant = /mob/living/basic/killer_tomato mob_health_multiplier = 0.33 mob_melee_multiplier = 0.1 mob_speed_multiplier = 0.02 diff --git a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm new file mode 100644 index 00000000000..a3fd64eb798 --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm @@ -0,0 +1,55 @@ +/* +* ## Killer Tomatoes +* +* Side effect from when you try to play God through genetic engineering. Feisty fuckers that want to eat you. Dangerous. +*/ + +/mob/living/basic/killer_tomato + name = "Killer Tomato" + desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!" + icon_state = "tomato" + icon_living = "tomato" + icon_dead = "tomato_dead" + mob_biotypes = MOB_ORGANIC | MOB_PLANT + gender = NEUTER + speed = 1 // if you wanna touch this, keep in mind we want to incentivize people growing really good botany plants in order to make these buggers faster. + maxHealth = 30 + health = 30 + butcher_results = list(/obj/item/food/meat/slab/killertomato = 2) + response_help_continuous = "prods" + response_help_simple = "prod" + response_disarm_continuous = "pushes aside" + response_disarm_simple = "push aside" + response_harm_continuous = "smacks" + response_harm_simple = "smack" + melee_damage_lower = 8 + melee_damage_upper = 12 + attack_verb_continuous = "slams" + attack_verb_simple = "slam" + attack_sound = 'sound/weapons/punch1.ogg' + faction = list(FACTION_PLANTS) + + habitable_atmos = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minimum_survivable_temperature = T0C - 130 + maximum_survivable_temperature = T0C + 230 + gold_core_spawnable = HOSTILE_SPAWN + + ai_controller = /datum/ai_controller/basic_controller/killer_tomato + +/mob/living/basic/killer_tomato/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + +/datum/ai_controller/basic_controller/killer_tomato + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/killer_tomato, + ) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fdd7d2b9458..be73012b01d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1381,7 +1381,7 @@ /mob/living/basic/statue, /mob/living/basic/bat, /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/killertomato, + /mob/living/basic/killer_tomato, /mob/living/basic/giant_spider, /mob/living/basic/giant_spider/hunter, /mob/living/simple_animal/hostile/blob/blobbernaut/independent, diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm deleted file mode 100644 index 5f6e416a7ab..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ /dev/null @@ -1,34 +0,0 @@ -/mob/living/simple_animal/hostile/killertomato - name = "Killer Tomato" - desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!" - icon_state = "tomato" - icon_living = "tomato" - icon_dead = "tomato_dead" - mob_biotypes = MOB_ORGANIC | MOB_PLANT - gender = NEUTER - speak_chance = 0 - turns_per_move = 5 - maxHealth = 30 - health = 30 - butcher_results = list(/obj/item/food/meat/slab/killertomato = 2) - response_help_continuous = "prods" - response_help_simple = "prod" - response_disarm_continuous = "pushes aside" - response_disarm_simple = "push aside" - response_harm_continuous = "smacks" - response_harm_simple = "smack" - melee_damage_lower = 8 - melee_damage_upper = 12 - attack_verb_continuous = "slams" - attack_verb_simple = "slam" - attack_sound = 'sound/weapons/punch1.ogg' - faction = list(FACTION_PLANTS) - - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 150 - maxbodytemp = 500 - gold_core_spawnable = HOSTILE_SPAWN - -/mob/living/simple_animal/hostile/killertomato/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index e9babd492bf..e08d6f66856 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -383,7 +383,7 @@ return TRUE if(ispath(MP, /mob/living/simple_animal/shade)) return TRUE - if(ispath(MP, /mob/living/simple_animal/hostile/killertomato)) + if(ispath(MP, /mob/living/basic/killer_tomato)) return TRUE if(ispath(MP, /mob/living/basic/mouse)) return TRUE diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 3856a52784a..48422805d57 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -143,3 +143,6 @@ /datum/movespeed_modifier/health_scaling_speed_buff variable = TRUE + +/datum/movespeed_modifier/grown_killer_tomato + variable = TRUE diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index adc75f5652e..9cc5a3584a0 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -187,7 +187,6 @@ /mob/living/simple_animal/hostile/jungle/mega_arachnid, /mob/living/simple_animal/hostile/jungle/mook, /mob/living/simple_animal/hostile/jungle/seedling, - /mob/living/simple_animal/hostile/killertomato, /mob/living/simple_animal/hostile/lightgeist, /mob/living/simple_animal/hostile/megafauna, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner, diff --git a/tgstation.dme b/tgstation.dme index 094070d3ea0..9520e54f474 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3945,6 +3945,7 @@ #include "code\modules\mob\living\basic\space_fauna\faithless.dm" #include "code\modules\mob\living\basic\space_fauna\garden_gnome.dm" #include "code\modules\mob\living\basic\space_fauna\ghost.dm" +#include "code\modules\mob\living\basic\space_fauna\killer_tomato.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp_abilities.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp_ai_actions.dm" @@ -4194,7 +4195,6 @@ #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" -#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm" #include "code\modules\mob\living\simple_animal\hostile\lightgeist.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\morph.dm" diff --git a/tools/UpdatePaths/Scripts/75516_simple_to_basic_killer_tomatoes.txt b/tools/UpdatePaths/Scripts/75516_simple_to_basic_killer_tomatoes.txt new file mode 100644 index 00000000000..1d9d89e8fbc --- /dev/null +++ b/tools/UpdatePaths/Scripts/75516_simple_to_basic_killer_tomatoes.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/hostile/killertomato : /mob/living/basic/killer_tomato{@OLD}