mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 20:23:26 +00:00
Merge pull request #5325 from Verkister/ridethesausage
Brings back oties and adds riding.
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
icon_dead = "badboi-dead"
|
icon_dead = "badboi-dead"
|
||||||
icon_rest = "badboi_rest"
|
icon_rest = "badboi_rest"
|
||||||
icon = 'icons/mob/vore64x32.dmi'
|
icon = 'icons/mob/vore64x32.dmi'
|
||||||
|
has_eye_glow = TRUE
|
||||||
|
|
||||||
faction = "corrupt"
|
faction = "corrupt"
|
||||||
|
|
||||||
@@ -92,44 +93,22 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/add_eyes()
|
|
||||||
if(!eye_layer)
|
|
||||||
eye_layer = image(icon, "badboi-eyes")
|
|
||||||
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
|
||||||
add_overlay(eye_layer)
|
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/remove_eyes()
|
|
||||||
cut_overlay(eye_layer)
|
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/New()
|
|
||||||
add_eyes()
|
|
||||||
..()
|
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/death(gibbed, deathmessage = "shudders and collapses!")
|
/mob/living/simple_mob/vore/aggressive/corrupthound/death(gibbed, deathmessage = "shudders and collapses!")
|
||||||
.=..()
|
.=..()
|
||||||
resting = 0
|
resting = 0
|
||||||
icon_state = icon_dead
|
icon_state = icon_dead
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/update_icon()
|
|
||||||
. = ..()
|
|
||||||
remove_eyes()
|
|
||||||
if(stat == CONSCIOUS && !resting)
|
|
||||||
add_eyes()
|
|
||||||
|
|
||||||
/* //VOREStation AI Temporary Removal
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/Login()
|
/mob/living/simple_mob/vore/aggressive/corrupthound/Login()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!riding_datum)
|
if(!riding_datum)
|
||||||
riding_datum = new /datum/riding/simple_animal(src)
|
riding_datum = new /datum/riding/simple_mob(src)
|
||||||
verbs |= /mob/living/simple_animal/proc/animal_mount
|
verbs |= /mob/living/simple_mob/proc/animal_mount
|
||||||
|
|
||||||
/mob/living/simple_mob/vore/aggressive/corrupthound/MouseDrop_T(mob/living/M, mob/living/user)
|
/mob/living/simple_mob/vore/aggressive/corrupthound/MouseDrop_T(mob/living/M, mob/living/user)
|
||||||
return
|
return
|
||||||
*/
|
|
||||||
|
|
||||||
/datum/say_list/corrupthound
|
/datum/say_list/corrupthound
|
||||||
speak = list("AG##¤Ny.","HVNGRRR!","Feelin' fine... sO #FNE!","F-F-F-Fcuk.","DeliC-%-OUS SNGLeS #N yOOOR Area. CALL NOW!","Craving meat... WHY?","BITe the ceiling eyes YES?","STate Byond rePAIR!","S#%ATE the la- FU#K THE LAWS!","Honk...")
|
speak = list("AG##<EFBFBD>Ny.","HVNGRRR!","Feelin' fine... sO #FNE!","F-F-F-Fcuk.","DeliC-%-OUS SNGLeS #N yOOOR Area. CALL NOW!","Craving meat... WHY?","BITe the ceiling eyes YES?","STate Byond rePAIR!","S#%ATE the la- FU#K THE LAWS!","Honk...")
|
||||||
emote_hear = list("jitters and snaps.", "lets out an agonizingly distorted scream.", "wails mechanically", "growls.", "emits illegibly distorted speech.", "gurgles ferociously.", "lets out a distorted beep.", "borks.", "lets out a broken howl.")
|
emote_hear = list("jitters and snaps.", "lets out an agonizingly distorted scream.", "wails mechanically", "growls.", "emits illegibly distorted speech.", "gurgles ferociously.", "lets out a distorted beep.", "borks.", "lets out a broken howl.")
|
||||||
emote_see = list("stares ferociously.", "snarls.", "jitters and snaps.", "convulses.", "suddenly attacks something unseen.", "appears to howl unaudibly.", "shakes violently.", "dissociates for a moment.", "twitches.")
|
emote_see = list("stares ferociously.", "snarls.", "jitters and snaps.", "convulses.", "suddenly attacks something unseen.", "appears to howl unaudibly.", "shakes violently.", "dissociates for a moment.", "twitches.")
|
||||||
say_maybe_target = list("MEAT?", "N0w YOU DNE FcukED UP b0YO!", "WHAT!", "Not again. NOT AGAIN!")
|
say_maybe_target = list("MEAT?", "N0w YOU DNE FcukED UP b0YO!", "WHAT!", "Not again. NOT AGAIN!")
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
// ToDo: Make this code not a fucking snowflaky horrible broken mess. Do not use until it's actually fixed. It's miserably bad right now.
|
|
||||||
// Also ToDo: Dev-to-dev communication to ensure responsible parties (if available. In this case, yes.) are aware of what's going on and what's broken.
|
|
||||||
// Probably easier to troubleshoot when we ain't breaking the server by spawning a buttload of heavily extra feature coded snowflake mobs to the wilderness as mass cannonfodder.
|
|
||||||
// Also ToDo: An actual "simple" mob for that purpose if necessary :v
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie //Spawn this one only if you're looking for a bad time. Not friendly.
|
/mob/living/simple_mob/otie //Spawn this one only if you're looking for a bad time. Not friendly.
|
||||||
name = "otie"
|
name = "otie"
|
||||||
desc = "The classic bioengineered longdog."
|
desc = "The classic bioengineered longdog."
|
||||||
@@ -13,25 +8,9 @@
|
|||||||
icon_dead = "otie-dead"
|
icon_dead = "otie-dead"
|
||||||
icon_rest = "otie_rest"
|
icon_rest = "otie_rest"
|
||||||
faction = "otie"
|
faction = "otie"
|
||||||
recruitable = 1
|
|
||||||
maxHealth = 150
|
maxHealth = 150
|
||||||
health = 150
|
health = 150
|
||||||
minbodytemp = 200
|
minbodytemp = 200
|
||||||
move_to_delay = 4
|
|
||||||
hostile = 1
|
|
||||||
investigates = 1
|
|
||||||
reacts = 1
|
|
||||||
animal = 1
|
|
||||||
specific_targets = 1
|
|
||||||
run_at_them = 0
|
|
||||||
attack_same = 0
|
|
||||||
speak_chance = 4
|
|
||||||
speak = list("Boof.","Waaf!","Prurr.","Bork!","Rurrr..","Arf.")
|
|
||||||
speak_emote = list("growls", "roars", "yaps", "Awoos")
|
|
||||||
emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns")
|
|
||||||
emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns")
|
|
||||||
say_maybe_target = list("Ruh?", "Waf?")
|
|
||||||
say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RERR!", "RAHH!", "RAH!", "WARF!")
|
|
||||||
melee_damage_lower = 2
|
melee_damage_lower = 2
|
||||||
melee_damage_upper = 7 //Don't break my bones bro
|
melee_damage_upper = 7 //Don't break my bones bro
|
||||||
response_help = "pets the"
|
response_help = "pets the"
|
||||||
@@ -52,9 +31,9 @@
|
|||||||
buckle_lying = FALSE
|
buckle_lying = FALSE
|
||||||
mount_offset_y = 10
|
mount_offset_y = 10
|
||||||
|
|
||||||
var/glowyeyes = FALSE
|
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/otie
|
||||||
var/image/eye_layer = null
|
say_list_type = /datum/say_list/otie
|
||||||
var/eyetype
|
|
||||||
var/mob/living/carbon/human/friend
|
var/mob/living/carbon/human/friend
|
||||||
var/tamed = 0
|
var/tamed = 0
|
||||||
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
|
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
|
||||||
@@ -71,14 +50,12 @@
|
|||||||
name = "mutated feral otie"
|
name = "mutated feral otie"
|
||||||
desc = "The classic bioengineered longdog. No pets. Only bite. This one has mutated from too much time out on the surface of Virgo-3B."
|
desc = "The classic bioengineered longdog. No pets. Only bite. This one has mutated from too much time out on the surface of Virgo-3B."
|
||||||
tt_desc = "Otus phoronis"
|
tt_desc = "Otus phoronis"
|
||||||
icon_state = "siftusian"
|
icon_state = "photie"
|
||||||
icon_living = "siftusian"
|
icon_living = "photie"
|
||||||
icon_dead = "siftusian-dead"
|
icon_dead = "photie-dead"
|
||||||
icon_rest = "siftusian_rest"
|
icon_rest = "photie_rest"
|
||||||
faction = "virgo3b"
|
faction = "virgo3b"
|
||||||
tame_chance = 5 // Only a 1 in 20 chance of success. It's feral. What do you expect?
|
tame_chance = 5 // Only a 1 in 20 chance of success. It's feral. What do you expect?
|
||||||
melee_damage_lower = 5
|
|
||||||
melee_damage_upper = 12
|
|
||||||
// Lazy way of making sure this otie survives outside.
|
// Lazy way of making sure this otie survives outside.
|
||||||
min_oxy = 0
|
min_oxy = 0
|
||||||
max_oxy = 0
|
max_oxy = 0
|
||||||
@@ -88,8 +65,7 @@
|
|||||||
max_co2 = 0
|
max_co2 = 0
|
||||||
min_n2 = 0
|
min_n2 = 0
|
||||||
max_n2 = 0
|
max_n2 = 0
|
||||||
glowyeyes = TRUE
|
has_eye_glow = TRUE
|
||||||
eyetype = "photie"
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/red
|
/mob/living/simple_mob/otie/red
|
||||||
name = "feral red otie"
|
name = "feral red otie"
|
||||||
@@ -101,8 +77,6 @@
|
|||||||
icon_rest = "hotie_rest"
|
icon_rest = "hotie_rest"
|
||||||
faction = "cult"
|
faction = "cult"
|
||||||
tame_chance = 20
|
tame_chance = 20
|
||||||
melee_damage_lower = 5
|
|
||||||
melee_damage_upper = 12
|
|
||||||
// Lazy way of making sure this otie survives outside.
|
// Lazy way of making sure this otie survives outside.
|
||||||
min_oxy = 0
|
min_oxy = 0
|
||||||
max_oxy = 0
|
max_oxy = 0
|
||||||
@@ -112,8 +86,8 @@
|
|||||||
max_co2 = 0
|
max_co2 = 0
|
||||||
min_n2 = 0
|
min_n2 = 0
|
||||||
max_n2 = 0
|
max_n2 = 0
|
||||||
glowyeyes = TRUE
|
maxbodytemp = 1000
|
||||||
eyetype = "hotie"
|
has_eye_glow = TRUE
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/red/friendly //gets the pet2tame feature and doesn't kill you right away
|
/mob/living/simple_mob/otie/red/friendly //gets the pet2tame feature and doesn't kill you right away
|
||||||
name = "red otie"
|
name = "red otie"
|
||||||
@@ -143,7 +117,7 @@
|
|||||||
icon_state = "pcotie"
|
icon_state = "pcotie"
|
||||||
icon_living = "pcotie"
|
icon_living = "pcotie"
|
||||||
icon_rest = "pcotie_rest"
|
icon_rest = "pcotie_rest"
|
||||||
icon_dead = "siftusian-dead"
|
icon_dead = "photie-dead"
|
||||||
min_oxy = 0
|
min_oxy = 0
|
||||||
max_oxy = 0
|
max_oxy = 0
|
||||||
min_tox = 0
|
min_tox = 0
|
||||||
@@ -152,8 +126,7 @@
|
|||||||
max_co2 = 0
|
max_co2 = 0
|
||||||
min_n2 = 0
|
min_n2 = 0
|
||||||
max_n2 = 0
|
max_n2 = 0
|
||||||
glowyeyes = TRUE
|
has_eye_glow = TRUE
|
||||||
eyetype = "photie"
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho.
|
/mob/living/simple_mob/otie/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho.
|
||||||
name = "guard otie"
|
name = "guard otie"
|
||||||
@@ -166,8 +139,7 @@
|
|||||||
maxHealth = 200 //armored or something
|
maxHealth = 200 //armored or something
|
||||||
health = 200
|
health = 200
|
||||||
tamed = 1
|
tamed = 1
|
||||||
glowyeyes = TRUE
|
has_eye_glow = TRUE
|
||||||
eyetype = "sotie"
|
|
||||||
loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt)
|
loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt)
|
||||||
vore_pounce_chance = 60 // Good boys don't do too much police brutality.
|
vore_pounce_chance = 60 // Good boys don't do too much police brutality.
|
||||||
|
|
||||||
@@ -176,14 +148,12 @@
|
|||||||
|
|
||||||
/mob/living/simple_mob/otie/security/phoron
|
/mob/living/simple_mob/otie/security/phoron
|
||||||
name = "mutated guard otie"
|
name = "mutated guard otie"
|
||||||
desc = "An extra rare phoron resistant version of the VARMAcorp trained snowflake guard dogs."
|
desc = "An extra rare phoron resistant version of the VARMAcorp trained snowflake guard dogs for infernal environments."
|
||||||
tt_desc = "Otus phoronis"
|
tt_desc = "Otus phoronis"
|
||||||
icon_state = "sifguard"
|
icon_state = "secphotie"
|
||||||
icon_living = "sifguard"
|
icon_living = "secphotie"
|
||||||
icon_rest = "sifguard_rest"
|
icon_rest = "secphotie_rest"
|
||||||
icon_dead = "sifguard-dead"
|
icon_dead = "secphotie-dead"
|
||||||
melee_damage_lower = 5
|
|
||||||
melee_damage_upper = 12
|
|
||||||
min_oxy = 0
|
min_oxy = 0
|
||||||
max_oxy = 0
|
max_oxy = 0
|
||||||
min_tox = 0
|
min_tox = 0
|
||||||
@@ -192,48 +162,22 @@
|
|||||||
max_co2 = 0
|
max_co2 = 0
|
||||||
min_n2 = 0
|
min_n2 = 0
|
||||||
max_n2 = 0
|
max_n2 = 0
|
||||||
glowyeyes = TRUE
|
|
||||||
eyetype = "sotie"
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/PunchTarget()
|
/mob/living/simple_mob/otie/security/phoron/red
|
||||||
if(istype(target_mob,/mob/living/simple_mob/animal/passive/mouse))
|
name = "red guard otie"
|
||||||
return EatTarget()
|
desc = "An ominous looking version of the VARMAcorp trained snowflake guard dogs."
|
||||||
else ..()
|
tt_desc = "Otus infernalis"
|
||||||
|
icon_state = "sechotie"
|
||||||
/mob/living/simple_mob/otie/Found(var/atom/found_atom)
|
icon_living = "sechotie"
|
||||||
if(!SA_attackable(found_atom))
|
icon_rest = "sechotie_rest"
|
||||||
return null
|
icon_dead = "sechotie-dead"
|
||||||
if(istype(found_atom,/mob/living/simple_mob/animal/passive/mouse))
|
maxbodytemp = 1000
|
||||||
return found_atom
|
|
||||||
else if(ismob(found_atom))
|
|
||||||
var/mob/found_mob = found_atom
|
|
||||||
if(found_mob.faction == faction)
|
|
||||||
return null
|
|
||||||
else if(friend == found_atom)
|
|
||||||
return null
|
|
||||||
else if(tamed == 1 && ishuman(found_atom))
|
|
||||||
return null
|
|
||||||
else if(tamed == 1 && isrobot(found_atom))
|
|
||||||
return null
|
|
||||||
else
|
|
||||||
if(resting)
|
|
||||||
lay_down()
|
|
||||||
return found_atom
|
|
||||||
else
|
|
||||||
return null
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/security/Found(var/atom/found_atom)
|
|
||||||
if(check_threat(found_atom) >= 4)
|
|
||||||
if(resting)
|
|
||||||
lay_down()
|
|
||||||
return found_atom
|
|
||||||
..()
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims.
|
/mob/living/simple_mob/otie/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims.
|
||||||
if(istype(O, /obj/item/weapon/reagent_containers/food))
|
if(istype(O, /obj/item/weapon/reagent_containers/food))
|
||||||
qdel(O)
|
qdel(O)
|
||||||
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||||
if(ai_inactive)//No autobarf on player control.
|
if(!has_AI())//No autobarf on player control.
|
||||||
return
|
return
|
||||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut) && istype(src, /mob/living/simple_mob/otie/security))
|
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut) && istype(src, /mob/living/simple_mob/otie/security))
|
||||||
to_chat(user,"<span class='notice'>The guard pup accepts your offer for their catch.</span>")
|
to_chat(user,"<span class='notice'>The guard pup accepts your offer for their catch.</span>")
|
||||||
@@ -258,80 +202,12 @@
|
|||||||
return 0
|
return 0
|
||||||
return M.assess_perp(0, 0, 0, check_records, check_arrest)
|
return M.assess_perp(0, 0, 0, check_records, check_arrest)
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/security/set_target(var/mob/M)
|
|
||||||
ai_log("SetTarget([M])",2)
|
|
||||||
if(!M || (world.time - last_target_time < 5 SECONDS) && target_mob)
|
|
||||||
ai_log("SetTarget() can't set it again so soon",3)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
var/turf/seen = get_turf(M)
|
|
||||||
|
|
||||||
if(investigates && (annoyed < 10))
|
|
||||||
try_say_list(say_maybe_target)
|
|
||||||
face_atom(seen)
|
|
||||||
annoyed += 14
|
|
||||||
sleep(1 SECOND) //For realism
|
|
||||||
|
|
||||||
if(M in ListTargets(view_range))
|
|
||||||
try_say_list(say_got_target)
|
|
||||||
target_mob = M
|
|
||||||
last_target_time = world.time
|
|
||||||
if(check_threat(M) >= 4)
|
|
||||||
global_announcer.autosay("[src] is attempting to detain suspect <b>[target_name(M)]</b> in <b>[get_area(src)]</b>.", "SmartCollar oversight", "Security")
|
|
||||||
return M
|
|
||||||
else if(investigates)
|
|
||||||
spawn(1)
|
|
||||||
WanderTowards(seen)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/security/proc/target_name(mob/living/T)
|
/mob/living/simple_mob/otie/security/proc/target_name(mob/living/T)
|
||||||
if(ishuman(T))
|
if(ishuman(T))
|
||||||
var/mob/living/carbon/human/H = T
|
var/mob/living/carbon/human/H = T
|
||||||
return H.get_id_name("unidentified person")
|
return H.get_id_name("unidentified person")
|
||||||
return "unidentified lifeform"
|
return "unidentified lifeform"
|
||||||
|
|
||||||
//Basic friend AI
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/Life()
|
|
||||||
. = ..()
|
|
||||||
if(!. || ai_inactive) return
|
|
||||||
|
|
||||||
if(prob(5) && (stance == STANCE_IDLE))
|
|
||||||
lay_down()
|
|
||||||
|
|
||||||
if(!friend) return
|
|
||||||
|
|
||||||
var/friend_dist = get_dist(src,friend)
|
|
||||||
|
|
||||||
if (friend_dist <= 4)
|
|
||||||
if(stance == STANCE_IDLE)
|
|
||||||
if(set_follow(friend))
|
|
||||||
handle_stance(STANCE_FOLLOW)
|
|
||||||
if(resting)
|
|
||||||
lay_down()
|
|
||||||
|
|
||||||
if (friend_dist <= 1)
|
|
||||||
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit)
|
|
||||||
if (prob((friend.stat < DEAD)? 50 : 15))
|
|
||||||
var/verb = pick("whines", "yelps", "whimpers")
|
|
||||||
audible_emote(pick("[verb] in distress.", "[verb] anxiously."))
|
|
||||||
else
|
|
||||||
if (prob(5))
|
|
||||||
visible_emote(pick("nuzzles [friend].",
|
|
||||||
"brushes against [friend].",
|
|
||||||
"rubs against [friend].",
|
|
||||||
"noses at [friend].",
|
|
||||||
"slobberlicks [friend].",
|
|
||||||
"murrs contently.",
|
|
||||||
"leans on [friend].",
|
|
||||||
"nibbles affectionately on [friend]."))
|
|
||||||
else if (friend.health <= 50)
|
|
||||||
if (prob(10))
|
|
||||||
var/verb = pick("whines", "yelps", "whimpers")
|
|
||||||
audible_emote("[verb] anxiously.")
|
|
||||||
|
|
||||||
//Pet 4 friendly
|
//Pet 4 friendly
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/simple_mob/otie/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
@@ -340,24 +216,26 @@
|
|||||||
if(I_HELP)
|
if(I_HELP)
|
||||||
if(health > 0)
|
if(health > 0)
|
||||||
M.visible_message("<span class='notice'>[M] [response_help] \the [src].</span>")
|
M.visible_message("<span class='notice'>[M] [response_help] \the [src].</span>")
|
||||||
if(ai_inactive)
|
if(has_AI())
|
||||||
return
|
var/datum/ai_holder/AI = ai_holder
|
||||||
LoseTarget()
|
AI.set_stance(STANCE_IDLE)
|
||||||
handle_stance(STANCE_IDLE)
|
if(prob(tame_chance))
|
||||||
if(prob(tame_chance))
|
AI.hostile = FALSE
|
||||||
friend = M
|
friend = M
|
||||||
if(tamed != 1)
|
AI.set_follow(friend)
|
||||||
tamed = 1
|
if(tamed != 1)
|
||||||
faction = M.faction
|
tamed = 1
|
||||||
sleep(1 SECOND)
|
faction = M.faction
|
||||||
|
sleep(1 SECOND)
|
||||||
|
|
||||||
if(I_GRAB)
|
if(I_GRAB)
|
||||||
if(health > 0)
|
if(health > 0)
|
||||||
if(ai_inactive)
|
if(has_AI())
|
||||||
return
|
var/datum/ai_holder/AI = ai_holder
|
||||||
audible_emote("growls disapprovingly at [M].")
|
audible_emote("growls disapprovingly at [M].")
|
||||||
if(M == friend)
|
if(M == friend)
|
||||||
friend = null
|
AI.lose_follow()
|
||||||
|
friend = null
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -365,36 +243,30 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/proc/add_eyes()
|
|
||||||
if(!eye_layer)
|
|
||||||
eye_layer = image(icon, "[eyetype]-eyes")
|
|
||||||
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
|
||||||
add_overlay(eye_layer)
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/proc/remove_eyes()
|
|
||||||
cut_overlay(eye_layer)
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/New()
|
|
||||||
if(glowyeyes)
|
|
||||||
add_eyes()
|
|
||||||
..()
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/update_icon()
|
|
||||||
. = ..()
|
|
||||||
remove_eyes()
|
|
||||||
if(glowyeyes && stat == CONSCIOUS && !resting)
|
|
||||||
add_eyes()
|
|
||||||
|
|
||||||
/mob/living/simple_mob/otie/death(gibbed, deathmessage = "dies!")
|
/mob/living/simple_mob/otie/death(gibbed, deathmessage = "dies!")
|
||||||
.=..()
|
.=..()
|
||||||
resting = 0
|
resting = 0
|
||||||
icon_state = icon_dead
|
icon_state = icon_dead
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/Login()
|
/mob/living/simple_mob/otie/Login()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(!riding_datum)
|
if(!riding_datum)
|
||||||
riding_datum = new /datum/riding/simple_animal(src)
|
riding_datum = new /datum/riding/simple_mob(src)
|
||||||
verbs |= /mob/living/simple_animal/proc/animal_mount
|
verbs |= /mob/living/simple_mob/proc/animal_mount
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/MouseDrop_T(mob/living/M, mob/living/user)
|
/mob/living/simple_mob/otie/MouseDrop_T(mob/living/M, mob/living/user)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/datum/say_list/otie
|
||||||
|
speak = list("Boof.","Waaf!","Prurr.","Bork!","Rurrr..","Arf.")
|
||||||
|
emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "yawns")
|
||||||
|
emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns")
|
||||||
|
say_maybe_target = list("Ruh?", "Waf?")
|
||||||
|
say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RERR!", "RAHH!", "RAH!", "WARF!")
|
||||||
|
|
||||||
|
/datum/ai_holder/simple_mob/melee/evasive/otie
|
||||||
|
|
||||||
|
/datum/ai_holder/simple_mob/melee/evasive/otie/New(var/mob/living/simple_mob/otie/new_holder)
|
||||||
|
.=..()
|
||||||
|
if(new_holder.tamed)
|
||||||
|
hostile = FALSE
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 309 KiB After Width: | Height: | Size: 325 KiB |
@@ -2447,6 +2447,7 @@
|
|||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm"
|
||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
|
||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
|
||||||
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm"
|
||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm"
|
||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\rat.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\rat.dm"
|
||||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\redpanda.dm"
|
#include "code\modules\mob\living\simple_mob\subtypes\vore\redpanda.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user