diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 232c0920987..da62e32929b 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -194,8 +194,6 @@ datum/hud/New(mob/owner)
ai_hud()
else if(isrobot(mymob))
robot_hud()
- else if(iscorgi(mymob))
- corgi_hud()
else if(isobserver(mymob))
ghost_hud()
else if(isovermind(mymob))
@@ -206,6 +204,8 @@ datum/hud/New(mob/owner)
swarmer_hud()
else if(isguardian(mymob))
guardian_hud()
+ else if(ispet(mymob))
+ corgi_hud()
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
/mob/verb/button_pressed_F12(var/full = 0 as null)
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index c7712fef200..59483364760 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -339,13 +339,79 @@
/obj/item/clothing/accessory/petcollar
name = "pet collar"
+ desc = "The latest fashion accessory for your favorite pets!"
icon_state = "petcollar"
item_color = "petcollar"
var/tagname = null
+ var/obj/item/weapon/card/id/access_id
+
+/obj/item/clothing/accessory/petcollar/Destroy()
+ if(access_id)
+ qdel(access_id)
+ access_id = null
+ processing_objects -= src
+ return ..()
/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]"
+ var/option = "Change Name"
+ if(access_id)
+ option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Remove ID")
+
+ switch(option)
+ if("Change Name")
+ var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
+ if(t)
+ tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
+ name = "[initial(name)] - [tagname]"
+ if("Remove ID")
+ if(access_id)
+ user.visible_message("[user] starts unclipping \the [access_id] from \the [src].")
+ if(do_after(user, 50, target = user) && access_id)
+ user.visible_message("[user] unclips \the [access_id] from \the [src].")
+ access_id.forceMove(get_turf(user))
+ user.put_in_hands(access_id)
+ access_id = null
+
+/obj/item/clothing/accessory/petcollar/attackby(obj/item/weapon/card/id/W, mob/user, params)
+ if(!istype(W))
+ return ..()
+ if(access_id)
+ user << "There is already \a [access_id] clipped onto \the [src]"
+ user.drop_item()
+ W.forceMove(src)
+ access_id = W
+ user << "\The [W] clips onto \the [src] snugly."
+
+/obj/item/clothing/accessory/petcollar/GetAccess()
+ return access_id ? access_id.GetAccess() : ..()
+
+/obj/item/clothing/accessory/petcollar/examine(mob/user)
+ ..()
+ if(access_id)
+ user << "There is \icon[access_id] \a [access_id] clipped onto it."
+
+/obj/item/clothing/accessory/petcollar/equipped(mob/living/simple_animal/user)
+ if(istype(user))
+ processing_objects |= src
+
+/obj/item/clothing/accessory/petcollar/dropped(mob/living/simple_animal/user)
+ processing_objects -= src
+
+/obj/item/clothing/accessory/petcollar/process()
+ var/mob/living/simple_animal/M = loc
+ // if it wasn't intentionally unequipped but isn't being worn, possibly gibbed
+ if(istype(M) && src == M.collar && M.stat != DEAD)
+ return
+
+ var/area/t = get_area(M)
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
+ //give the syndicats a bit of stealth
+ a.autosay("[tagname] has been vandalized in Space!", "[tagname]'s Death Alarm")
+ else
+ a.autosay("[tagname] has been vandalized in [t.name]!", "[tagname]'s Death Alarm")
+ qdel(a)
+ processing_objects -= src
/proc/english_accessory_list(obj/item/clothing/under/U)
if(!istype(U) || !U.accessories.len)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index f6fd8281a7d..f04f0567eba 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -317,22 +317,27 @@ In all, this is a lot like the monkey code. /N
/mob/living/carbon/alien/humanoid/var/temperature_resistance = T0C+75
/mob/living/carbon/alien/humanoid/show_inv(mob/user as mob)
-
user.set_machine(src)
- var/dat = {"
-
[name]
-
-
Left Hand: [(l_hand ? text("[]", l_hand) : "Nothing")]
-
Right Hand: [(r_hand ? text("[]", r_hand) : "Nothing")]
-
Head: [(head ? text("[]", head) : "Nothing")]
-
(Exo)Suit: [(wear_suit ? text("[]", wear_suit) : "Nothing")]
-
Empty Pouches
-
Close
-
"}
- user << browse(dat, text("window=mob[name];size=340x480"))
- onclose(user, "mob[name]")
- return
+ var/dat = {"
+ Close
+ "}
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
+ popup.set_content(dat)
+ popup.open()
/mob/living/carbon/alien/humanoid/canBeHandcuffed()
return 1
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 90b3aa3ebb8..195e965dadf 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -237,15 +237,6 @@
/mob/living/carbon/alien/larva/show_inv(mob/user as mob)
-
- user.set_machine(src)
- var/dat = {"
-
[name]
-
-
Close
-
"}
- user << browse(dat, text("window=mob[name];size=340x480"))
- onclose(user, "mob[name]")
return
/* Commented out because it's duplicated in life.dm
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 92c5bca2c87..100f9fc9d18 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -546,31 +546,34 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/show_inv(mob/user)
user.set_machine(src)
- var/dat = {"
-
- [name]
-
-
Head: [(head && !(head.flags&ABSTRACT)) ? head : "Nothing"]
-
Mask: [(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Nothing"]
-
Left Hand: [(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]
-
Right Hand: [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]"}
-
- dat += "
Back: [back ? back : "Nothing"]"
-
+
+ var/dat = {"
+ Close
"}
- user << browse(dat, "window=mob\ref[src];size=325x500")
- onclose(user, "mob\ref[src]")
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
+ popup.set_content(dat)
+ popup.open()
/mob/living/carbon/Topic(href, href_list)
..()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 86f9c174181..ad27272cd94 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -839,15 +839,6 @@
U.accessories -= A
update_inv_w_uniform()
- if (href_list["refresh"])
- if((machine)&&(in_range(src, usr)))
- show_inv(machine)
-
- if (href_list["mach_close"])
- var/t1 = text("window=[]", href_list["mach_close"])
- unset_machine()
- src << browse(null, t1)
-
if (href_list["criminal"])
if(hasHUD(usr,"security"))
@@ -1942,4 +1933,9 @@
. = ..()
if(wear_id)
- . |= wear_id.GetAccess()
\ No newline at end of file
+ . |= wear_id.GetAccess()
+ if(istype(w_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/under/U = w_uniform
+ if(U.accessories)
+ for(var/obj/item/clothing/accessory/A in U.accessories)
+ . |= A.GetAccess()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 91171c89bc7..950d47a7d69 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -5,7 +5,7 @@
icon_state = "cat2"
icon_living = "cat2"
icon_dead = "cat2_dead"
- icon_resting = "cat_rest"
+ icon_resting = "cat2_rest"
gender = MALE
speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
speak_emote = list("purrs", "meows")
@@ -28,7 +28,8 @@
desc = "GCAT"
icon_state = "cat"
icon_living = "cat"
- icon_dead = "cat2_dead"
+ icon_dead = "cat_dead"
+ icon_resting = "cat_rest"
gender = FEMALE
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 625e9ee86f6..2b53e124796 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -32,31 +32,6 @@
..()
regenerate_icons()
-/mob/living/simple_animal/pet/corgi/handle_hud_icons()
- ..()
- if(fire)
- if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
- else fire.icon_state = "fire0"
- if(oxygen)
- if(oxygen_alert) oxygen.icon_state = "oxy1"
- else oxygen.icon_state = "oxy0"
- if(toxin)
- if(toxins_alert) toxin.icon_state = "tox1"
- else toxin.icon_state = "tox0"
-
-/mob/living/simple_animal/pet/corgi/handle_hud_icons_health()
- ..()
- if(healths)
- switch(health)
- if(30 to INFINITY) healths.icon_state = "health0"
- if(26 to 29) healths.icon_state = "health1"
- if(21 to 25) healths.icon_state = "health2"
- if(16 to 20) healths.icon_state = "health3"
- if(11 to 15) healths.icon_state = "health4"
- if(6 to 10) healths.icon_state = "health5"
- if(1 to 5) healths.icon_state = "health6"
- if(0) healths.icon_state = "health7"
-
/mob/living/simple_animal/pet/corgi/Life()
. = ..()
regenerate_icons()
@@ -73,19 +48,21 @@
user.set_machine(src)
if(user.stat) return
- var/dat = "Inventory of [name]
"
- if(inventory_head)
- dat += "
Head: [inventory_head] (Remove)"
- else
- dat += "
Head: Nothing"
- if(inventory_back)
- dat += "
Back: [inventory_back] (Remove)"
- else
- dat += "
Back: Nothing"
+ var/dat = {"
+ Close
+ "}
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
+ popup.set_content(dat)
+ popup.open()
/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
@@ -542,11 +519,7 @@
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
- if(pcollar)
- overlays += collar
- overlays += pettag
-
- return
+ ..(0)
/mob/living/simple_animal/pet/corgi/puppy
name = "\improper corgi puppy"
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 60377828f43..27ead7947e1 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -22,6 +22,7 @@
var/obj/item/inventory_head
var/obj/item/inventory_mask
can_hide = 1
+ can_collar = 1
/mob/living/simple_animal/crab/handle_automated_movement()
//CRAB movement
diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm
index 01e322c80aa..68f168188b4 100644
--- a/code/modules/mob/living/simple_animal/friendly/deer.dm
+++ b/code/modules/mob/living/simple_animal/friendly/deer.dm
@@ -14,4 +14,5 @@
meat_amount = 3
response_help = "pets"
response_disarm = "gently pushes aside"
- response_harm = "kicks"
\ No newline at end of file
+ response_harm = "kicks"
+ can_collar = 1
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm
index 95caf726186..dce5fecc2b7 100644
--- a/code/modules/mob/living/simple_animal/friendly/diona.dm
+++ b/code/modules/mob/living/simple_animal/friendly/diona.dm
@@ -38,6 +38,7 @@
var/list/donors = list()
var/ready_evolve = 0
holder_type = /obj/item/weapon/holder/diona
+ can_collar = 1
/mob/living/simple_animal/diona/New()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 1aa802bfb1a..d7b76725db8 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -26,6 +26,7 @@
melee_damage_upper = 2
stop_automated_movement_when_pulled = 1
var/milk_content = 0
+ can_collar = 1
/mob/living/simple_animal/hostile/retaliate/goat/handle_automated_movement()
..()
@@ -111,6 +112,7 @@
attack_sound = 'sound/weapons/punch1.ogg'
health = 50
var/milk_content = 0
+ can_collar = 1
/mob/living/simple_animal/cow/New()
..()
@@ -178,6 +180,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
small = 1
can_hide = 1
+ can_collar = 1
/mob/living/simple_animal/chick/New()
..()
@@ -220,6 +223,7 @@ var/global/chicken_count = 0
pass_flags = PASSTABLE | PASSMOB
small = 1
can_hide = 1
+ can_collar = 1
/mob/living/simple_animal/chicken/New()
..()
@@ -297,6 +301,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
+ can_collar = 1
/mob/living/simple_animal/turkey
name = "turkey"
@@ -318,6 +323,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "pecks"
health = 50
+ can_collar = 1
/mob/living/simple_animal/goose
name = "goose"
@@ -339,6 +345,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
+ can_collar = 1
/mob/living/simple_animal/seal
name = "seal"
@@ -360,6 +367,7 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
+ can_collar = 1
/mob/living/simple_animal/walrus
name = "walrus"
@@ -381,3 +389,4 @@ var/global/chicken_count = 0
response_harm = "kicks the"
attacktext = "kicks"
health = 50
+ can_collar = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index c2118b19bc1..74bc6839ba1 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -22,3 +22,4 @@
can_hide = 1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 1
+ can_collar = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index a34e8b9fe8b..03fbb30ed06 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -31,6 +31,7 @@
universal_speak = 0
can_hide = 1
holder_type = /obj/item/weapon/holder/mouse
+ can_collar = 1
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index 8596355f16e..eba412580db 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -1,22 +1,8 @@
/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
+ can_collar = 1
/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 << "You put the [P] around [src]'s neck."
- if(P.tagname)
- name = P.tagname
- real_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].")
@@ -27,12 +13,6 @@
else
..()
-/mob/living/simple_animal/pet/New()
- ..()
- if(pcollar)
- pcollar = new(src)
- regenerate_icons()
-
/mob/living/simple_animal/pet/revive()
..()
regenerate_icons()
@@ -41,7 +21,9 @@
..()
regenerate_icons()
-/mob/living/simple_animal/pet/regenerate_icons()
- overlays.Cut()
- overlays += collar
- overlays += pettag
+/mob/living/simple_animal/pet/regenerate_icons(cut_overlays = 1)
+ if(cut_overlays)
+ overlays.Cut()
+ if(collar)
+ overlays += "[icon_state]collar"
+ overlays += "[icon_state]tag"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 47bc5b31b8f..1732caa55f3 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -34,6 +34,7 @@
icon_dead = "parrot_dead"
pass_flags = PASSTABLE
small = 1
+ can_collar = 1
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
speak_emote = list("squawks","says","yells")
@@ -118,17 +119,21 @@
*/
/mob/living/simple_animal/parrot/show_inv(mob/user as mob)
user.set_machine(src)
- if(user.stat) return
- var/dat = "Inventory of [name]
"
- if(ears)
- dat += "
Headset: [ears] (Remove)"
- else
- dat += "
Headset: Nothing"
+ var/dat = {"
+ Close
+ "}
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
+ popup.set_content(dat)
+ popup.open()
/mob/living/simple_animal/parrot/Topic(href, href_list)
@@ -138,8 +143,6 @@
//Is the usr's mob type able to do this?
if(ishuman(usr) || isrobot(usr))
-
- //Removing from inventory
if(href_list["remove_inv"])
var/remove_from = href_list["remove_inv"]
switch(remove_from)
@@ -157,8 +160,7 @@
else
usr << "\red There is nothing to remove from its [remove_from]."
return
-
- //Adding things to inventory
+ show_inv(usr)
else if(href_list["add_inv"])
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
@@ -205,6 +207,7 @@
if(headset_to_add.translate_binary)
available_channels.Add(":b")
+ show_inv(usr)
else
..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index e884fe41648..3a6333a3d00 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -67,6 +67,9 @@
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
var/can_hide = 0
+ var/obj/item/clothing/accessory/petcollar/collar = null
+ var/can_collar = 0 // can add collar to mob or not
+
//Hot simple_animal baby making vars
var/childtype = null
var/scan_ready = 1
@@ -80,7 +83,15 @@
verbs -= /mob/verb/observe
if(!can_hide)
verbs -= /mob/living/simple_animal/verb/hide
+ if(collar)
+ if(!istype(collar))
+ collar = new(src)
+ regenerate_icons()
+/mob/living/simple_animal/Destroy()
+ if(collar)
+ collar.forceMove(loc)
+ collar = null
/mob/living/simple_animal/Login()
if(src && src.client)
@@ -92,6 +103,30 @@
..()
health = Clamp(health, 0, maxHealth)
+/mob/living/simple_animal/handle_hud_icons()
+ ..()
+ if(fire)
+ if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
+ else fire.icon_state = "fire0"
+ if(oxygen)
+ if(oxygen_alert) oxygen.icon_state = "oxy1"
+ else oxygen.icon_state = "oxy0"
+ if(toxin)
+ if(toxins_alert) toxin.icon_state = "tox1"
+ else toxin.icon_state = "tox0"
+
+/mob/living/simple_animal/handle_hud_icons_health()
+ ..()
+ if(healths && maxHealth > 0)
+ switch(health / maxHealth * 30)
+ if(30 to INFINITY) healths.icon_state = "health0"
+ if(26 to 29) healths.icon_state = "health1"
+ if(21 to 25) healths.icon_state = "health2"
+ if(16 to 20) healths.icon_state = "health3"
+ if(11 to 15) healths.icon_state = "health4"
+ if(6 to 10) healths.icon_state = "health5"
+ if(1 to 5) healths.icon_state = "health6"
+ if(0) healths.icon_state = "health7"
/mob/living/simple_animal/Life()
@@ -176,7 +211,7 @@
var/diff = areatemp - bodytemperature
diff = diff / 5
bodytemperature += diff
-
+
var/tox = environment.toxins
var/oxy = environment.oxygen
var/n2 = environment.nitrogen
@@ -401,6 +436,18 @@
else
user << "\blue [src] is dead, medical items won't bring it back to life."
return
+ else if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar))
+ var/obj/item/clothing/accessory/petcollar/C = O
+ user.drop_item()
+ C.forceMove(src)
+ collar = C
+ collar.equipped(src)
+ regenerate_icons()
+ usr << "You put \the [C] around \the [src]'s neck."
+ if(C.tagname)
+ name = C.tagname
+ real_name = C.tagname
+ return
else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if(istype(O, /obj/item/weapon/kitchen/knife))
harvest()
@@ -525,6 +572,21 @@
density = initial(density)
update_canmove()
+/mob/living/simple_animal/show_inv(mob/user as mob)
+ user.set_machine(src)
+ var/dat = {"
+ Close
+ "}
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
+ popup.set_content(dat)
+ popup.open()
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies)
@@ -586,3 +648,54 @@
if(changed)
animate(src, transform = ntransform, time = 2, easing = EASE_IN|EASE_OUT)
+
+/mob/living/simple_animal/Topic(href, href_list)
+ if(!usr.stat && usr.canmove && !usr.restrained() && in_range(src, usr))
+ if(href_list["remove_inv"])
+ if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
+ return
+ var/remove_from = href_list["remove_inv"]
+ switch(remove_from)
+ if("collar")
+ if(!can_collar)
+ return
+ if(collar)
+ if(collar.flags & NODROP)
+ usr << "\The [collar] is stuck too hard to [src] for you to remove!"
+ return
+ collar.dropped(src)
+ collar.forceMove(src.loc)
+ collar = null
+ regenerate_icons()
+ else
+ usr << "There is nothing to remove from its [remove_from]."
+ return
+ show_inv(usr)
+ else if(href_list["add_inv"])
+ if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
+ return
+
+ var/add_to = href_list["add_inv"]
+ switch(add_to)
+ if("collar")
+ if(!can_collar || collar)
+ return
+ var/obj/item/clothing/accessory/petcollar/C = usr.get_active_hand()
+ if(!C)
+ usr.visible_message("[usr] rubs [src]'s neck.","You rub [src]'s neck for a moment.")
+ return
+ usr.drop_item()
+ C.forceMove(src)
+ collar = C
+ collar.equipped(src)
+ regenerate_icons()
+ usr << "You put \the [C] around \the [src]'s neck."
+ if(C.tagname)
+ name = C.tagname
+ real_name = C.tagname
+ show_inv(usr)
+
+/mob/living/simple_animal/get_access()
+ . = ..()
+ if(collar)
+ . |= collar.GetAccess()
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 77cf19d2d40..f8152ee0f96 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -495,16 +495,17 @@ var/list/slot_equipment_priority = list( \
/mob/proc/show_inv(mob/user)
user.set_machine(src)
- var/dat = {"
-
- [name]
-
-
Left Hand: [(l_hand&&!(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]
-
Right Hand: [(r_hand&&!(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]
-
Close
+ var/dat = {"
+ Close
"}
- user << browse(dat, "window=mob\ref[src];size=325x500")
- onclose(user, "mob\ref[src]")
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
+ popup.set_content(dat)
+ popup.open()
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
/mob/verb/examinate(atom/A as mob|obj|turf in view())
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index ff22f315867..0768367eb81 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -62,6 +62,13 @@ proc/isembryo(A)
return 1
return 0
+/proc/ispet(A)
+ if(istype(A, /mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = A
+ if(SA.can_collar)
+ return 1
+ return 0
+
/proc/iscrab(A)
if(istype(A, /mob/living/simple_animal/crab))
return 1
diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi
index 169beacef43..fee5f3ec69f 100644
Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ