mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Added vore capabilies to the new simple_animal system.
* Added happy friend time mechanics working properly for fox and cat. * Added vore mechanics and vore overrides * No longer enable vore on simple animals by creating a "/vore" subtype. Instead we simply enable vore on the main type. Consensus being we don't need a type for non-vore versions of stuff. * This allowed us to revert many path references throughout the codebase to the original non-vorestation back to their original values. In these cases the "Vorestation Edit" comment is removed. * Moved the vore overrides for upstream simple animals into its own file zz_vore_overrides.dm
This commit is contained in:
@@ -109,7 +109,7 @@
|
||||
light_color="#ff0000"
|
||||
spawnable=list(
|
||||
/mob/living/simple_animal/hostile/scarybat,
|
||||
/mob/living/simple_animal/hostile/vore/creature,
|
||||
/mob/living/simple_animal/hostile/creature/vore,
|
||||
/mob/living/simple_animal/hostile/faithless
|
||||
) // Vorestation Edit
|
||||
|
||||
@@ -118,9 +118,9 @@
|
||||
light_color="#ff0000"
|
||||
spawnable=list(
|
||||
/mob/living/simple_animal/hostile/scarybat/cult,
|
||||
/mob/living/simple_animal/hostile/vore/creature/cult,
|
||||
/mob/living/simple_animal/hostile/creature/cult,
|
||||
/mob/living/simple_animal/hostile/faithless/cult
|
||||
) // Vorestation Edit
|
||||
)
|
||||
|
||||
/obj/effect/gateway/active/cult/cultify()
|
||||
return
|
||||
|
||||
@@ -210,7 +210,7 @@ var/hadevent = 0
|
||||
/proc/carp_migration() // -- Darem
|
||||
for(var/obj/effect/landmark/C in landmarks_list)
|
||||
if(C.name == "carpspawn")
|
||||
new /mob/living/simple_animal/hostile/vore/carp(C.loc) // Vorestation edit
|
||||
new /mob/living/simple_animal/hostile/carp(C.loc)
|
||||
//sleep(100)
|
||||
spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes.
|
||||
command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", new_sound = 'sound/AI/commandreport.ogg')
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
/mob/living/simple_animal/adultslime,
|
||||
/mob/living/simple_animal/tindalos,
|
||||
/mob/living/simple_animal/yithian,
|
||||
/mob/living/simple_animal/hostile/vore/bear,
|
||||
/mob/living/simple_animal/hostile/vore/carp,
|
||||
/mob/living/simple_animal/hostile/scarybat,
|
||||
/mob/living/simple_animal/hostile/viscerator,
|
||||
/mob/living/simple_animal/hostile/malf_drone,
|
||||
@@ -45,7 +43,7 @@
|
||||
/mob/living/simple_animal/hostile/diyaab, //Doubt these will get used but might as well,
|
||||
/mob/living/simple_animal/hostile/samak,
|
||||
/mob/living/simple_animal/hostile/shantak
|
||||
) // Vorestation edits to add vore versions.
|
||||
)
|
||||
|
||||
//This unfortunately is gonna be rather messy due to the various mobtypes involved.
|
||||
/obj/item/weapon/spell/control/proc/select(var/mob/living/L)
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"SPIDER" = /mob/living/simple_animal/hostile/giant_spider,
|
||||
"SPIDER HUNTER" = /mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
"SPIDER NURSE" = /mob/living/simple_animal/hostile/giant_spider/nurse,
|
||||
"CARP" = /mob/living/simple_animal/hostile/vore/carp,
|
||||
"BEAR" = /mob/living/simple_animal/hostile/vore/bear
|
||||
"CARP" = /mob/living/simple_animal/hostile/carp,
|
||||
"BEAR" = /mob/living/simple_animal/hostile/bear
|
||||
) // Vorestation edits to add vore versions.
|
||||
cooldown = 30
|
||||
instability_cost = 10
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
for(var/obj/machinery/teleport/hub/H in range(1))
|
||||
var/amount = rand(2,5)
|
||||
for(var/i=0;i<amount;i++)
|
||||
new /mob/living/simple_animal/hostile/vore/carp(get_turf(H)) // Vorestation edit
|
||||
new /mob/living/simple_animal/hostile/carp(get_turf(H))
|
||||
//
|
||||
else
|
||||
for(var/mob/O in hearers(src, null))
|
||||
|
||||
@@ -37,6 +37,6 @@
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/vore/carp // Vorestation edit
|
||||
spawner_type = /mob/living/simple_animal/hostile/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
/obj/structure/largecrate/birds/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /obj/item/stack/material/wood(src)
|
||||
new /mob/living/simple_animal/cat/bird(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/kea(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/eclectus(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/greybird(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/eclectusf(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/blue_caique(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/white_caique(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/green_budgerigar(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/blue_Budgerigar(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/bluegreen_Budgerigar(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/commonblackbird(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/azuretit(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/europeanrobin(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/goldcrest(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/ringneckdove(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/cockatiel(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/white_cockatiel(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/yellowish_cockatiel(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/grey_cockatiel(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/too(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/hooded_too(src)
|
||||
new /mob/living/simple_animal/cat/bird/fluff/pink_too(src)
|
||||
new /mob/living/simple_animal/bird(src)
|
||||
new /mob/living/simple_animal/bird/kea(src)
|
||||
new /mob/living/simple_animal/bird/eclectus(src)
|
||||
new /mob/living/simple_animal/bird/greybird(src)
|
||||
new /mob/living/simple_animal/bird/eclectusf(src)
|
||||
new /mob/living/simple_animal/bird/blue_caique(src)
|
||||
new /mob/living/simple_animal/bird/white_caique(src)
|
||||
new /mob/living/simple_animal/bird/green_budgerigar(src)
|
||||
new /mob/living/simple_animal/bird/blue_Budgerigar(src)
|
||||
new /mob/living/simple_animal/bird/bluegreen_Budgerigar(src)
|
||||
new /mob/living/simple_animal/bird/commonblackbird(src)
|
||||
new /mob/living/simple_animal/bird/azuretit(src)
|
||||
new /mob/living/simple_animal/bird/europeanrobin(src)
|
||||
new /mob/living/simple_animal/bird/goldcrest(src)
|
||||
new /mob/living/simple_animal/bird/ringneckdove(src)
|
||||
new /mob/living/simple_animal/bird/cockatiel(src)
|
||||
new /mob/living/simple_animal/bird/white_cockatiel(src)
|
||||
new /mob/living/simple_animal/bird/yellowish_cockatiel(src)
|
||||
new /mob/living/simple_animal/bird/grey_cockatiel(src)
|
||||
new /mob/living/simple_animal/bird/too(src)
|
||||
new /mob/living/simple_animal/bird/hooded_too(src)
|
||||
new /mob/living/simple_animal/bird/pink_too(src)
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/AM in contents)
|
||||
if(AM.simulated) AM.forceMove(T)
|
||||
|
||||
@@ -287,12 +287,12 @@
|
||||
if(live_cargo) // Carp! Since Facehuggers got removed.
|
||||
var/num = rand(1,3)
|
||||
for(var/i=0,i<num,i++)
|
||||
new /mob/living/simple_animal/hostile/vore/carp(C)
|
||||
new /mob/living/simple_animal/hostile/carp(C)
|
||||
else // Just a costume.
|
||||
new /obj/item/clothing/suit/storage/hooded/carp_costume(C)
|
||||
else if(prob(50))
|
||||
if(live_cargo) // Something else very much alive and angry.
|
||||
var/spawn_type = pick(/mob/living/simple_animal/hostile/vore/alien, /mob/living/simple_animal/hostile/vore/alien/drone, /mob/living/simple_animal/hostile/vore/alien/sentinel)
|
||||
var/spawn_type = pick(/mob/living/simple_animal/hostile/alien, /mob/living/simple_animal/hostile/alien/drone, /mob/living/simple_animal/hostile/alien/sentinel)
|
||||
new spawn_type(C)
|
||||
else // Just a costume.
|
||||
new /obj/item/clothing/head/xenos(C)
|
||||
@@ -340,7 +340,7 @@
|
||||
new /obj/effect/decal/remains/xeno(src)
|
||||
if("mimic")
|
||||
//a guardian of the tomb!
|
||||
var/mob/living/simple_animal/hostile/vore/mimic/crate/mimic = new(src.loc)
|
||||
var/mob/living/simple_animal/hostile/mimic/crate/mimic = new(src.loc)
|
||||
mimic.faction = spawned_faction
|
||||
if("viscerator")
|
||||
//more tomb guardians!
|
||||
|
||||
@@ -37,11 +37,11 @@
|
||||
while (i <= num_groups)
|
||||
var/group_size = rand(group_size_min, group_size_max)
|
||||
for (var/j = 1, j <= group_size, j++)
|
||||
spawned_carp.Add(new /mob/living/simple_animal/hostile/vore/carp(spawn_locations[i])) // Vorestation edit
|
||||
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
|
||||
i++
|
||||
|
||||
/datum/event/carp_migration/end()
|
||||
for(var/mob/living/simple_animal/hostile/vore/carp/C in spawned_carp) // Vorestation edit
|
||||
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
|
||||
if(!C.stat)
|
||||
var/turf/T = get_turf(C)
|
||||
if(istype(T, /turf/space))
|
||||
|
||||
@@ -1,11 +1,157 @@
|
||||
// Flags for specifying which states we have vore icon_states for.
|
||||
#define SA_ICON_LIVING 0x01
|
||||
#define SA_ICON_DEAD 0x02
|
||||
#define SA_ICON_REST 0x03
|
||||
|
||||
/mob/living/simple_animal
|
||||
// List of targets excluded (for now) from being eaten by this mob.
|
||||
var/list/prey_exclusions = list()
|
||||
var/icon_rest
|
||||
var/vore_active = 0 // If vore behavior is enabled for this mob
|
||||
|
||||
/mob/living/simple_animal/cat
|
||||
isPredator = 1
|
||||
var/vore_capacity = 1 // The capacity (in people) this person can hold
|
||||
var/vore_max_size = RESIZE_HUGE // The max size this mob will consider eating
|
||||
var/vore_min_size = RESIZE_TINY // The min size this mob will consider eating
|
||||
var/vore_pounce_chance = 5 // Chance of this mob knocking down an opponent
|
||||
var/vore_standing_too = 0 // Can also eat non-stunned mobs
|
||||
var/vore_ignores_undigestable = 1 // Refuse to eat mobs who are undigestable by the prefs toggle.
|
||||
|
||||
/mob/living/simple_animal/fluffy/lay_down() // Turns sprite into sleeping and back upon using "Rest".
|
||||
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
||||
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
|
||||
var/vore_absorb_chance = 0 // Chance to switch to absorb mode if resisted
|
||||
var/vore_escape_chance = 25 // Chance of resisting out of mob
|
||||
|
||||
var/vore_stomach_name // The name for the first belly if not "stomach"
|
||||
var/vore_stomach_flavor // The flavortext for the first belly if not the default
|
||||
|
||||
var/vore_fullness = 0 // How "full" the belly is (controls icons)
|
||||
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
|
||||
|
||||
/mob/living/simple_animal/New()
|
||||
..()
|
||||
icon_state = resting ? "fluffy_sleep" : "fluffy"
|
||||
if(vore_active)
|
||||
init_belly()
|
||||
|
||||
// Update fullness based on size & quantity of belly contents
|
||||
/mob/living/simple_animal/proc/update_fullness()
|
||||
var/new_fullness = 0
|
||||
for(var/I in vore_organs)
|
||||
var/datum/belly/B = vore_organs[I]
|
||||
for(var/mob/living/M in B.internal_contents)
|
||||
new_fullness += M.size_multiplier
|
||||
new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
|
||||
vore_fullness = min(vore_capacity, new_fullness)
|
||||
|
||||
/mob/living/simple_animal/update_icon()
|
||||
..() // Call sideways "parent" to decide state
|
||||
if(vore_active)
|
||||
update_fullness()
|
||||
if(!vore_fullness)
|
||||
// Nothing
|
||||
else if(icon_state == icon_living && (vore_icons & SA_ICON_LIVING))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
else if(icon_state == icon_dead && (vore_icons & SA_ICON_DEAD))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
else if(icon_state == icon_rest && (vore_icons & SA_ICON_REST))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
|
||||
/mob/living/simple_animal/proc/will_eat(var/mob/living/M)
|
||||
if(!istype(M)) //Can't eat 'em if they ain't /mob/living
|
||||
ai_log("vr/wont eat [M] because they are not /mob/living", 3)
|
||||
return 0
|
||||
if(vore_ignores_undigestable && !M.digestable) //Don't eat people with nogurgle prefs
|
||||
ai_log("vr/wont eat [M] because I am picky", 3)
|
||||
return 0
|
||||
if(M in prey_excludes) // They're excluded
|
||||
ai_log("vr/wont eat [M] because they are excluded", 3)
|
||||
return 0
|
||||
if(M.size_multiplier < vore_min_size || M.size_multiplier > vore_max_size)
|
||||
ai_log("vr/wont eat [M] because they too small or too big", 3)
|
||||
return 0
|
||||
if(vore_capacity != 0 && (vore_fullness + M.size_multiplier > vore_capacity)) // We're too full to fit them
|
||||
ai_log("vr/wont eat [M] because I am too full", 3)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/PunchTarget()
|
||||
ai_log("vr/PunchTarget() [target_mob]", 3)
|
||||
// For things we don't want to eat, call the sideways "parent" to do normal punching
|
||||
if(!vore_active || !will_eat(target_mob))
|
||||
return ..()
|
||||
|
||||
// If target is standing we might pounce and eat them
|
||||
if(target_mob.canmove && prob(vore_pounce_chance))
|
||||
target_mob.Weaken(5)
|
||||
target_mob.visible_message("<span class='danger'>\the [src] pounces on \the [target_mob]!</span>!")
|
||||
|
||||
// If they're down or we can eat standing, do it
|
||||
if(!target_mob.canmove || vore_standing_too)
|
||||
return EatTarget()
|
||||
else
|
||||
return ..()
|
||||
|
||||
// Attempt to eat target
|
||||
// TODO - Review this. Could be some issues here
|
||||
/mob/living/simple_animal/proc/EatTarget()
|
||||
ai_log("vr/EatTarget() [target_mob]",2)
|
||||
init_belly()
|
||||
stop_automated_movement = 1
|
||||
var/old_target = target_mob
|
||||
handle_stance(STANCE_BUSY)
|
||||
. = animal_nom(target_mob)
|
||||
update_icon()
|
||||
if(.)
|
||||
// If we succesfully ate them, lose the target
|
||||
LoseTarget()
|
||||
return old_target
|
||||
else if(old_target == target_mob)
|
||||
// If we didn't but they are still our target, go back to attack.
|
||||
// but don't run the handler immediately, wait until next tick
|
||||
// Otherwise we'll be in a possibly infinate loop
|
||||
set_stance(STANCE_ATTACK)
|
||||
stop_automated_movement = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/vore/death()
|
||||
for(var/I in vore_organs)
|
||||
var/datum/belly/B = vore_organs[I]
|
||||
B.release_all_contents() // When your stomach is empty
|
||||
..() // then you have my permission to die.
|
||||
|
||||
// Simple animals have only one belly. This creates it (if it isn't already set up)
|
||||
/mob/living/simple_animal/proc/init_belly()
|
||||
if(vore_organs.len)
|
||||
return
|
||||
|
||||
var/datum/belly/B = new /datum/belly(src)
|
||||
B.immutable = 1
|
||||
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
|
||||
B.inside_flavor = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
|
||||
B.digest_mode = vore_default_mode
|
||||
B.escapable = vore_escape_chance > 0
|
||||
B.escapechance = vore_escape_chance
|
||||
B.digestchance = vore_digest_chance
|
||||
B.absorbchance = vore_absorb_chance
|
||||
B.human_prey_swallow_time = swallowTime
|
||||
B.nonhuman_prey_swallow_time = swallowTime
|
||||
B.vore_verb = "swallow"
|
||||
// TODO - Customizable per mob
|
||||
B.emote_lists[DM_HOLD] = list( // We need more that aren't repetitive. I suck at endo. -Ace
|
||||
"The insides knead at you gently for a moment.",
|
||||
"The guts glorp wetly around you as some air shifts.",
|
||||
"The predator takes a deep breath and sighs, shifting you somewhat.",
|
||||
"The stomach squeezes you tight for a moment, then relaxes harmlessly.",
|
||||
"The predator's calm breathing and thumping heartbeat pulses around you.",
|
||||
"The warm walls kneads harmlessly against you.",
|
||||
"The liquids churn around you, though there doesn't seem to be much effect.",
|
||||
"The sound of bodily movements drown out everything for a moment.",
|
||||
"The predator's movements gently force you into a different position.")
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The burning acids eat away at your form.",
|
||||
"The muscular stomach flesh grinds harshly against you.",
|
||||
"The caustic air stings your chest when you try to breathe.",
|
||||
"The slimy guts squeeze inward to help the digestive juices soften you up.",
|
||||
"The onslaught against your body doesn't seem to be letting up; you're food now.",
|
||||
"The predator's body ripples and crushes against you as digestive enzymes pull you apart.",
|
||||
"The juices pooling beneath you sizzle against your sore skin.",
|
||||
"The churning walls slowly pulverize you into meaty nutrients.",
|
||||
"The stomach glorps and gurgles as it tries to work you into slop.")
|
||||
src.vore_organs[B.name] = B
|
||||
src.vore_selected = B.name
|
||||
|
||||
|
||||
188
code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm
Normal file
188
code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm
Normal file
@@ -0,0 +1,188 @@
|
||||
//
|
||||
// This file overrides settings on upstream simple animals to turn on vore behavior
|
||||
//
|
||||
|
||||
/*
|
||||
## For anything that previously inhertited from: /mob/living/simple_animal/hostile/vore ##
|
||||
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
|
||||
## For anything that previously inhertied from: /mob/living/simple_animal/hostile/vore/large ##
|
||||
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
old_x = -16
|
||||
old_y = -16
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
vore_pounce_chance = 50
|
||||
*/
|
||||
|
||||
//
|
||||
// Okay! Here we go!
|
||||
//
|
||||
|
||||
/mob/living/simple_animal/hostile/alien
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_state = "xenohunter"
|
||||
icon_living = "xenohunter"
|
||||
icon_dead = "xenohunter-dead"
|
||||
icon_gib = "gibbed-a"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/drone
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_state = "xenodrone"
|
||||
icon_living = "xenodrone"
|
||||
icon_dead = "xenodrone-dead"
|
||||
icon_gib = "gibbed-a"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/sentinel
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_state = "xenosentinel"
|
||||
icon_living = "xenosentinel"
|
||||
icon_dead = "xenosentinel-dead"
|
||||
icon_gib = "gibbed-a"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/queen
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_state = "xenoqueen"
|
||||
icon_living = "xenoqueen"
|
||||
icon_dead = "xenoqueen-dead"
|
||||
icon_gib = "gibbed-a"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/queen/large
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
icon_state = "queen_s"
|
||||
icon_living = "queen_s"
|
||||
icon_dead = "queen_dead"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
vore_capacity = 3
|
||||
vore_pounce_chance = 75
|
||||
|
||||
/mob/living/simple_animal/hostile/bear
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
icon_state = "spacebear"
|
||||
icon_living = "spacebear"
|
||||
icon_dead = "spacebear-dead"
|
||||
icon_gib = "bear-gib"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/hudson
|
||||
name = "Hudson"
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/brown
|
||||
vore_active = 1
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
name = "brown bear"
|
||||
icon_state = "brownbear"
|
||||
icon_living = "brownbear"
|
||||
icon_dead = "brownbear-dead"
|
||||
icon_gib = "bear-gib"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/carp
|
||||
icon = 'icons/mob/vore.dmi'
|
||||
vore_active = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/hostile/creature/vore
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
vore_capacity = 0
|
||||
vore_pounce_chance = 0 // Only pounces if you're crit.
|
||||
vore_escape_chance = 0 // As such, if you're a dibshit who feeds yourself to it, you're staying down.
|
||||
// Overrides to non-vore version
|
||||
speed = 4 // Slow it down a bit
|
||||
health = 80 // Increase health to compensate
|
||||
maxHealth = 80
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
vore_capacity = 0
|
||||
vore_pounce_chance = 33
|
||||
// Overrides to non-vore version
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
|
||||
/mob/living/simple_animal/cat
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
specific_targets = 0 // Targeting UNLOCKED
|
||||
vore_max_size = RESIZE_TINY
|
||||
|
||||
/mob/living/simple_animal/cat/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_animal/mouse))
|
||||
return EatTarget()
|
||||
else ..()
|
||||
|
||||
/mob/living/simple_animal/cat/Found(var/atom/found_atom)
|
||||
if(!SA_attackable(found_atom))
|
||||
return null
|
||||
if(istype(found_atom,/mob/living/simple_animal/mouse))
|
||||
return found_atom
|
||||
if(found_atom in friends)
|
||||
return null
|
||||
if(will_eat(found_atom))
|
||||
return found_atom
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/Found(var/atom/found_atom)
|
||||
if (friend == found_atom)
|
||||
return null
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/fox
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
vore_max_size = RESIZE_TINY
|
||||
|
||||
/mob/living/simple_animal/fox/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_animal/mouse))
|
||||
return EatTarget()
|
||||
else ..()
|
||||
|
||||
/mob/living/simple_animal/fox/Found(var/atom/found_atom)
|
||||
if(!SA_attackable(found_atom))
|
||||
return null
|
||||
if(istype(found_atom,/mob/living/simple_animal/mouse))
|
||||
return found_atom
|
||||
if(found_atom in friends)
|
||||
return null
|
||||
if(will_eat(found_atom))
|
||||
return found_atom
|
||||
|
||||
/mob/living/simple_animal/fox/fluff/Found(var/atom/found_atom)
|
||||
if (friend == found_atom)
|
||||
return null
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/goose
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
vore_max_size = RESIZE_SMALL
|
||||
|
||||
/mob/living/simple_animal/penguin
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
vore_max_size = RESIZE_SMALL
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/pike
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
@@ -300,7 +300,7 @@
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/crab))
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/vore/carp)) // Vorestation edit
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/carp))
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/shade))
|
||||
return 1
|
||||
@@ -308,7 +308,7 @@
|
||||
return 1
|
||||
if(ispath(MP, /mob/living/simple_animal/mouse))
|
||||
return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak)
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/vore/bear)) // Vorestation edit
|
||||
if(ispath(MP, /mob/living/simple_animal/hostile/bear))
|
||||
return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak)
|
||||
if(ispath(MP, /mob/living/simple_animal/parrot))
|
||||
return 1 //Parrots are no longer unfinished! -Nodrak
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
/obj/item/projectile/animate/Bump(var/atom/change)
|
||||
if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects))
|
||||
var/obj/O = change
|
||||
new /mob/living/simple_animal/hostile/vore/mimic/copy(O.loc, O, firer)
|
||||
new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
|
||||
..()
|
||||
|
||||
@@ -261,10 +261,8 @@
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
var/mob_path = /mob/living/simple_animal/hostile/vore
|
||||
var/blocked = list(
|
||||
/mob/living/simple_animal/hostile/vore/mimic,
|
||||
/mob/living/simple_animal/hostile/vore/mimic/copy,
|
||||
/mob/living/simple_animal/hostile/vore/mimic/crate,
|
||||
/mob/living/simple_animal/hostile/vore/alien/queen/large
|
||||
/mob/living/simple_animal/hostile/mimic,
|
||||
/mob/living/simple_animal/hostile/alien/queen
|
||||
)//exclusion list for things you don't want the reaction to create.
|
||||
var/list/voremobs = typesof(mob_path) - mob_path - blocked // list of possible hostile mobs
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
New()
|
||||
..()
|
||||
spot_add(2,2,/obj/random/cargopod) //EXTRA loot!
|
||||
spot_add(2,2,/mob/living/simple_animal/hostile/vore/alien) //GRRR
|
||||
spot_add(2,2,/mob/living/simple_animal/hostile/alien) //GRRR
|
||||
|
||||
//Longer cargo container for higher difficulties
|
||||
/datum/rogue/asteroid/predef/cargo_large
|
||||
@@ -147,4 +147,4 @@
|
||||
spot_add(4,3,/obj/random/cargopod) //Right loot
|
||||
|
||||
if(prob(30))
|
||||
spot_add(3,3,/mob/living/simple_animal/hostile/vore/alien) //And maybe a friend.
|
||||
spot_add(3,3,/mob/living/simple_animal/hostile/alien) //And maybe a friend.
|
||||
@@ -60,15 +60,15 @@ var/datum/controller/rogue/rm_controller = new()
|
||||
"tier2" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/goose),
|
||||
|
||||
"tier3" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/goose,
|
||||
/mob/living/simple_animal/hostile/vore/bear, /mob/living/simple_animal/hostile/carp/strong),
|
||||
/mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/carp/strong),
|
||||
|
||||
"tier4" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/goose, /mob/living/simple_animal/hostile/vore/bear,
|
||||
"tier4" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/goose, /mob/living/simple_animal/hostile/bear,
|
||||
/mob/living/simple_animal/hostile/carp/strong, /mob/living/simple_animal/hostile/carp/pike/weak),
|
||||
|
||||
"tier5" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/vore/bear, /mob/living/simple_animal/hostile/carp/pike/weak,
|
||||
"tier5" = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/carp/pike/weak,
|
||||
/mob/living/simple_animal/hostile/carp/strong, /mob/living/simple_animal/hostile/carp/pike),
|
||||
|
||||
"tier6" = list(/mob/living/simple_animal/hostile/vore/bear, /mob/living/simple_animal/hostile/carp/strong,
|
||||
"tier6" = list(/mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/carp/strong,
|
||||
/mob/living/simple_animal/hostile/carp/pike, /mob/living/simple_animal/hostile/carp/pike/weak)
|
||||
)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
invocation_type = SpI_SHOUT
|
||||
range = 1
|
||||
|
||||
summon_type = list(/mob/living/simple_animal/hostile/vore/carp) // Vorestation Edit
|
||||
summon_type = list(/mob/living/simple_animal/hostile/carp)
|
||||
|
||||
hud_state = "wiz_carp"
|
||||
|
||||
@@ -36,6 +36,6 @@
|
||||
summon_amt = 10
|
||||
range = 3
|
||||
|
||||
summon_type = list(/mob/living/simple_animal/hostile/vore/creature) // Vorestation Edit
|
||||
summon_type = list(/mob/living/simple_animal/hostile/creature/vore) // Vorestation Edit
|
||||
|
||||
hud_state = "wiz_creature"
|
||||
@@ -1,6 +1,5 @@
|
||||
///////////////////// Simple Animal /////////////////////
|
||||
/mob/living/simple_animal
|
||||
var/isPredator = 0 //Are they capable of performing and pre-defined vore actions for their species?
|
||||
var/swallowTime = 30 //How long it takes to eat its prey in 1/10 of a second. The default is 3 seconds.
|
||||
var/list/prey_excludes = list() //For excluding people from being eaten.
|
||||
|
||||
@@ -16,7 +15,7 @@
|
||||
return
|
||||
if (istype(src,/mob/living/simple_animal/mouse) && T.ckey == null)
|
||||
return
|
||||
feed_grabbed_to_self(src,T)
|
||||
return feed_grabbed_to_self(src,T)
|
||||
|
||||
//
|
||||
// Simple proc for animals to have their digestion toggled on/off externally
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
if(prob(33))
|
||||
spawn_type = pick(\
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse,\
|
||||
/mob/living/simple_animal/hostile/vore/alien,\
|
||||
/mob/living/simple_animal/hostile/vore/bear,\
|
||||
/mob/living/simple_animal/hostile/vore/carp,\
|
||||
/mob/living/simple_animal/hostile/vore/creature\
|
||||
/mob/living/simple_animal/hostile/alien,\
|
||||
/mob/living/simple_animal/hostile/bear,\
|
||||
/mob/living/simple_animal/hostile/carp,\
|
||||
/mob/living/simple_animal/hostile/creature\
|
||||
) // Vorestation Edits
|
||||
else
|
||||
spawn_type = pick(\
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/roller,
|
||||
/obj/structure/closet/crate,
|
||||
/obj/structure/closet/acloset,
|
||||
/mob/living/simple_animal/hostile/vore/mimic,
|
||||
/mob/living/simple_animal/hostile/mimic/crate,
|
||||
/mob/living/simple_animal/hostile/viscerator,
|
||||
/mob/living/simple_animal/hostile/hivebot,
|
||||
/obj/item/device/analyzer,
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
if(charges >= 3)
|
||||
if(prob(5))
|
||||
charges -= 1
|
||||
var/spawn_type = pick(/mob/living/simple_animal/hostile/vore/creature) // Vorestation Edit
|
||||
var/spawn_type = pick(/mob/living/simple_animal/hostile/creature/vore) // Vorestation Edit
|
||||
new spawn_type(pick(view(1,src)))
|
||||
playsound(src.loc, pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 50, 1, -3)
|
||||
|
||||
|
||||
@@ -1794,7 +1794,6 @@
|
||||
#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\drone\drone_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\corpse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\fluffy.dm"
|
||||
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
|
||||
#include "code\modules\mob\living\simple_animal\simple_animal_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\aliens\alien.dm"
|
||||
@@ -1806,18 +1805,24 @@
|
||||
#include "code\modules\mob\living\simple_animal\aliens\shade.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\bat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\bear.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\birds_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\carp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\cat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\corgi.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\corgi_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\crab.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\farm_animals.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\fluffy_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\fox_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\giant_spider.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\goose.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\lizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\mouse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\parrot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\penguin.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\pike_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\slime.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\snake_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\spiderbot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\tomato.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\tree.dm"
|
||||
@@ -1828,27 +1833,6 @@
|
||||
#include "code\modules\mob\living\simple_animal\borer\say.dm"
|
||||
#include "code\modules\mob\living\simple_animal\constructs\constructs.dm"
|
||||
#include "code\modules\mob\living\simple_animal\constructs\soulstone.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\birds_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\corgi_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\fox_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\snake_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\goose_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\pike_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\alien.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\bear.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\bee.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\carp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\catgirl.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\creature.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\deathclaw.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\dragon.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\frog.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\horse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\mimic.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\panther.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\retaliate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\vore.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\vore\wolf.dm"
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\clown.dm"
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\head.dm"
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\kobold.dm"
|
||||
@@ -1856,6 +1840,18 @@
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\pirate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\russian.dm"
|
||||
#include "code\modules\mob\living\simple_animal\humanoids\syndicate.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\bee.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\carp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\catgirl.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\deathclaw.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\dino.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\dragon.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\frog.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\horse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\panther.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\snake.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\wolf.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\zz_vore_overrides.dm"
|
||||
#include "code\modules\mob\living\voice\voice.dm"
|
||||
#include "code\modules\mob\new_player\login.dm"
|
||||
#include "code\modules\mob\new_player\logout.dm"
|
||||
|
||||
Reference in New Issue
Block a user