diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index 92fe31d32a98..d22b1be85344 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -47,7 +47,7 @@ /obj/item/stack/sticky_tape/super name = "super sticky tape" singular_name = "super sticky tape" - desc = "Quite possibly the most mischevious substance in the galaxy. Use with extreme lack of caution." + desc = "Quite possibly the most mischievous substance in the galaxy. Use with extreme lack of caution." icon_state = "tape_y" prefix = "super sticky" conferred_embed = EMBED_HARMLESS_SUPERIOR diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index be79cf7184ab..405cda36580c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -67,7 +67,7 @@ var/can_receive = TRUE var/obj/item/card/id/access_card = null var/chassis = "repairbot" - var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE, "bat" = FALSE, "butterfly" = FALSE, "hawk" = FALSE, "lizard" = FALSE, "duffel" = TRUE, "snake" = FALSE) //assoc value is whether it can be picked up. + var/list/possible_chassis = list("bat" = TRUE, "butterfly" = TRUE, "carp" = TRUE, "cat" = TRUE, "corgi" = TRUE, "corgi_puppy" = TRUE, "crow" = TRUE, "duffel" = TRUE, "fox" = TRUE, "frog" = TRUE, "hawk" = TRUE, "lizard" = TRUE, "monkey" = TRUE, "mothroach" = TRUE, "mouse" = TRUE, "rabbit" = TRUE, "repairbot" = TRUE, "snake" = TRUE, "spider" = TRUE) //assoc value is whether it can be picked up. var/emitterhealth = 20 var/emittermaxhealth = 20 diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index ca65a416691c..31a807b319b2 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -72,11 +72,18 @@ holoform = FALSE set_resting(resting) + +//Sets a new holochassis skin based on a pAI's choice + /mob/living/silicon/pai/proc/choose_chassis() - if(!isturf(loc) && loc != card) - to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!") - return FALSE - var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in sortList(possible_chassis) + var/list/skins = list() + for(var/holochassis_option in possible_chassis) + var/image/item_image = image(icon = src.icon, icon_state = holochassis_option) + skins += list("[holochassis_option]" = item_image) + sortList(skins) + + var/atom/anchor = get_atom_on_turf(src) + var/choice = show_radial_menu(src, anchor, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), anchor), radius = 40, require_near = TRUE) if(!choice) return FALSE chassis = choice @@ -85,6 +92,18 @@ update_resting() to_chat(src, "You switch your holochassis projection composite to [chassis].") +//Checks if we are allowed to interact with a radial menu + +/mob/living/silicon/pai/proc/check_menu(atom/anchor) + if(incapacitated()) + return FALSE + if(get_turf(src) != get_turf(anchor)) + return FALSE + if(!isturf(loc) && loc != card) + to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!") + return FALSE + return TRUE + /mob/living/silicon/pai/update_resting() . = ..() if(resting) diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index a099c05488fa..08e41f3bee44 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(pai_faces, list( "laugh", "lenny", "loss", - "michevious", + "mischievous", "missingno", "mistake", "moth", @@ -53,6 +53,60 @@ GLOBAL_LIST_INIT(pai_faces, list( "woozy", )) +// I AM A FAKE AND A FRAUD +// in order to get radials to work, the below list utilizes an entirely new .dmi that combines the base pAI card sprite along with the two overlays. +// if you want to add a pAI screen in future, you will need to use one of the two bases I included in aicardsradial.dmi in addition to adding the +// screen sprite in aicards.dmi +// I pray to god someone more talented than me can fix this hack in future + +GLOBAL_LIST_INIT(pai_faces_icons, list( + ":>" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-:>"), + "=_=" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-=_="), + "angry" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-angry"), + "ashamed" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-ashamed"), + "bookworm" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-bookworm"), + "boykisser" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-boykisser"), + "cat" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-cat"), + "clueless" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-clueless"), + "concerned" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-concerned"), + "dread" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-dread"), + "estatic" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-estatic"), + "exclaim" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-exclaim"), + "eye" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-eye"), + "eyewall" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-eyewall"), + "face" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-face"), + "fangs" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-fangs"), + "flushed" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-flushed"), + "foureyes" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-foureyes"), + "greenjary" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-greenjary"), + "happy" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-happy"), + "heart" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-heart"), + "laugh" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-laugh"), + "lenny" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-lenny"), + "loss" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-loss"), + "mischievous" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-mischievous"), + "missingno" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-missingno"), + "mistake" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-mistake"), + "moth" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-moth"), + "moyai" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-moyai"), + "neko" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-neko"), + "null" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-null"), + "o.o" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-o.o"), + "off" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-off"), + "pleading" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-pleading"), + "question" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-question"), + "sadcat" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-sadcat"), + "smug" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-smug"), + "snek" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-snek"), + "spiral" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-spiral"), + "sunglasses" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-sunglasses"), + "syndisnake" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-syndisnake"), //what if cybersun was right all along actually + "twoeyes" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-twoeyes"), + "T_T" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-T_T"), + "what" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-what"), + "wink" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-wink"), + "woozy" = image(icon = 'icons/obj/aicardsradial.dmi', icon_state = "pai-woozy"), + )) /mob/living/silicon/pai/var/list/available_software = list( //WS -- idk what to do about removing code so i'm just putting this note here to say, removes messanger and manifest, thet get it for free now //Nightvision @@ -204,7 +258,8 @@ GLOBAL_LIST_INIT(pai_faces, list( radio.attack_self(src) if("image") // Set pAI card display face - var/new_emotion = input("Select your new display image.", "Display Image", "null") in sortList(GLOB.pai_faces) + var/atom/anchor = get_atom_on_turf(src) + var/new_emotion = show_radial_menu(usr, anchor, GLOB.pai_faces_icons, radius = 40, require_near = TRUE) card.set_emotion(new_emotion) if("news") diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi index 1c609686be11..4e46503e87c7 100644 Binary files a/icons/mob/pai.dmi and b/icons/mob/pai.dmi differ diff --git a/icons/mob/pai_item_head.dmi b/icons/mob/pai_item_head.dmi index 337e22254ea8..38db9379be12 100644 Binary files a/icons/mob/pai_item_head.dmi and b/icons/mob/pai_item_head.dmi differ diff --git a/icons/mob/pai_item_lh.dmi b/icons/mob/pai_item_lh.dmi index fb9c77f5abae..49cd390f8d2f 100644 Binary files a/icons/mob/pai_item_lh.dmi and b/icons/mob/pai_item_lh.dmi differ diff --git a/icons/mob/pai_item_rh.dmi b/icons/mob/pai_item_rh.dmi index ced27446a451..de7bc143b9c3 100644 Binary files a/icons/mob/pai_item_rh.dmi and b/icons/mob/pai_item_rh.dmi differ diff --git a/icons/obj/aicards.dmi b/icons/obj/aicards.dmi index 5698962eb9fb..a0b0ecba5be7 100644 Binary files a/icons/obj/aicards.dmi and b/icons/obj/aicards.dmi differ diff --git a/icons/obj/aicardsradial.dmi b/icons/obj/aicardsradial.dmi new file mode 100644 index 000000000000..ad5b874b221c Binary files /dev/null and b/icons/obj/aicardsradial.dmi differ