From 97d72d6e22ae460a6534979986f84793421b6b1c Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Thu, 31 Jul 2025 02:00:51 -0400 Subject: [PATCH] Converts Feral Cats, Killer Tomatos, and Non-Demon Creatures to Basic Mobs (#29785) * Converts Feral Cats, Killer Tomatos, and Non-Demon Creatures to Basic Mobs * Updatepaths * Adds ventcrawling target finding behavior. * returnPipenet() * Apply suggestions from code review Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * New Linters * Fixed DME --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> --- .../LavaRuins/lavaland_surface_eden.dmm | 20 ++++---- .../map_files/RandomRuins/SpaceRuins/ussp.dmm | 2 +- .../RandomRuins/SpaceRuins/wizardcrash.dmm | 2 +- _maps/map_files/generic/centcomm.dmm | 2 +- _maps/map_files/stations/cerestation.dmm | 10 ++-- _maps/map_files/stations/emeraldstation.dmm | 2 +- .../basic_subtrees/ventcrawl_find_target.dm | 45 ++++++++++++++++++ .../hostile_controllers.dm | 13 +++++ code/datums/spells/wizard_spells.dm | 2 +- .../items/weapons/grenades/spawnergrenade.dm | 2 +- code/modules/hydroponics/grown/tomato.dm | 4 +- code/modules/hydroponics/hydroponics_tray.dm | 2 +- .../hostile/creature.dm | 9 ++-- .../mob/living/basic/hostile/feral_cat.dm | 47 +++++++++++++++++++ .../hostile/killertomato.dm | 25 ++++++---- .../living/simple_animal/hostile/feral_cat.dm | 27 ----------- .../projectile/magic_projectiles.dm | 2 +- paradise.dme | 7 +-- .../29785_cats_creatures_killertomatos.txt | 3 ++ 19 files changed, 158 insertions(+), 68 deletions(-) create mode 100644 code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm rename code/modules/mob/living/{simple_animal => basic}/hostile/creature.dm (59%) create mode 100644 code/modules/mob/living/basic/hostile/feral_cat.dm rename code/modules/mob/living/{simple_animal => basic}/hostile/killertomato.dm (55%) delete mode 100644 code/modules/mob/living/simple_animal/hostile/feral_cat.dm create mode 100644 tools/UpdatePaths/Scripts/29785_cats_creatures_killertomatos.txt diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_eden.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_eden.dmm index c67b3f82254..8ba52d962b5 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_eden.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_eden.dmm @@ -41,7 +41,7 @@ /area/ruin/unpowered/misc_lavaruin) "dv" = ( /obj/item/hatchet, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "dy" = ( @@ -85,7 +85,7 @@ /area/ruin/unpowered/misc_lavaruin) "gw" = ( /obj/effect/mapping_helpers/turfs/damage, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) @@ -128,7 +128,7 @@ /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "jb" = ( -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "jy" = ( @@ -154,7 +154,7 @@ dir = 8 }, /obj/effect/mapping_helpers/turfs/damage, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "kI" = ( @@ -180,14 +180,14 @@ /area/ruin/unpowered/misc_lavaruin) "lN" = ( /obj/structure/flora/grass/jungle, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "mb" = ( /obj/structure/chair/sofa{ dir = 1 }, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /obj/structure/spacevine, /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) @@ -284,7 +284,7 @@ /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "tR" = ( -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /obj/structure/chair/wood{ dir = 4 }, @@ -477,7 +477,7 @@ /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "Dr" = ( -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/grass/jungle/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "DC" = ( @@ -492,7 +492,7 @@ /area/ruin/unpowered/misc_lavaruin) "DZ" = ( /obj/item/shovel/spade, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "Ee" = ( @@ -665,7 +665,7 @@ /turf/simulated/floor/wood/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "OS" = ( -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /turf/simulated/floor/grass/jungle, /area/ruin/unpowered/misc_lavaruin) "Pk" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index 23ee6264a5a..2e99a4f45eb 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -2299,7 +2299,7 @@ }, /obj/effect/decal/cleanable/blood/splatter, /obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/feral_cat{ +/mob/living/basic/feral_cat{ faction = list("cat","carp"); name = "Experiment 432-A" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index a5c17e53cd5..18b9e4af228 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -321,7 +321,7 @@ }, /area/ruin/space/powered) "bl" = ( -/mob/living/simple_animal/hostile/creature{ +/mob/living/basic/creature{ health = 150; name = "Experiment 17e" }, diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 4876ec8aed1..7681b9486f8 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -12180,7 +12180,7 @@ }, /area/centcom/control) "Qy" = ( -/mob/living/simple_animal/hostile/creature{ +/mob/living/basic/creature{ name = "Experiment 35b" }, /obj/item/candle/eternal/wizard, diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index b3cbfe481fb..2950a21a77e 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -53974,7 +53974,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/mob/living/simple_animal/hostile/feral_cat{ +/mob/living/basic/feral_cat{ dir = 1 }, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, @@ -57728,7 +57728,7 @@ "kKL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random/directional/north, -/mob/living/simple_animal/hostile/feral_cat{ +/mob/living/basic/feral_cat{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -61707,7 +61707,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/feral_cat{ +/mob/living/basic/feral_cat{ dir = 8 }, /turf/simulated/floor/plasteel{ @@ -92517,7 +92517,7 @@ /area/station/maintenance/starboard) "soS" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/feral_cat{ +/mob/living/basic/feral_cat{ dir = 8 }, /obj/effect/spawner/random/food_trash, @@ -107648,7 +107648,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/feral_cat, +/mob/living/basic/feral_cat, /obj/effect/spawner/random/food_trash, /turf/simulated/floor/plasteel{ dir = 4; diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index 22235e07dfa..5518993d9ae 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -115092,7 +115092,7 @@ /area/station/hallway/primary/central/south) "wTx" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/killertomato, +/mob/living/basic/killertomato, /obj/item/shovel/spade, /turf/simulated/floor/plating, /area/station/maintenance/dorms/starboard) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm new file mode 100644 index 00000000000..67dfc11e0ec --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm @@ -0,0 +1,45 @@ +/datum/ai_planning_subtree/ventcrawl_find_target + +/datum/ai_planning_subtree/ventcrawl_find_target/select_behaviors(datum/ai_controller/controller, seconds_per_tick) + // We have a target already + if(controller.blackboard_key_exists(BB_VENTCRAWL_FINAL_TARGET)) + return + // We don't have a search range + var/vision_range + if(!controller.blackboard_key_exists(BB_VENT_SEARCH_RANGE)) + vision_range = 10 + else + vision_range = controller.blackboard[BB_VENT_SEARCH_RANGE] + // Find a target + controller.queue_behavior(/datum/ai_behavior/find_ventcrawl_target, BB_VENTCRAWL_FINAL_TARGET, vision_range) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/find_ventcrawl_target + behavior_flags = AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 45 SECONDS + +/datum/ai_behavior/find_ventcrawl_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range) + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(range, controller.pawn)) + if(!v.welded) + var/datum/pipeline/P = v.returnPipenet() + if(!P) + continue + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in P.other_atmosmch) + if(temp_vent.welded) // no point considering a vent we can't even use + continue + vents |= temp_vent + if(!length(vents)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) + var/list/potential_targets = list() + for(var/turf/current_target_turf in view(range, exit_vent)) + if(!isfloorturf(current_target_turf)) + continue + if(current_target_turf.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn)) + continue + potential_targets |= current_target_turf + if(!length(potential_targets)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + controller.set_blackboard_key(BB_VENTCRAWL_FINAL_TARGET, pick(potential_targets)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm b/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm index 490a1c12e21..132515881c8 100644 --- a/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm +++ b/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm @@ -15,6 +15,19 @@ /datum/ai_planning_subtree/attack_obstacle_in_path/prowl, ) +/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/ventcrawler + blackboard = list ( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_VENT_SEARCH_RANGE = 10 + ) + 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/ventcrawl_find_target, + /datum/ai_planning_subtree/ventcrawl, + ) + /// Find a target, walk towards it AND shoot it /datum/ai_controller/basic_controller/simple/simple_skirmisher planning_subtrees = list( diff --git a/code/datums/spells/wizard_spells.dm b/code/datums/spells/wizard_spells.dm index 6b285e68557..c8fd91e7374 100644 --- a/code/datums/spells/wizard_spells.dm +++ b/code/datums/spells/wizard_spells.dm @@ -274,7 +274,7 @@ invocation_type = "shout" summon_amt = 10 - summon_type = list(/mob/living/simple_animal/hostile/creature) + summon_type = list(/mob/living/basic/creature) cast_sound = 'sound/magic/summonitems_generic.ogg' aoe_range = 3 diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 59bb0a30b83..0cd91ef881e 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -48,7 +48,7 @@ name = "feral cat delivery grenade" desc = "This grenade contains 5 dehydrated feral cats in a similar manner to dehydrated monkeys, which, upon detonation, \ will be rehydrated by a small reservoir of water contained within the grenade. These cats will then attack anything in sight." - spawner_type = /mob/living/simple_animal/hostile/feral_cat + spawner_type = /mob/living/basic/feral_cat deliveryamt = 5 origin_tech = "materials=3;magnets=4;syndicate=3" flash_viewers = FALSE diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index e6062ddf702..b825b50cc8e 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -143,11 +143,11 @@ spawn(30) if(!QDELETED(src)) var/turf/T = get_turf(src) - var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(T) + var/mob/living/basic/killertomato/K = new /mob/living/basic/killertomato(T) K.maxHealth += round(seed.endurance / 3) K.melee_damage_lower += round(seed.potency / 10) K.melee_damage_upper += round(seed.potency / 10) - K.move_to_delay -= round(seed.production / 50) + K.speed -= round(seed.production / 50) K.health = K.maxHealth K.visible_message("The Killer Tomato growls as it suddenly awakens.") if(user) diff --git a/code/modules/hydroponics/hydroponics_tray.dm b/code/modules/hydroponics/hydroponics_tray.dm index d686cea0a66..856ca6acd7b 100644 --- a/code/modules/hydroponics/hydroponics_tray.dm +++ b/code/modules/hydroponics/hydroponics_tray.dm @@ -989,7 +989,7 @@ plant_hud_set_weed() /obj/machinery/hydroponics/proc/spawnplant() // why would you put Lazarus Reagent in a hydro tray you monster I bet you also feed them blood - var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato) + var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/basic/killertomato) var/chosen = pick(livingplants) var/mob/living/simple_animal/hostile/C = new chosen(get_turf(src)) C.faction = list("plants") diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/basic/hostile/creature.dm similarity index 59% rename from code/modules/mob/living/simple_animal/hostile/creature.dm rename to code/modules/mob/living/basic/hostile/creature.dm index 3934a9b1d2f..94b3596aa19 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/basic/hostile/creature.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/hostile/creature +/mob/living/basic/creature name = "creature" desc = "A sanity-destroying otherthing." speak_emote = list("gibbers") @@ -10,8 +10,11 @@ obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 50 - attacktext = "chomps" + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + attack_verb_simple = "chomp" + attack_verb_continuous = "chomps" attack_sound = 'sound/weapons/bite.ogg' faction = list("creature") + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles gold_core_spawnable = HOSTILE_SPAWN - diff --git a/code/modules/mob/living/basic/hostile/feral_cat.dm b/code/modules/mob/living/basic/hostile/feral_cat.dm new file mode 100644 index 00000000000..3c8e82144b0 --- /dev/null +++ b/code/modules/mob/living/basic/hostile/feral_cat.dm @@ -0,0 +1,47 @@ +/mob/living/basic/feral_cat + name = "feral cat" + desc = "Kitty!! Wait..." + icon = 'icons/mob/pets.dmi' + icon_state = "cat2" + icon_living = "cat2" + icon_dead = "cat2_dead" + gender = MALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST + maxHealth = 20 + health = 20 + melee_damage_lower = 5 + melee_damage_upper = 10 + attack_sound = 'sound/weapons/slash.ogg' + melee_attack_cooldown_min = 0.5 SECONDS + melee_attack_cooldown_max = 1.5 SECONDS + attack_verb_simple = "claw" + attack_verb_continuous = "claws" + see_in_dark = 6 + butcher_results = list(/obj/item/food/meat/slab = 2) + response_help_simple = "pet" + response_help_continuous = "pets" + response_disarm_simple = "gently push aside" + response_disarm_continuous = "gently pushes aside" + response_harm_simple = "kick" + response_harm_continuous = "kicks" + gold_core_spawnable = HOSTILE_SPAWN + faction = list("cat") + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 5 + pass_flags = PASSTABLE + step_type = FOOTSTEP_MOB_CLAW + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/feral_cat + +/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/feral_cat + 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/cat, + ) + +/datum/ai_planning_subtree/random_speech/cat + speech_chance = 2 + speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") + emote_hear = list("purrs", "meows") + emote_see = list("meows", "mews") diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/basic/hostile/killertomato.dm similarity index 55% rename from code/modules/mob/living/simple_animal/hostile/killertomato.dm rename to code/modules/mob/living/basic/hostile/killertomato.dm index dd137f4a0c6..3614ab689c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/basic/hostile/killertomato.dm @@ -1,28 +1,33 @@ -/mob/living/simple_animal/hostile/killertomato +/mob/living/basic/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 - turns_per_move = 5 maxHealth = 30 health = 30 see_in_dark = 3 butcher_results = list(/obj/item/food/meat/tomatomeat = 2) - response_help = "prods" - response_disarm = "pushes aside" - response_harm = "smacks" + response_help_simple = "prod" + response_help_continuous = "prods" + response_disarm_simple = "push aside" + response_disarm_continuous = "pushes aside" + response_harm_simple = "smack" + response_harm_continuous = "smacks" melee_damage_lower = 8 melee_damage_upper = 12 - attacktext = "slams" - attack_sound = 'sound/weapons/punch1.ogg' - ventcrawler = VENTCRAWLER_ALWAYS + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + attack_verb_simple = "slam" + attack_verb_continuous = "slams" faction = list("plants", "jungle") + ventcrawler = VENTCRAWLER_ALWAYS atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 150 - maxbodytemp = 500 + minimum_survivable_temperature = 150 + maximum_survivable_temperature = 500 gold_core_spawnable = HOSTILE_SPAWN + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/ventcrawler contains_xeno_organ = TRUE surgery_container = /datum/xenobiology_surgery_container/tomato diff --git a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm deleted file mode 100644 index fd962820656..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm +++ /dev/null @@ -1,27 +0,0 @@ -/mob/living/simple_animal/hostile/feral_cat - name = "feral cat" - desc = "Kitty!! Wait..." - icon = 'icons/mob/pets.dmi' - icon_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - gender = MALE - mob_biotypes = MOB_ORGANIC | MOB_BEAST - melee_damage_lower = 10 - melee_damage_upper = 5 - attacktext = "claws" - speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows", "mews") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/food/meat/slab = 2) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - gold_core_spawnable = 1 - faction = list("cat") - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 5 - pass_flags = PASSTABLE diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm index 7ae12cbfb81..bbb9117d219 100644 --- a/code/modules/projectiles/projectile/magic_projectiles.dm +++ b/code/modules/projectiles/projectile/magic_projectiles.dm @@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(wabbajack_hostile_animals, list( "statue" = /mob/living/simple_animal/hostile/statue, "bat" = /mob/living/basic/scarybat, "goat" = /mob/living/simple_animal/hostile/retaliate/goat, - "tomato" = /mob/living/simple_animal/hostile/killertomato, + "tomato" = /mob/living/basic/killertomato, "gorilla" = /mob/living/basic/gorilla, "kangaroo" = /mob/living/simple_animal/hostile/retaliate/kangaroo, )) diff --git a/paradise.dme b/paradise.dme index 7e8ded4f603..78744d3a5a1 100644 --- a/paradise.dme +++ b/paradise.dme @@ -479,6 +479,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\target_retaliate.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\tip_reaction.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\use_mob_ability.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\ventcrawl_find_target.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\ventcrawl_subtree.dm" #include "code\datums\ai\basic_mobs\generic_controllers\hostile_controllers.dm" #include "code\datums\ai\basic_mobs\hunting_behavior\find_and_hunt_target.dm" @@ -2406,6 +2407,9 @@ #include "code\modules\mob\living\stat_states.dm" #include "code\modules\mob\living\taste.dm" #include "code\modules\mob\living\basic\basic_mob.dm" +#include "code\modules\mob\living\basic\hostile\creature.dm" +#include "code\modules\mob\living\basic\hostile\feral_cat.dm" +#include "code\modules\mob\living\basic\hostile\killertomato.dm" #include "code\modules\mob\living\basic\farm_animals\pig.dm" #include "code\modules\mob\living\basic\farm_animals\deer_ai.dm" #include "code\modules\mob\living\basic\farm_animals\deer.dm" @@ -2624,10 +2628,8 @@ #include "code\modules\mob\living\simple_animal\hostile\alien_types.dm" #include "code\modules\mob\living\simple_animal\hostile\angel_statue.dm" #include "code\modules\mob\living\simple_animal\hostile\bees.dm" -#include "code\modules\mob\living\simple_animal\hostile\creature.dm" #include "code\modules\mob\living\simple_animal\hostile\deathsquid.dm" #include "code\modules\mob\living\simple_animal\hostile\drakehound.dm" -#include "code\modules\mob\living\simple_animal\hostile\feral_cat.dm" #include "code\modules\mob\living\simple_animal\hostile\floorcluwne.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\headslug.dm" @@ -2635,7 +2637,6 @@ #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\jungle_animals.dm" -#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mushroom.dm" #include "code\modules\mob\living\simple_animal\hostile\netherworld.dm" diff --git a/tools/UpdatePaths/Scripts/29785_cats_creatures_killertomatos.txt b/tools/UpdatePaths/Scripts/29785_cats_creatures_killertomatos.txt new file mode 100644 index 00000000000..51f06f37ab9 --- /dev/null +++ b/tools/UpdatePaths/Scripts/29785_cats_creatures_killertomatos.txt @@ -0,0 +1,3 @@ +/mob/living/simple_animal/hostile/feral_cat/@SUBTYPES : /mob/living/basic/feral_cat/@SUBTYPES{@OLD} +/mob/living/simple_animal/hostile/creature/@SUBTYPES : /mob/living/basic/creature/@SUBTYPES{@OLD} +/mob/living/simple_animal/hostile/killertomato/@SUBTYPES : /mob/living/basic/killertomato/@SUBTYPES{@OLD}