diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm new file mode 100644 index 00000000000..e146f3235d9 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm @@ -0,0 +1,184 @@ +/datum/category_item/catalogue/fauna/oregrub + name = "Oregrub" + desc = "Some form of mutated space larva, they seem to feed on minerals. This makes them the natural enemy of miners. \ + To make matters worse, these creatures will flee when threatened. More than a few foolhardy miners have met their end chasing down oregrubs after some other hostile creature attacked them. \ + Their guts tend to contain undigested minerals, so miners who are quick (and not afraid to get their hands dirty) can reap some rewards from these leathery lithovores." + value = CATALOGUER_REWARD_EASY + +/datum/category_item/catalogue/fauna/lavagrub + name = "Lavagrub" + desc = "Some form of mutated space larva, they seem to feed on minerals. This makes them the natural enemy of miners. \ + To make matters worse, these creatures will flee when threatened. More than a few foolhardy miners have met their end chasing down oregrubs after some other hostile creature attacked them. \ + This particular variant seems to be even tougher and faster than its common brown kin, and its hide is laced with silicates that make it more durable. \ + On the plus side, it's sure to contain even more valuable minerals within its bowels, if you can catch up with it to crack it open..." + value = CATALOGUER_REWARD_MEDIUM + +/datum/ai_holder/simple_mob/oregrub + hostile = FALSE //docile, unless you hit them + retaliate = TRUE //they *may* bite you... + can_flee = TRUE //but they'd rather run away + dying_threshold = 1 //and ideally, we flee as soon as possible + flee_when_outmatched = TRUE //especially when outmatched + outmatched_threshold = 25 //and we're outmatched by... basically everything! + +/* + var/run_if_this_close = 3 //oregrubs will try to book it if you get too close + +/datum/ai_holder/simple_mob/oregrub/on_engagement(atom/A) + if(get_dist(holder, A) < run_if_this_close) + holder.IMove(get_step_away(holder, A, run_if_this_close)) +*/ + +/datum/ai_holder/simple_mob/oregrub/lava + hostile = FALSE + retaliate = TRUE + can_flee = TRUE + dying_threshold = 1 + flee_when_outmatched = TRUE //lavagrubs will flee more readily than oregrubs + outmatched_threshold = 15 +// run_if_this_close = 4 + +/mob/living/simple_mob/vore/oregrub + name = "juvenile oregrub" + desc = "A young, leathery oregrub." + catalogue_data = list(/datum/category_item/catalogue/fauna/oregrub) + icon = 'icons/mob/vore.dmi' //all of these are placeholders + icon_state = "oregrub" + icon_living = "oregrub" + icon_dead = "oregrub-dead" + + faction = "grubs" + maxHealth = 50 //oregrubs are quite hardy + health = 50 + + melee_damage_lower = 1 + melee_damage_upper = 3 //low damage, they prefer to flee + + movement_cooldown = 8 + + meat_type = /obj/item/weapon/ore/coal + + response_help = "pokes" + response_disarm = "pushes" + response_harm = "roughly pushes" + + ai_holder_type = /datum/ai_holder/simple_mob/oregrub + say_list_type = /datum/say_list/oregrub + + var/poison_per_bite = 2.5 + var/poison_type = "thermite_v" //burn baby burn + var/poison_chance = 50 + + var/min_ore = 4 + var/max_ore = 7 + + vore_bump_chance = 50 + vore_bump_emote = "applies minimal effort to try and slurp up" + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 0 //grubs only eat incapacitated targets + vore_default_mode = DM_DIGEST + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + maxbodytemp = 1000 + poison_resist = 1.0 + + //these things are resilient, on account of being infused with all the minerals they eat + armor = list( + "melee" = 25, + "bullet" = 15, + "laser" = 15, + "energy" = 0, + "bomb" = 25, + "bio" = 100, + "rad" = 100 + ) + +/mob/living/simple_mob/vore/oregrub/lava + name = "mature lavagrub" + desc = "A mature, rocky lavagrub" + catalogue_data = list(/datum/category_item/catalogue/fauna/lavagrub) + icon_state = "lavagrub" + icon_living = "lavagrub" + icon_dead = "lavagrub-dead" + + movement_cooldown = 5 + maxHealth = 75 //lavagrubs are really hardy + health = 75 + ai_holder_type = /datum/ai_holder/simple_mob/oregrub/lava + //lavagrubs have even more armor than oregrubs + armor = list( + "melee" = 50, + "bullet" = 25, + "laser" = 25, + "energy" = 0, + "bomb" = 50, + "bio" = 100, + "rad" = 100 + ) + + var/lava_min_ore = 8 + var/lava_max_ore = 12 + + poison_per_bite = 5 + poison_chance = 66 + +/datum/say_list/oregrub + emote_see = list("burbles", "chitters", "snuffles around for fresh ore") + +/mob/living/simple_mob/vore/oregrub/apply_melee_effects(var/atom/A) + if(isliving(A)) + var/mob/living/L = A + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + inject_poison(L, target_zone) + +/mob/living/simple_mob/vore/oregrub/death() + visible_message("\The [src] shudders and collapses, expelling the ores it had devoured!") + var/i = rand(min_ore,max_ore) + while(i>1) + var/ore = pick(/obj/item/weapon/ore/glass,/obj/item/weapon/ore/coal,/obj/item/weapon/ore/iron,/obj/item/weapon/ore/lead,/obj/item/weapon/ore/marble,/obj/item/weapon/ore/phoron,/obj/item/weapon/ore/silver,/obj/item/weapon/ore/gold) + new ore(src.loc) + i-- + ..() + +/mob/living/simple_mob/vore/oregrub/lava/death() + set_light(0) + var/p = rand(lava_min_ore,lava_max_ore) + while(p>1) + var/ore = pick(/obj/item/weapon/ore/osmium,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/hydrogen,/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/verdantium) + new ore(src.loc) + p-- + ..() + +// Does actual poison injection, after all checks passed. +/mob/living/simple_mob/vore/oregrub/proc/inject_poison(mob/living/L, target_zone) + if(prob(poison_chance)) + to_chat(L, "You feel fire running through your veins!") + L.reagents.add_reagent(poison_type, poison_per_bite) + +/mob/living/simple_mob/vore/oregrub/init_vore() + ..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "PLACEHOLDER!" + + B.emote_lists[DM_HOLD] = list( + "PLACEHOLDER!") + + B.emote_lists[DM_DIGEST] = list( + "PLACEHOLDER!") + +/mob/living/simple_mob/vore/oregrub/lava/handle_light() + . = ..() + if(. == 0 && !is_dead()) + set_light(2.5, 1, COLOR_ORANGE) + return 1 \ No newline at end of file diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi index 396c6ef362b..9fad9d332de 100644 Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index c4c321de1b1..031cc07f495 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -58,9 +58,11 @@ prob_fall = 30 //guard = 20 mobs_to_pick_from = list( - /mob/living/simple_mob/animal/space/jelly = 1, - /mob/living/simple_mob/mechanical/viscerator = 1, - /mob/living/simple_mob/vore/aggressive/corrupthound = 1 + /mob/living/simple_mob/animal/space/jelly = 2, + /mob/living/simple_mob/mechanical/viscerator = 2, + /mob/living/simple_mob/vore/aggressive/corrupthound = 1, + /mob/living/simple_mob/vore/oregrub = 2, + /mob/living/simple_mob/vore/oregrub/lava = 1 ) /obj/structure/old_roboprinter diff --git a/maps/expedition_vr/beach/_beach.dm b/maps/expedition_vr/beach/_beach.dm index 95903a35a9d..57a2b176587 100644 --- a/maps/expedition_vr/beach/_beach.dm +++ b/maps/expedition_vr/beach/_beach.dm @@ -104,7 +104,9 @@ /mob/living/simple_mob/vore/aggressive/deathclaw = 1, //these deathclaws are, with these values, /mob/living/simple_mob/animal/giant_spider = 2, /mob/living/simple_mob/vore/aggressive/giant_snake = 1, - /mob/living/simple_mob/animal/giant_spider/webslinger = 1 + /mob/living/simple_mob/animal/giant_spider/webslinger = 1, + /mob/living/simple_mob/vore/oregrub = 2, + /mob/living/simple_mob/vore/oregrub/lava = 1 ) // These are step-teleporters, for map edge transitions diff --git a/maps/tether/submaps/underdark_pois/underdark_things.dm b/maps/tether/submaps/underdark_pois/underdark_things.dm index e16151fbf13..35da3c549c3 100644 --- a/maps/tether/submaps/underdark_pois/underdark_things.dm +++ b/maps/tether/submaps/underdark_pois/underdark_things.dm @@ -54,6 +54,7 @@ /mob/living/simple_mob/animal/giant_spider/hunter = 1, /mob/living/simple_mob/animal/giant_spider/phorogenic/weak = 1, /mob/living/simple_mob/animal/giant_spider/tunneler = 1, + /mob/living/simple_mob/vore/oregrub = 1, ) /obj/tether_away_spawner/underdark_hard @@ -65,7 +66,8 @@ //guard = 20 mobs_to_pick_from = list( /mob/living/simple_mob/vore/aggressive/corrupthound = 1, - /mob/living/simple_mob/vore/aggressive/rat/phoron = 2 + /mob/living/simple_mob/vore/aggressive/rat/phoron = 2, + /mob/living/simple_mob/vore/oregrub/lava = 1, ) /obj/tether_away_spawner/underdark_boss diff --git a/vorestation.dme b/vorestation.dme index 39a9dcf488b..af48314ea27 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2865,6 +2865,7 @@ #include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm" +#include "code\modules\mob\living\simple_mob\subtypes\vore\oregrub.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\rabbit.dm"