diff --git a/code/__DEFINES/~doppler_defines/declarations.dm b/code/__DEFINES/~doppler_defines/declarations.dm index 37dbb5fd21780..1461f8cae6e67 100644 --- a/code/__DEFINES/~doppler_defines/declarations.dm +++ b/code/__DEFINES/~doppler_defines/declarations.dm @@ -2,3 +2,5 @@ #define TRAIT_TWITCH_ADAPTED "twitch_adapted" /// Given to the detective, if they have this, they can see syndicate special descriptions. #define TRAIT_DETECTIVE "detective_ability" +/// Trait for the excitable quirk, woof! +#define TRAIT_EXCITABLE "wagwag" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 8f3c5a71414fa..85ba6893a8edc 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -693,6 +693,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING, "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, "TRAIT_DETECTIVE" = TRAIT_DETECTIVE, + "TRAIT_EXCITABLE" = TRAIT_EXCITABLE, "TRAIT_TWITCH_ADAPTED" = TRAIT_TWITCH_ADAPTED, ), // DOPPLER EDIT ADDITION END diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 04a078d7e4da2..f3ee2ecfbc05a 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -379,6 +379,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING, "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, "TRAIT_DETECTIVE" = TRAIT_DETECTIVE, + "TRAIT_EXCITABLE" = TRAIT_EXCITABLE, "TRAIT_TWITCH_ADAPTED" = TRAIT_TWITCH_ADAPTED, ), // DOPPLER EDIT ADDITION END diff --git a/code/modules/asset_cache/assets/inventory.dm b/code/modules/asset_cache/assets/inventory.dm index 0883dbd7515e5..5aaab9332a852 100644 --- a/code/modules/asset_cache/assets/inventory.dm +++ b/code/modules/asset_cache/assets/inventory.dm @@ -14,6 +14,7 @@ "inventory-suit_storage.png" = 'icons/ui/inventory/suit_storage.png', "inventory-id.png" = 'icons/ui/inventory/id.png', "inventory-belt.png" = 'icons/ui/inventory/belt.png', + "inventory-tail.png" = 'icons/ui/inventory/tail.png', // DOPPLER ADDITION - tail item slot "inventory-back.png" = 'icons/ui/inventory/back.png', "inventory-pocket.png" = 'icons/ui/inventory/pocket.png', "inventory-collar.png" = 'icons/ui/inventory/collar.png', diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index ae0ad9c6662bf..dd1d59ebc1043 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -311,6 +311,12 @@ if(HAS_TRAIT(src, TRAIT_BADTOUCH)) to_chat(helper, span_warning("[src] looks visibly upset as you pat [p_them()] on the head.")) + //DOPPLER EDIT ADDITION BEGIN - Excitable quirk! 🐶 + if(HAS_TRAIT(src, TRAIT_EXCITABLE)) + var/obj/item/organ/external/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(src_tail && !(src_tail.wag_flags & WAG_WAGGING)) + emote("wag") + //DOPPLER EDIT ADDITION END else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/external/tail))) helper.visible_message(span_notice("[helper] pulls on [src]'s tail!"), \ diff --git a/icons/ui/inventory/tail.png b/icons/ui/inventory/tail.png new file mode 100644 index 0000000000000..d73d394717f23 Binary files /dev/null and b/icons/ui/inventory/tail.png differ diff --git a/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm b/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm index 1067cde310ef0..c839611e43ae8 100644 --- a/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm +++ b/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm @@ -13,6 +13,10 @@ name = "Straight" icon_state = "straighttail" +/datum/sprite_accessory/tails/dog/shortpup + name = "Short" + icon_state = "shortpup" + /datum/sprite_accessory/tails/fox icon = 'modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi' diff --git a/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi b/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi index ffa8c0d0a88eb..4bbd8281b47a1 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi and b/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi differ diff --git a/modular_doppler/modular_customization/organs/external/tail.dm b/modular_doppler/modular_customization/organs/external/tail.dm index 3b884cd900808..61919ffa6298c 100644 --- a/modular_doppler/modular_customization/organs/external/tail.dm +++ b/modular_doppler/modular_customization/organs/external/tail.dm @@ -1,8 +1,56 @@ +/// Tail storage datum +/datum/storage/tail + insert_preposition = "on" + silent = FALSE + max_slots = 1 + max_specific_storage = WEIGHT_CLASS_SMALL + max_total_storage = 50 + do_rustle = FALSE + screen_start_x = 12 + screen_pixel_x = 22 + +/datum/storage/tail/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) + . = ..() + set_holdable(list( + /obj/item/, + )) + /// Monkey tail // now waggable! /obj/item/organ/external/tail/monkey + name = "monkey tail" wag_flags = WAG_ABLE +/obj/item/organ/external/tail/monkey/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/tail) + AddComponent(/datum/component/accessable_storage/organ) + +/// Mouse tail +// Monkey and mouse tail get a (secret) additional inventory slot +/obj/item/organ/external/tail/mouse + name = "mouse tail" + preference = "feature_mouse_tail" + dna_block = null + wag_flags = WAG_ABLE + bodypart_overlay = /datum/bodypart_overlay/mutant/tail/mouse + +/obj/item/organ/external/tail/mouse/Initialize(mapload) + . = ..() + create_storage(storage_type = /datum/storage/tail) + AddComponent(/datum/component/accessable_storage/organ) + +/datum/bodypart_overlay/mutant/tail/mouse + feature_key = "tail_other" + +/datum/bodypart_overlay/mutant/tail/mouse/get_global_feature_list() + return SSaccessories.tails_list_mouse + /// Dog tail // Buffs people if they're closeby while you're wagging it! /obj/item/organ/external/tail/dog @@ -77,20 +125,6 @@ /datum/bodypart_overlay/mutant/tail/bunny/get_global_feature_list() return SSaccessories.tails_list_bunny -/// Mouse tail -// -/obj/item/organ/external/tail/mouse - preference = "feature_mouse_tail" - dna_block = null - wag_flags = WAG_ABLE - bodypart_overlay = /datum/bodypart_overlay/mutant/tail/mouse - -/datum/bodypart_overlay/mutant/tail/mouse - feature_key = "tail_other" - -/datum/bodypart_overlay/mutant/tail/mouse/get_global_feature_list() - return SSaccessories.tails_list_mouse - /// Bird tail // /obj/item/organ/external/tail/bird diff --git a/modular_doppler/modular_quirks/excitable/quirk.dm b/modular_doppler/modular_quirks/excitable/quirk.dm new file mode 100644 index 0000000000000..0f9b9202b8fdf --- /dev/null +++ b/modular_doppler/modular_quirks/excitable/quirk.dm @@ -0,0 +1,9 @@ +/datum/quirk/excitable + name = "Excitable!" + desc = "Head patting makes your tail wag! You're very excitable! WAG WAG." + gain_text = span_notice("You crave for some headpats!") + lose_text = span_notice("You no longer care for headpats all that much...") + medical_record_text = "Patient seems to enjoy getting headpats." + value = 0 + mob_trait = TRAIT_EXCITABLE + icon = FA_ICON_LAUGH_BEAM diff --git a/modular_doppler/paycheck_rations/code/quirk.dm b/modular_doppler/modular_quirks/paycheck_rations/code/quirk.dm similarity index 100% rename from modular_doppler/paycheck_rations/code/quirk.dm rename to modular_doppler/modular_quirks/paycheck_rations/code/quirk.dm diff --git a/modular_doppler/paycheck_rations/code/rationpacks.dm b/modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm similarity index 98% rename from modular_doppler/paycheck_rations/code/rationpacks.dm rename to modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm index fba4e2dc1fd70..e8cea85c98349 100644 --- a/modular_doppler/paycheck_rations/code/rationpacks.dm +++ b/modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm @@ -1,7 +1,7 @@ /obj/item/storage/box/spaceman_ration name = "unlabeled ration container" desc = "You get the feeling you sholdn't have been sent this one?" - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' icon_state = "plants" illustration = null /// How many storage slots this has, yes I'm being lazy diff --git a/modular_doppler/paycheck_rations/code/reagents.dm b/modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm similarity index 88% rename from modular_doppler/paycheck_rations/code/reagents.dm rename to modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm index 56322d87e07b7..46a40b9a4e51e 100644 --- a/modular_doppler/paycheck_rations/code/reagents.dm +++ b/modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm @@ -1,25 +1,25 @@ /obj/item/reagent_containers/condiment/flour/small_ration name = "small flour sack" desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/flour = 15) /obj/item/reagent_containers/condiment/rice/small_ration name = "small rice sack" desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/rice = 10) /obj/item/reagent_containers/condiment/sugar/small_ration name = "small sugar sack" desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/sugar = 10) /obj/item/reagent_containers/condiment/small_ration_korta_flour name = "small korta flour sack" desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' icon_state = "flour_korta" inhand_icon_state = "carton" lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' @@ -30,13 +30,13 @@ /obj/item/reagent_containers/condiment/soymilk/small_ration name = "small soy milk" desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/soymilk = 15) /obj/item/reagent_containers/condiment/milk/small_ration name = "small milk" desc = "It's milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some cheese with." - icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/milk = 15) /obj/item/reagent_containers/cup/glass/bottle/small/tiny diff --git a/modular_doppler/paycheck_rations/code/ticket_book.dm b/modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm similarity index 86% rename from modular_doppler/paycheck_rations/code/ticket_book.dm rename to modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm index fff8b99c5419e..a8bec74e5b59d 100644 --- a/modular_doppler/paycheck_rations/code/ticket_book.dm +++ b/modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm @@ -1,7 +1,7 @@ /obj/item/storage/ration_ticket_book name = "ration ticket book" desc = "A small booklet able to hold all your ration tickets. More will be available here as your paychecks come in." - icon = 'modular_doppler/paycheck_rations/icons/tickets.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi' icon_state = "ticket_book" w_class = WEIGHT_CLASS_SMALL diff --git a/modular_doppler/paycheck_rations/code/tickets.dm b/modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm similarity index 86% rename from modular_doppler/paycheck_rations/code/tickets.dm rename to modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm index 0bc59df2f2a1c..f088e6d043688 100644 --- a/modular_doppler/paycheck_rations/code/tickets.dm +++ b/modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm @@ -1,7 +1,7 @@ /obj/item/paper/paperslip/ration_ticket name = "ration ticket - standard" desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station." - icon = 'modular_doppler/paycheck_rations/icons/tickets.dmi' + icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi' icon_state = "ticket_food" default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits." color = COLOR_OFF_WHITE @@ -24,9 +24,9 @@ // List of meat options we get var/list/radial_meat_options = list( - "Standard Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), - "Seafood Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), - "Tizirian Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), + "Standard Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), + "Seafood Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), + "Tizirian Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), ) var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE) @@ -47,10 +47,10 @@ // List of produce options we get var/list/radial_produce_options = list( - "Standard Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), - "Alternative Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), - "Mothic Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), - "Tizirian Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), + "Standard Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), + "Alternative Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), + "Mothic Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), + "Tizirian Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), ) var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE) @@ -77,8 +77,8 @@ // List of flour options we get var/list/radial_flour_options = list( - "Standard Flour" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), - "Korta Flour" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), + "Standard Flour" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), + "Korta Flour" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), ) var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE) diff --git a/modular_doppler/paycheck_rations/icons/food_containers.dmi b/modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi similarity index 100% rename from modular_doppler/paycheck_rations/icons/food_containers.dmi rename to modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi diff --git a/modular_doppler/paycheck_rations/icons/tickets.dmi b/modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi similarity index 100% rename from modular_doppler/paycheck_rations/icons/tickets.dmi rename to modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi diff --git a/modular_doppler/modular_species/species_types/monkey/monkeys.dm b/modular_doppler/modular_species/species_types/monkey/monkeys.dm index ced89b5e92caa..229240748a77c 100644 --- a/modular_doppler/modular_species/species_types/monkey/monkeys.dm +++ b/modular_doppler/modular_species/species_types/monkey/monkeys.dm @@ -2,3 +2,7 @@ var/list/features = ..() features["tail_monkey"] = /datum/sprite_accessory/tails/monkey/default::name return features + +/mob/living/carbon/human/species/monkey/punpun/Initialize(mapload) + . = ..() + add_quirk(/datum/quirk/excitable) diff --git a/modular_doppler/overwrites/huds/hud.dmi b/modular_doppler/overwrites/huds/hud.dmi index 740cda12a557f..4084f10c8acc8 100644 Binary files a/modular_doppler/overwrites/huds/hud.dmi and b/modular_doppler/overwrites/huds/hud.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 0d9a0f34782ec..68e6c9fb15a42 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6757,6 +6757,12 @@ #include "modular_doppler\modular_medical\wounds\muscle.dm" #include "modular_doppler\modular_medical\wounds\wound_effects.dm" #include "modular_doppler\modular_mob_spawn\code\mob_spawn.dm" +#include "modular_doppler\modular_quirks\excitable\quirk.dm" +#include "modular_doppler\modular_quirks\paycheck_rations\code\quirk.dm" +#include "modular_doppler\modular_quirks\paycheck_rations\code\rationpacks.dm" +#include "modular_doppler\modular_quirks\paycheck_rations\code\reagents.dm" +#include "modular_doppler\modular_quirks\paycheck_rations\code\ticket_book.dm" +#include "modular_doppler\modular_quirks\paycheck_rations\code\tickets.dm" #include "modular_doppler\modular_sounds\code\sounds.dm" #include "modular_doppler\modular_species\code\bloodsplatter.dm" #include "modular_doppler\modular_species\overwrites\code\species.dm" @@ -6786,11 +6792,6 @@ #include "modular_doppler\objects_and_structures\code\sauna_oven.dm" #include "modular_doppler\objects_and_structures\code\towel_bins.dm" #include "modular_doppler\objects_and_structures\code\watercloset.dm" -#include "modular_doppler\paycheck_rations\code\quirk.dm" -#include "modular_doppler\paycheck_rations\code\rationpacks.dm" -#include "modular_doppler\paycheck_rations\code\reagents.dm" -#include "modular_doppler\paycheck_rations\code\ticket_book.dm" -#include "modular_doppler\paycheck_rations\code\tickets.dm" #include "modular_doppler\pixel_shift\living.dm" #include "modular_doppler\pixel_shift\living_movement.dm" #include "modular_doppler\pixel_shift\code\pixel_shift_component.dm" diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx index 01b559735df98..aeb020a75e863 100644 --- a/tgui/packages/tgui/interfaces/StripMenu.tsx +++ b/tgui/packages/tgui/interfaces/StripMenu.tsx @@ -217,7 +217,7 @@ const SLOTS: Record< tail: { displayName: 'tail', gridSpot: getGridSpotKey([3, 3]), - image: 'inventory-belt.png', + image: 'inventory-tail.png', }, /* Doppler station addition end */ };