diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index f594b735b6..e20ad071db 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -28,8 +28,9 @@ #define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) /// Creates a message packet for sending via output() +// This is {"type":type,"payload":payload}, but pre-encoded. This is much faster +// than doing it the normal way. +// To ensure this is correct, this is unit tested in tgui_create_message. #define TGUI_CREATE_MESSAGE(type, payload) ( \ - url_encode(json_encode(list( \ - "type" = type, \ - "payload" = payload, \ - )))) + "%7b%22type%22%3a%22[type]%22%2c%22payload%22%3a[url_encode(json_encode(payload))]%7d" \ +) diff --git a/code/__SANDCODE/DEFINES/lewd.dm b/code/__SANDCODE/DEFINES/lewd.dm index db32e3e5d2..7c20e55d53 100644 --- a/code/__SANDCODE/DEFINES/lewd.dm +++ b/code/__SANDCODE/DEFINES/lewd.dm @@ -90,8 +90,21 @@ GLOBAL_LIST_INIT(lewd_kiss_sounds, list( #define INTERACTION_FLAG_USER_NOT_TIRED (1<<5) /// Copy-paste prevention for additional details +/// Fills containers #define INTERACTION_FILLS_CONTAINERS list( \ "info" = "You can fill a container if you have it in your active hand or are pulling it", \ "icon" = "flask", \ - "color" = "transparent" \ + "color" = "white" \ ) +/// Can drink from +#define INTERACTION_MAY_CONTAIN_DRINK list( \ + "info" = "May contain reagents", \ + "icon" = "cow", \ + "color" = "white" \ +) +/// Causes pregnancies +#define INTERACTION_MAY_CAUSE_PREGNANCY list( \ + "info" = "May cause pregnancies", \ + "icon" = "person-pregnant", \ + "color" = "white" \ +) diff --git a/modular_sand/code/datums/interactions/_interaction.dm b/modular_sand/code/datums/interactions/_interaction.dm index 374a0bd4e2..7634098d50 100644 --- a/modular_sand/code/datums/interactions/_interaction.dm +++ b/modular_sand/code/datums/interactions/_interaction.dm @@ -42,7 +42,7 @@ var/required_from_target_exposed = NONE var/required_from_target_unexposed = NONE - /// Refuses to accept more than one entry for some reason, fix sometime + /// Additional details to be shown in the interaction menu, accepts more than one entry var/list/additional_details /// Checks if user can do an interaction, action_check is for whether you're actually doing it or not (useful for the menu and not removing the buttons) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm index 2ece1bacf5..7ae2c483ce 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm @@ -5,6 +5,13 @@ write_log_user = "breastfed" write_log_target = "was breastfed by" interaction_sound = null + additional_details = list( + list( + "info" = "Will feed the target with your breasts' reagents if any", + "icon" = "cow", + "color" = "white" + ) + ) /datum/interaction/lewd/do_breastfeed/display_interaction(mob/living/user, mob/living/target) var/message diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm index 3190f3a8db..f296aa3651 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm @@ -6,6 +6,13 @@ interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_EXTREME_CONTENT write_log_user = "earfucked" write_log_target = "had their ear fucked by" + additional_details = list( + list( + "info" = "With the preference enabled causes slight bleeding, ear and brain damage", + "icon" = "ear-deaf", + "color" = "white" + ) + ) /datum/interaction/lewd/earfuck/earsocketfuck description = "Fuck their earsocket." diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm index 8828a70454..3cf4202522 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm @@ -6,6 +6,13 @@ interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT | INTERACTION_FLAG_EXTREME_CONTENT write_log_user = "eyefucked" write_log_target = "had their eye fucked by" + additional_details = list( + list( + "info" = "With the preference enabled causes slight bleeding, eye and brain damage", + "icon" = "eye", + "color" = "white" + ) + ) /datum/interaction/lewd/eyefuck/eyesocketfuck description = "Fuck their eyesocket." diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm index bc052db744..ea3b740066 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm @@ -107,10 +107,17 @@ user.handle_post_sex(NORMAL_LUST, CUM_TARGET_MOUTH, partner) /datum/interaction/lewd/throatfuck - description = "Fuck their throat. | Does oxy damage." + description = "Fuck their throat" interaction_sound = null required_from_user_exposed = INTERACTION_REQUIRE_PENIS required_from_target = INTERACTION_REQUIRE_MOUTH + additional_details = list( + list( + "info" = "Causes oxygen damage", + "icon" = "lungs", + "color" = "blue" + ) + ) /datum/interaction/lewd/throatfuck/display_interaction(mob/living/user, mob/living/partner) var/message diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm index ca536954b6..c8fd6b4256 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm @@ -5,6 +5,9 @@ write_log_user = "fucked" write_log_target = "was fucked by" interaction_sound = null + additional_details = list( + INTERACTION_MAY_CAUSE_PREGNANCY + ) /datum/interaction/lewd/fuck/display_interaction(mob/living/user, mob/living/partner) var/message @@ -30,6 +33,7 @@ /datum/interaction/lewd/fuck/anal description = "Fuck their ass." required_from_target_exposed = INTERACTION_REQUIRE_ANUS + additional_details = null // no pregnancy /datum/interaction/lewd/fuck/anal/display_interaction(mob/living/user, mob/living/partner) var/message diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm index bcdc93126b..749fdd33df 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm @@ -5,6 +5,13 @@ write_log_user = "kissed" write_log_target = "was kissed by" interaction_sound = null + additional_details = list( + list( + "info" = "Sets lust of both to 5 if less than 5", + "icon" = "heart", + "color" = "red" + ) + ) /datum/interaction/lewd/kiss/post_interaction(mob/living/user, mob/living/partner) . = ..() diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm index 2a56efcda3..1fb69102c8 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm @@ -3,6 +3,9 @@ interaction_sound = null required_from_user_exposed = INTERACTION_REQUIRE_VAGINA required_from_target_exposed = INTERACTION_REQUIRE_PENIS + additional_details = list( + INTERACTION_MAY_CAUSE_PREGNANCY + ) /datum/interaction/lewd/mount/display_interaction(mob/living/user, mob/living/partner) var/message diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm index c1e2a07001..883255fd41 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm @@ -5,6 +5,9 @@ write_log_user = "sucked nipples" write_log_target = "had their nipples sucked by" interaction_sound = null + additional_details = list( + INTERACTION_MAY_CONTAIN_DRINK + ) /datum/interaction/lewd/nipsuck/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) if((user.a_intent == INTENT_HELP) || (user.a_intent == INTENT_DISARM)) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm index 22eedf9e84..4d331c336f 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm @@ -5,6 +5,9 @@ write_log_user = "gave head to" write_log_target = "was given head by" interaction_sound = null + additional_details = list( + INTERACTION_MAY_CONTAIN_DRINK + ) var/fucktarget = "vagina" /datum/interaction/lewd/oral/blowjob diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm index fa074216aa..ad26c3c7ea 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm @@ -82,6 +82,9 @@ max_distance = 0 write_log_user = "sucked their own nips" write_log_target = null + additional_details = list( + INTERACTION_MAY_CONTAIN_DRINK + ) /datum/interaction/lewd/self_nipsuck/display_interaction(mob/living/user, mob/living/target) var/message diff --git a/tgui/packages/tgui/interfaces/MobInteraction/tabs/InteractionsTab.tsx b/tgui/packages/tgui/interfaces/MobInteraction/tabs/InteractionsTab.tsx index 3df9147298..879ead5bf5 100644 --- a/tgui/packages/tgui/interfaces/MobInteraction/tabs/InteractionsTab.tsx +++ b/tgui/packages/tgui/interfaces/MobInteraction/tabs/InteractionsTab.tsx @@ -74,7 +74,7 @@ export const InteractionsTab = (props, context) => { {interaction.additionalDetails && ( interaction.additionalDetails.map(detail => ( - + )))}