diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index c943a0d144112..ff2a58cba765b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -325,6 +325,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_GRABWEAKNESS "grab_weakness" #define TRAIT_BRAIN_TUMOR "brain_tumor" #define TRAIT_PROSKATER "pro_skater" +#define TRAIT_PLUSHIELOVER "plushie lover" ///Trait for dryable items #define TRAIT_DRYABLE "trait_dryable" diff --git a/code/datums/traits/positive_quirk.dm b/code/datums/traits/positive_quirk.dm index c9b71106f1148..60010a3b2c8e5 100644 --- a/code/datums/traits/positive_quirk.dm +++ b/code/datums/traits/positive_quirk.dm @@ -89,7 +89,7 @@ /datum/quirk/musician name = "Musician" - desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul." + desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul. You start with a delivery beacon." icon = "guitar" value = 1 mob_trait = TRAIT_MUSICIAN @@ -284,3 +284,21 @@ /datum/quirk/proskater/on_spawn() var/mob/living/carbon/human/H = quirk_target H.equip_to_slot_or_del(new /obj/item/melee/skateboard/pro(H), ITEM_SLOT_BACKPACK) + +/datum/quirk/plushielover + name = "Plushie Lover" + desc = "You love your squishy friends so much. You start with a plushie delivery beacon." + icon = "heart" + value = 1 + mob_trait = TRAIT_PLUSHIELOVER + gain_text = "You can't wait to hug a plushie!." + lose_text = "You don't feel that passion for plushies anymore." + +/datum/quirk/plushielover/on_spawn() + var/mob/living/carbon/human/H = quirk_target + var/obj/item/choice_beacon/radial/plushie/B = new(get_turf(H)) + var/list/slots = list ( + "backpack" = ITEM_SLOT_BACKPACK, + "hands" = ITEM_SLOT_HANDS, + ) + H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 328ca4ba4675a..9b9a9f1bacecf 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -721,6 +721,77 @@ desc = "Hgrgrhrhg cute." icon_state = "flushplush" +/obj/item/choice_beacon/radial/plushie + name = "plushie delivery beacon" + desc = "Summon your new friend!" + icon_state = "gangtool-plushie" + var/static/list/plushie_list = list( + /obj/item/toy/plush/bubbleplush, + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/slimeplushie, + /obj/item/toy/plush/nukeplushie, + /obj/item/toy/plush/awakenedplushie, + /obj/item/toy/plush/beeplushie, + /obj/item/toy/plush/crossed, + /obj/item/toy/plush/rouny, + /obj/item/toy/plush/runtime, + /obj/item/toy/plush/flushed, + /obj/item/toy/plush/gondola, + /obj/item/toy/plush/moth/atlas, + /obj/item/toy/plush/moth/bluespace, + /obj/item/toy/plush/moth/brown, + /obj/item/toy/plush/moth/clockwork, + /obj/item/toy/plush/moth/deadhead, + /obj/item/toy/plush/moth/firewatch, + /obj/item/toy/plush/moth/gothic, + /obj/item/toy/plush/moth/lovers, + /obj/item/toy/plush/moth/luna, + /obj/item/toy/plush/moth/monarch, + /obj/item/toy/plush/moth/moonfly, + /obj/item/toy/plush/moth/plasmafire, + /obj/item/toy/plush/moth/poison, + /obj/item/toy/plush/moth/punished, + /obj/item/toy/plush/moth/ragged, + /obj/item/toy/plush/moth/rainbow, + /obj/item/toy/plush/moth/redish, + /obj/item/toy/plush/moth/rosy, + /obj/item/toy/plush/moth/royal, + /obj/item/toy/plush/moth/snow, + /obj/item/toy/plush/moth/whitefly, + /obj/item/toy/plush/moth/witchwing + ) + +/obj/item/choice_beacon/radial/plushie/generate_options(mob/living/M) + var/list/item_list = generate_item_list() + if(!length(item_list)) + return + var/choice = show_radial_menu(M, src, item_list, radius = 36, require_near = TRUE) + if(!QDELETED(src) && !(isnull(choice)) && !M.incapacitated() && in_range(M,src)) + for(var/V in plushie_list) + var/atom/A = V + if(initial(A.name) == choice) + spawn_option(A,M) + uses-- + if(!uses) + qdel(src) + else + balloon_alert(M, "[uses] use[uses > 1 ? "s" : ""] remaining") + to_chat(M, "[uses] use[uses > 1 ? "s" : ""] remaining on the [src].") + return + +/obj/item/choice_beacon/radial/plushie/generate_item_list() + var/static/list/item_list + if(!item_list) + item_list = list() + for(var/obj/item/toy/plush/I as() in plushie_list) + var/image/plushie_icon = image(initial(I.icon), initial(I.icon_state)) + var/datum/radial_menu_choice/choice = new + choice.image = plushie_icon + item_list[initial(I.name)] = choice + return item_list + ///////////////// //DONATOR ITEMS// ///////////////// diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index dde806fa765e5..03ea1866af324 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -239,7 +239,7 @@ /obj/item/choice_beacon/radial/music name = "instrument delivery beacon" desc = "Summon your tool of art." - icon_state = "gangtool-red" + icon_state = "gangtool-music" var/static/list/instrument_list /obj/item/choice_beacon/radial/music/Initialize(mapload) diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index abe44ffc5eb06..3a470546c5c5c 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -11,7 +11,9 @@ /obj/item/toy/cards/deck/cas/black = 3, /obj/item/toy/cards/deck/unum = 3, /obj/item/toy/cards/deck/tarot = 3, - /obj/item/hourglass = 2) + /obj/item/hourglass = 2 + ) + contraband = list(/obj/item/dice/fudge = 9, /obj/item/instrument/musicalmoth = 1) premium = list(/obj/item/melee/skateboard/pro = 3, diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index f2eb2c33bb66e..e6379f882ff31 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ