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 = "
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" + 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 = "

Inventory of [name]

" - 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 = "

Inventory of [name]

" + 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 ..() /*