mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-20 19:44:46 +01:00
2137
This commit is contained in:
@@ -447,7 +447,7 @@
|
||||
if(speak_chance) // In the long loop since otherwise it wont shut up.
|
||||
handle_idle_speaking()
|
||||
|
||||
if(hostile)
|
||||
if(hostile || vore_hostile)
|
||||
ai_log("handle_stance_strategical() : STANCE_IDLE, going to find_target().", AI_LOG_TRACE)
|
||||
find_target()
|
||||
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
var/mauling = FALSE // Attacks unconscious mobs
|
||||
var/unconscious_vore = FALSE //VOREStation Add - allows a mob to go for unconcious targets IF their vore prefs align
|
||||
var/handle_corpse = FALSE // Allows AI to acknowledge corpses (e.g. nurse spiders)
|
||||
var/vore_hostile = FALSE // The same as hostile, but with vore pref checks
|
||||
var/micro_hunt = FALSE // Will target mobs at or under the micro_hunt_size size, requires vore_hostile to be true
|
||||
var/micro_hunt_size = 0.25
|
||||
|
||||
var/atom/movable/target = null // The thing (mob or object) we're trying to kill.
|
||||
var/atom/movable/preferred_target = null// If set, and if given the chance, we will always prefer to target this over other options.
|
||||
@@ -312,3 +315,16 @@
|
||||
/datum/ai_holder/proc/lose_taunt()
|
||||
ai_log("lose_taunt() : Resetting preferred_target.", AI_LOG_INFO)
|
||||
preferred_target = null
|
||||
|
||||
/datum/ai_holder/proc/vore_check(mob/living/L)
|
||||
if(!holder.vore_selected) //We probably don't have a belly so don't even try
|
||||
return FALSE
|
||||
if(!isliving(L)) //We only want mob/living
|
||||
return FALSE
|
||||
if(!L.devourable || !L.allowmobvore) //Check their prefs
|
||||
return FALSE
|
||||
if(micro_hunt && !(L.get_effective_size(TRUE) <= micro_hunt_size)) //Are they small enough to get?
|
||||
to_world("[holder]'s micro hunt failed against [L]: micro_hunt = [micro_hunt]: [L] effective_size = [L.get_effective_size(TRUE)]: Hunting sizes under [micro_hunt_size]")
|
||||
return FALSE
|
||||
to_world("micro hunt passed")
|
||||
return TRUE // Let's go!
|
||||
|
||||
@@ -1,21 +1,9 @@
|
||||
/datum/category_item/catalogue/fauna/abyss_lurker
|
||||
name = "Alien Wildlife - Teppi"
|
||||
desc = "Teppi are large omnivorous quadrupeds with long fur.\
|
||||
Unlike many horned mammals, Teppi have developed paws with four toes rather than hooves.\
|
||||
This coupled with a thick, powerful tail makes them quite capable and balanced on many\
|
||||
kinds of terrain. A recently discovered species, their origins are something of a\
|
||||
mystery, but they have been discovered in more different regions of space with no apparent\
|
||||
connection to one another. Teppi are known to reproduce and grow rather quickly, which if\
|
||||
left unchecked can lead to serious problems for local ecology.\
|
||||
Teppi are very hardy, engaging them in combat is not recommended.\
|
||||
Teppi can be a good source of protein and materials for crafts and clothing in emergency\
|
||||
situations. They are not especially picky eaters, and have a rather mild temperament.\
|
||||
A pair of well fed Teppi can rather quickly become a small horde, so it is generally\
|
||||
advised to keep an eye on their numbers."
|
||||
name = "Alien Wildlife - Abyss Lurker"
|
||||
desc = "REPLACE ME"
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/abyss_lurker
|
||||
/mob/living/simple_mob/vore/vore_hostile/abyss_lurker
|
||||
name = "abyss lurker"
|
||||
desc = "A pale mass of heaving flesh that gropes around in the gloom. It doesn't appear to have any eyes."
|
||||
icon = 'icons/mob/alienanimals_x64.dmi'
|
||||
@@ -23,6 +11,7 @@
|
||||
icon_living = "abyss_lurker"
|
||||
icon_dead = "abyss_lurker-dead"
|
||||
icon_rest = "abyss_lurker"
|
||||
vore_icons = 0
|
||||
|
||||
faction = "macrobacteria"
|
||||
maxHealth = 600
|
||||
@@ -37,11 +26,16 @@
|
||||
pixel_x = -16
|
||||
default_pixel_x = -16
|
||||
|
||||
mob_bump_flag = HEAVY
|
||||
mob_swap_flags = HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
mob_size = MOB_LARGE
|
||||
|
||||
|
||||
attacktext = list("flashes", "slaps", "smothers", "grapples")
|
||||
attack_sound = 'sound/effects/attackblob.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/say_hostile
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/say_aggro
|
||||
|
||||
mob_size = MOB_LARGE
|
||||
|
||||
@@ -62,7 +56,7 @@
|
||||
vore_pounce_maxhealth = 100
|
||||
vore_standing_too = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/abyss_lurker/init_vore()
|
||||
/mob/living/simple_mob/vore/vore_hostile/abyss_lurker/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "interior"
|
||||
@@ -75,11 +69,53 @@
|
||||
B.absorbchance = 0
|
||||
B.escapechance = 25
|
||||
|
||||
/datum/ai_holder/simple_mob/say_hostile
|
||||
/mob/living/simple_mob/vore/vore_hostile
|
||||
name = "peeb"
|
||||
desc = "REPLACE ME"
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/vore
|
||||
|
||||
/datum/ai_holder/simple_mob/vore
|
||||
hostile = FALSE
|
||||
retaliate = TRUE
|
||||
vore_hostile = TRUE
|
||||
forgive_resting = TRUE
|
||||
|
||||
/datum/ai_holder/simple_mob/say_hostile/on_hear_say(mob/living/speaker, message)
|
||||
/datum/ai_holder/simple_mob/vore/micro_hunter
|
||||
micro_hunt = TRUE
|
||||
micro_hunt_size = 0.8
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/hostile
|
||||
hostile = TRUE
|
||||
|
||||
/datum/ai_holder/simple_mob/vore/find_target(list/possible_targets, has_targets_list)
|
||||
if(!vore_hostile)
|
||||
return ..()
|
||||
ai_log("find_target() : Entered.", AI_LOG_TRACE)
|
||||
|
||||
. = list()
|
||||
if(!has_targets_list)
|
||||
possible_targets = list_targets()
|
||||
var/list/valid_mobs = list()
|
||||
for(var/mob/living/possible_target in possible_targets)
|
||||
if(!can_attack(possible_target))
|
||||
continue
|
||||
. |= possible_target
|
||||
if(!isliving(possible_target))
|
||||
continue
|
||||
if(vore_check(possible_target))
|
||||
valid_mobs |= possible_target
|
||||
|
||||
var/new_target
|
||||
if(valid_mobs.len)
|
||||
new_target = pick(valid_mobs)
|
||||
else if(hostile)
|
||||
new_target = pick(.)
|
||||
if(!new_target)
|
||||
return null
|
||||
give_target(new_target)
|
||||
return new_target
|
||||
|
||||
/datum/ai_holder/simple_mob/say_aggro/on_hear_say(mob/living/speaker, message)
|
||||
. = ..()
|
||||
if(holder.client || !speaker.client)
|
||||
return
|
||||
|
||||
@@ -651,7 +651,7 @@
|
||||
semirandom_group_min = 1
|
||||
semirandom_group_max = 3
|
||||
mob_intent = "retaliate"
|
||||
valid_mobs = list(list(/mob/living/simple_mob/vore/alienanimals/abyss_lurker = 100))
|
||||
valid_mobs = list(list(/mob/living/simple_mob/vore/vore_hostile/abyss_lurker = 100))
|
||||
|
||||
var/mob_chance = 10
|
||||
var/treasure_chance = 50
|
||||
|
||||
@@ -124,7 +124,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
attack_sound = 'sound/voice/teppi/roar.ogg' // make a better one idiot
|
||||
friendly = list("snoofs", "nuzzles", "nibbles", "smooshes on")
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/teppi
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/vore/micro_hunter
|
||||
|
||||
mob_size = MOB_LARGE
|
||||
|
||||
@@ -160,6 +160,10 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
vore_default_contamination_flavor = "Wet"
|
||||
vore_default_contamination_color = "grey"
|
||||
vore_default_item_mode = IM_DIGEST
|
||||
vore_bump_chance = 5
|
||||
vore_pounce_chance = 35
|
||||
vore_pounce_falloff = 0
|
||||
vore_standing_too = TRUE
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/init_vore()
|
||||
..()
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 84 KiB |
Reference in New Issue
Block a user