Merge pull request #5981 from CHOMPStation2/upstream-merge-14720

[MIRROR] Speed and stuff
This commit is contained in:
Nadyr
2023-03-31 18:50:30 -04:00
committed by GitHub
103 changed files with 943 additions and 401 deletions
@@ -292,7 +292,6 @@ var/global/list/semirandom_mob_spawner_decisions = list()
),
list(/mob/living/simple_mob/vore/solargrub),
list(/mob/living/simple_mob/vore/woof),
list(/mob/living/simple_mob/vore/alienanimals/teppi),
list(/mob/living/simple_mob/vore/alienanimals/space_ghost),
list(/mob/living/simple_mob/vore/alienanimals/catslug),
list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish),
@@ -1,234 +1,240 @@
/decl/emote/audible/awoo
key = "awoo"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/awoo.ogg'
key = "awoo"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/awoo.ogg'
/decl/emote/audible/awoo2
key = "awoo2"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/long_awoo.ogg'
key = "awoo2"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/long_awoo.ogg'
/decl/emote/audible/growl
key = "growl"
emote_message_3p = "lets out a growl."
emote_sound = 'sound/voice/growl.ogg'
key = "growl"
emote_message_3p = "lets out a growl."
emote_sound = 'sound/voice/growl.ogg'
/decl/emote/audible/woof
key = "woof"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof.ogg'
key = "woof"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof.ogg'
/decl/emote/audible/woof2
key = "woof2"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof2.ogg'
key = "woof2"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof2.ogg'
/decl/emote/audible/nya
key = "nya"
emote_message_3p = "lets out a nya."
emote_sound = 'sound/voice/nya.ogg'
key = "nya"
emote_message_3p = "lets out a nya."
emote_sound = 'sound/voice/nya.ogg'
/decl/emote/audible/mrowl
key = "mrowl"
emote_message_3p = "mrowls."
emote_sound = 'sound/voice/mrow.ogg'
key = "mrowl"
emote_message_3p = "mrowls."
emote_sound = 'sound/voice/mrow.ogg'
/decl/emote/audible/peep
key = "peep"
emote_message_3p = "peeps like a bird."
emote_sound = 'sound/voice/peep.ogg'
key = "peep"
emote_message_3p = "peeps like a bird."
emote_sound = 'sound/voice/peep.ogg'
/decl/emote/audible/chirp
key = "chirp"
emote_message_3p = "chirps!"
emote_sound = 'sound/misc/nymphchirp.ogg'
sound_vary = FALSE
key = "chirp"
emote_message_3p = "chirps!"
emote_sound = 'sound/misc/nymphchirp.ogg'
sound_vary = FALSE
/decl/emote/audible/hoot
key = "hoot"
emote_message_3p = "hoots!"
emote_sound = 'sound/voice/hoot.ogg'
key = "hoot"
emote_message_3p = "hoots!"
emote_sound = 'sound/voice/hoot.ogg'
/decl/emote/audible/weh
key = "weh"
emote_message_3p = "lets out a weh."
emote_sound = 'sound/voice/weh.ogg'
key = "weh"
emote_message_3p = "lets out a weh."
emote_sound = 'sound/voice/weh.ogg'
/decl/emote/audible/merp
key = "merp"
emote_message_3p = "lets out a merp."
emote_sound = 'sound/voice/merp.ogg'
key = "merp"
emote_message_3p = "lets out a merp."
emote_sound = 'sound/voice/merp.ogg'
/decl/emote/audible/myarp
key = "myarp"
emote_message_3p = "lets out a myarp."
emote_sound = 'sound/voice/myarp.ogg'
key = "myarp"
emote_message_3p = "lets out a myarp."
emote_sound = 'sound/voice/myarp.ogg'
/decl/emote/audible/bark
key = "bark"
emote_message_3p = "lets out a bark."
emote_sound = 'sound/voice/bark2.ogg'
key = "bark"
emote_message_3p = "lets out a bark."
emote_sound = 'sound/voice/bark2.ogg'
/decl/emote/audible/bork
key = "bork"
emote_message_3p = "lets out a bork."
emote_sound = 'sound/voice/bork.ogg'
key = "bork"
emote_message_3p = "lets out a bork."
emote_sound = 'sound/voice/bork.ogg'
/decl/emote/audible/mrow
key = "mrow"
emote_message_3p = "lets out a mrow."
emote_sound = 'sound/voice/mrow.ogg'
key = "mrow"
emote_message_3p = "lets out a mrow."
emote_sound = 'sound/voice/mrow.ogg'
/decl/emote/audible/hypno
key = "hypno"
emote_message_3p = "lets out a mystifying tone."
emote_sound = 'sound/voice/hypno.ogg'
key = "hypno"
emote_message_3p = "lets out a mystifying tone."
emote_sound = 'sound/voice/hypno.ogg'
/decl/emote/audible/hiss
key = "hiss"
emote_message_3p = "lets out a hiss."
emote_sound = 'sound/voice/hiss.ogg'
key = "hiss"
emote_message_3p = "lets out a hiss."
emote_sound = 'sound/voice/hiss.ogg'
/decl/emote/audible/rattle
key = "rattle"
emote_message_3p = "rattles!"
emote_sound = 'sound/voice/rattle.ogg'
key = "rattle"
emote_message_3p = "rattles!"
emote_sound = 'sound/voice/rattle.ogg'
/decl/emote/audible/squeak
key = "squeak"
emote_message_3p = "lets out a squeak."
emote_sound = 'sound/effects/mouse_squeak.ogg'
key = "squeak"
emote_message_3p = "lets out a squeak."
emote_sound = 'sound/effects/mouse_squeak.ogg'
/decl/emote/audible/geck
key = "geck"
emote_message_3p = "geckers!"
emote_sound = 'sound/voice/geck.ogg'
key = "geck"
emote_message_3p = "geckers!"
emote_sound = 'sound/voice/geck.ogg'
/decl/emote/audible/baa
key = "baa"
emote_message_3p = "lets out a baa."
emote_sound = 'sound/voice/baa.ogg'
key = "baa"
emote_message_3p = "lets out a baa."
emote_sound = 'sound/voice/baa.ogg'
/decl/emote/audible/baa2
key = "baa2"
emote_message_3p = "bleats."
emote_sound = 'sound/voice/baa2.ogg'
key = "baa2"
emote_message_3p = "bleats."
emote_sound = 'sound/voice/baa2.ogg'
/*
/decl/emote/audible/deathgasp2
key = "deathgasp2"
emote_message_3p = "[species.get_death_message()]"
m_type = 1
emote_sound = 'sound/voice/deathgasp2.ogg'
key = "deathgasp2"
emote_message_3p = "[species.get_death_message()]"
m_type = 1
emote_sound = 'sound/voice/deathgasp2.ogg'
*/
/decl/emote/audible/mar
key = "mar"
emote_message_3p = "lets out a mar."
emote_sound = 'sound/voice/mar.ogg'
key = "mar"
emote_message_3p = "lets out a mar."
emote_sound = 'sound/voice/mar.ogg'
/decl/emote/audible/wurble
key = "wurble"
emote_message_3p = "lets out a wurble."
emote_sound = 'sound/voice/wurble.ogg'
key = "wurble"
emote_message_3p = "lets out a wurble."
emote_sound = 'sound/voice/wurble.ogg'
/decl/emote/audible/snort
key = "snort"
emote_message_3p = "snorts!"
emote_sound = 'sound/voice/Snort.ogg'
sound_vary = FALSE
key = "snort"
emote_message_3p = "snorts!"
emote_sound = 'sound/voice/Snort.ogg'
sound_vary = FALSE
/decl/emote/audible/meow
key = "meow"
emote_message_3p = "gently meows!"
emote_sound = 'sound/voice/Meow.ogg'
sound_vary = FALSE
key = "meow"
emote_message_3p = "gently meows!"
emote_sound = 'sound/voice/Meow.ogg'
sound_vary = FALSE
/decl/emote/audible/moo
key = "moo"
emote_message_3p = "takes a breath and lets out a moo."
emote_sound = 'sound/voice/Moo.ogg'
key = "moo"
emote_message_3p = "takes a breath and lets out a moo."
emote_sound = 'sound/voice/Moo.ogg'
/decl/emote/audible/croak
key = "croak"
emote_message_3p = "rumbles their throat, puffs their cheeks and croaks."
emote_sound = 'sound/voice/croak_frog.ogg'
key = "croak"
emote_message_3p = "rumbles their throat, puffs their cheeks and croaks."
emote_sound = 'sound/voice/croak_frog.ogg'
/decl/emote/audible/gao
key = "gao"
emote_message_3p = "lets out a gao."
emote_sound = 'sound/voice/gao.ogg'
key = "gao"
emote_message_3p = "lets out a gao."
emote_sound = 'sound/voice/gao.ogg'
/decl/emote/audible/cackle
key = "cackle"
emote_message_3p = "cackles hysterically!"
emote_sound = 'sound/voice/YeenCackle.ogg'
key = "cackle"
emote_message_3p = "cackles hysterically!"
emote_sound = 'sound/voice/YeenCackle.ogg'
/decl/emote/audible/spiderchitter
key = "spiderchitter"
emote_message_3p = "chitters."
emote_sound = 'sound/voice/spiderchitter.ogg'
key = "spiderchitter"
emote_message_3p = "chitters."
emote_sound = 'sound/voice/spiderchitter.ogg'
/decl/emote/audible/spiderpurr
key = "spiderpurr"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/spiderpurr.ogg'
key = "spiderpurr"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/spiderpurr.ogg'
/decl/emote/audible/squeaky
key = "squeaky"
emote_message_3p = "squeaks."
emote_sound = 'sound/items/drop/plushie.ogg'
key = "squeaky"
emote_message_3p = "squeaks."
emote_sound = 'sound/items/drop/plushie.ogg'
/decl/emote/audible/mothscream
key = "mothscream"
emote_message_3p ="screams"
emote_sound = 'sound/voice/moth/scream_moth.ogg'
/decl/emote/audible/mothchitter
key = "mothchitter"
emote_message_3p = "chitters"
emote_sound = 'sound/voice/moth/moth_chitter.ogg'
key = "mothchitter"
emote_message_3p = "chitters"
emote_sound = 'sound/voice/moth/moth_chitter.ogg'
/decl/emote/audible/mothlaugh
key = "mothlaugh"
emote_message_3p = "laughs"
emote_sound = 'sound/voice/moth/moth_laugh.ogg'
key = "mothlaugh"
emote_message_3p = "laughs"
emote_sound = 'sound/voice/moth/moth_laugh.ogg'
/decl/emote/audible/gyoh
key = "gyoh"
emote_message_3p = "gyohs."
emote_sound = 'sound/voice/teppi/whine1.ogg'
var/list/bigsound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg','sound/voice/teppi/gyooh6.ogg')
var/list/smolsound = list('sound/voice/teppi/whine1.ogg', 'sound/voice/teppi/whine2.ogg')
key = "gyoh"
emote_message_3p = "gyohs."
emote_sound = 'sound/voice/teppi/whine1.ogg'
var/list/bigsound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg','sound/voice/teppi/gyooh6.ogg')
var/list/smolsound = list('sound/voice/teppi/whine1.ogg', 'sound/voice/teppi/whine2.ogg')
/decl/emote/audible/gyoh/get_emote_sound(var/mob/living/user)
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi))
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi/baby))
emote_sound = pick(smolsound)
else
emote_sound = pick(bigsound)
else if(istype(user, /mob/living/silicon/pai))
var/mob/living/silicon/pai/me = user
if(me.chassis == "teppi")
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
. = ..()
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi))
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi/baby))
emote_sound = pick(smolsound)
else
emote_sound = pick(bigsound)
else if(istype(user, /mob/living/silicon/pai))
var/mob/living/silicon/pai/me = user
if(me.chassis == "teppi")
emote_sound = pick(bigsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
. = ..()
/decl/emote/audible/rumble
key = "rumble"
emote_message_3p = "rumbles contentedly."
emote_sound = 'sound/voice/teppi/whine1.ogg'
var/list/bigsound = list('sound/voice/teppi/rumble.ogg')
var/list/smolsound = list('sound/voice/teppi/cute_rumble.ogg')
key = "rumble"
emote_message_3p = "rumbles contentedly."
emote_sound = 'sound/voice/teppi/whine1.ogg'
var/list/bigsound = list('sound/voice/teppi/rumble.ogg')
var/list/smolsound = list('sound/voice/teppi/cute_rumble.ogg')
/decl/emote/audible/rumble/get_emote_sound(var/mob/living/user)
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi))
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi/baby))
emote_sound = pick(smolsound)
else
emote_sound = pick(bigsound)
else if(istype(user, /mob/living/silicon/pai))
var/mob/living/silicon/pai/me = user
if(me.chassis == "teppi")
emote_sound = pick(bigsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
. = ..()
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi))
if(istype(user, /mob/living/simple_mob/vore/alienanimals/teppi/baby))
emote_sound = pick(smolsound)
else
emote_sound = pick(bigsound)
else if(istype(user, /mob/living/silicon/pai))
var/mob/living/silicon/pai/me = user
if(me.chassis == "teppi")
emote_sound = pick(bigsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
else if(user.size_multiplier >= 1.5)
emote_sound = pick(bigsound)
else
emote_sound = pick(smolsound)
. = ..()
/decl/emote/audible/coyawoo
key = "coyawoo"
emote_message_3p = "lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo.ogg'
key = "coyawoo"
emote_message_3p = "lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo.ogg'
/decl/emote/audible/coyawoo2
key = "coyawoo2"
emote_message_3p = "lets out a pronounced, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo2.ogg'
key = "coyawoo2"
emote_message_3p = "lets out a pronounced, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo2.ogg'
/decl/emote/audible/coyawoo3
key = "coyawoo3"
emote_message_3p = "yaps and lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo3.ogg'
key = "coyawoo3"
emote_message_3p = "yaps and lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo3.ogg'
/decl/emote/audible/coyawoo4
key = "coyawoo4"
emote_message_3p = "yaps several times, and lets out a short, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo4.ogg'
key = "coyawoo4"
emote_message_3p = "yaps several times, and lets out a short, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo4.ogg'
/decl/emote/audible/coyawoo5
key = "coyawoo5"
emote_message_3p = "lets out a scraggly, whine-awoo."
emote_sound = 'sound/voice/coyoteawoo5.ogg'
key = "coyawoo5"
emote_message_3p = "lets out a scraggly, whine-awoo."
emote_sound = 'sound/voice/coyoteawoo5.ogg'
@@ -556,4 +556,4 @@
return TRUE
else if(humanform.say_understands(other, speaking)) //So they're speaking something other than promethean or sign, let's just ask our original mob if it understands
return TRUE
else return FALSE
else return FALSE
@@ -0,0 +1,504 @@
// Simple animal nanogoopeyness
/mob/living/simple_mob/protean_blob
name = "protean blob"
desc = "Some sort of big viscous pool of jelly."
tt_desc = "Animated nanogoop"
icon = 'icons/mob/species/protean/protean.dmi'
icon_state = "to_puddle"
icon_living = "puddle2"
icon_rest = "rest"
icon_dead = "puddle"
faction = "neutral"
maxHealth = 200
health = 200
say_list_type = /datum/say_list/protean_blob
show_stat_health = FALSE //We will do it ourselves
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
harm_intent_damage = 2
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = list("slashed")
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 = 900
movement_cooldown = 1
var/mob/living/carbon/human/humanform
var/obj/item/organ/internal/nano/refactory/refactory
var/datum/modifier/healing
var/obj/prev_left_hand
var/obj/prev_right_hand
var/human_brute = 0
var/human_burn = 0
player_msg = "In this form, you can move a little faster, your health will regenerate as long as you have metal in you, and you can ventcrawl!"
can_buckle = TRUE //Blobsurfing
/datum/say_list/protean_blob
speak = list("Blrb?","Sqrsh.","Glrsh!")
emote_hear = list("squishes softly","spluts quietly","makes wet noises")
emote_see = list("shifts wetly","undulates placidly")
//Constructor allows passing the human to sync damages
/mob/living/simple_mob/protean_blob/New(var/newloc, var/mob/living/carbon/human/H)
..()
if(H)
humanform = H
updatehealth()
refactory = locate() in humanform.internal_organs
verbs |= /mob/living/proc/ventcrawl
verbs |= /mob/living/proc/hide
else
update_icon()
/mob/living/simple_mob/protean_blob/Login()
. = ..()
copy_from_prefs_vr(bellies = FALSE) //Load vore prefs
/mob/living/simple_mob/protean_blob/Destroy()
humanform = null
refactory = null
vore_organs = null
vore_selected = null
if(healing)
healing.expire()
return ..()
/mob/living/simple_mob/protean_blob/say_understands(var/mob/other, var/datum/language/speaking = null)
// The parent of this proc and its parent are SHAMS and should be rewritten, but I'm not up to it right now.
if(!speaking)
return TRUE // can understand common, they're like, a normal person thing
return ..()
/mob/living/simple_mob/protean_blob/speech_bubble_appearance()
return "synthetic"
/mob/living/simple_mob/protean_blob/get_available_emotes()
return global._robot_default_emotes.Copy()
/mob/living/simple_mob/protean_blob/init_vore()
return //Don't make a random belly, don't waste your time
/mob/living/simple_mob/protean_blob/isSynthetic()
return TRUE // yup
/mob/living/simple_mob/protean_blob/Stat()
..()
if(humanform)
humanform.species.Stat(humanform)
/mob/living/simple_mob/protean_blob/update_icon()
if(humanform)
//Still have a refactory
if(istype(refactory))
icon_living = "puddle2"
//Else missing one
else
icon_living = "puddle1"
//Not human-based
else
icon_living = "puddle0"
..()
/mob/living/simple_mob/protean_blob/updatehealth()
if(!humanform)
return ..()
//Set the max
maxHealth = humanform.getMaxHealth()*2 //HUMANS, and their 'double health', bleh.
//Set us to their health, but, human health ignores robolimbs so we do it 'the hard way'
human_brute = humanform.getActualBruteLoss()
human_burn = humanform.getActualFireLoss()
health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - human_brute - human_burn
//Alive, becoming dead
if((stat < DEAD) && (health <= 0))
death()
//Overhealth
if(health > getMaxHealth())
health = getMaxHealth()
//Grab any other interesting values
confused = humanform.confused
radiation = humanform.radiation
paralysis = humanform.paralysis
//Update our hud if we have one
if(healths)
if(stat != DEAD)
var/heal_per = (health / getMaxHealth()) * 100
switch(heal_per)
if(100 to INFINITY)
healths.icon_state = "health0"
if(80 to 100)
healths.icon_state = "health1"
if(60 to 80)
healths.icon_state = "health2"
if(40 to 60)
healths.icon_state = "health3"
if(20 to 40)
healths.icon_state = "health4"
if(0 to 20)
healths.icon_state = "health5"
else
healths.icon_state = "health6"
else
healths.icon_state = "health7"
// All the damage and such to the blob translates to the human
/mob/living/simple_mob/protean_blob/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1)
if(humanform)
return humanform.apply_effect(effect, effecttype, blocked, check_protection)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustBruteLoss(var/amount,var/include_robo)
amount *= 1.5
if(humanform)
return humanform.adjustBruteLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustFireLoss(var/amount,var/include_robo)
amount *= 1.5
if(humanform)
return humanform.adjustFireLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustToxLoss(amount)
if(humanform)
return humanform.adjustToxLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustOxyLoss(amount)
if(humanform)
return humanform.adjustOxyLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustHalLoss(amount)
if(humanform)
return humanform.adjustHalLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustCloneLoss(amount)
if(humanform)
return humanform.adjustCloneLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/emp_act(severity)
if(humanform)
return humanform.emp_act(severity)
else
return ..()
/mob/living/simple_mob/protean_blob/ex_act(severity)
if(humanform)
return humanform.ex_act(severity)
else
return ..()
/mob/living/simple_mob/protean_blob/rad_act(severity)
if(humanform)
return humanform.ex_act(severity)
else
return ..()
/mob/living/simple_mob/protean_blob/bullet_act(obj/item/projectile/P)
if(humanform)
return humanform.bullet_act(P)
else
return ..()
/mob/living/simple_mob/protean_blob/death(gibbed, deathmessage = "dissolves away, leaving only a few spare parts!")
if(humanform)
humanform.death(gibbed, deathmessage)
else
animate(src, alpha = 0, time = 2 SECONDS)
sleep(2 SECONDS)
if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart
qdel(src)
/mob/living/simple_mob/protean_blob/Life()
. = ..()
if(. && istype(refactory) && humanform)
if(!healing && (human_brute || human_burn) && refactory.get_stored_material(MAT_STEEL) >= 100)
healing = humanform.add_modifier(/datum/modifier/protean/steel, origin = refactory)
else if(healing && !(human_brute || human_burn))
healing.expire()
healing = null
/mob/living/simple_mob/protean_blob/lay_down()
..()
if(resting)
animate(src,alpha = 40,time = 1 SECOND)
mouse_opacity = 0
plane = ABOVE_OBJ_PLANE
else
mouse_opacity = 1
icon_state = "wake"
animate(src,alpha = 255,time = 1 SECOND)
plane = MOB_PLANE
sleep(7)
update_icon()
//Potential glob noms
if(can_be_drop_pred) //Toggleable in vore panel
var/list/potentials = living_mobs(0)
if(potentials.len)
var/mob/living/target = pick(potentials)
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
if(target.buckled)
target.buckled.unbuckle_mob(target, force = TRUE)
target.forceMove(vore_selected)
to_chat(target,"<span class='warning'>\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!</span>")
/mob/living/simple_mob/protean_blob/attack_target(var/atom/A)
if(refactory && istype(A,/obj/item/stack/material))
var/obj/item/stack/material/S = A
var/substance = S.material.name
var allowed = FALSE
for(var/material in PROTEAN_EDIBLE_MATERIALS)
if(material == substance) allowed = TRUE
if(!allowed)
return
if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1))
visible_message("<b>[name]</b> gloms over some of \the [S], absorbing it.")
else
return ..()
/mob/living/simple_mob/protean_blob/attackby(var/obj/item/O, var/mob/user)
if(refactory && istype(O,/obj/item/stack/material))
var/obj/item/stack/material/S = O
var/substance = S.material.name
var allowed = FALSE
for(var/material in PROTEAN_EDIBLE_MATERIALS)
if(material == substance) allowed = TRUE
if(!allowed)
return
if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1))
visible_message("<b>[name]</b> gloms over some of \the [S], absorbing it.")
else
return ..()
/mob/living/simple_mob/protean_blob/MouseEntered(location,control,params)
if(resting)
return
..()
var/global/list/disallowed_protean_accessories = list(
/obj/item/clothing/accessory/holster,
/obj/item/clothing/accessory/storage,
/obj/item/clothing/accessory/armor
)
// Helpers - Unsafe, WILL perform change.
/mob/living/carbon/human/proc/nano_intoblob(force)
if(!force && !isturf(loc))
to_chat(src,"<span class='warning'>You can't change forms while inside something.</span>")
return
var/panel_was_up = FALSE
if(client?.statpanel == "Protean")
panel_was_up = TRUE
handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better.
remove_micros(src, src) //Living things don't fare well in roblobs.
if(buckled)
buckled.unbuckle_mob()
if(LAZYLEN(buckled_mobs))
for(var/buckledmob in buckled_mobs)
riding_datum.force_dismount(buckledmob)
if(pulledby)
pulledby.stop_pulling()
stop_pulling()
//Record where they should go
var/atom/creation_spot = drop_location()
//Create our new blob
var/mob/living/simple_mob/protean_blob/blob = new(creation_spot,src)
//Drop all our things
var/list/things_to_drop = contents.Copy()
var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing.
/* No for now, because insta-pepperspray or flash on unblob
if(l_hand && l_hand.w_class <= ITEMSIZE_SMALL) //Hands but only if small or smaller
things_to_not_drop += l_hand
if(r_hand && r_hand.w_class <= ITEMSIZE_SMALL)
things_to_not_drop += r_hand
*/
things_to_drop -= things_to_not_drop //Crunch the lists
things_to_drop -= organs //Mah armbs
things_to_drop -= internal_organs //Mah sqeedily spooch
for(var/obj/item/I in things_to_drop) //rip hoarders
if(I.protean_drop_whitelist)
continue
drop_from_inventory(I)
if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way
var/obj/item/clothing/uniform = w_uniform
if(LAZYLEN(uniform.accessories))
for(var/obj/item/clothing/accessory/A in uniform.accessories)
if(is_type_in_list(A, disallowed_protean_accessories))
uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages
//Size update
blob.transform = matrix()*size_multiplier
blob.size_multiplier = size_multiplier
if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled.
if(r_hand) blob.prev_right_hand = r_hand
//Put our owner in it (don't transfer var/mind)
blob.ckey = ckey
blob.ooc_notes = ooc_notes
temporary_form = blob
//Mail them to nullspace
moveToNullspace()
//Message
blob.visible_message("<b>[src.name]</b> collapses into a gooey blob!")
//Duration of the to_puddle iconstate that the blob starts with
sleep(13)
blob.update_icon() //Will remove the collapse anim
//Transfer vore organs
blob.vore_organs = vore_organs
blob.vore_selected = vore_selected
for(var/obj/belly/B as anything in vore_organs)
B.forceMove(blob)
B.owner = blob
//We can still speak our languages!
blob.languages = languages.Copy()
//Flip them to the protean panel
if(panel_was_up)
client?.statpanel = "Protean"
//Return our blob in case someone wants it
return blob
//For some reason, there's no way to force drop all the mobs grabbed. This ought to fix that. And be moved elsewhere. Call with caution, doesn't handle cycles.
/proc/remove_micros(var/src, var/mob/root)
for(var/obj/item/I in src)
remove_micros(I, root) //Recursion. I'm honestly depending on there being no containment loop, but at the cost of performance that can be fixed too.
if(istype(I, /obj/item/weapon/holder))
root.remove_from_mob(I)
/mob/living/carbon/human/proc/nano_outofblob(var/mob/living/simple_mob/protean_blob/blob, force)
if(!istype(blob))
return
if(!force && !isturf(blob.loc))
to_chat(blob,"<span class='warning'>You can't change forms while inside something.</span>")
return
var/panel_was_up = FALSE
if(client?.statpanel == "Protean")
panel_was_up = TRUE
if(buckled)
buckled.unbuckle_mob()
if(LAZYLEN(buckled_mobs))
for(var/buckledmob in buckled_mobs)
riding_datum.force_dismount(buckledmob)
if(pulledby)
pulledby.stop_pulling()
stop_pulling()
//Stop healing if we are
if(blob.healing)
blob.healing.expire()
//Play the animation
blob.icon_state = "from_puddle"
//Message
blob.visible_message("<b>[src.name]</b> reshapes into a humanoid appearance!")
//Duration of above animation
sleep(8)
//Record where they should go
var/atom/reform_spot = blob.drop_location()
//Size update
resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE)
//Move them back where the blob was
forceMove(reform_spot)
//Put our owner in it (don't transfer var/mind)
ckey = blob.ckey
ooc_notes = blob.ooc_notes // Lets give the protean any updated notes from blob form.
temporary_form = null
//Transfer vore organs
vore_selected = blob.vore_selected
for(var/obj/belly/B as anything in blob.vore_organs)
B.forceMove(src)
B.owner = src
if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming.
if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand)
Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right.
//Get rid of friend blob
qdel(blob)
//Flip them to the protean panel
if(panel_was_up)
client?.statpanel = "Protean"
//Return ourselves in case someone wants it
return src
/mob/living/simple_mob/protean_blob/CanStumbleVore(mob/living/target)
if(target == humanform)
return FALSE
return ..()
/mob/living/simple_mob/protean_blob/CanStumbleVore(mob/living/target)
if(target == humanform)
return FALSE
return ..()
/mob/living/carbon/human/CanStumbleVore(mob/living/target)
if(istype(target, /mob/living/simple_mob/protean_blob))
var/mob/living/simple_mob/protean_blob/PB = target
if(PB.humanform == src)
return FALSE
return ..()
@@ -47,7 +47,7 @@
var/has_langs = list(LANGUAGE_GALCOM)// Text name of their language if they speak something other than galcom. They speak the first one.
//Movement things.
var/movement_cooldown = 5 // Lower is faster.
var/movement_cooldown = 1 //VOREStation Edit - 1 is slower than normal human speed // Lower is faster.
var/movement_sound = null // If set, will play this sound when it moves on its own will.
var/turn_sound = null // If set, plays the sound when the mob's dir changes in most cases.
var/movement_shake_radius = 0 // If set, moving will shake the camera of all living mobs within this radius slightly.
@@ -32,7 +32,7 @@ GLOBAL_VAR_INIT(jellyfish_count, 0)
health = 100
nutrition = 150
pass_flags = PASSTABLE
movement_cooldown = 3.25
movement_cooldown = 1
see_in_dark = 10
@@ -20,7 +20,7 @@
faction = "space mouse"
maxHealth = 20
health = 20
movement_cooldown = 1
movement_cooldown = -1
see_in_dark = 10
@@ -81,7 +81,7 @@
movement_cooldown = initial(movement_cooldown)
/mob/living/simple_mob/vore/alienanimals/dustjumper/perform_the_nom(mob/living/user, mob/living/prey, mob/living/pred, obj/belly/belly, delay)
. = ..()
movement_cooldown = 50
movement_cooldown = 10
/datum/ai_holder/simple_mob/melee/evasive/dustjumper
hostile = FALSE
@@ -21,7 +21,7 @@
maxHealth = 100000
health = 100000
movement_cooldown = 50
movement_cooldown = 10
see_in_dark = 10
@@ -155,7 +155,7 @@
restless = TRUE
hazard_pickup_chance *= 1.5
hazard_drop_chance *= 1.5
movement_cooldown = 1
movement_cooldown = -1
ai_holder.base_wander_delay = 2
ai_holder.wander_delay = 2
ai_holder.wander = TRUE
@@ -185,7 +185,7 @@
. = ..()
var/mob/living/simple_mob/vore/overmap/spacewhale/W = holder
if(stance == STANCE_FIGHT)
W.movement_cooldown = 0
W.movement_cooldown = -2
W.child_om_marker.glide_size = 0
if(stance == STANCE_IDLE)
W.hazard_pickup_chance = initial(W.hazard_pickup_chance)
@@ -25,7 +25,7 @@
faction = "space ghost"
maxHealth = 50
health = 50
movement_cooldown = 3.25
movement_cooldown = 0
see_in_dark = 10
@@ -139,7 +139,7 @@
faction = "space ghost"
maxHealth = 5
health = 5
movement_cooldown = 1
movement_cooldown = -1
see_in_dark = 10
alpha = 128
@@ -20,7 +20,7 @@
faction = "space turtle"
maxHealth = 1000
health = 1000
movement_cooldown = 20
movement_cooldown = 10
see_in_dark = 10
@@ -20,7 +20,7 @@
status_flags = CANPUSH
pass_flags = PASSTABLE
movement_cooldown = 5
movement_cooldown = 1.5
universal_understand = TRUE
can_be_antagged = TRUE
@@ -30,7 +30,7 @@
var/mob/living/carbon/human/host = null // The humanoid host for the brain worm.
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
var/roundstart = FALSE // If true, spawning won't try to pull a ghost.
var/antag = TRUE // If false, will avoid setting up objectives and events
@@ -39,7 +39,7 @@
var/true_name = null // String used when speaking among other worms.
var/controlling = FALSE // Used in human death ceck.
var/docile = FALSE // Sugar can stop borers from acting.
var/has_reproduced = FALSE
var/used_dominate // world.time when the dominate power was last used.
@@ -273,4 +273,4 @@
/decl/mob_organ_names/borer
hit_zones = list("head", "central segment", "tail segment")
hit_zones = list("head", "central segment", "tail segment")
@@ -73,7 +73,7 @@
maxHealth = 200
health = 200
pass_flags = PASSTABLE
movement_cooldown = 10
movement_cooldown = 3
movement_sound = 'sound/effects/spider_loop.ogg'
poison_resist = 0.5
@@ -5,7 +5,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
movement_cooldown = 4
movement_cooldown = 3
/mob/living/simple_mob/animal/giant_spider/frost/broodling/Initialize()
. = ..()
@@ -23,7 +23,7 @@
taser_kill = TRUE
base_attack_cooldown = 20
movement_cooldown = 5
movement_cooldown = -1
/mob/living/simple_mob/animal/giant_spider/electric/broodling/Initialize()
. = ..()
@@ -38,7 +38,7 @@
maxHealth = 40
health = 40
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/animal/giant_spider/hunter/broodling/Initialize()
. = ..()
@@ -53,7 +53,7 @@
maxHealth = 40
health = 40
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/animal/giant_spider/lurker/broodling/Initialize()
. = ..()
@@ -68,7 +68,7 @@
maxHealth = 60
health = 60
movement_cooldown = 8
movement_cooldown = 3
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/animal/giant_spider/nurse/broodling/Initialize()
@@ -84,7 +84,7 @@
maxHealth = 40
health = 40
movement_cooldown = 4
movement_cooldown = 3
/mob/living/simple_mob/animal/giant_spider/pepper/broodling/Initialize()
. = ..()
@@ -102,7 +102,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
movement_cooldown = 4
movement_cooldown = 1
/mob/living/simple_mob/animal/giant_spider/thermic/broodling/Initialize()
. = ..()
@@ -117,7 +117,7 @@
maxHealth = 40
health = 40
movement_cooldown = 4
movement_cooldown = 1
/mob/living/simple_mob/animal/giant_spider/tunneler/broodling/Initialize()
. = ..()
@@ -134,7 +134,7 @@
base_attack_cooldown = 20
movement_cooldown = 5
movement_cooldown = 1.5
/mob/living/simple_mob/animal/giant_spider/webslinger/broodling/Initialize()
. = ..()
@@ -152,7 +152,7 @@
melee_damage_lower = 10
melee_damage_upper = 20
movement_cooldown = 8
movement_cooldown = 3
/mob/living/simple_mob/animal/giant_spider/broodling/Initialize()
. = ..()
@@ -161,4 +161,4 @@
/mob/living/simple_mob/animal/giant_spider/broodling/death()
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
qdel(src)
qdel(src)
@@ -29,7 +29,7 @@
poison_per_bite = 3
poison_type = "chloralhydrate"
movement_cooldown = 5
movement_cooldown = 2
player_msg = "Upon dying, you will release a swarm of spiderlings or young hunter spiders.<br>\
If a spider emerges, you will be placed in control of it."
@@ -30,7 +30,7 @@
melee_damage_lower = 9
melee_damage_upper = 15
movement_cooldown = 0 // Hunters are FAST.
movement_cooldown = -2 // Hunters are FAST.
ai_holder_type = /datum/ai_holder/simple_mob/melee/hunter_spider
@@ -33,7 +33,7 @@
poison_per_bite = 5
movement_cooldown = 5
movement_cooldown = 1.5
melee_damage_lower = 10
melee_damage_upper = 10
@@ -33,7 +33,7 @@
maxHealth = 40
health = 40
movement_cooldown = 5 // A bit faster so that they can inject the eggs easier.
movement_cooldown = 1.5 // A bit faster so that they can inject the eggs easier.
melee_damage_lower = 5 // Doesn't do a lot of damage, since the goal is to make more spiders with egg attacks.
melee_damage_upper = 10
@@ -39,7 +39,7 @@
melee_damage_upper = 40
attack_armor_pen = 15
movement_cooldown = 15
movement_cooldown = 4
poison_chance = 30
poison_per_bite = 0.5
@@ -82,4 +82,3 @@
exploded = TRUE
explosion(src.loc, explosion_dev_range, explosion_heavy_range, explosion_light_range, explosion_flash_range)
return ..()
@@ -14,7 +14,7 @@
maxHealth = 1
health = 1
movement_cooldown = 2.5
movement_cooldown = -1
mob_size = MOB_MINISCULE
pass_flags = PASSTABLE
@@ -74,4 +74,4 @@
name = "bug remains"
desc = "Green squishy mess."
icon = 'icons/effects/effects.dmi'
icon_state = "greenshatter"
icon_state = "greenshatter"
@@ -10,6 +10,6 @@
icon_dead = "mouse_brown_dead"
kitchen_tag = "rodent"
movement_cooldown = 0.5
movement_cooldown = -2
body_color = "brown"
body_color = "brown"
@@ -15,7 +15,7 @@
melee_damage_lower = 1
melee_damage_upper = 3
movement_cooldown = 1.5
movement_cooldown = -1
mob_size = MOB_MINISCULE
pass_flags = PASSTABLE
@@ -18,7 +18,7 @@
melee_damage_lower = 3
melee_damage_upper = 3
movement_cooldown = 0
movement_cooldown = -1
hovering = TRUE // Birds can fly.
softfall = TRUE
parachuting = TRUE
@@ -90,4 +90,4 @@
icon_scale_y = 0.5
/decl/mob_organ_names/bird
hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing")
hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing")
@@ -35,7 +35,7 @@ var/list/_cat_default_emotes = list(
icon_state = "cat2"
item_state = "cat2"
movement_cooldown = 0.5 SECONDS
movement_cooldown = -1
meat_amount = 1
see_in_dark = 6 // Not sure if this actually works.
@@ -5,7 +5,7 @@
icon_state = "fennec"
item_state = "fennec"
movement_cooldown = 0.5 SECONDS
movement_cooldown = -1
see_in_dark = 6
response_help = "pets"
@@ -9,7 +9,7 @@
icon_rest = "fox2_rest"
icon = 'icons/mob/pets.dmi'
movement_cooldown = 0.5
movement_cooldown = -1
see_in_dark = 6
mob_size = MOB_SMALL //Foxes are not smaller than cats so bumping them up to small
@@ -243,4 +243,4 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
minbodytemp = 0
@@ -32,7 +32,7 @@
meat_amount = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
movement_cooldown = 0
movement_cooldown = -1
melee_damage_lower = 2
melee_damage_upper = 6
@@ -64,4 +64,3 @@
speak = list("Awrr?", "Aowrl!", "Worrl.")
emote_see = list("sniffs the air cautiously","looks around")
emote_hear = list("snuffles")
@@ -30,7 +30,7 @@
maxHealth = 50
health = 50
movement_cooldown = 0
movement_cooldown = -1
meat_amount = 4
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken
@@ -13,7 +13,7 @@
maxHealth = 20 //don't want Fluff to die on a missclick
health = 20
movement_cooldown = 5
movement_cooldown = 1.5
makes_dirt = 0
see_in_dark = 5
@@ -47,4 +47,4 @@
icon_state = "diyaab"
icon_living = "diyaab"
icon_dead = "diyaab_dead"
icon = 'icons/jungle.dmi'
icon = 'icons/jungle.dmi'
@@ -40,7 +40,7 @@
var/energy = 100
var/max_energy = 100
movement_cooldown = 0.5
movement_cooldown = -1
melee_damage_lower = 5
melee_damage_upper = 10
@@ -174,4 +174,4 @@
/decl/mob_organ_names/frostfly
hit_zones = list("head", "thorax", "abdomen", "left vestigal wing", "right vestigal wing", "left legs", "right legs")
hit_zones = list("head", "thorax", "abdomen", "left vestigal wing", "right vestigal wing", "left legs", "right legs")
@@ -38,7 +38,7 @@
maxHealth = 10
health = 10
movement_cooldown = -1
movement_cooldown = -2
hovering = TRUE
melee_damage_lower = 1
@@ -80,7 +80,7 @@
maxHealth = 30
health = 30
movement_cooldown = -2
movement_cooldown = -3
melee_damage_upper = 5
@@ -127,4 +127,4 @@
hostile = initial(hostile)
/decl/mob_organ_names/smallflying
hit_zones = list("body", "left wing", "right wing") //For flying things too tiny to be granular
hit_zones = list("body", "left wing", "right wing") //For flying things too tiny to be granular
@@ -149,7 +149,7 @@ Field studies suggest analytical abilities on par with some species of cepholapo
maxHealth = 150
health = 150
movement_cooldown = 2
movement_cooldown = -1
base_attack_cooldown = 1 SECOND
organ_names = /decl/mob_organ_names/grafadreka
@@ -47,7 +47,7 @@
"rad" = 0
)
movement_cooldown = 2
movement_cooldown = -1
mob_size = MOB_SMALL
pass_flags = PASSTABLE
@@ -73,4 +73,4 @@
emote_see = list("stomps the ground", "sniffs the air", "chews on something")
/decl/mob_organ_names/hare
hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "left head spike", "right head spike")
hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "left head spike", "right head spike")
@@ -39,7 +39,7 @@
maxHealth = 200
health = 200
movement_cooldown = 10
movement_cooldown = 4
movement_sound = 'sound/weapons/heavysmash.ogg'
movement_shake_radius = 5
@@ -39,7 +39,7 @@
universal_understand = 1
movement_cooldown = 1
movement_cooldown = -1
melee_damage_lower = 15
melee_damage_upper = 20
@@ -427,4 +427,4 @@
attack_speed_percent = 0.8
/decl/mob_organ_names/kururak
hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "far left tail", "far right tail", "left middle tail", "right middle tail")
hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "far left tail", "far right tail", "left middle tail", "right middle tail")
@@ -60,7 +60,7 @@
holder_type = /obj/item/weapon/holder/leech
movement_cooldown = 0
movement_cooldown = -2
aquatic_movement = -2
melee_damage_lower = 1
@@ -41,7 +41,7 @@
hovering = TRUE
movement_cooldown = 0.5
movement_cooldown = -1
melee_damage_lower = 5
melee_damage_upper = 10
@@ -144,4 +144,4 @@
return FALSE
/decl/mob_organ_names/moth
hit_zones = list("head", "thorax", "abdomen", "left forewing", "left hindwing", "right forewing", "right hindwing", "left foreleg", "right foreleg", "left hindleg", "right hindleg")
hit_zones = list("head", "thorax", "abdomen", "left forewing", "left hindwing", "right forewing", "right hindwing", "left foreleg", "right foreleg", "left hindleg", "right hindleg")
@@ -34,7 +34,7 @@
universal_understand = 1
movement_cooldown = 0
movement_cooldown = -1
melee_damage_lower = 5
melee_damage_upper = 15
@@ -31,7 +31,7 @@
maxHealth = 125
health = 125
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
movement_cooldown = 0.5 SECONDS
movement_cooldown = -1
heat_resist = -0.50
cold_resist = 0.75
melee_damage_lower = 15
@@ -44,7 +44,7 @@
)
heat_resist = -0.50
cold_resist = 0.75
movement_cooldown = 5
movement_cooldown = -1
minbodytemp = 175 //yw edit, Makes mobs survive cryogaia temps
melee_damage_lower = 6
melee_damage_upper = 14
@@ -110,6 +110,6 @@
ai_holder_type = /datum/ai_holder/simple_mob/passive
makes_dirt = 0
faction = "neutral"
/decl/mob_organ_names/shantak
hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "mane", "snout")
@@ -30,7 +30,7 @@
maxHealth = 60
health = 60
movement_cooldown = 0
movement_cooldown = -2
melee_damage_lower = 10
melee_damage_upper = 15
@@ -87,7 +87,7 @@
projectilesound = 'sound/weapons/pierce.ogg'
movement_cooldown = 10
movement_cooldown = 3
/mob/living/simple_mob/animal/space/alien/queen/empress
name = "alien empress"
@@ -12,7 +12,7 @@
maxHealth = 125
health = 125
movement_cooldown = 0.5 SECONDS
movement_cooldown = -1
melee_damage_lower = 15
melee_damage_upper = 35
@@ -46,4 +46,4 @@
set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards."
set category = "Abilities"
add_modifier(/datum/modifier/berserk, 30 SECONDS)
add_modifier(/datum/modifier/berserk, 30 SECONDS)
@@ -37,7 +37,7 @@
faction = "carp"
maxHealth = 25
health = 25
movement_cooldown = 0 // Carp go fast
movement_cooldown = -2
hovering = TRUE
response_help = "pets the"
@@ -86,7 +86,7 @@
maxHealth = 50
health = 50
movement_cooldown = 5 // Slower than the younger carp.
movement_cooldown = 1 // Slower than the younger carp.
mob_size = MOB_LARGE
pixel_x = -16
@@ -107,7 +107,7 @@
maxHealth = 230
health = 230
movement_cooldown = 10
movement_cooldown = 3
melee_damage_lower = 15 // About 20 DPS.
melee_damage_upper = 25
@@ -157,5 +157,3 @@
/mob/living/simple_mob/animal/space/carp/holographic/death()
..()
derez()
@@ -30,7 +30,7 @@ TODO: Make them light up and heat the air when exposed to oxygen.
faction = "virgo3b"
maxHealth = 100
health = 100
movement_cooldown = 12
movement_cooldown = 4
say_list_type = /datum/say_list/gaslamp
ai_holder_type = /datum/ai_holder/simple_mob/gaslamp
@@ -31,7 +31,7 @@
maxHealth = 15
health = 15
movement_cooldown = 8 // SLOW-ASS MUTHAFUCKA, I hope.
movement_cooldown = 3 // SLOW-ASS MUTHAFUCKA, I hope.
response_help = "pets"
response_disarm = "shoos"
@@ -12,7 +12,7 @@
maxHealth = 200
health = 200
movement_cooldown = 0
movement_cooldown = -1
faction = "worm"
@@ -372,4 +372,4 @@
if(previous)
previous.update_body_faction()
return 1
return 0
return 0
@@ -17,7 +17,7 @@
maxHealth = 30
melee_damage_lower = 2
melee_damage_upper = 4
movement_cooldown = 0
movement_cooldown = -2
hovering = TRUE
attacktext = list("slammed into")
@@ -13,7 +13,7 @@
icon_gib = "syndicate_gib"
faction = "syndicate"
movement_cooldown = 4
movement_cooldown = 1
status_flags = 0
@@ -362,7 +362,7 @@
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
movement_cooldown = 0
movement_cooldown = -1
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 100) // Same armor as their voidsuit
@@ -387,7 +387,7 @@
icon_state = "syndicaterangedpsace"
icon_living = "syndicaterangedpsace"
movement_cooldown = 0
movement_cooldown = -1
min_oxy = 0
max_oxy = 0
@@ -10,7 +10,7 @@
shock_resist = 1
poison_resist = 1
movement_cooldown = 0
movement_cooldown = -2
mob_bump_flag = 0 // If the illusion can't be swapped it will be obvious.
response_help = "pushes a hand through"
@@ -29,7 +29,7 @@
faction = "underdark"
maxHealth = 25
health = 25
movement_cooldown = 0
movement_cooldown = -1
movement_sound = 'sound/effects/servostep.ogg'
pass_flags = PASSTABLE
@@ -68,4 +68,4 @@
/mob/living/simple_mob/mechanical/corrupt_maint_drone/death()
..(null,"is smashed into pieces!")
qdel(src)
qdel(src)
@@ -29,7 +29,7 @@
maxHealth = 65
health = 40
movement_cooldown = 4
movement_cooldown = 1
response_help = "pets the"
response_disarm = "gently pushes aside the"
@@ -43,7 +43,7 @@
maxHealth = 50 // Shield has 150 for total of 200.
health = 50
movement_cooldown = 5
movement_cooldown = 1.5
hovering = TRUE
base_attack_cooldown = 5
@@ -102,7 +102,7 @@
// Difference is that it should not be faster than you.
/mob/living/simple_mob/mechanical/combat_drone/lesser
desc = "An automated combat drone with an aged apperance."
movement_cooldown = 10
movement_cooldown = 3
// This one is the type spawned by the random event.
@@ -111,4 +111,4 @@
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/event
/decl/mob_organ_names/combatdrone
hit_zones = list("chassis", "comms array", "sensor suite", "left weapons module", "right weapons module", "maneuvering thruster")
hit_zones = list("chassis", "comms array", "sensor suite", "left weapons module", "right weapons module", "maneuvering thruster")
@@ -29,7 +29,7 @@
maxHealth = 50
health = 50
movement_cooldown = 5
movement_cooldown = 1.5
hovering = TRUE
base_attack_cooldown = 2.5 SECONDS
@@ -179,4 +179,4 @@
name = "scavenger drone"
ignoreunarmed = FALSE
allowedtools = list(/obj/item/weapon/pickaxe)
projectiletype = /obj/item/projectile/energy/excavate/weak
projectiletype = /obj/item/projectile/energy/excavate/weak
@@ -4,7 +4,7 @@
icon_state = "white"
icon_living = "white"
attacktext = list("prodded")
movement_cooldown = 5
movement_cooldown = 1.5
melee_damage_lower = 2
melee_damage_upper = 2
@@ -88,4 +88,4 @@
break // Only one resupply per pulse.
/decl/mob_organ_names/hivebotsupport
hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "battle analytics mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "battle analytics mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
@@ -5,7 +5,7 @@
/mob/living/simple_mob/mechanical/hivebot/tank
attacktext = list("prodded")
projectiletype = null // To force the AI to melee.
movement_cooldown = 10
movement_cooldown = 3
melee_damage_lower = 3
melee_damage_upper = 3
attack_sound = 'sound/weapons/Egloves.ogg'
@@ -170,4 +170,4 @@
return (..(P))
/decl/mob_organ_names/hivebottank
hit_zones = list("central chassis", "armor plating", "component shielding", "positioning servo", "head", "sensor suite", "heavy manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
hit_zones = list("central chassis", "armor plating", "component shielding", "positioning servo", "head", "sensor suite", "heavy manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
@@ -5,7 +5,7 @@
name = "combat mecha"
desc = "An even bigger stompy mech!!"
movement_cooldown = 10
movement_cooldown = 3
melee_damage_lower = 30
melee_damage_upper = 30
melee_attack_delay = 1 SECOND
@@ -20,7 +20,7 @@
desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War."
catalogue_data = list(/datum/category_item/catalogue/technology/durand)
icon_state = "durand"
movement_cooldown = 10
movement_cooldown = 3
wreckage = /obj/structure/loot_pile/mecha/durand
maxHealth = 400
@@ -17,7 +17,7 @@
desc = "A lightweight, security exosuit. Popular among private and corporate security."
catalogue_data = list(/datum/category_item/catalogue/technology/gygax)
icon_state = "gygax"
movement_cooldown = 0
movement_cooldown = -1
wreckage = /obj/structure/loot_pile/mecha/gygax
maxHealth = 300
@@ -13,7 +13,7 @@
desc = "A heavy-duty, combat exosuit, developed after the Durand model. This is rarely found among civilian populations."
catalogue_data = list(/datum/category_item/catalogue/technology/marauder)
icon_state = "marauder"
movement_cooldown = 5
movement_cooldown = 1.5
wreckage = /obj/structure/loot_pile/mecha/marauder
maxHealth = 500
@@ -8,7 +8,7 @@
icon = 'icons/mecha/mecha.dmi'
faction = "syndicate"
movement_cooldown = 5
movement_cooldown = 1.5
movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files.
turn_sound = 'sound/mecha/mechturn.ogg'
maxHealth = 300
@@ -22,7 +22,7 @@
wreckage = /obj/structure/loot_pile/mecha/odysseus
maxHealth = 120
movement_cooldown = 0
movement_cooldown = -1
turn_sound = 'sound/mecha/mechmove01.ogg'
melee_damage_lower = 5
@@ -79,6 +79,3 @@
/obj/item/projectile/fake_syringe/poison
modifier_type_to_apply = /datum/modifier/poisoned
modifier_duration = 1 MINUTE // About 30 damage per stack over a minute.
@@ -4,7 +4,7 @@
name = "phazon"
desc = "An extremly enigmatic exosuit."
icon_state = "phazon"
movement_cooldown = 5
movement_cooldown = 1.5
wreckage = /obj/structure/loot_pile/mecha/phazon
maxHealth = 200
@@ -19,4 +19,3 @@
"rad" = 100
)
projectiletype = /obj/item/projectile/energy/declone
@@ -30,7 +30,7 @@
faction = "syndicate"
maxHealth = 15
health = 15
movement_cooldown = 0
movement_cooldown = -2
pass_flags = PASSTABLE
mob_swap_flags = 0
@@ -94,7 +94,7 @@
/mob/living/simple_mob/mechanical/viscerator/piercing
attack_armor_pen = 20
base_attack_cooldown = 10 // One attack a second or so.
movement_cooldown = 0.5
movement_cooldown = -1
/decl/mob_organ_names/viscerator
hit_zones = list("chassis", "rotor blades", "sensor array")
@@ -19,7 +19,7 @@
maxHealth = 15
health = 15
movement_cooldown = 0
movement_cooldown = -1
hovering = TRUE
mob_bump_flag = 0
@@ -44,4 +44,4 @@
return ..()
/decl/mob_organ_names/ward
hit_zones = list("chassis", "sensor array", "hover thruster")
hit_zones = list("chassis", "sensor array", "hover thruster")
@@ -18,7 +18,7 @@
attacktext = list("violently stabbed")
friendly = list("caresses")
organ_names = /decl/mob_organ_names/harvester
movement_cooldown = 0
movement_cooldown = -1
// environment_smash = 1 // Whatever this gets renamed to, Harvesters need to break things
@@ -41,4 +41,4 @@
)
/decl/mob_organ_names/harvester
hit_zones = list("cephalothorax", "eye", "carapace", "energy crystal", "mandible")
hit_zones = list("cephalothorax", "eye", "carapace", "energy crystal", "mandible")
@@ -23,7 +23,7 @@
mob_size = MOB_HUGE
movement_cooldown = 6 //Not super fast, but it might catch up to someone in armor who got punched once or twice.
movement_cooldown = 2 //Not super fast, but it might catch up to someone in armor who got punched once or twice.
// environment_smash = 2 // Whatever this gets renamed to, Juggernauts need to break things
@@ -145,4 +145,4 @@
return (..(P))
/decl/mob_organ_names/juggernaut
hit_zones = list("body", "left pauldron", "right pauldron", "left arm", "right arm", "eye", "head", "crystaline spike")
hit_zones = list("body", "left pauldron", "right pauldron", "left arm", "right arm", "eye", "head", "crystaline spike")
@@ -20,7 +20,7 @@
attacktext = list("slashed")
friendly = list("pinches")
organ_names = /decl/mob_organ_names/wraith
movement_cooldown = 0
movement_cooldown = -1
attack_sound = 'sound/weapons/rapidslice.ogg'
construct_spells = list(/spell/targeted/ethereal_jaunt/shift,
/spell/targeted/ambush_mode
@@ -34,4 +34,4 @@
L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
/decl/mob_organ_names/wraith
hit_zones = list("body", "eye", "crystaline spike", "left claw", "right claw")
hit_zones = list("body", "eye", "crystaline spike", "left claw", "right claw")
@@ -20,7 +20,7 @@
default_pixel_y = -10 // To prevent resetting above var.
maxHealth = 300
movement_cooldown = 10
movement_cooldown = -3
melee_attack_delay = 0.5 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/ranged/pointblank
@@ -93,4 +93,3 @@
if(L.has_AI()) // Other AIs should react to hostile auras.
L.ai_holder.react_to_attack(src)
@@ -33,7 +33,7 @@ var/list/_slime_default_emotes = list(
faction = "slime" // Note that slimes are hostile to other slimes of different color regardless of faction (unless Unified).
maxHealth = 150
movement_cooldown = 0
movement_cooldown = -1
pass_flags = PASSTABLE
makes_dirt = FALSE // Goop
mob_class = MOB_CLASS_SLIME
@@ -474,7 +474,7 @@
melee_damage_lower = 10
melee_damage_upper = 30
movement_cooldown = 0 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future.
movement_cooldown = -1 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future.
slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/dark_blue,
@@ -490,7 +490,7 @@
color = "#FF3333"
slime_color = "red"
coretype = /obj/item/slime_extract/red
movement_cooldown = 0 // See above.
movement_cooldown = -1 // See above.
untamable = TRUE // Will enrage if disciplined.
description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk."
@@ -11,7 +11,7 @@
response_disarm = "gently pushes aside"
response_harm = "hits"
movement_cooldown = 5
movement_cooldown = 1.5
// speed = 5
maxHealth = 25
health = 25
@@ -56,7 +56,7 @@
icon_state = "dave1"
icon_living = "dave1"
icon_dead = "dave_dead"
movement_cooldown = 300
movement_cooldown = 100
maxHealth = 1500
health = 1500
@@ -93,4 +93,4 @@
/mob/living/simple_mob/animal/passive/mimepet/attack_hand(mob/living/user as mob)
if(user.a_intent == I_DISARM)
icon_state = pick("dave1", "dave2", "dave3", "dave5" , "dave6" , "dave7" , "dave8" , "dave9" , "dave10")
.=..()
.=..()
@@ -115,7 +115,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/aggressive/corrupthound/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -76,7 +76,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/aggressive/deathclaw/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -15,7 +15,7 @@
faction = "demon"
maxHealth = 30
health = 30
movement_cooldown = 0
movement_cooldown = -2
see_in_dark = 10
seedarkness = FALSE
@@ -96,4 +96,4 @@
else
return ..()
*/
*/
@@ -13,7 +13,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
movement_cooldown = 4
movement_cooldown = 0.5
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 12
@@ -122,7 +122,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/aggressive/dragon/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -103,7 +103,7 @@
mob_bump_flag = HEAVY
grab_resist = 100
mob_class = MOB_CLASS_HUMANOID
movement_cooldown = 1
movement_cooldown = -1
melee_miss_chance = 10
old_x = -32
@@ -28,7 +28,7 @@
icon_state = "frog"
icon = 'icons/mob/vore.dmi'
movement_cooldown = 4 //fast as fucc boie.
movement_cooldown = 0.5 //fast as fucc boie.
can_be_drop_pred = 1 //They can tongue vore.
meat_amount = 4
@@ -24,7 +24,7 @@
response_help = "pets"
response_disarm = "shoves"
response_harm = "smacks"
movement_cooldown = 2
movement_cooldown = -1
harm_intent_damage = 10
melee_damage_lower = 10
melee_damage_upper = 20
@@ -101,7 +101,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 1.5
movement_cooldown = -1.5
/mob/living/simple_mob/vore/greatwolf/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -11,7 +11,7 @@
maxHealth = 200
health = 200
movement_cooldown = 5
movement_cooldown = 1.5
see_in_dark = 3
armor = list(
@@ -74,7 +74,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/hippo/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -85,4 +85,4 @@
/datum/say_list/hippo
speak = list("UUUUUUH")
emote_hear = list("grunts","groans", "roars", "snorts")
emote_see = list("shakes its head")
emote_see = list("shakes its head")
@@ -12,7 +12,7 @@
maxHealth = 60
health = 60
movement_cooldown = 1.5 //horses are fast mkay.
movement_cooldown = -2 //horses are fast mkay.
see_in_dark = 6
response_help = "pets"
@@ -74,7 +74,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 1.5
movement_cooldown = -2
/mob/living/simple_mob/vore/horse/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -22,7 +22,7 @@
response_help = "pats"
response_disarm = "shoves"
response_harm = "bops"
movement_cooldown = 2
movement_cooldown = -1
maxHealth = 1500
attacktext = list("chomped")
see_in_dark = 8
@@ -74,7 +74,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 2
movement_cooldown = -1
/mob/living/simple_mob/vore/leopardmander/Initialize()
..()
@@ -83,7 +83,7 @@
maxHealth = 125
health = 125
movement_cooldown = 7
movement_cooldown = 3
response_help = "touches"
response_disarm = "pushes"
@@ -215,7 +215,7 @@
pixel_x = -16
pixel_y = 0
movement_cooldown = 10
movement_cooldown = 4
movement_sound = 'sound/weapons/heavysmash.ogg'
movement_shake_radius = 5
@@ -376,4 +376,4 @@
// icon_living = ""
// icon_dead = "_dead"
// icon_gib = "generic_gib"
// vis_height = 64
// vis_height = 64
@@ -215,7 +215,7 @@
pixel_x = -16
pixel_y = 0
movement_cooldown = 10
movement_cooldown = 4
movement_sound = 'sound/weapons/heavysmash.ogg'
movement_shake_radius = 5
@@ -362,4 +362,4 @@
icon_living = "honkling"
icon_dead = "honkling_dead"
icon_gib = "generic_gib"
vis_height = 32
vis_height = 32
@@ -40,7 +40,7 @@
melee_damage_lower = 1
melee_damage_upper = 3 //low damage, they prefer to flee
movement_cooldown = 8
movement_cooldown = 3.5
meat_type = /obj/item/weapon/ore/coal
@@ -98,7 +98,7 @@
icon_living = "lavagrub"
icon_dead = "lavagrub-dead"
movement_cooldown = 5
movement_cooldown = 2
maxHealth = 75 //lavagrubs are really hardy
health = 75
vore_pounce_chance = 80 // Full-grown grubs should pounce. More homf opportunities if you're dumb enough to poke it.
@@ -197,4 +197,4 @@
return
.=..()
var/obj/belly/B = vore_selected
B.belly_fullscreen_color = "#cf741e" // CHOMPedit - Belly Fullscreen
B.belly_fullscreen_color = "#cf741e" // CHOMPedit - Belly Fullscreen
@@ -325,7 +325,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/otie/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -25,7 +25,7 @@
faction = "pakkun"
movement_cooldown = 6
movement_cooldown = 2
can_be_drop_pred = 1 //They can tongue vore.
meat_amount = 5
@@ -13,7 +13,7 @@
faction = "panther"
maxHealth = 200
health = 200
movement_cooldown = 4
movement_cooldown = 0.5
see_in_dark = 8
meat_amount = 8
@@ -63,7 +63,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/aggressive/panther/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -27,7 +27,7 @@
melee_damage_upper = 3
attacktext = list("nipped")
movement_cooldown = 3
movement_cooldown = 0
say_list_type = /datum/say_list/rabbit
ai_holder_type = /datum/ai_holder/simple_mob/passive
@@ -169,7 +169,7 @@
melee_damage_upper = 3
attacktext = list("nipped")
movement_cooldown = 0.5 // very fast bunbun.
movement_cooldown = -2 // very fast bunbun.
vore_bump_chance = 10
vore_pounce_chance = 100
@@ -223,7 +223,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
movement_cooldown = 0
/mob/living/simple_mob/vore/aggressive/rat/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -38,7 +38,7 @@
health = 90
see_in_dark = 8
movement_cooldown = 3
movement_cooldown = 0
melee_damage_lower = 6
melee_damage_upper = 12
@@ -13,7 +13,7 @@
maxHealth = 200
health = 200
movement_cooldown = 2
movement_cooldown = -1.5
see_in_dark = 10 //SHADEkin
has_hands = TRUE //Pawbs
seedarkness = FALSE //SHAAAADEkin
@@ -50,7 +50,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 1.5
movement_cooldown = -1
/mob/living/simple_mob/vore/sheep/MouseDrop_T(mob/living/M, mob/living/user)
return
@@ -119,4 +119,4 @@
else
icon_living = "sheep_bald"
return ..()
*/
*/
@@ -18,7 +18,7 @@
faction = "dog"
maxHealth = 600
health = 600
movement_cooldown = 1
movement_cooldown = -1
response_help = "pets"
response_disarm = "rudely paps"
@@ -207,7 +207,7 @@
/mob/living/simple_mob/vore/woof/hostile/melee
movement_cooldown = 0
movement_cooldown = -2
ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile
@@ -304,12 +304,12 @@
/mob/living/simple_mob/vore/woof/hostile/aweful/melee
movement_cooldown = 0
movement_cooldown = -2
ai_holder_type = /datum/ai_holder/simple_mob/woof/hostile
/mob/living/simple_mob/vore/woof/hostile/aweful/ranged
movement_cooldown = 0
movement_cooldown = -2
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/woof
@@ -40,7 +40,7 @@ var/global/list/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawst
melee_damage_lower = 1
melee_damage_upper = 3 //low damage, but poison and stuns are strong
movement_cooldown = 8
movement_cooldown = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
meat_amount = 6
@@ -11,7 +11,7 @@ var/global/list/grub_machine_overlays = list()
health = 5
maxHealth = 5
movement_cooldown = 3
movement_cooldown = 0
melee_damage_lower = 1 // This is a tiny worm. It will nibble and thats about it.
melee_damage_upper = 1
@@ -12,7 +12,7 @@
faction = "panther"
maxHealth = 150
health = 150
movement_cooldown = 2
movement_cooldown = -1
response_help = "pats"
response_disarm = "gently pushes aside"
@@ -19,7 +19,7 @@
response_disarm = "bops"
response_harm = "hits"
movement_cooldown = 5
movement_cooldown = 1.5
harm_intent_damage = 5
melee_damage_lower = 5
@@ -66,7 +66,7 @@
health = 40
maxHealth = 40
movement_cooldown = 3
movement_cooldown = 0
harm_intent_damage = 5
melee_damage_lower = 10
@@ -122,7 +122,7 @@
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 2
movement_cooldown = -1
/mob/living/simple_mob/animal/wolf/direwolf/MouseDrop_T(mob/living/M, mob/living/user)
return

Some files were not shown because too many files have changed in this diff Show More