diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 020c60b99bf..37a9b4e314a 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -6,17 +6,36 @@ icon_state = "cutout_basic" w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE - // Possible restyles for the cutout; - // add an entry in change_appearance() if you add to here - var/list/possible_appearances = list("Assistant", "Clown", "Mime", - "Traitor", "Nuke Op", "Cultist", "Clockwork Cultist", - "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer", - "Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon", - "Laughter Demon", "Private Security Officer") - var/pushed_over = FALSE //If the cutout is pushed over and has to be righted - var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version + /// Possible restyles for the cutout, add an entry in change_appearance() if you add to here + var/list/possible_appearances = list() + /// If the cutout is pushed over and has to be righted + var/pushed_over = FALSE + /// If the cutout actually appears as what it portray and not a discolored version + var/deceptive = FALSE - var/lastattacker = null +/obj/item/cardboard_cutout/Initialize() + . = ..() + possible_appearances = sortList(list( + "Assistant" = image(icon = src.icon, icon_state = "cutout_greytide"), + "Clown" = image(icon = src.icon, icon_state = "cutout_clown"), + "Mime" = image(icon = src.icon, icon_state = "cutout_mime"), + "Traitor" = image(icon = src.icon, icon_state = "cutout_traitor"), + "Nuke Op" = image(icon = src.icon, icon_state = "cutout_fluke"), + "Cultist" = image(icon = src.icon, icon_state = "cutout_cultist"), + "Clockwork Cultist" = image(icon = src.icon, icon_state = "cutout_servant"), + "Revolutionary" = image(icon = src.icon, icon_state = "cutout_viva"), + "Wizard" = image(icon = src.icon, icon_state = "cutout_wizard"), + "Shadowling" = image(icon = src.icon, icon_state = "cutout_shadowling"), + "Xenomorph" = image(icon = src.icon, icon_state = "cutout_fukken_xeno"), + "Xenomorph Maid" = image(icon = src.icon, icon_state = "cutout_lusty"), + "Swarmer" = image(icon = src.icon, icon_state = "cutout_swarmer"), + "Ash Walker" = image(icon = src.icon, icon_state = "cutout_free_antag"), + "Deathsquad Officer" = image(icon = src.icon, icon_state = "cutout_deathsquad"), + "Ian" = image(icon = src.icon, icon_state = "cutout_ian"), + "Slaughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "daemon"), + "Laughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "bowmon"), + "Private Security Officer" = image(icon = src.icon, icon_state = "cutout_ntsec") + )) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/cardboard_cutout/attack_hand(mob/living/user) @@ -74,22 +93,21 @@ push_over() return BULLET_ACT_HIT +/** + * change_appearance: Changes a skin of the cardboard cutout based on a user's choice + * + * Arguments: + * * crayon The crayon used to change and recolor the cardboard cutout + * * user The mob choosing a skin of the cardboard cutout + */ /obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user) - if(!crayon || !user) - return - if(pushed_over) - to_chat(user, "Right [src] first!") - return - if(crayon.check_empty(user)) - return - if(crayon.is_capped) - to_chat(user, "Take the cap off first!") - return - var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in sortList(possible_appearances) - if(!new_appearance || !crayon || !user.canUseTopic(src, BE_CLOSE)) - return + var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, .proc/check_menu, user, crayon), radius = 36, require_near = TRUE) + if(!new_appearance) + return FALSE if(!do_after(user, 10, FALSE, src, TRUE)) - return + return FALSE + if(!check_menu(user, crayon)) + return FALSE user.visible_message("[user] gives [src] a new look.", "Voila! You give [src] a new look.") crayon.use_charges(1) crayon.check_empty(user) @@ -178,7 +196,33 @@ name = "Private Security Officer" desc = "A cardboard cutout of a private security officer." icon_state = "cutout_ntsec" - return 1 + else + return FALSE + return TRUE + +/** + * check_menu: Checks if we are allowed to interact with a radial menu + * + * Arguments: + * * user The mob interacting with a menu + * * crayon The crayon used to interact with a menu + */ +/obj/item/cardboard_cutout/proc/check_menu(mob/living/user, obj/item/toy/crayon/crayon) + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + if(pushed_over) + to_chat(user, "Right [src] first!") + return FALSE + if(!crayon || !user.is_holding(crayon)) + return FALSE + if(crayon.check_empty(user)) + return FALSE + if(crayon.is_capped) + to_chat(user, "Take the cap off first!") + return FALSE + return TRUE /obj/item/cardboard_cutout/setDir(newdir) newdir = SOUTH