mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Merge pull request #2195 from Verkister/returnofthelongpup
Re-enables and fixes the CARGO EXCLUSIVE oties. Plus a couple new features! (Psst hey)
This commit is contained in:
@@ -60,11 +60,9 @@
|
|||||||
access = access_xenobiology
|
access = access_xenobiology
|
||||||
contraband = 1
|
contraband = 1
|
||||||
|
|
||||||
/* Removed until Otie code is unfucked.
|
|
||||||
/datum/supply_packs/sci/otie
|
/datum/supply_packs/sci/otie
|
||||||
name = "V.A.R.M.A.corp adoptable reject (Dangerous!)"
|
name = "VARMAcorp adoptable reject (Dangerous!)"
|
||||||
cost = 100
|
cost = 100
|
||||||
containertype = /obj/structure/largecrate/animal/otie
|
containertype = /obj/structure/largecrate/animal/otie
|
||||||
containername = "V.A.R.M.A.corp adoptable reject (Dangerous!)"
|
containername = "VARMAcorp adoptable reject (Dangerous!)"
|
||||||
access = access_xenobiology
|
access = access_xenobiology
|
||||||
*/
|
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
/* Removed until Otie code is unfucked.
|
|
||||||
/datum/supply_packs/security/guardbeast
|
/datum/supply_packs/security/guardbeast
|
||||||
name = "V.A.R.M.A.corp autoNOMous security solution"
|
name = "VARMAcorp autoNOMous security solution"
|
||||||
cost = 150
|
cost = 150
|
||||||
containertype = /obj/structure/largecrate/animal/guardbeast
|
containertype = /obj/structure/largecrate/animal/guardbeast
|
||||||
containername = "V.A.R.M.A.corp autoNOMous security solution crate"
|
containername = "VARMAcorp autoNOMous security solution crate"
|
||||||
access = list(
|
access = list(
|
||||||
access_security,
|
access_security,
|
||||||
access_xenobiology)
|
access_xenobiology)
|
||||||
*/
|
|
||||||
|
|
||||||
/datum/supply_packs/security/biosuit
|
/datum/supply_packs/security/biosuit
|
||||||
contains = list(
|
contains = list(
|
||||||
|
|||||||
@@ -69,19 +69,19 @@
|
|||||||
/mob/living/simple_animal/hostile/alien,
|
/mob/living/simple_animal/hostile/alien,
|
||||||
/mob/living/simple_animal/hostile/alien/drone,
|
/mob/living/simple_animal/hostile/alien/drone,
|
||||||
/mob/living/simple_animal/hostile/alien/sentinel,
|
/mob/living/simple_animal/hostile/alien/sentinel,
|
||||||
/mob/living/simple_animal/hostile/alien/queen)
|
/mob/living/simple_animal/hostile/alien/queen,
|
||||||
|
/mob/living/simple_animal/otie/feral)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/* // Removed until Otie code is unfucked.
|
|
||||||
/obj/structure/largecrate/animal/guardbeast
|
/obj/structure/largecrate/animal/guardbeast
|
||||||
name = "V.A.R.M.A.corp autoNOMous security solution"
|
name = "VARMAcorp autoNOMous security solution"
|
||||||
desc = "The V.A.R.M.A.corp bioengineering division flagship product on trained optimal snowflake guard dogs."
|
desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs."
|
||||||
icon = 'icons/obj/storage_vr.dmi'
|
icon = 'icons/obj/storage_vr.dmi'
|
||||||
icon_state = "sotiecrate"
|
icon_state = "sotiecrate"
|
||||||
held_type = /mob/living/simple_animal/otie/friendly/security
|
held_type = /mob/living/simple_animal/otie/friendly/security
|
||||||
|
|
||||||
/obj/structure/largecrate/animal/otie
|
/obj/structure/largecrate/animal/otie
|
||||||
name = "V.A.R.M.A.corp adoptable reject (Dangerous!)"
|
name = "VARMAcorp adoptable reject (Dangerous!)"
|
||||||
desc = "A warning on the side says the creature inside was returned to the supplier after injuring or devouring several unlucky members of the previous adoption family. It was given a second chance with the next customer. Godspeed and good luck with your new pet!"
|
desc = "A warning on the side says the creature inside was returned to the supplier after injuring or devouring several unlucky members of the previous adoption family. It was given a second chance with the next customer. Godspeed and good luck with your new pet!"
|
||||||
icon = 'icons/obj/storage_vr.dmi'
|
icon = 'icons/obj/storage_vr.dmi'
|
||||||
icon_state = "otiecrate2"
|
icon_state = "otiecrate2"
|
||||||
@@ -94,4 +94,3 @@
|
|||||||
icon_state = "otiecrate"
|
icon_state = "otiecrate"
|
||||||
taped = 0
|
taped = 0
|
||||||
..()
|
..()
|
||||||
*/
|
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
// 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.
|
// 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_animal/otie //Spawn this one only if you're looking for a bad time. Not friendly.
|
/mob/living/simple_animal/otie //Spawn this one only if you're looking for a bad time. Not friendly.
|
||||||
name = "otie"
|
name = "otie"
|
||||||
@@ -15,7 +18,6 @@
|
|||||||
minbodytemp = 200
|
minbodytemp = 200
|
||||||
move_to_delay = 4
|
move_to_delay = 4
|
||||||
hostile = 1
|
hostile = 1
|
||||||
//cooperative = 1 // Neutral mobs should not be set like this.
|
|
||||||
investigates = 1
|
investigates = 1
|
||||||
reacts = 1
|
reacts = 1
|
||||||
retaliate = 1
|
retaliate = 1
|
||||||
@@ -23,13 +25,12 @@
|
|||||||
run_at_them = 0
|
run_at_them = 0
|
||||||
attack_same = 0
|
attack_same = 0
|
||||||
speak_chance = 4
|
speak_chance = 4
|
||||||
speak = list("Boof.","Waaf!","Prurrrr.","Growl!","Bork!","Rurrr..","Aruur!","Awoo!")
|
speak = list("Boof.","Waaf!","Prurr.","Bork!","Rurrr..","Arf.")
|
||||||
speak_emote = list("growls", "roars", "yaps", "Awoos")
|
speak_emote = list("growls", "roars", "yaps", "Awoos")
|
||||||
emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns")
|
emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns")
|
||||||
emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns")
|
emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns")
|
||||||
say_maybe_target = list("Ruh?", "Waf?")
|
say_maybe_target = list("Ruh?", "Waf?")
|
||||||
say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RAHH!", "Slurp.. RAH!")
|
say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RERR!", "RAHH!", "RAH!", "WARF!")
|
||||||
say_got_target = list("Rurrr!", "ROAR!", "RERR!", "NOM!", "MINE!", "RAHH!", "RAH!", "WARF!")
|
|
||||||
melee_damage_lower = 5
|
melee_damage_lower = 5
|
||||||
melee_damage_upper = 15 //Don't break my bones bro
|
melee_damage_upper = 15 //Don't break my bones bro
|
||||||
response_help = "pets the"
|
response_help = "pets the"
|
||||||
@@ -56,7 +57,7 @@
|
|||||||
vore_icons = SA_ICON_LIVING
|
vore_icons = SA_ICON_LIVING
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin'
|
/mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin'
|
||||||
name = "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."
|
||||||
icon_state = "siftusian"
|
icon_state = "siftusian"
|
||||||
icon_living = "siftusian"
|
icon_living = "siftusian"
|
||||||
@@ -80,6 +81,7 @@
|
|||||||
name = "otie"
|
name = "otie"
|
||||||
desc = "The classic bioengineered longdog. This one might even tolerate you!"
|
desc = "The classic bioengineered longdog. This one might even tolerate you!"
|
||||||
faction = "neutral"
|
faction = "neutral"
|
||||||
|
tamed = 1
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/friendly/cotie //same as above but has a little collar :v
|
/mob/living/simple_animal/otie/friendly/cotie //same as above but has a little collar :v
|
||||||
name = "tamed otie"
|
name = "tamed otie"
|
||||||
@@ -91,16 +93,16 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/otie/friendly/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho.
|
/mob/living/simple_animal/otie/friendly/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho.
|
||||||
name = "guard otie"
|
name = "guard otie"
|
||||||
desc = "The V.A.R.M.A.corp bioengineering division flagship product on trained optimal snowflake guard dogs."
|
desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs."
|
||||||
icon_state = "sotie"
|
icon_state = "sotie"
|
||||||
icon_living = "sotie"
|
icon_living = "sotie"
|
||||||
icon_rest = "sotie_rest"
|
icon_rest = "sotie_rest"
|
||||||
icon_dead = "sotie-dead"
|
icon_dead = "sotie-dead"
|
||||||
faction = "neutral"
|
faction = "neutral"
|
||||||
tamed = 1
|
|
||||||
maxHealth = 200 //armored or something
|
maxHealth = 200 //armored or something
|
||||||
health = 200
|
health = 200
|
||||||
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.
|
||||||
|
|
||||||
var/check_records = 1 // If true, arrests people without a record.
|
var/check_records = 1 // If true, arrests people without a record.
|
||||||
var/check_arrest = 1 // If true, arrests people who are set to arrest.
|
var/check_arrest = 1 // If true, arrests people who are set to arrest.
|
||||||
@@ -115,8 +117,6 @@
|
|||||||
return null
|
return null
|
||||||
if(istype(found_atom,/mob/living/simple_animal/mouse))
|
if(istype(found_atom,/mob/living/simple_animal/mouse))
|
||||||
return found_atom
|
return found_atom
|
||||||
if(found_atom in friends)
|
|
||||||
return null
|
|
||||||
else if(ismob(found_atom))
|
else if(ismob(found_atom))
|
||||||
var/mob/found_mob = found_atom
|
var/mob/found_mob = found_atom
|
||||||
if(found_mob.faction == faction)
|
if(found_mob.faction == faction)
|
||||||
@@ -128,33 +128,37 @@
|
|||||||
else if(tamed == 1 && isrobot(found_atom))
|
else if(tamed == 1 && isrobot(found_atom))
|
||||||
return null
|
return null
|
||||||
else
|
else
|
||||||
|
if(resting)
|
||||||
|
lay_down()
|
||||||
return found_atom
|
return found_atom
|
||||||
else
|
else
|
||||||
return null
|
return null
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/friendly/security/Found(var/atom/found_atom)
|
/mob/living/simple_animal/otie/friendly/security/Found(var/atom/found_atom)
|
||||||
if(!SA_attackable(found_atom))
|
|
||||||
return null
|
|
||||||
if(istype(found_atom,/mob/living/simple_animal/mouse))
|
|
||||||
return found_atom
|
|
||||||
if(check_threat(found_atom) >= 4)
|
if(check_threat(found_atom) >= 4)
|
||||||
|
if(resting)
|
||||||
|
lay_down()
|
||||||
return found_atom
|
return found_atom
|
||||||
if(found_atom in friends)
|
..()
|
||||||
return null
|
|
||||||
else if(ismob(found_atom))
|
/mob/living/simple_animal/otie/friendly/security/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims.
|
||||||
var/mob/found_mob = found_atom
|
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut))
|
||||||
if(found_mob.faction == faction)
|
qdel(O)
|
||||||
return null
|
user << "<span class='notice'>The guard pup accepts your offer for their catch.</span>"
|
||||||
else if(friend == found_atom)
|
for(var/I in vore_organs)
|
||||||
return null
|
var/datum/belly/B = vore_organs[I]
|
||||||
else if(tamed == 1 && ishuman(found_atom))
|
B.release_all_contents()
|
||||||
return null
|
return
|
||||||
else if(tamed == 1 && isrobot(found_atom))
|
..()
|
||||||
return null
|
|
||||||
else
|
/mob/living/simple_animal/otie/friendly/security/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey) // Make the gut start out safe for bellybrigging.
|
||||||
return found_atom
|
var/datum/belly/B = user.vore_selected
|
||||||
else
|
var/datum/belly/belly_target = user.vore_organs[B]
|
||||||
return null
|
if(check_threat(target_mob) >= 4)
|
||||||
|
belly_target.digest_mode = DM_HOLD
|
||||||
|
if(istype(prey,/mob/living/simple_animal/mouse))
|
||||||
|
belly_target.digest_mode = DM_DIGEST
|
||||||
|
..()
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/friendly/security/proc/check_threat(var/mob/living/M)
|
/mob/living/simple_animal/otie/friendly/security/proc/check_threat(var/mob/living/M)
|
||||||
if(!M || !ishuman(M) || M.stat == DEAD || src == M)
|
if(!M || !ishuman(M) || M.stat == DEAD || src == M)
|
||||||
@@ -198,8 +202,8 @@
|
|||||||
//Basic friend AI
|
//Basic friend AI
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/friendly/Life()
|
/mob/living/simple_animal/otie/friendly/Life()
|
||||||
. = ..()
|
..()
|
||||||
if(!. || ai_inactive || !friend) return
|
if(!friend) return
|
||||||
|
|
||||||
var/friend_dist = get_dist(src,friend)
|
var/friend_dist = get_dist(src,friend)
|
||||||
|
|
||||||
@@ -220,9 +224,9 @@
|
|||||||
visible_emote(pick("nuzzles [friend].",
|
visible_emote(pick("nuzzles [friend].",
|
||||||
"brushes against [friend].",
|
"brushes against [friend].",
|
||||||
"rubs against [friend].",
|
"rubs against [friend].",
|
||||||
"noses softly at [friend].",
|
"noses at [friend].",
|
||||||
"slobberlicks [friend].",
|
"slobberlicks [friend].",
|
||||||
"murrs.",
|
"murrs contently.",
|
||||||
"leans on [friend].",
|
"leans on [friend].",
|
||||||
"nibbles affectionately on [friend]."))
|
"nibbles affectionately on [friend]."))
|
||||||
else if (friend.health <= 50)
|
else if (friend.health <= 50)
|
||||||
@@ -234,33 +238,17 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
if(!. || ai_inactive) return
|
if(!. || ai_inactive) return
|
||||||
|
|
||||||
if(prob(5))
|
if(prob(5) && (stance == STANCE_IDLE))
|
||||||
lay_down()
|
lay_down()
|
||||||
|
|
||||||
//Pet 4 friendly
|
//Pet 4 friendly
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/simple_animal/otie/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
..()
|
|
||||||
if(M.a_intent == I_GRAB)
|
switch(M.a_intent)
|
||||||
if (M == src)
|
if(I_HELP)
|
||||||
return
|
|
||||||
if (!(status_flags & CANPUSH))
|
|
||||||
return
|
|
||||||
if(!incapacitated(INCAPACITATION_ALL) && (stance != STANCE_IDLE) && prob(grab_resist))
|
|
||||||
M.visible_message("<span class='warning'>[M] tries to grab [src] but fails!</span>")
|
|
||||||
return
|
|
||||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src)
|
|
||||||
M.put_in_active_hand(G)
|
|
||||||
G.synch()
|
|
||||||
G.affecting = src
|
|
||||||
LAssailant = M
|
|
||||||
M.visible_message("<span class='warning'>[M] has grabbed [src] passively!</span>")
|
|
||||||
M.do_attack_animation(src)
|
|
||||||
ai_log("attack_hand() I was grabbed by: [M]",2)
|
|
||||||
pixel_x = old_x
|
|
||||||
react_to_attack(M)
|
|
||||||
if(M.a_intent == I_HELP)
|
|
||||||
if (health > 0)
|
if (health > 0)
|
||||||
|
M.visible_message("<span class='notice'>[M] [response_help] \the [src].</span>")
|
||||||
LoseTarget()
|
LoseTarget()
|
||||||
handle_stance(STANCE_IDLE)
|
handle_stance(STANCE_IDLE)
|
||||||
if(prob(tame_chance))
|
if(prob(tame_chance))
|
||||||
@@ -269,30 +257,12 @@
|
|||||||
tamed = 1
|
tamed = 1
|
||||||
faction = M.faction
|
faction = M.faction
|
||||||
sleep(1 SECOND)
|
sleep(1 SECOND)
|
||||||
return
|
|
||||||
..()
|
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/death()
|
else
|
||||||
resting = 0
|
|
||||||
icon_state = icon_dead
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!")
|
/mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!")
|
||||||
density = 0 //We don't block even if we did before
|
|
||||||
walk(src, 0) //We stop any background-processing walks
|
|
||||||
resting = 0
|
resting = 0
|
||||||
icon_state = icon_dead
|
icon_state = icon_dead
|
||||||
|
|
||||||
if(faction_friends.len)
|
|
||||||
faction_friends -= src
|
|
||||||
|
|
||||||
if(loot_list.len) //Drop any loot
|
|
||||||
for(var/path in loot_list)
|
|
||||||
if(prob(loot_list[path]))
|
|
||||||
new path(get_turf(src))
|
|
||||||
|
|
||||||
spawn(3) //We'll update our icon in a sec
|
|
||||||
icon_state = icon_dead //Goddamn triple check. If this ain't working Imma be PISSED!
|
|
||||||
update_icon()
|
update_icon()
|
||||||
|
..()
|
||||||
return ..(gibbed,deathmessage)
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 176 KiB |
@@ -2007,6 +2007,7 @@
|
|||||||
#include "code\modules\mob\living\simple_animal\vore\frog.dm"
|
#include "code\modules\mob\living\simple_animal\vore\frog.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\vore\gaslamp.dm"
|
#include "code\modules\mob\living\simple_animal\vore\gaslamp.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\vore\horse.dm"
|
#include "code\modules\mob\living\simple_animal\vore\horse.dm"
|
||||||
|
#include "code\modules\mob\living\simple_animal\vore\otie.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\vore\panther.dm"
|
#include "code\modules\mob\living\simple_animal\vore\panther.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\vore\snake.dm"
|
#include "code\modules\mob\living\simple_animal\vore\snake.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\vore\solargrub.dm"
|
#include "code\modules\mob\living\simple_animal\vore\solargrub.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user