diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 3a5d02315b..c194233c42 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -28,13 +28,29 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog - var/shaved = 0 - var/obj/item/inventory_head - var/obj/item/inventory_back - var/nofur = 0 //Corgis that have risen past the material plane of existence. gold_core_spawnable = FRIENDLY_SPAWN can_be_held = TRUE collar_type = "corgi" + var/obj/item/inventory_head + var/obj/item/inventory_back + var/shaved = FALSE + var/nofur = FALSE //Corgis that have risen past the material plane of existence. + +/mob/living/simple_animal/pet/dog/corgi/Destroy() + QDEL_NULL(inventory_head) + QDEL_NULL(inventory_back) + return ..() + +/mob/living/simple_animal/pet/dog/corgi/handle_atom_del(atom/A) + if(A == inventory_head) + inventory_head = null + update_corgi_fluff() + regenerate_icons() + if(A == inventory_back) + inventory_back = null + update_corgi_fluff() + regenerate_icons() + return ..() /mob/living/simple_animal/pet/dog/pug name = "\improper pug" @@ -80,23 +96,17 @@ regenerate_icons() /mob/living/simple_animal/pet/dog/corgi/show_inv(mob/user) - user.set_machine(src) - if(user.stat) + if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return + user.set_machine(src) var/dat = "
"
- if(inventory_head)
- dat += "
Head: [inventory_head] (Remove)"
- else
- dat += "
Head: Nothing"
- if(inventory_back)
- dat += "
Back: [inventory_back] (Remove)"
- else
- dat += "
Back: Nothing"
+ dat += "
Head: [inventory_head]" : "add_inv=head'>Nothing"]"
+ dat += "
Back: [inventory_back]" : "add_inv=back'>Nothing"]"
+ dat += "
Collar: [pcollar]" : "add_inv=collar'>Nothing"]"
- user << browse(dat, text("window=mob[];size=325x500", real_name))
- onclose(user, "mob[real_name]")
- return
+ user << browse(dat, "window=mob[REF(src)];size=325x500")
+ onclose(user, "mob[REF(src)]")
/mob/living/simple_animal/pet/dog/corgi/getarmor(def_zone, type)
var/armorval = 0
@@ -128,7 +138,7 @@
if(do_after(user, 50, target = src))
user.visible_message("[user] shaves [src]'s hair using \the [O].")
playsound(loc, 'sound/items/welder2.ogg', 20, 1)
- shaved = 1
+ shaved = TRUE
icon_living = "[initial(icon_living)]_shaved"
icon_dead = "[initial(icon_living)]_shaved_dead"
if(stat == CONSCIOUS)
@@ -147,18 +157,18 @@
L.visible_message("[L] scoops up [src]!")
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
- if(usr.stat)
+ if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ usr << browse(null, "window=mob[REF(src)]")
+ usr.unset_machine()
return
//Removing from inventory
if(href_list["remove_inv"])
- if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || iscyborg(usr) || isalienadult(usr)))
- return
var/remove_from = href_list["remove_inv"]
switch(remove_from)
if(BODY_ZONE_HEAD)
if(inventory_head)
- inventory_head.forceMove(drop_location())
+ usr.put_in_hands(inventory_head)
inventory_head = null
update_corgi_fluff()
regenerate_icons()
@@ -167,24 +177,32 @@
return
if("back")
if(inventory_back)
- inventory_back.forceMove(drop_location())
+ usr.put_in_hands(inventory_back)
inventory_back = null
update_corgi_fluff()
regenerate_icons()
else
to_chat(usr, "There is nothing to remove from its [remove_from].")
return
+ if("collar")
+ if(pcollar)
+ usr.put_in_hands(pcollar)
+ pcollar = null
+ update_corgi_fluff()
+ regenerate_icons()
show_inv(usr)
//Adding things to inventory
else if(href_list["add_inv"])
- if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || iscyborg(usr) || isalienadult(usr)))
- return
var/add_to = href_list["add_inv"]
switch(add_to)
+ if("collar")
+ add_collar(usr.get_active_held_item(), usr)
+ update_corgi_fluff()
+
if(BODY_ZONE_HEAD)
place_on_head(usr.get_active_held_item(),usr)
@@ -229,7 +247,7 @@
show_inv(usr)
else
- ..()
+ 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.
@@ -560,7 +578,7 @@
icon_state = "void_puppy"
icon_living = "void_puppy"
icon_dead = "void_puppy_dead"
- nofur = 1
+ nofur = TRUE
unsuitable_atmos_damage = 0
minbodytemp = TCMB
maxbodytemp = T0C + 40
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index 8df0ee83fe..c24dc6857a 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -2,21 +2,30 @@
icon = 'icons/mob/pets.dmi'
mob_size = MOB_SIZE_SMALL
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
- var/obj/item/clothing/neck/petcollar/pcollar
- var/collar_type
- var/unique_pet = FALSE
blood_volume = BLOOD_VOLUME_NORMAL
+ var/unique_pet = FALSE // if the mob can be renamed
+ var/obj/item/clothing/neck/petcollar/pcollar
+ var/collar_type //if the mob has collar sprites, define them.
+
+/mob/living/simple_animal/pet/handle_atom_del(atom/A)
+ if(A == pcollar)
+ pcollar = null
+ return ..()
+
+/mob/living/simple_animal/pet/proc/add_collar(obj/item/clothing/neck/petcollar/P, mob/user)
+ if(QDELETED(P) || pcollar)
+ return
+ if(!user.transferItemToLoc(P, src))
+ return
+ pcollar = P
+ regenerate_icons()
+ to_chat(user, "You put the [P] around [src]'s neck.")
+ if(P.tagname && !unique_pet)
+ fully_replace_character_name(null, "\proper [P.tagname]")
/mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar && collar_type)
- var/obj/item/clothing/neck/petcollar/P = O
- pcollar = P.type
- regenerate_icons()
- to_chat(user, "You put the [P] around [src]'s neck.")
- if(P.tagname && !unique_pet)
- real_name = "\proper [P.tagname]"
- name = real_name
- qdel(P)
+ add_collar(O, user)
return
if(istype(O, /obj/item/newspaper))
@@ -35,12 +44,16 @@
pcollar = new(src)
regenerate_icons()
+/mob/living/simple_animal/pet/Destroy()
+ QDEL_NULL(pcollar)
+ return ..()
+
/mob/living/simple_animal/pet/revive(full_heal = 0, admin_revive = 0)
- if(..())
+ . = ..()
+ if(.)
if(collar_type)
collar_type = "[initial(collar_type)]"
regenerate_icons()
- . = TRUE
/mob/living/simple_animal/pet/death(gibbed)
..(gibbed)
@@ -50,7 +63,8 @@
/mob/living/simple_animal/pet/gib()
if(pcollar)
- new pcollar(drop_location())
+ pcollar.forceMove(drop_location())
+ pcollar = null
..()
/mob/living/simple_animal/pet/regenerate_icons()
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 4fdf431fa0..fc53483eda 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -181,94 +181,85 @@
*/
/mob/living/simple_animal/parrot/show_inv(mob/user)
user.set_machine(src)
- var/dat = "
"
- if(ears)
- dat += "
Headset: [ears] (Remove)"
- else
- dat += "
Headset: Nothing"
- user << browse(dat, "window=mob[real_name];size=325x500")
- onclose(user, "mob[real_name]")
+ var/dat = "
"
+ dat += "
Headset: [ears]" : "add_inv=ears'>Nothing"]"
+
+ user << browse(dat, "window=mob[REF(src)];size=325x500")
+ onclose(user, "window=mob[REF(src)]")
/mob/living/simple_animal/parrot/Topic(href, href_list)
-
- //Can the usr physically do this?
- if(usr.incapacitated() || !usr.Adjacent(loc))
+ if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ usr << browse(null, "window=mob[REF(src)]")
+ usr.unset_machine()
return
- //Is the usr's mob type able to do this? (lolaliens)
- if(ishuman(usr) || ismonkey(usr) || iscyborg(usr) || isalienadult(usr))
+ //Removing from inventory
+ if(href_list["remove_inv"])
+ var/remove_from = href_list["remove_inv"]
+ switch(remove_from)
+ if("ears")
+ if(!ears)
+ to_chat(usr, "There is nothing to remove from its [remove_from]!")
+ return
+ if(!stat)
+ say("[available_channels.len ? "[pick(available_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
+ ears.forceMove(drop_location())
+ ears = null
+ for(var/possible_phrase in speak)
+ if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys)
+ possible_phrase = copytext(possible_phrase,3)
- //Removing from inventory
- if(href_list["remove_inv"])
- var/remove_from = href_list["remove_inv"]
- switch(remove_from)
- if("ears")
- if(ears)
- if(!stat)
- if(available_channels.len)
- src.say("[pick(available_channels)] BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
- else
- src.say("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
- ears.forceMove(src.loc)
- ears = null
- for(var/possible_phrase in speak)
- if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys)
- possible_phrase = copytext(possible_phrase,3)
- else
- to_chat(usr, "There is nothing to remove from its [remove_from]!")
+ //Adding things to inventory
+ else if(href_list["add_inv"])
+ var/add_to = href_list["add_inv"]
+ if(!usr.get_active_held_item())
+ to_chat(usr, "You have nothing in your hand to put on its [add_to]!")
+ return
+ switch(add_to)
+ if("ears")
+ if(ears)
+ to_chat(usr, "It's already wearing something!")
+ return
+ else
+ var/obj/item/item_to_add = usr.get_active_held_item()
+ if(!item_to_add)
return
- //Adding things to inventory
- else if(href_list["add_inv"])
- var/add_to = href_list["add_inv"]
- if(!usr.get_active_held_item())
- to_chat(usr, "You have nothing in your hand to put on its [add_to]!")
- return
- switch(add_to)
- if("ears")
- if(ears)
- to_chat(usr, "It's already wearing something!")
+ if( !istype(item_to_add, /obj/item/radio/headset) )
+ to_chat(usr, "This object won't fit!")
return
- else
- var/obj/item/item_to_add = usr.get_active_held_item()
- if(!item_to_add)
- return
- if( !istype(item_to_add, /obj/item/radio/headset) )
- to_chat(usr, "This object won't fit!")
- return
+ var/obj/item/radio/headset/headset_to_add = item_to_add
- var/obj/item/radio/headset/headset_to_add = item_to_add
+ if(!usr.transferItemToLoc(headset_to_add, src))
+ return
+ ears = headset_to_add
+ to_chat(usr, "You fit the headset onto [src].")
- if(!usr.transferItemToLoc(headset_to_add, src))
- return
- src.ears = headset_to_add
- to_chat(usr, "You fit the headset onto [src].")
+ clearlist(available_channels)
+ for(var/ch in headset_to_add.channels)
+ switch(ch)
+ if("Engineering")
+ available_channels.Add(":e")
+ if("Command")
+ available_channels.Add(":c")
+ if("Security")
+ available_channels.Add(":s")
+ if("Science")
+ available_channels.Add(":n")
+ if("Medical")
+ available_channels.Add(":m")
+ if("Supply")
+ available_channels.Add(":u")
+ if("Service")
+ available_channels.Add(":v")
- clearlist(available_channels)
- for(var/ch in headset_to_add.channels)
- switch(ch)
- if("Engineering")
- available_channels.Add(":e")
- if("Command")
- available_channels.Add(":c")
- if("Security")
- available_channels.Add(":s")
- if("Science")
- available_channels.Add(":n")
- if("Medical")
- available_channels.Add(":m")
- if("Supply")
- available_channels.Add(":u")
- if("Service")
- available_channels.Add(":v")
-
- if(headset_to_add.translate_binary)
- available_channels.Add(":b")
- else
- ..()
+ if(headset_to_add.translate_binary)
+ available_channels.Add(":b")
+ else
+ return ..()
/*