diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm index 3a18a0703e649..1abd916461bb8 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm @@ -35,9 +35,14 @@ /mob/living/basic/mining/legion/Initialize(mapload) . = ..() - AddElement(/datum/element/death_drops, get_loot_list()) AddElement(/datum/element/content_barfer) + var/list/drops = get_loot_list() + if (length(drops)) + AddElement(/datum/element/death_drops, string_list(drops)) + assign_abilities() +/// Give the Legion its spells +/mob/living/basic/mining/legion/proc/assign_abilities() var/datum/action/cooldown/mob_cooldown/skull_launcher/skull_launcher = new(src) skull_launcher.Grant(src) skull_launcher.spawn_type = brood_type @@ -64,10 +69,11 @@ return ..() /// Put a corpse in this guy -/mob/living/basic/mining/legion/proc/consume(mob/living/consumed) +/mob/living/basic/mining/legion/proc/consume(mob/living/carbon/human/consumed) new /obj/effect/gibspawner/generic(consumed.loc) gender = consumed.gender - name = consumed.real_name + if (!ismonkey(consumed) || consumed == GLOB.the_one_and_only_punpun) + name = consumed.real_name consumed.investigate_log("has been killed by hivelord infestation.", INVESTIGATE_DEATHS) consumed.death() consumed.extinguish_mob() diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm index e2f4923e7f95f..e578067a44576 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -64,7 +64,7 @@ return ..() /// Turn the targeted mob into one of us -/mob/living/basic/legion_brood/proc/infest(mob/living/target) +/mob/living/basic/legion_brood/proc/infest(mob/living/carbon/human/target) visible_message(span_warning("[name] burrows into the flesh of [target]!")) var/spawn_type = get_legion_type(target) var/mob/living/basic/mining/legion/new_legion = new spawn_type(loc) @@ -73,7 +73,9 @@ qdel(src) /// Returns the kind of legion we make out of the target -/mob/living/basic/legion_brood/proc/get_legion_type(mob/living/target) +/mob/living/basic/legion_brood/proc/get_legion_type(mob/living/carbon/human/target) + if (ismonkey(target)) + return /mob/living/basic/mining/legion/monkey if (HAS_TRAIT(target, TRAIT_DWARF)) return /mob/living/basic/mining/legion/dwarf return /mob/living/basic/mining/legion @@ -106,4 +108,6 @@ ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) /mob/living/basic/legion_brood/snow/get_legion_type(mob/living/target) + if (ismonkey(target)) + return /mob/living/basic/mining/legion/monkey/snow return /mob/living/basic/mining/legion/snow diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm new file mode 100644 index 0000000000000..5345adc88da3c --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm @@ -0,0 +1,63 @@ +/// Weak mob spawned if a legion infests a monkey +/mob/living/basic/mining/legion/monkey + name = "rabble" + desc = "You can see what was once a monkey under the shifting mass of corruption. It doesn't have enough biomass to reproduce." + icon_state = "legion_monkey" + pass_flags = PASSTABLE + speed = 5 + maxHealth = 40 + health = 40 + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "mauls" + attack_verb_simple = "maul" + attack_vis_effect = ATTACK_EFFECT_BITE + attack_sound = 'sound/weapons/bite.ogg' + speak_emote = list("chimpers") + corpse_type = /obj/effect/mob_spawn/corpse/human/monkey + ai_controller = /datum/ai_controller/basic_controller/legion_monkey + +/mob/living/basic/mining/legion/monkey/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + AddComponent(/datum/component/basic_mob_attack_telegraph) + AddComponent(/datum/component/regenerator, outline_colour = COLOR_SOFT_RED) + +/mob/living/basic/mining/legion/monkey/assign_abilities() + return + +/mob/living/basic/mining/legion/monkey/get_loot_list() + return + +/// Icebox variant +/mob/living/basic/mining/legion/monkey/snow + name = "snow rabble" + desc = "You can see what was once a monkey under the densely packed snow. It doesn't look friendly." + icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' + icon_state = "snow_monkey" + +/mob/living/basic/mining/legion/monkey/snow/Initialize(mapload) + . = ..() + AddComponent(/datum/component/appearance_on_aggro, aggro_state = "snow_monkey_alive") // Surprise! I was real! + +/// Opportunistically hops in and out of vents, if it can find one and is not biting someone. +/datum/ai_controller/basic_controller/legion_monkey + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_VENTCRAWL_COOLDOWN = 20 SECONDS, + BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + + // We understand that vents are nice little hidey holes through epigenetic inheritance, so we'll use them. + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/legion, + /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/opportunistic_ventcrawler, + ) diff --git a/icons/mob/simple/icemoon/icemoon_monsters.dmi b/icons/mob/simple/icemoon/icemoon_monsters.dmi index 6b05cf64580a3..3e53c0a971228 100644 Binary files a/icons/mob/simple/icemoon/icemoon_monsters.dmi and b/icons/mob/simple/icemoon/icemoon_monsters.dmi differ diff --git a/icons/mob/simple/lavaland/lavaland_monsters.dmi b/icons/mob/simple/lavaland/lavaland_monsters.dmi index ffcfb04cbeb5d..3c1d6e9ff6f90 100644 Binary files a/icons/mob/simple/lavaland/lavaland_monsters.dmi and b/icons/mob/simple/lavaland/lavaland_monsters.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fd6bb29c70711..d1df497a86441 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4758,6 +4758,7 @@ #include "code\modules\mob\living\basic\lavaland\legion\legion.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_ai.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_brood.dm" +#include "code\modules\mob\living\basic\lavaland\legion\legion_monkey.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_tumour.dm" #include "code\modules\mob\living\basic\lavaland\legion\spawn_legions.dm" #include "code\modules\mob\living\basic\lavaland\lobstrosity\lobstrosity.dm"