diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 89688000141..2208f9ae143 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1180,14 +1180,14 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY name = "Corgi Crate" cost = 50 containertype = /obj/structure/closet/critter/corgi - contains = list(/obj/item/clothing/accessory/petcollar) + contains = list(/obj/item/petcollar) containername = "corgi crate" /datum/supply_packs/organic/cat name = "Cat Crate" cost = 50 //Cats are worth as much as corgis. containertype = /obj/structure/closet/critter/cat - contains = list(/obj/item/clothing/accessory/petcollar, + contains = list(/obj/item/petcollar, /obj/item/toy/cattoy) containername = "cat crate" @@ -1195,14 +1195,14 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY name = "Pug Crate" cost = 50 containertype = /obj/structure/closet/critter/pug - contains = list(/obj/item/clothing/accessory/petcollar) + contains = list(/obj/item/petcollar) containername = "pug crate" /datum/supply_packs/organic/fox name = "Fox Crate" cost = 55 //Foxes are cool. containertype = /obj/structure/closet/critter/fox - contains = list(/obj/item/clothing/accessory/petcollar) + contains = list(/obj/item/petcollar) containername = "fox crate" /datum/supply_packs/organic/butterfly diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 6930d4f0b50..010a2ecc09d 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1878,12 +1878,12 @@ icon_state = "crittercare" icon_lightmask = "crittercare" icon_panel = "drobe" - products = list(/obj/item/clothing/accessory/petcollar = 5, /obj/item/storage/firstaid/aquatic_kit/full =5, /obj/item/fish_eggs/goldfish = 5, + products = list(/obj/item/petcollar = 5, /obj/item/storage/firstaid/aquatic_kit/full = 5, /obj/item/fish_eggs/goldfish = 5, /obj/item/fish_eggs/clownfish = 5, /obj/item/fish_eggs/shark = 5, /obj/item/fish_eggs/feederfish = 10, /obj/item/fish_eggs/salmon = 5, /obj/item/fish_eggs/catfish = 5, /obj/item/fish_eggs/glofish = 5, /obj/item/fish_eggs/electric_eel = 5, /obj/item/fish_eggs/shrimp = 10, /obj/item/toy/pet_rock = 5, ) - prices = list(/obj/item/clothing/accessory/petcollar = 50, /obj/item/storage/firstaid/aquatic_kit/full = 60, /obj/item/fish_eggs/goldfish = 10, + prices = list(/obj/item/petcollar = 50, /obj/item/storage/firstaid/aquatic_kit/full = 60, /obj/item/fish_eggs/goldfish = 10, /obj/item/fish_eggs/clownfish = 10, /obj/item/fish_eggs/shark = 10, /obj/item/fish_eggs/feederfish = 5, /obj/item/fish_eggs/salmon = 10, /obj/item/fish_eggs/catfish = 10, /obj/item/fish_eggs/glofish = 10, /obj/item/fish_eggs/electric_eel = 10, /obj/item/fish_eggs/shrimp = 5, /obj/item/toy/pet_rock = 100, diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm index 11602314a88..bd693b99d6c 100644 --- a/code/game/objects/items/misc.dm +++ b/code/game/objects/items/misc.dm @@ -5,6 +5,7 @@ /* mouse_drag_pointer Beach Ball + petcollar */ /obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER @@ -22,3 +23,80 @@ throw_speed = 1 throw_range = 20 flags = CONDUCT + +/obj/item/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/card/id/access_id + +/obj/item/petcollar/Destroy() + QDEL_NULL(access_id) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/petcollar/attack_self(mob/user) + 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") + if(QDELETED(src) || !Adjacent(user)) + return + switch(option) + if("Change Name") + var/petname = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text + if(petname && !QDELETED(src) && Adjacent(user)) + tagname = copytext(sanitize(petname), 1, MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" + if("Remove ID") + if(access_id) + user.visible_message("[user] starts unclipping [access_id] from [src].") + if(do_after(user, 5 SECONDS, target = user) && access_id && !QDELETED(src) && Adjacent(user)) + user.visible_message("[user] unclips [access_id] from [src].") + access_id.forceMove(get_turf(user)) + user.put_in_hands(access_id) + access_id = null + +/obj/item/petcollar/attackby(obj/item/card/id/W, mob/user, params) + if(!istype(W)) + return ..() + if(access_id) + to_chat(user, "There is already \a [access_id] clipped onto [src].") + return ..() + user.drop_item() + W.forceMove(src) + access_id = W + to_chat(user, "[W] clips onto [src] snugly.") + +/obj/item/petcollar/GetAccess() + return access_id ? access_id.GetAccess() : ..() + +/obj/item/petcollar/examine(mob/user) + . = ..() + if(access_id) + . += "There is [bicon(access_id)] \a [access_id] clipped onto it." + +/obj/item/petcollar/equipped(mob/living/simple_animal/user) + if(istype(user)) + START_PROCESSING(SSobj, src) + +/obj/item/petcollar/dropped(mob/living/simple_animal/user) + ..() + STOP_PROCESSING(SSobj, src) + +/obj/item/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.pcollar && M.stat != DEAD) + return + + var/area/pet_death_area = get_area(M) + var/obj/item/radio/headset/pet_death_announcer = new /obj/item/radio/headset(src) + if(istype(pet_death_area, /area/syndicate_mothership) || istype(pet_death_area, /area/shuttle/syndicate_elite)) + //give the syndicats a bit of stealth + pet_death_announcer.autosay("[M] has been vandalized in Space!", "[M]'s Death Alarm") + else + pet_death_announcer.autosay("[M] has been vandalized in [pet_death_area.name]!", "[M]'s Death Alarm") + qdel(pet_death_announcer) + STOP_PROCESSING(SSobj, src) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 76a69903ccb..ff87d5d8114 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1953,7 +1953,7 @@ P.universal_understand = TRUE P.can_collar = TRUE P.faction = list("neutral") - var/obj/item/clothing/accessory/petcollar/C = new + var/obj/item/petcollar/C = new P.add_collar(C) var/obj/item/card/id/I = H.wear_id if(I) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 7b537844cbd..3694f6ac445 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -662,81 +662,6 @@ item_state = "corset_blue" item_color = "corset_blue" -/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/card/id/access_id - -/obj/item/clothing/accessory/petcollar/Destroy() - QDEL_NULL(access_id) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob) - 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/card/id/W, mob/user, params) - if(!istype(W)) - return ..() - if(access_id) - to_chat(user, "There is already \a [access_id] clipped onto \the [src]") - user.drop_item() - W.forceMove(src) - access_id = W - to_chat(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) - . += "There is [bicon(access_id)] \a [access_id] clipped onto it." - -/obj/item/clothing/accessory/petcollar/equipped(mob/living/simple_animal/user) - if(istype(user)) - START_PROCESSING(SSobj, src) - -/obj/item/clothing/accessory/petcollar/dropped(mob/living/simple_animal/user) - ..() - STOP_PROCESSING(SSobj, 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.pcollar && M.stat != DEAD) - return - - var/area/t = get_area(M) - var/obj/item/radio/headset/a = new /obj/item/radio/headset(src) - if(istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite)) - //give the syndicats a bit of stealth - a.autosay("[M] has been vandalized in Space!", "[M]'s Death Alarm") - else - a.autosay("[M] has been vandalized in [t.name]!", "[M]'s Death Alarm") - qdel(a) - STOP_PROCESSING(SSobj, src) - /proc/english_accessory_list(obj/item/clothing/under/U) if(!istype(U) || !U.accessories.len) return diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 49b82ee5805..022981c2872 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -72,7 +72,7 @@ if(61 to 62) for(var/i in 1 to 5) new /obj/item/clothing/head/kitty(src) - new /obj/item/clothing/accessory/petcollar(src) + new /obj/item/petcollar(src) if(63 to 64) for(var/i in 1 to rand(4, 7)) var/newcoin = pick(/obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 5cba2950976..69079d0bcdd 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -1,5 +1,5 @@ /mob/living/simple_animal/attackby(obj/item/O, mob/living/user) - if(can_collar && istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar) + if(can_collar && istype(O, /obj/item/petcollar) && !pcollar) add_collar(O, user) return else diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index c07fb48bd7b..e7638b81c79 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -72,7 +72,7 @@ /// Allows a mob to pass unbolted doors while hidden var/pass_door_while_hidden = FALSE - var/obj/item/clothing/accessory/petcollar/pcollar = null + var/obj/item/petcollar/pcollar = null var/collar_type //if the mob has collar sprites, define them. var/unique_pet = FALSE // if the mob can be renamed var/can_collar = FALSE // can add collar to mob or not @@ -499,7 +499,7 @@ return FALSE if(!can_collar) return FALSE - if(!istype(I, /obj/item/clothing/accessory/petcollar)) + if(!istype(I, /obj/item/petcollar)) return FALSE return TRUE @@ -608,7 +608,7 @@ SSidlenpcpool.idle_mobs_by_zlevel[old_z] -= src toggle_ai(initial(AIStatus)) -/mob/living/simple_animal/proc/add_collar(obj/item/clothing/accessory/petcollar/P, mob/user) +/mob/living/simple_animal/proc/add_collar(obj/item/petcollar/P, mob/user) if(!istype(P) || QDELETED(P) || pcollar) return if(user && !user.unEquip(P)) diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 7675ec0d51c..a4b9cccce06 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 96879336814..af0a38e7590 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ