diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm
index ec9ad2f2128..6e1934a77ae 100644
--- a/code/__DEFINES/clothing.dm
+++ b/code/__DEFINES/clothing.dm
@@ -32,7 +32,8 @@
#define slot_r_ear 20
#define slot_wear_pda 21
#define slot_tie 22
-#define slots_amt 22
+#define slot_collar 23
+#define slots_amt 23
//Cant seem to find a mob bitflags area other than the powers one
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index ffd3f91cf5c..3ac858a8a6c 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -788,6 +788,7 @@ Pass a positive integer as an argument to override a bot's default speed.
frustration = 0
/mob/living/simple_animal/bot/show_inv()
+ return
/mob/living/simple_animal/bot/proc/show_controls(mob/M)
users |= M
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 2f45d3e802e..dfc0bce32a3 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -58,7 +58,7 @@
dat += "
| Back: | [(inventory_back && !(inventory_back.flags&ABSTRACT)) ? inventory_back : "Empty"] |
"
if(can_collar)
dat += "| |
"
- dat += "| Collar: | [(collar && !(collar.flags&ABSTRACT)) ? collar : "Empty"] |
"
+ dat += "| Collar: | [(collar && !(collar.flags&ABSTRACT)) ? collar : "Empty"] |
"
dat += {"
Close
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index eae08eb4d0c..d2b03557479 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -579,21 +579,7 @@
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)
@@ -652,57 +638,74 @@
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)
- to_chat(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
- to_chat(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
+/* Inventory */
- 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(!istype(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()
- to_chat(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/show_inv(mob/user as mob)
+ if(!can_collar)
+ return
+
+ user.set_machine(src)
+ var/dat = ""
+ dat += "Close"
+
+ var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
+ popup.set_content(dat)
+ popup.open()
+
+/mob/living/simple_animal/get_item_by_slot(slot_id)
+ switch(slot_id)
+ if(slot_collar)
+ return collar
+ . = ..()
+
+/mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0)
+ // . = ..() // Do not call parent. We do not want animals using their hand slots.
+ switch(slot)
+ if(slot_collar)
+ if(collar)
+ return 0
+ if(!can_collar)
+ return 0
+ if(!istype(I, /obj/item/clothing/accessory/petcollar))
+ return 0
+ return 1
+
+/mob/living/simple_animal/equip_to_slot(obj/item/W, slot)
+ if(!istype(W))
+ return 0
+
+ if(!slot)
+ return 0
+
+ W.forceMove(src)
+ W.equipped(src, slot)
+ W.layer = 20
+ W.plane = HUD_PLANE
+
+ switch(slot)
+ if(slot_collar)
+ collar = W
+ if(collar.tagname)
+ name = collar.tagname
+ real_name = collar.tagname
+ regenerate_icons()
+
+/mob/living/simple_animal/unEquip(obj/item/I, force)
+ . = ..()
+ if(!. || !I)
+ return
+
+ if(I == collar)
+ collar = null
+ regenerate_icons()
/mob/living/simple_animal/get_access()
. = ..()
if(collar)
. |= collar.GetAccess()
+/* End Inventory */
+
/mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion
return