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..c4163733bda --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm @@ -0,0 +1,173 @@ +/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! + +/datum/ai_holder/simple_mob/oregrub/lava + outmatched_threshold = 15 + +/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 = 0 //disabled for now + vore_bump_emote = "applies minimal effort to try and slurp up" + vore_active = 0 //disabled for now + 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 = 6 + var/lava_max_ore = 10 + + 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/handle_light() + . = ..() + if(. == 0 && !is_dead()) + set_light(2.5, 1, COLOR_ORANGE) + return 1 + +/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) + +//I'm no good at writing this stuff, so I've just left it as placeholders and disabled the chances of them eating you. +/* +/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!") +*/ \ 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..cca08c6930b 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 = 6, + /mob/living/simple_mob/mechanical/viscerator = 6, + /mob/living/simple_mob/vore/aggressive/corrupthound = 3, + /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..c82f8d2c298 100644 --- a/maps/expedition_vr/beach/_beach.dm +++ b/maps/expedition_vr/beach/_beach.dm @@ -100,11 +100,12 @@ prob_fall = 40 //guard = 20 mobs_to_pick_from = list( - /mob/living/simple_mob/vore/aggressive/frog = 3, //Frogs are 3x more likely to spawn than, - /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/vore/aggressive/frog = 6, //Frogs are 3x more likely to spawn than, + /mob/living/simple_mob/vore/aggressive/deathclaw = 2, //these deathclaws are, with these values, + /mob/living/simple_mob/animal/giant_spider = 4, + /mob/living/simple_mob/vore/aggressive/giant_snake = 2, + /mob/living/simple_mob/animal/giant_spider/webslinger = 2, + /mob/living/simple_mob/vore/oregrub = 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..b080985940c 100644 --- a/maps/tether/submaps/underdark_pois/underdark_things.dm +++ b/maps/tether/submaps/underdark_pois/underdark_things.dm @@ -51,9 +51,10 @@ prob_fall = 50 //guard = 20 mobs_to_pick_from = list( - /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/animal/giant_spider/hunter = 3, + /mob/living/simple_mob/animal/giant_spider/phorogenic/weak = 3, + /mob/living/simple_mob/animal/giant_spider/tunneler = 3, + /mob/living/simple_mob/vore/oregrub = 1, ) /obj/tether_away_spawner/underdark_hard @@ -64,8 +65,9 @@ prob_fall = 50 //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/corrupthound = 3, + /mob/living/simple_mob/vore/aggressive/rat/phoron = 6, + /mob/living/simple_mob/vore/oregrub/lava = 1, ) /obj/tether_away_spawner/underdark_boss diff --git a/vorestation.dme b/vorestation.dme index b9ce5473728..d1de60fdae8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2868,6 +2868,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"