Merge pull request #5325 from Verkister/ridethesausage

Brings back oties and adds riding.
This commit is contained in:
Verkister
2019-06-13 14:25:39 +03:00
committed by GitHub
4 changed files with 69 additions and 217 deletions

View File

@@ -13,6 +13,7 @@
icon_dead = "badboi-dead"
icon_rest = "badboi_rest"
icon = 'icons/mob/vore64x32.dmi'
has_eye_glow = TRUE
faction = "corrupt"
@@ -92,44 +93,22 @@
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!")
.=..()
resting = 0
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()
. = ..()
if(!riding_datum)
riding_datum = new /datum/riding/simple_animal(src)
verbs |= /mob/living/simple_animal/proc/animal_mount
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
/mob/living/simple_mob/vore/aggressive/corrupthound/MouseDrop_T(mob/living/M, mob/living/user)
return
*/
/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_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!")

View File

@@ -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.
name = "otie"
desc = "The classic bioengineered longdog."
@@ -13,25 +8,9 @@
icon_dead = "otie-dead"
icon_rest = "otie_rest"
faction = "otie"
recruitable = 1
maxHealth = 150
health = 150
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_upper = 7 //Don't break my bones bro
response_help = "pets the"
@@ -52,9 +31,9 @@
buckle_lying = FALSE
mount_offset_y = 10
var/glowyeyes = FALSE
var/image/eye_layer = null
var/eyetype
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/otie
say_list_type = /datum/say_list/otie
var/mob/living/carbon/human/friend
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!
@@ -71,14 +50,12 @@
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."
tt_desc = "Otus phoronis"
icon_state = "siftusian"
icon_living = "siftusian"
icon_dead = "siftusian-dead"
icon_rest = "siftusian_rest"
icon_state = "photie"
icon_living = "photie"
icon_dead = "photie-dead"
icon_rest = "photie_rest"
faction = "virgo3b"
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.
min_oxy = 0
max_oxy = 0
@@ -88,8 +65,7 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
glowyeyes = TRUE
eyetype = "photie"
has_eye_glow = TRUE
/mob/living/simple_mob/otie/red
name = "feral red otie"
@@ -101,8 +77,6 @@
icon_rest = "hotie_rest"
faction = "cult"
tame_chance = 20
melee_damage_lower = 5
melee_damage_upper = 12
// Lazy way of making sure this otie survives outside.
min_oxy = 0
max_oxy = 0
@@ -112,8 +86,8 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
glowyeyes = TRUE
eyetype = "hotie"
maxbodytemp = 1000
has_eye_glow = TRUE
/mob/living/simple_mob/otie/red/friendly //gets the pet2tame feature and doesn't kill you right away
name = "red otie"
@@ -143,7 +117,7 @@
icon_state = "pcotie"
icon_living = "pcotie"
icon_rest = "pcotie_rest"
icon_dead = "siftusian-dead"
icon_dead = "photie-dead"
min_oxy = 0
max_oxy = 0
min_tox = 0
@@ -152,8 +126,7 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
glowyeyes = TRUE
eyetype = "photie"
has_eye_glow = TRUE
/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"
@@ -166,8 +139,7 @@
maxHealth = 200 //armored or something
health = 200
tamed = 1
glowyeyes = TRUE
eyetype = "sotie"
has_eye_glow = TRUE
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.
@@ -176,14 +148,12 @@
/mob/living/simple_mob/otie/security/phoron
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"
icon_state = "sifguard"
icon_living = "sifguard"
icon_rest = "sifguard_rest"
icon_dead = "sifguard-dead"
melee_damage_lower = 5
melee_damage_upper = 12
icon_state = "secphotie"
icon_living = "secphotie"
icon_rest = "secphotie_rest"
icon_dead = "secphotie-dead"
min_oxy = 0
max_oxy = 0
min_tox = 0
@@ -192,48 +162,22 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
glowyeyes = TRUE
eyetype = "sotie"
/mob/living/simple_mob/otie/PunchTarget()
if(istype(target_mob,/mob/living/simple_mob/animal/passive/mouse))
return EatTarget()
else ..()
/mob/living/simple_mob/otie/Found(var/atom/found_atom)
if(!SA_attackable(found_atom))
return null
if(istype(found_atom,/mob/living/simple_mob/animal/passive/mouse))
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/security/phoron/red
name = "red guard otie"
desc = "An ominous looking version of the VARMAcorp trained snowflake guard dogs."
tt_desc = "Otus infernalis"
icon_state = "sechotie"
icon_living = "sechotie"
icon_rest = "sechotie_rest"
icon_dead = "sechotie-dead"
maxbodytemp = 1000
/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))
qdel(O)
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
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>")
@@ -258,80 +202,12 @@
return 0
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)
if(ishuman(T))
var/mob/living/carbon/human/H = T
return H.get_id_name("unidentified person")
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
/mob/living/simple_mob/otie/attack_hand(mob/living/carbon/human/M as mob)
@@ -340,12 +216,13 @@
if(I_HELP)
if(health > 0)
M.visible_message("<span class='notice'>[M] [response_help] \the [src].</span>")
if(ai_inactive)
return
LoseTarget()
handle_stance(STANCE_IDLE)
if(has_AI())
var/datum/ai_holder/AI = ai_holder
AI.set_stance(STANCE_IDLE)
if(prob(tame_chance))
AI.hostile = FALSE
friend = M
AI.set_follow(friend)
if(tamed != 1)
tamed = 1
faction = M.faction
@@ -353,10 +230,11 @@
if(I_GRAB)
if(health > 0)
if(ai_inactive)
return
if(has_AI())
var/datum/ai_holder/AI = ai_holder
audible_emote("growls disapprovingly at [M].")
if(M == friend)
AI.lose_follow()
friend = null
return
else
@@ -365,36 +243,30 @@
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!")
.=..()
resting = 0
icon_state = icon_dead
/mob/living/simple_animal/otie/Login()
/mob/living/simple_mob/otie/Login()
. = ..()
if(!riding_datum)
riding_datum = new /datum/riding/simple_animal(src)
verbs |= /mob/living/simple_animal/proc/animal_mount
riding_datum = new /datum/riding/simple_mob(src)
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
/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

View File

@@ -2447,6 +2447,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\mimic.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\otie.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\redpanda.dm"