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 = {" + + + "} + + dat += "" + + dat += "" + + dat += "" + dat += "
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Empty"]
 
Head:[(head && !(head.flags&ABSTRACT)) ? head : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "Empty"]
Pouches:[((l_store && !(l_store.flags&ABSTRACT)) || (r_store && !(r_store.flags&ABSTRACT))) ? "Full" : "Empty"]" + + 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 = {" + + + "} + + dat += "" + + dat += "" + + dat += "" if(handcuffed) - dat += "
Handcuffed" + dat += "" if(legcuffed) - dat += "
Legcuffed" + dat += "" - dat += {" -
-
Close + dat += {"
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Empty"]
 
Back:[(back && !(back.flags&ABSTRACT)) ? back : "Empty"]" if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank)) - dat += "
[internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" + + dat += "
 
Head:[(head && !(head.flags&ABSTRACT)) ? head : "Empty"]
Mask:[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Empty"]
Handcuffed: Remove
Legcuffed
+ 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 = {""} - user << browse(dat, text("window=mob[];size=325x500", real_name)) - onclose(user, "mob[real_name]") - return + dat += "" + dat += "" + if(can_collar) + dat += "" + dat += "" + + dat += {"
Head:[(inventory_head && !(inventory_head.flags&ABSTRACT)) ? inventory_head : "Empty"]
Back:[(inventory_back && !(inventory_back.flags&ABSTRACT)) ? inventory_back : "Empty"]
 
Collar:[(collar && !(collar.flags&ABSTRACT)) ? collar : "Empty"]
+ 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 = {""} - user << browse(dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[real_name]") - return + dat += "" + if(can_collar) + dat += "" + dat += "" + + dat += {"
Headset:[(ears && !(ears.flags&ABSTRACT)) ? ears : "Empty"]
 
Collar:[(collar && !(collar.flags&ABSTRACT)) ? collar : "Empty"]
+ 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 = {" + + + "} + if(can_collar) + dat += "" + dat += {"
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Empty"]
 
Collar:[(collar && !(collar.flags&ABSTRACT)) ? collar : "Empty"]
+ 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 = {" + + + "} + dat += {"
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Empty"]
 
+ 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