Mob Refactor+Update and Pet Collars

This commit is contained in:
Fox-McCloud
2015-05-28 00:20:25 -04:00
parent e2f867e896
commit 5d3e837b4a
58 changed files with 646 additions and 389 deletions
+4 -4
View File
@@ -308,10 +308,10 @@
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 )
if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 )
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 )
if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 )
if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 )
if("corgi") M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob, 1 )
if("ian") M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob, 1 )
if("cat") M.change_mob_type( /mob/living/simple_animal/pet/cat , null, null, delmob, 1 )
if("runtime") M.change_mob_type( /mob/living/simple_animal/pet/cat/Runtime , null, null, delmob, 1 )
if("corgi") M.change_mob_type( /mob/living/simple_animal/pet/corgi , null, null, delmob, 1 )
if("ian") M.change_mob_type( /mob/living/simple_animal/pet/corgi/Ian , null, null, delmob, 1 )
if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob, 1 )
if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob, 1 )
if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob, 1 )
@@ -53,7 +53,7 @@
name = "red tie"
icon_state = "redtie"
_color = "redtie"
/obj/item/clothing/accessory/black
name = "black tie"
icon_state = "blacktie"
@@ -64,7 +64,7 @@
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
_color = "horribletie"
/obj/item/clothing/accessory/waistcoat // No overlay
name = "waistcoat"
desc = "For some classy, murderous fun."
@@ -208,7 +208,7 @@
user << "[src] rejects your insufficient access rights."
return
..()
/obj/item/clothing/accessory/holobadge/emag_act(user as mob)
if (emagged)
user << "\red [src] is already cracked."
@@ -234,7 +234,7 @@
new /obj/item/clothing/accessory/holobadge/cord(src)
..()
return
///////////
//SCARVES//
@@ -317,3 +317,12 @@
icon_state = "stripedbluescarf"
_color = "stripedbluescarf"
/obj/item/clothing/accessory/petcollar
name = "pet collar"
icon_state = "petcollar"
_color = "petcollar"
var/tagname = null
/obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob)
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
+4 -1
View File
@@ -13,7 +13,10 @@
/datum/event/carp_migration/start()
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc))
if(prob(95))
new /mob/living/simple_animal/hostile/carp(C.loc)
else
new /mob/living/simple_animal/hostile/carp/megacarp(C.loc)
/datum/event/carp_migration/end()
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
+1 -1
View File
@@ -4,7 +4,7 @@
for(var/turf/simulated/floor/T in orange(1,xmas))
for(var/i=1,i<=rand(1,5),i++)
new /obj/item/weapon/a_gift(T)
for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list)
for(var/mob/living/simple_animal/pet/corgi/Ian/Ian in mob_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
/datum/holiday/xmas/handle_event()
@@ -146,9 +146,10 @@ var/const/MAX_ACTIVE_TIME = 400
if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
else if (iscorgi(M))
var/mob/living/simple_animal/corgi/C = M
var/mob/living/simple_animal/pet/corgi/C = M
loc = C
C.facehugger = src
C.regenerate_icons()
GoIdle() //so it doesn't jump the people that tear it off
@@ -184,7 +185,7 @@ var/const/MAX_ACTIVE_TIME = 400
if(iscorgi(target))
var/mob/living/simple_animal/corgi/C = target
var/mob/living/simple_animal/pet/corgi/C = target
src.loc = get_turf(C)
C.facehugger = null
else
@@ -9,7 +9,7 @@
response_disarm = "flails at"
response_harm = "punches"
icon_dead = "shade_dead"
speed = -1
speed = 0
a_intent = "harm"
stop_automated_movement = 1
status_flags = CANPUSH
@@ -24,6 +24,7 @@
max_n2 = 0
minbodytemp = 0
faction = list("cult")
flying = 1
var/list/construct_spells = list()
/mob/living/simple_animal/construct/New()
@@ -40,7 +41,7 @@
if((M.client && !( M.blinded )))
M.show_message("\red [src] collapses in a shattered heap. ")
ghostize()
del src
qdel(src)
return
/mob/living/simple_animal/construct/examine()
@@ -221,7 +222,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashes"
speed = -1
speed = 0
see_in_dark = 7
attack_sound = 'sound/weapons/bladeslice.ogg'
construct_spells = list(/obj/effect/proc_holder/spell/wizard/targeted/ethereal_jaunt/shift)
@@ -14,7 +14,9 @@
health = 2
harm_intent_damage = 1
friendly = "nudges"
pass_flags = PASSTABLE
density = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
/mob/living/simple_animal/butterfly/New()
..()
@@ -1,5 +1,5 @@
//Cat
/mob/living/simple_animal/cat
/mob/living/simple_animal/pet/cat
name = "cat"
desc = "Kitty!!"
icon_state = "cat2"
@@ -13,8 +13,8 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
simplespecies = /mob/living/simple_animal/cat
childtype = /mob/living/simple_animal/cat/kitten
simplespecies = /mob/living/simple_animal/pet/cat
childtype = /mob/living/simple_animal/pet/cat/kitten
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 3
response_help = "pets"
@@ -22,7 +22,7 @@
response_harm = "kicks"
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/cat/Runtime
/mob/living/simple_animal/pet/cat/Runtime
name = "Runtime"
desc = "GCAT"
icon_state = "cat"
@@ -32,14 +32,14 @@
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
/mob/living/simple_animal/cat/Runtime/Life()
/mob/living/simple_animal/pet/cat/Runtime/Life()
//MICE!
if((src.loc) && isturf(src.loc))
if(!stat && !resting && !buckled)
for(var/mob/living/simple_animal/mouse/M in view(1,src))
if(!M.stat)
if(!M.stat && Adjacent(M))
emote("me", 1, "splats \the [M]!")
M.splat()
emote("splats \the [M]")
movement_target = null
stop_automated_movement = 0
break
@@ -67,18 +67,20 @@
stop_automated_movement = 1
walk_to(src,movement_target,0,3)
/mob/living/simple_animal/cat/Proc
/mob/living/simple_animal/pet/cat/Proc
name = "Proc"
/mob/living/simple_animal/cat/kitten
/mob/living/simple_animal/pet/cat/kitten
name = "kitten"
desc = "D'aaawwww"
icon_state = "kitten"
icon_living = "kitten"
icon_dead = "kitten_dead"
gender = NEUTER
density = 0
pass_flags = PASSMOB
/mob/living/simple_animal/cat/Syndi
/mob/living/simple_animal/pet/cat/Syndi
name = "SyndiCat"
desc = "It's a SyndiCat droid."
icon_state = "Syndicat"
@@ -1,12 +1,12 @@
//Corgi
/mob/living/simple_animal/corgi
/mob/living/simple_animal/pet/corgi
name = "\improper corgi"
real_name = "corgi"
desc = "It's a corgi."
gender = MALE
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
gender = MALE
health = 30
maxHealth = 30
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
@@ -17,21 +17,22 @@
turns_per_move = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
meat_amount = 3
response_help = "pets the"
response_disarm = "bops the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
childtype = /mob/living/simple_animal/corgi/puppy
simplespecies = /mob/living/simple_animal/corgi
childtype = /mob/living/simple_animal/pet/corgi/puppy
simplespecies = /mob/living/simple_animal/pet/corgi
var/shaved = 0
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
/mob/living/simple_animal/corgi/New()
/mob/living/simple_animal/pet/corgi/New()
..()
regenerate_icons()
/mob/living/simple_animal/corgi/Life()
/mob/living/simple_animal/pet/corgi/Life()
. = ..()
if(.)
if(fire)
@@ -59,19 +60,19 @@
if(0) healths.icon_state = "health7"
regenerate_icons()
/mob/living/simple_animal/corgi/Die()
/mob/living/simple_animal/pet/corgi/Die()
..()
regenerate_icons()
/mob/living/simple_animal/corgi/revive()
/mob/living/simple_animal/pet/corgi/revive()
..()
regenerate_icons()
/mob/living/simple_animal/corgi/show_inv(mob/user as mob)
/mob/living/simple_animal/pet/corgi/show_inv(mob/user as mob)
user.set_machine(src)
if(user.stat) return
var/dat = "<div align='center'><b>Inventory of [real_name]</b></div><p>"
var/dat = "<div align='center'><b>Inventory of [name]</b></div><p>"
if(inventory_head)
dat += "<br><b>Head:</b> [inventory_head] (<a href='?src=\ref[src];remove_inv=head'>Remove</a>)"
else
@@ -81,28 +82,43 @@
else
dat += "<br><b>Back:</b> <a href='?src=\ref[src];add_inv=back'>Nothing</a>"
user << browse(dat, text("window=mob[];size=325x500", name))
user << browse(dat, text("window=mob[];size=325x500", real_name))
onclose(user, "mob[real_name]")
return
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
if( O.force )
usr << "\red This animal is wearing too much armor. You can't cause /him any damage."
for (var/mob/M in viewers(src, null))
M.show_message("\red \b [user] hits [src] with the [O], however [src] is too armored.")
user << "<span class='warning'>[src] is wearing too much armor! You can't cause \him any damage.</span>"
visible_message("<span class='danger'> [user] hits [src] with [O], however [src] is too armored.</span>")
else
usr << "\red This animal is wearing too much armor. You can't reach its skin."
for (var/mob/M in viewers(src, null))
M.show_message("\red [user] gently taps [src] with the [O]. ")
if(prob(15))
emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
user << "<span class='warning'>[src] is wearing too much armor! You can't reach \his skin.<span>"
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if (istype(O, /obj/item/weapon/razor))
if (shaved)
user << "<span class='warning'>You can't shave this corgi, it's already been shaved!</span>"
return
user.visible_message("[user] starts to shave [src] using \the [O].", "<span class='notice'>You start to shave [src] using \the [O]...</span>")
if(do_after(user, 50))
user.visible_message("[user] shaves [src]'s hair using \the [O].")
playsound(loc, 'sound/items/Welder2.ogg', 20, 1)
shaved = 1
icon_living = "[initial(icon_living)]_shaved"
icon_dead = "[initial(icon_living)]_shaved_dead"
if(stat == CONSCIOUS)
icon_state = icon_living
else
icon_state = icon_dead
return
..()
/mob/living/simple_animal/corgi/Topic(href, href_list)
/mob/living/simple_animal/pet/corgi/Topic(href, href_list)
if(usr.stat) return
//Removing from inventory
@@ -125,7 +141,7 @@
inventory_head = null
regenerate_icons()
else
usr << "\red There is nothing to remove from its [remove_from]."
usr << "<span class='danger'>There is nothing to remove from its [remove_from].</span>"
return
if("back")
if(inventory_back)
@@ -133,97 +149,59 @@
inventory_back = null
regenerate_icons()
else
usr << "\red There is nothing to remove from its [remove_from]."
usr << "<span class='danger'>There is nothing to remove from its [remove_from].</span>"
return
show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
show_inv(usr)
//Adding things to inventory
else if(href_list["add_inv"])
if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
return
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
usr << "\red You have nothing in your hand to put on its [add_to]."
return
switch(add_to)
if("head")
if(inventory_head)
usr << "\red It's is already wearing something."
return
else
place_on_head(usr.get_active_hand())
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
return
//Corgis are supposed to be simpler, so only a select few objects can actually be put
//to be compatible with them. The objects are below.
//Many hats added, Some will probably be removed, just want to see which ones are popular.
var/list/allowed_types = list(
/obj/item/clothing/head/helmet,
/obj/item/clothing/glasses/sunglasses,
/obj/item/clothing/head/caphat,
/obj/item/clothing/head/collectable/captain,
/obj/item/clothing/head/that,
/obj/item/clothing/head/that,
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/collectable/kitty,
/obj/item/clothing/head/rabbitears,
/obj/item/clothing/head/collectable/rabbitears,
/obj/item/clothing/head/beret,
/obj/item/clothing/head/collectable/beret,
/obj/item/clothing/head/det_hat,
/obj/item/clothing/head/nursehat,
/obj/item/clothing/head/pirate,
/obj/item/clothing/head/collectable/pirate,
/obj/item/clothing/head/ushanka,
/obj/item/clothing/head/chefhat,
/obj/item/clothing/head/collectable/chef,
/obj/item/clothing/head/collectable/police,
/obj/item/clothing/head/wizard/fake,
/obj/item/clothing/head/wizard,
/obj/item/clothing/head/collectable/wizard,
/obj/item/clothing/head/hardhat,
/obj/item/clothing/head/collectable/hardhat,
/obj/item/clothing/head/hardhat/white,
/obj/item/weapon/bedsheet,
/obj/item/clothing/head/helmet/space/santahat,
/obj/item/clothing/head/collectable/paper,
/obj/item/clothing/head/soft,
/obj/item/clothing/head/hardhat/reindeer
)
if( ! ( item_to_add.type in allowed_types ) )
usr << "\red It doesn't seem too keen on wearing that item."
return
usr.drop_item()
place_on_head(item_to_add)
regenerate_icons()
place_on_head(usr.get_active_hand(),usr)
if("back")
if(inventory_back)
usr << "\red It's already wearing something."
usr << "<span class='warning'>It's already wearing something!</span>"
return
else
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
usr.visible_message("[usr] pets [src].","<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
return
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
//Corgis are supposed to be simpler, so only a select few objects can actually be put
//to be compatible with them. The objects are below.
//The objects that corgis can wear on their backs.
var/list/allowed_types = list(
/obj/item/clothing/suit/armor/vest,
/obj/item/device/radio
/obj/item/clothing/suit/space/deathsquad,
/obj/item/device/radio,
/obj/item/device/radio/off,
/obj/item/clothing/suit/cardborg,
/obj/item/weapon/tank/oxygen,
/obj/item/weapon/tank/air,
/obj/item/weapon/extinguisher,
)
if( ! ( item_to_add.type in allowed_types ) )
usr << "\red This object won't fit."
usr << "<span class='warning'>You set [item_to_add] on [src]'s back, but \he shakes it off!</span>"
if(!usr.drop_item())
usr << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>"
return
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
dir = i
sleep(1)
return
usr.drop_item()
@@ -231,83 +209,191 @@
src.inventory_back = item_to_add
regenerate_icons()
show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
show_inv(usr)
else
..()
/mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add)
item_to_add.loc = src
src.inventory_head = item_to_add
regenerate_icons()
//Corgis are supposed to be simpler, so only a select few objects can actually be put
//to be compatible with them. The objects are below.
//Many hats added, Some will probably be removed, just want to see which ones are popular.
/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob)
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
switch(inventory_head && inventory_head.type)
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
name = "Captain [real_name]"
desc = "Probably better than the last captain."
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
name = "Runtime"
emote_see = list("coughs up a furball", "stretches")
emote_hear = list("purrs")
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
name = "Hoppy"
emote_see = list("twitches its nose", "hops around a bit")
desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit"
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
name = "Yann"
desc = "Mon dieu! C'est un chien!"
speak = list("le woof!", "le bark!", "JAPPE!!")
emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of him")
if(/obj/item/clothing/head/det_hat)
name = "Detective [real_name]"
desc = "[name] sees through your lies..."
emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
if(/obj/item/clothing/head/nursehat)
name = "Nurse [real_name]"
desc = "[name] needs 100cc of beef jerky...STAT!"
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
desc = "Yaarghh!! Thar' be a scurvy dog!"
emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
emote_hear = list("growls ferociously", "snarls")
speak = list("Arrrrgh!!","Grrrrrr!")
if(/obj/item/clothing/head/ushanka)
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
desc = "A follower of Karl Barx."
emote_see = list("contemplates the failings of the capitalist economic model", "ponders the pros and cons of vangaurdism")
if(/obj/item/clothing/head/collectable/police)
name = "Officer [real_name]"
emote_see = list("drools","looks for donuts")
desc = "Stop right there criminal scum!"
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
name = "Grandwizard [real_name]"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
if(/obj/item/weapon/bedsheet)
name = "\improper Ghost"
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
emote_see = list("stumbles around", "shivers")
emote_hear = list("howls","groans")
desc = "Spooky!"
if(/obj/item/clothing/head/helmet/space/santahat)
name = "Santa's Corgi Helper"
emote_hear = list("barks christmas songs", "yaps merrily")
emote_see = list("looks for presents", "checks his list")
desc = "He's very fond of milk and cookies."
set_light(6)
if(/obj/item/clothing/head/soft)
name = "Corgi Tech [real_name]"
desc = "The reason your yellow gloves have chew-marks."
if(/obj/item/clothing/head/hardhat/reindeer)
name = "[real_name] the red-nosed Corgi"
emote_hear = list("lights the way", "illuminates", "yaps")
desc = "He has a very shiny nose."
set_light(1)
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
return
if(inventory_head)
if(user) user << "<span class='warning'>You can't put more than one hat on [src]!</span>"
return
if(!item_to_add)
user.visible_message("[user] pets [src].","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
return
var/valid = 0
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
if(istype(item_to_add, /obj/item/clothing/accessory/scarf))
valid = 1
else
switch(item_to_add.type)
if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
/obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white,
/obj/item/weapon/paper)
valid = 1
if(/obj/item/clothing/head/helmet)
name = "Sergeant [real_name]"
desc = "The ever-loyal, the ever-vigilant."
valid = 1
if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
name = "Sous chef [real_name]"
desc = "Your food will be taste-tested. All of it."
valid = 1
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
name = "Captain [real_name]"
desc = "Probably better than the last captain."
valid = 1
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
name = "Runtime"
emote_see = list("coughs up a furball", "stretches")
emote_hear = list("purrs")
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
valid = 1
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
name = "Hoppy"
emote_see = list("twitches its nose", "hops around a bit")
desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
valid = 1
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
name = "Yann"
desc = "Mon dieu! C'est un chien!"
speak = list("le woof!", "le bark!", "JAPPE!!")
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
valid = 1
if(/obj/item/clothing/head/det_hat)
name = "Detective [real_name]"
desc = "[name] sees through your lies..."
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
valid = 1
if(/obj/item/clothing/head/nursehat)
name = "Nurse [real_name]"
desc = "[name] needs 100cc of beef jerky... STAT!"
valid = 1
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
desc = "Yaarghh!! Thar' be a scurvy dog!"
emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
emote_hear = list("growls ferociously!", "snarls.")
speak = list("Arrrrgh!!","Grrrrrr!")
valid = 1
if(/obj/item/clothing/head/ushanka)
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
desc = "A follower of Karl Barx."
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
valid = 1
if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police)
name = "Officer [real_name]"
emote_see = list("drools.","looks for donuts.")
desc = "Stop right there criminal scum!"
valid = 1
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
name = "Grandwizard [real_name]"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
valid = 1
if(/obj/item/clothing/head/cardborg)
name = "Borgi"
speak = list("Ping!","Beep!","Woof!")
emote_see = list("goes rogue.", "sniffs out non-humans.")
desc = "Result of robotics budget cuts."
valid = 1
if(/obj/item/weapon/bedsheet)
name = "\improper Ghost"
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
emote_see = list("stumbles around.", "shivers.")
emote_hear = list("howls!","groans.")
desc = "Spooky!"
valid = 1
if(/obj/item/clothing/head/helmet/space/santahat)
name = "Santa's Corgi Helper"
emote_hear = list("barks Christmas songs.", "yaps merrily!")
emote_see = list("looks for presents.", "checks his list.")
desc = "He's very fond of milk and cookies."
valid = 1
if(/obj/item/clothing/head/soft)
name = "Corgi Tech [real_name]"
desc = "The reason your yellow gloves have chew-marks."
valid = 1
if(/obj/item/clothing/head/hardhat/reindeer)
name = "[real_name] the red-nosed Corgi"
emote_hear = list("lights the way!", "illuminates.", "yaps!")
desc = "He has a very shiny nose."
set_light(1)
valid = 1
if(/obj/item/clothing/head/sombrero)
name = "Segnor [real_name]"
desc = "You must respect elder [real_name]"
valid = 1
if(/obj/item/clothing/head/hopcap)
name = "Lieutenant [real_name]"
desc = "Can actually be trusted to not run off on his own."
valid = 1
if(/obj/item/clothing/head/helmet/space/deathsquad)
name = "Trooper [real_name]"
desc = "That's not red paint. That's real corgi blood."
valid = 1
if(valid)
if(user && !user.drop_item())
user << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
return 0
if(health <= 0)
user << "<span class ='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him.</span>"
else if(user)
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.</span>",
"<span class='italics'>You hear a friendly-sounding bark.</span>")
item_to_add.loc = src
src.inventory_head = item_to_add
regenerate_icons()
else
if(user && !user.drop_item())
user << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
return 0
user << "<span class='warning'>You set [item_to_add] on [src]'s head, but \he shakes it off!</span>"
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
dir = i
sleep(1)
return valid
//IAN! SQUEEEEEEEEE~
/mob/living/simple_animal/corgi/Ian
/mob/living/simple_animal/pet/corgi/Ian
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
@@ -318,7 +404,7 @@
response_disarm = "bops"
response_harm = "kicks"
/mob/living/simple_animal/corgi/Ian/Life()
/mob/living/simple_animal/pet/corgi/Ian/Life()
..()
//Feeding, chasing food, FOOOOODDDD
@@ -357,14 +443,17 @@
else
dir = SOUTH
if(!Adjacent(movement_target)) //can't reach food through windows.
return
if(isturf(movement_target.loc) )
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
emote(pick("dances around","chases its tail"))
emote("me", 1, pick("dances around.","chases its tail!"))
spawn(0)
if (ckey == null)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
@@ -375,7 +464,7 @@
name = "Corgi meat"
desc = "Tastes like... well you know..."
/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
/mob/living/simple_animal/pet/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
spawn( 0 )
if ((!( yes ) || now_pushing))
@@ -409,70 +498,60 @@
now_pushing = null
return
return
//PC stuff-Sieve
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
for(var/mob/M in viewers(user, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] baps [name] on the nose with the rolled up [O]")
spawn(0)
if (ckey == null)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
sleep(1)
else
..()
/mob/living/simple_animal/corgi/regenerate_icons()
/mob/living/simple_animal/pet/corgi/regenerate_icons()
overlays.Cut()
if(inventory_head)
var/head_icon_state = inventory_head.icon_state
var/image/head_icon
if(health <= 0)
head_icon_state += "2"
var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
if(head_icon)
overlays += head_icon
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST)
head_icon.pixel_y = -8
head_icon.transform = turn(head_icon.transform, 180)
else
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state)
overlays += head_icon
if(inventory_back)
var/back_icon_state = inventory_back.icon_state
var/image/back_icon
if(health <= 0)
back_icon_state += "2"
var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
if(back_icon)
overlays += back_icon
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST)
back_icon.pixel_y = -11
back_icon.transform = turn(back_icon.transform, 180)
else
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state)
overlays += back_icon
if(facehugger)
if(istype(src, /mob/living/simple_animal/corgi/puppy))
if(istype(src, /mob/living/simple_animal/pet/corgi/puppy))
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
if(pcollar)
overlays += collar
overlays += pettag
return
/mob/living/simple_animal/corgi/puppy
/mob/living/simple_animal/pet/corgi/puppy
name = "\improper corgi puppy"
real_name = "corgi"
desc = "It's a corgi puppy."
icon_state = "puppy"
icon_living = "puppy"
icon_dead = "puppy_dead"
shaved = 0
density = 0
pass_flags = PASSMOB
//pupplies cannot wear anything.
/mob/living/simple_animal/corgi/puppy/Topic(href, href_list)
//puppies cannot wear anything.
/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
usr << "\red You can't fit this on [src]"
usr << "<span class='warning'>You can't fit this on [src]!</span>"
return
..()
//LISA! SQUEEEEEEEEE~
/mob/living/simple_animal/corgi/Lisa
/mob/living/simple_animal/pet/corgi/Lisa
name = "Lisa"
real_name = "Lisa"
gender = FEMALE
@@ -487,27 +566,44 @@
var/puppies = 0
//Lisa already has a cute bow!
/mob/living/simple_animal/corgi/Lisa/Topic(href, href_list)
/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
usr << "\red [src] already has a cute bow!"
return
..()
/mob/living/simple_animal/corgi/Lisa/Life()
/mob/living/simple_animal/pet/corgi/Lisa/Life()
..()
make_babies()
if(!stat && !resting && !buckled)
if(prob(1))
if (ckey == null)
emote(pick("dances around","chases her tail"))
emote("me", 1, pick("dances around.","chases her tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
sleep(1)
/mob/living/simple_animal/corgi/Ian/borgi
/mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M)
. = ..()
switch(M.a_intent)
if("help") wuv(1,M)
if("harm") wuv(-1,M)
/mob/living/simple_animal/pet/corgi/proc/wuv(change, mob/M)
if(change)
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20)
emote("me", 1, "yaps happily!")
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
emote("me", 1, "growls!")
/mob/living/simple_animal/pet/corgi/Ian/borgi
name = "E-N"
real_name = "E-N" //Intended to hold the name without altering it.
desc = "It's a borgi."
@@ -515,14 +611,14 @@
icon_living = "borgi"
var/emagged = 0
/mob/living/simple_animal/corgi/Ian/borgi/emag_act(user as mob)
/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob)
if(!emagged)
emagged = 1
visible_message("<span class='warning'>[user] swipes a card through [src].</span>", "<span class='notice'>You overload [src]s internal reactor.</span>")
spawn (1000)
src.explode()
/mob/living/simple_animal/corgi/Ian/borgi/proc/explode()
/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/explode()
for(var/mob/M in viewers(src, null))
if (M.client)
M.show_message("\red [src] makes an odd whining noise.")
@@ -530,7 +626,7 @@
explosion(get_turf(src), 0, 1, 4, 7)
Die()
/mob/living/simple_animal/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target)
/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if (!T || !U)
@@ -546,7 +642,7 @@
A.process()
return
/mob/living/simple_animal/corgi/Ian/borgi/Life()
/mob/living/simple_animal/pet/corgi/Ian/borgi/Life()
..()
if(emagged && prob(25))
var/mob/living/carbon/target = locate() in view(10,src)
@@ -559,7 +655,7 @@
s.set_up(3, 1, src)
s.start()
/mob/living/simple_animal/corgi/Ian/borgi/Die()
/mob/living/simple_animal/pet/corgi/Ian/borgi/Die()
..()
visible_message("<b>[src]</b> blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
@@ -1,4 +1,4 @@
/mob/living/simple_animal/corgi/verb/chasetail()
/mob/living/simple_animal/pet/corgi/verb/chasetail()
set name = "Chase your tail"
set desc = "d'awwww."
set category = "Corgi"
@@ -18,6 +18,7 @@
response_harm = "stomps the"
stop_automated_movement = 1
friendly = "pinches"
ventcrawler = 2
var/obj/item/inventory_head
var/obj/item/inventory_mask
can_hide = 1
@@ -20,12 +20,16 @@
faction = list("neutral")
attack_same = 1
attacktext = "kicks"
attack_sound = 'sound/weapons/punch1.ogg'
health = 40
melee_damage_lower = 1
melee_damage_upper = 5
var/milk_content = 0
melee_damage_upper = 2
stop_automated_movement_when_pulled = 1
var/datum/reagents/udder = null
/mob/living/simple_animal/hostile/retaliate/goat/New()
udder = new(50)
udder.my_atom = src
..()
/mob/living/simple_animal/hostile/retaliate/goat/Life()
@@ -40,8 +44,9 @@
LoseTarget()
src.visible_message("\blue [src] calms down.")
if(stat == CONSCIOUS && prob(5))
milk_content = min(50, milk_content+rand(5, 10))
if(stat == CONSCIOUS)
if(udder && prob(5))
udder.add_reagent("milk", rand(5, 10))
if(locate(/obj/effect/plant) in loc)
var/obj/effect/plant/SV = locate(/obj/effect/plant) in loc
@@ -54,7 +59,7 @@
var/step = get_step(src, direction)
if(step)
if(locate(/obj/effect/plant) in step)
Move(step)
Move(step, get_dir(src, step))
/mob/living/simple_animal/hostile/retaliate/goat/Retaliate()
..()
@@ -71,17 +76,13 @@
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("[user] milks [src] using \the [O].", "<span class='notice'>You milk [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
if(transfered > 0)
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
G.reagents.add_reagent("milk", transfered)
milk_content -= transfered
else if(G.reagents.total_volume >= G.volume)
user << "\red \The [O] is full."
else
user << "\red The udder is dry. Wait a bit longer..."
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
user << "<span class='warning'>[O] is full!</span>"
if(!transfered)
user << "<span class='warning'>The udder is dry! Wait a bit longer...</span>"
else
..()
//cow
@@ -105,32 +106,32 @@
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
attacktext = "kicks"
attack_sound = 'sound/weapons/punch1.ogg'
health = 50
var/milk_content = 0
var/datum/reagents/udder = null
/mob/living/simple_animal/cow/New()
udder = new(50)
udder.my_atom = src
..()
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params, params)
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("[user] milks [src] using \the [O].", "<span class='notice'>You milk [src] using \the [O].</span>")
var/obj/item/weapon/reagent_containers/glass/G = O
var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
if(transfered > 0)
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
G.reagents.add_reagent("milk", transfered)
milk_content -= transfered
else if(G.reagents.total_volume >= G.volume)
user << "\red \The [O] is full."
else
user << "\red The udder is dry. Wait a bit longer..."
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
if(G.reagents.total_volume >= G.volume)
user << "<span class='danger'>[O] is full.</span>"
if(!transfered)
user << "<span class='danger'>The udder is dry. Wait a bit longer...</span>"
else
..()
/mob/living/simple_animal/cow/Life()
. = ..()
if(stat == CONSCIOUS && prob(5))
milk_content = min(50, milk_content+rand(5, 10))
if(stat == CONSCIOUS)
if(udder && prob(5))
udder.add_reagent("milk", rand(5, 10))
/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob)
if(!stat && M.a_intent == "disarm" && icon_state != icon_dead)
@@ -159,6 +160,7 @@
speak_emote = list("cheeps")
emote_hear = list("cheeps")
emote_see = list("pecks at the ground","flaps its tiny wings")
density = 0
speak_chance = 2
turns_per_move = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
@@ -168,8 +170,9 @@
response_harm = "kicks the"
attacktext = "kicks"
health = 1
ventcrawler = 2
var/amount_grown = 0
pass_flags = PASSTABLE | PASSGRILLE
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
small = 1
can_hide = 1
@@ -186,7 +189,7 @@
amount_grown += rand(1,2)
if(amount_grown >= 100)
new /mob/living/simple_animal/chicken(src.loc)
del(src)
qdel(src)
var/const/MAX_CHICKENS = 50
var/global/chicken_count = 0
@@ -201,6 +204,7 @@ var/global/chicken_count = 0
speak_emote = list("clucks","croons")
emote_hear = list("clucks")
emote_see = list("pecks at the ground","flaps its wings viciously")
density = 0
speak_chance = 2
turns_per_move = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
@@ -212,7 +216,7 @@ var/global/chicken_count = 0
health = 10
var/eggsleft = 0
var/_color
pass_flags = PASSTABLE
pass_flags = PASSTABLE | PASSMOB
small = 1
can_hide = 1
@@ -1,5 +1,5 @@
//Foxxy
/mob/living/simple_animal/fox
/mob/living/simple_animal/pet/fox
name = "fox"
desc = "It's a fox. I wonder what it says?"
icon_state = "fox"
@@ -19,12 +19,12 @@
response_harm = "kicks"
//Captain fox
/mob/living/simple_animal/fox/Renault
/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
//Syndi fox
/mob/living/simple_animal/fox/Syndifox
/mob/living/simple_animal/pet/fox/Syndifox
name = "Syndifox"
desc = "Syndifox, the Syndicate's most respected mascot. I wonder what it says?"
icon_state = "Syndifox"
@@ -16,5 +16,7 @@
response_help = "pets"
response_disarm = "shoos"
response_harm = "stomps on"
pass_flags = PASSTABLE
ventcrawler = 2
density = 0
pass_flags = PASSTABLE | PASSMOB
can_hide = 1
@@ -9,7 +9,6 @@
speak_emote = list("squeeks","squeeks","squiks")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
pass_flags = PASSTABLE
small = 1
speak_chance = 1
turns_per_move = 5
@@ -22,6 +21,8 @@
response_disarm = "gently pushes aside the"
response_harm = "stamps on the"
density = 0
ventcrawler = 2
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
var/_color //brown, gray and white, leave blank for random
layer = MOB_LAYER
min_oxy = 16 //Require atleast 16kPA oxygen
@@ -29,7 +30,6 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
can_hide = 1
ventcrawler = 2
/mob/living/simple_animal/mouse/Life()
..()
@@ -0,0 +1,46 @@
/mob/living/simple_animal/pet
icon = 'icons/mob/pets.dmi'
var/obj/item/clothing/accessory/petcollar/pcollar = null
var/image/collar = null
var/image/pettag = null
/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar)
var/obj/item/clothing/accessory/petcollar/P = O
pcollar = P
collar = image('icons/mob/pets.dmi', src, "[icon_state]collar")
pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag")
regenerate_icons()
user << "<span class='notice'>You put the [P] around [src]'s neck.</span>"
if(P.tagname)
name = P.tagname
qdel(P)
return
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
sleep(1)
else
..()
/mob/living/simple_animal/pet/New()
..()
if(pcollar)
pcollar = new(src)
regenerate_icons()
/mob/living/simple_animal/pet/revive()
..()
regenerate_icons()
/mob/living/simple_animal/pet/Die()
..()
regenerate_icons()
/mob/living/simple_animal/pet/regenerate_icons()
overlays.Cut()
overlays += collar
overlays += pettag
@@ -1,5 +1,5 @@
//Corgi //best comment 2014
/mob/living/simple_animal/pug
/mob/living/simple_animal/pet/pug
name = "\improper pug"
real_name = "pug"
desc = "It's a pug."
@@ -19,7 +19,7 @@
response_harm = "kicks"
see_in_dark = 5
/mob/living/simple_animal/pug/Life()
/mob/living/simple_animal/pet/pug/Life()
..()
if(!stat && !resting && !buckled)
@@ -29,14 +29,3 @@
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
sleep(1)
/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/weapon/newspaper))
if(!stat)
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O]</span>")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
sleep(1)
else
..()
@@ -9,7 +9,7 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
speed = -1
speed = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
meat_amount = 3
maxHealth = 100
@@ -18,6 +18,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashes"
speak_emote = list("hisses")
a_intent = "harm"
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 0
@@ -33,6 +34,8 @@
faction = list("alien")
status_flags = CANPUSH
minbodytemp = 0
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
heat_damage_per_tick = 20
@@ -44,6 +47,17 @@
health = 60
melee_damage_lower = 15
melee_damage_upper = 15
var/plant_cooldown = 30
var/plants_off = 0
/mob/living/simple_animal/hostile/alien/drone/Life()
..()
if(!stat)
plant_cooldown--
if(stance==HOSTILE_STANCE_IDLE)
if(!plants_off && prob(10) && plant_cooldown<=0)
plant_cooldown = initial(plant_cooldown)
SpreadPlants()
/mob/living/simple_animal/hostile/alien/sentinel
name = "alien sentinel"
@@ -72,11 +86,43 @@
ranged = 1
retreat_distance = 5
minimum_distance = 5
move_to_delay = 3
move_to_delay = 4
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
rapid = 1
status_flags = 0
var/sterile = 1
var/plants_off = 0
var/egg_cooldown = 30
var/plant_cooldown = 30
/mob/living/simple_animal/hostile/alien/queen/Life()
..()
if(!stat)
egg_cooldown--
plant_cooldown--
if(stance==HOSTILE_STANCE_IDLE)
if(!plants_off && prob(10) && plant_cooldown<=0)
plant_cooldown = initial(plant_cooldown)
SpreadPlants()
if(!sterile && prob(10) && egg_cooldown<=0)
egg_cooldown = initial(egg_cooldown)
LayEggs()
/mob/living/simple_animal/hostile/alien/proc/SpreadPlants()
if(!isturf(loc) || istype(loc, /turf/space))
return
if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
return
visible_message("<span class='alertalien'>[src] has planted some alien weeds!</span>")
new /obj/structure/alien/weeds/node(loc)
/mob/living/simple_animal/hostile/alien/proc/LayEggs()
if(!isturf(loc) || istype(loc, /turf/space))
return
if(locate(/obj/structure/alien/egg) in get_turf(src))
return
visible_message("<span class='alertalien'>[src] has laid an egg!</span>")
new /obj/structure/alien/egg(loc)
/mob/living/simple_animal/hostile/alien/queen/large
name = "alien empress"
@@ -89,6 +135,7 @@
health = 400
/obj/item/projectile/neurotox
name = "neurotoxin"
damage = 30
icon_state = "toxin"
@@ -1,7 +1,7 @@
//Space bears!
/mob/living/simple_animal/hostile/bear
name = "space bear"
desc = "RawrRawr!!"
desc = "You don't need to be faster than a space bear, you just need to outrun your crewmates."
icon_state = "bear"
icon_living = "bear"
icon_dead = "bear_dead"
@@ -14,7 +14,7 @@
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
meat_amount = 6
meat_amount = 5
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -40,6 +40,7 @@
faction = list("carp")
flying = 1
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
@@ -47,21 +48,37 @@
/mob/living/simple_animal/hostile/carp/FindTarget()
. = ..()
if(.)
emote("nashes at [.]")
emote("me", 1, "gnashes at [.]!")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
. =..()
var/mob/living/L = .
if(istype(L))
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
..()
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.adjustStaminaLoss(8)
/mob/living/simple_animal/hostile/carp/holocarp
icon_state = "holocarp"
icon_living = "holocarp"
maxbodytemp = INFINITY
/mob/living/simple_animal/hostile/carp/holocarp/Die()
del(src)
return
..()
ghostize()
qdel(src)
return
/mob/living/simple_animal/hostile/carp/megacarp
icon = 'icons/mob/alienqueen.dmi'
name = "Mega Space Carp"
desc = "A ferocious, fang bearing creature that resembles a shark. This one seems especially ticked off."
icon_state = "megacarp"
icon_living = "megacarp"
icon_dead = "megacarp_dead"
icon_gib = "megacarp_gib"
maxHealth = 65
health = 65
pixel_x = -16
melee_damage_lower = 20
melee_damage_upper = 20
@@ -13,4 +13,4 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
speed = 4
@@ -9,7 +9,7 @@
response_help = "passes through the"
response_disarm = "shoves"
response_harm = "hits the"
speed = -1
speed = 0
maxHealth = 80
health = 80
@@ -18,6 +18,7 @@
melee_damage_upper = 15
attacktext = "grips"
attack_sound = 'sound/hallucinations/growl1.ogg'
speak_emote = list("growls")
min_oxy = 0
max_oxy = 0
@@ -38,12 +39,13 @@
/mob/living/simple_animal/hostile/faithless/FindTarget()
. = ..()
if(.)
emote("wails at [.]")
emote("me", 1, "wails at [.]!")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
. =..()
var/mob/living/L = .
if(istype(L))
..()
if(iscarbon(target))
var/mob/living/carbon/C = target
if(prob(12))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
C.Weaken(3)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
@@ -14,6 +14,7 @@
melee_damage_lower = 2
melee_damage_upper = 3
attacktext = "claws"
attack_sound = 'sound/weapons/bladeslice.ogg'
projectilesound = 'sound/weapons/Gunshot.ogg'
projectiletype = /obj/item/projectile/hivebotbullet
faction = list("hivebot")
@@ -26,7 +27,7 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
speed = 4
speak_emote = list("states")
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
@@ -54,7 +55,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
del src
ghostize()
qdel(src)
return
/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
@@ -21,6 +21,7 @@
melee_damage_upper = 12
attacktext = "attacks"
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("creaks")
min_oxy = 0
max_oxy = 0
@@ -43,7 +44,8 @@
/mob/living/simple_animal/hostile/mimic/Die()
..()
visible_message("\red <b>[src]</b> stops moving!")
del(src)
ghostize()
qdel(src)
@@ -177,6 +179,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
icon = O.icon
icon_state = O.icon_state
icon_living = icon_state
overlays = O.overlays
if(istype(O, /obj/structure) || istype(O, /obj/machinery))
health = (anchored * 50) + 50
@@ -197,7 +200,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
src.creator = creator
faction += "\ref[creator]" // very unique
if(destroy_original)
del(O)
qdel(O)
return 1
return
@@ -206,13 +209,14 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
..()
/mob/living/simple_animal/hostile/mimic/copy/AttackingTarget()
. =..()
..()
if(knockdown_people)
var/mob/living/L = .
if(istype(L))
if(iscarbon(target))
var/mob/living/carbon/C = target
if(prob(15))
L.Weaken(1)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
C.Weaken(2)
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
//
// Machine Mimics (Made by Malf AI)
@@ -74,6 +74,7 @@
melee_damage_upper = 12
attacktext = "bites into"
a_intent = "harm"
speak_emote = list("chitters")
attack_sound = 'sound/weapons/bladeslice.ogg'
ranged_cooldown_cap = 4
aggro_vision_range = 9
@@ -97,8 +98,8 @@
stance = HOSTILE_STANCE_ATTACK
if(isliving(target))
var/mob/living/L = target
if(L.bodytemperature > 261)
L.bodytemperature = 261
if(L.bodytemperature > 200)
L.bodytemperature = 200
visible_message("<span class='danger'>The [src.name]'s stare chills [L.name] to the bone!</span>")
return
@@ -142,6 +143,7 @@
attacktext = "barrels into"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "help"
speak_emote = list("screeches")
throw_message = "sinks in slowly, before being pushed out of "
status_flags = CANPUSH
search_objects = 1
@@ -181,7 +183,7 @@
ore_eaten++
if(!(O.type in ore_types_eaten))
ore_types_eaten += O.type
del(O)
qdel(O)
if(ore_eaten > 5)//Limit the scope of the reward you can get, or else things might get silly
ore_eaten = 5
visible_message("<span class='notice'>The ore was swallowed whole!</span>")
@@ -192,7 +194,7 @@
spawn(chase_time)
if(alerted)
visible_message("<span class='danger'>The [src.name] buries into the ground, vanishing from sight!</span>")
del(src)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Reward()
if(!ore_eaten || ore_types_eaten.len == 0)
@@ -242,6 +244,7 @@
melee_damage_upper = 0
attacktext = "lashes out at"
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
ranged_cooldown = 0
ranged_cooldown_cap = 0
@@ -262,6 +265,7 @@
/mob/living/simple_animal/hostile/asteroid/hivelord/Die()
new /obj/item/asteroid/hivelord_core(src.loc)
mouse_opacity = 1
..()
/obj/item/asteroid/hivelord_core
@@ -316,6 +320,7 @@
melee_damage_upper = 2
attacktext = "slashes"
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
environment_smash = 0
pass_flags = PASSTABLE
@@ -17,11 +17,15 @@
melee_damage_upper = 1
attack_same = 2
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("mushroom")
environment_smash = 0
stat_attack = 2
mouse_opacity = 1
speed = 1
ventcrawler = 2
robust_searching = 1
speak_emote = list("squeaks")
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -39,19 +43,20 @@
/mob/living/simple_animal/hostile/mushroom/Life()
..()
if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
health = min(health+2, maxHealth)
adjustBruteLoss(-2)
/mob/living/simple_animal/hostile/mushroom/New()//Makes every shroom a little unique
melee_damage_lower += rand(3, 5)
melee_damage_upper += rand(10,20)
maxHealth += rand(40,60)
move_to_delay = rand(2,10)
move_to_delay = rand(3,11)
var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap")
cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead")
cap_living.color = cap_color
cap_dead.color = cap_color
UpdateMushroomCap()
health = maxHealth
..()
/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(var/damage)//Possibility to flee from a fight just to make it more visually interesting
@@ -74,8 +79,8 @@
if(level_gain < 1)//So we still gain a level if two mushrooms were the same level
level_gain = 1
M.LevelUp(level_gain)
M.health = M.maxHealth
del(src)
M.adjustBruteLoss(-M.maxHealth)
qdel(src)
..()
/mob/living/simple_animal/hostile/mushroom/revive()
@@ -97,9 +102,8 @@
/mob/living/simple_animal/hostile/mushroom/proc/Recover()
visible_message("<span class='notice'>[src] slowly begins to recover.</span>")
health = 5
faint_ticker = 0
icon_state = icon_living
revive()
UpdateMushroomCap()
recovery_cooldown = 1
spawn(300)
@@ -113,7 +117,7 @@
else
melee_damage_upper += (level_gain * rand(1,5))
maxHealth += (level_gain * rand(1,5))
health = maxHealth //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it
adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it
/mob/living/simple_animal/hostile/mushroom/proc/Bruise()
if(!bruised && !stat)
@@ -124,7 +128,7 @@
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom))
if(stat == DEAD && !recovery_cooldown)
Recover()
del(I)
qdel(I)
else
user << "<span class='notice'>[src] won't eat it!</span>"
return
@@ -155,4 +159,4 @@
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
S.reagents.add_reagent("omnizine", powerlevel)
S.reagents.add_reagent("synaptizine", powerlevel)
del(src)
qdel(src)
@@ -9,8 +9,7 @@
response_help = "pushes the"
response_disarm = "shoves"
response_harm = "hits the"
speed = 4
stop_automated_movement_when_pulled = 0
speed = 0
maxHealth = 100
health = 100
@@ -29,6 +28,7 @@
min_n2 = 0
max_n2 = 0
unsuitable_atoms_damage = 15
speak_emote = list("yarrs")
var/corpse = /obj/effect/landmark/mobcorpse/pirate
var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate
@@ -55,5 +55,6 @@
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
del src
ghostize()
qdel(src)
return
@@ -14,15 +14,15 @@
emote_see = list("honks")
speak_chance = 1
a_intent = "harm"
stop_automated_movement_when_pulled = 0
maxHealth = 75
health = 75
speed = -1
speed = 0
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "attacks"
attack_sound = 'sound/items/bikehorn.ogg'
environment_smash = 0
min_oxy = 5
max_oxy = 0
@@ -10,14 +10,14 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
speed = 4
stop_automated_movement_when_pulled = 0
speed = 0
maxHealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/weapon/kitchenknife
@@ -10,14 +10,14 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
speed = 4
stop_automated_movement_when_pulled = 0
speed = 0
maxHealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
var/weapon1
@@ -55,6 +55,7 @@
weapon1 = /obj/item/weapon/melee/energy/sword/red
weapon2 = /obj/item/weapon/shield/energy
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
status_flags = 0
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
@@ -67,6 +68,7 @@
visible_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
visible_message("\red \b [src] blocks the [O] with its shield! ")
playsound(loc, O.hitsound, 25, 1, -1)
else
usr << "\red This weapon is ineffective, it does no damage."
visible_message("\red [user] gently taps [src] with the [O]. ")
@@ -96,7 +98,7 @@
icon_living = "syndicatemeleespace"
name = "Syndicate Commando"
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 0
speed = 1
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0)
return
@@ -128,7 +130,7 @@
max_n2 = 0
minbodytemp = 0
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 0
speed = 1
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
return
@@ -158,6 +160,7 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
flying = 1
/mob/living/simple_animal/hostile/viscerator/Die()
..()
@@ -8,11 +8,10 @@
icon_gib = "pine_1"
speak_chance = 0
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
response_help = "brushes the"
response_disarm = "pushes the"
response_harm = "hits the"
speed = -1
speed = 1
maxHealth = 250
health = 250
@@ -23,6 +22,7 @@
melee_damage_upper = 12
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("pines")
//Space carp aren't affected by atmos.
min_oxy = 0
@@ -35,7 +35,7 @@
max_n2 = 0
minbodytemp = 0
faction = list("carp")
faction = list("hostile")
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
+2 -2
View File
@@ -58,7 +58,7 @@ proc/isembryo(A)
return 0
/proc/iscorgi(A)
if(istype(A, /mob/living/simple_animal/corgi))
if(istype(A, /mob/living/simple_animal/pet/corgi))
return 1
return 0
@@ -68,7 +68,7 @@ proc/isembryo(A)
return 0
/proc/iscat(A)
if(istype(A, /mob/living/simple_animal/cat))
if(istype(A, /mob/living/simple_animal/pet/cat))
return 1
return 0
+9 -9
View File
@@ -318,7 +318,7 @@
for(var/t in organs) //this really should not be necessary
del(t)
var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc)
var/mob/living/simple_animal/pet/corgi/new_corgi = new /mob/living/simple_animal/pet/corgi (loc)
new_corgi.a_intent = "harm"
new_corgi.key = key
@@ -408,9 +408,9 @@
return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype
//Good mobs!
if(ispath(MP, /mob/living/simple_animal/cat))
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/corgi))
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
return 1
if(ispath(MP, /mob/living/simple_animal/crab))
return 1
@@ -430,11 +430,11 @@
return 1 //Parrots are no longer unfinished! -Nodrak
if(ispath(MP, /mob/living/simple_animal/pony))
return 1 // ZOMG PONIES WHEEE
if(ispath(MP, /mob/living/simple_animal/fox))
if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
return 1
if(ispath(MP, /mob/living/simple_animal/pug))
if(ispath(MP, /mob/living/simple_animal/pet/pug))
return 1
if(ispath(MP, /mob/living/simple_animal/butterfly))
return 1
@@ -447,9 +447,9 @@
return 0 //Sanity, this should never happen.
//Animals!
if(ispath(MP, /mob/living/simple_animal/cat))
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/corgi))
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
return 1
if(ispath(MP, /mob/living/simple_animal/crab))
return 1
@@ -461,11 +461,11 @@
return 1
if(ispath(MP, /mob/living/simple_animal/pony))
return 1
if(ispath(MP, /mob/living/simple_animal/fox))
if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
return 1
if(ispath(MP, /mob/living/simple_animal/pug))
if(ispath(MP, /mob/living/simple_animal/pet/pug))
return 1
if(ispath(MP, /mob/living/simple_animal/butterfly))
return 1
+4 -4
View File
@@ -47,7 +47,7 @@
A.real_name = O.real_name
A.name = O.name
if(iscorgi(O))
var/mob/living/simple_animal/corgi/C = O
var/mob/living/simple_animal/pet/corgi/C = O
if(C.inventory_head)
C.inventory_head.loc = C.loc
if(C.inventory_back)
@@ -194,15 +194,15 @@ proc/wabbajack(mob/living/M)
var/animal = pick("parrot","corgi","crab","pug","cat","tomato","mouse","chicken","cow","lizard","chick","fox")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc)
if("corgi") new_mob = new /mob/living/simple_animal/pet/corgi(M.loc)
if("crab") new_mob = new /mob/living/simple_animal/crab(M.loc)
if("cat") new_mob = new /mob/living/simple_animal/cat(M.loc)
if("cat") new_mob = new /mob/living/simple_animal/pet/cat(M.loc)
if("tomato") new_mob = new /mob/living/simple_animal/tomato(M.loc)
if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc)
if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc)
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
if("fox") new_mob = new /mob/living/simple_animal/fox(M.loc)
if("fox") new_mob = new /mob/living/simple_animal/pet/fox(M.loc)
else new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.universal_speak = 1
if("human")
+1 -1
View File
@@ -153,7 +153,7 @@ datum/reagent/corgium
/datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
new /mob/living/simple_animal/corgi(location)
new /mob/living/simple_animal/pet/corgi(location)
..()
return
@@ -243,7 +243,7 @@
if(bitecount >= 4)
M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [src] was")].","<span class=\"notice\">You swallow up the last part of \the [src].")
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
var/mob/living/simple_animal/corgi/C = M
var/mob/living/simple_animal/pet/corgi/C = M
if (C.health <= C.maxHealth + 5)
C.health += 5
else
@@ -32,9 +32,9 @@
)
else
spawn_type = pick(\
/mob/living/simple_animal/cat,\
/mob/living/simple_animal/corgi,\
/mob/living/simple_animal/corgi/puppy,\
/mob/living/simple_animal/pet/cat,\
/mob/living/simple_animal/pet/corgi,\
/mob/living/simple_animal/pet/corgi/puppy,\
/mob/living/simple_animal/chicken,\
/mob/living/simple_animal/cow,\
/mob/living/simple_animal/parrot,\
+6
View File
@@ -57,6 +57,12 @@
typepath = /obj/item/weapon/storage/box/dice
cost = 200
/datum/storeitem/collar
name = "Pet Collar"
desc = "A box containing a pet collar; perfect for claiming a pet as your own personal accessory."
typepath = /obj/item/clothing/accessory/petcollar
cost = 350
/datum/storeitem/crayons
name = "Crayons"
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."