diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm index d165be2d09..bb5d808bf9 100644 --- a/code/__DEFINES/voreconstants.dm +++ b/code/__DEFINES/voreconstants.dm @@ -144,6 +144,7 @@ GLOBAL_LIST_INIT(pred_release_sounds, list( "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg', "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg', "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg', + "Fart 8" = 'modular_splurt/sound/voice/farts/fart8.ogg', "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg', "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg', "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg', @@ -180,6 +181,7 @@ GLOBAL_LIST_INIT(prey_release_sounds, list( "Fart 5" = 'modular_splurt/sound/voice/farts/fart5.ogg', "Fart 6" = 'modular_splurt/sound/voice/farts/fart6.ogg', "Fart 7" = 'modular_splurt/sound/voice/farts/fart7.ogg', + "Fart 8" = 'modular_splurt/sound/voice/farts/fart8.ogg', "Burp 1" = 'modular_splurt/sound/voice/burps/belch1.ogg', "Burp 2" = 'modular_splurt/sound/voice/burps/belch2.ogg', "Burp 3" = 'modular_splurt/sound/voice/burps/belch3.ogg', diff --git a/modular_splurt/code/_globalvars/lists/global_lewd.dm b/modular_splurt/code/_globalvars/lists/global_lewd.dm index f142875a6a..fa72484032 100644 --- a/modular_splurt/code/_globalvars/lists/global_lewd.dm +++ b/modular_splurt/code/_globalvars/lists/global_lewd.dm @@ -6,5 +6,6 @@ GLOBAL_LIST_INIT(brap_noises, list( 'modular_splurt/sound/voice/farts/fart4.ogg', 'modular_splurt/sound/voice/farts/fart5.ogg', 'modular_splurt/sound/voice/farts/fart6.ogg', - 'modular_splurt/sound/voice/farts/fart7.ogg' + 'modular_splurt/sound/voice/farts/fart7.ogg', + 'modular_splurt/sound/voice/farts/fart8.ogg' )) diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm index ee37590ff6..09408e42cb 100644 --- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm +++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm @@ -1,3 +1,65 @@ +/mob/living/proc/do_breastsmother(mob/living/target) + var/message + var/u_His = p_their() + var/titties = list("breasts", "boobs", "milkers", "milktanks", "boobers", "titties", "tits", "tatas", "mammaries") + var/list/lines = list( + "squishes [target]'s face [pick(list("in between", "with"))] [u_His] [pick(titties)]", + "presses [u_His] [pick(titties)] into \the [target]'s face", + "shoves \the [target]'s whole head into [u_His] cleavage" + ) + + message = "\The [src] [pick(lines)]" + visible_message(message, ignored_mobs = get_unconsenting()) + playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', + 'modular_sand/sound/interactions/bang2.ogg', + 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) + +/mob/living/proc/lick_sweat(mob/living/target) + var/message + var/t_His = target.p_their() + var/list/lines = list("licks \the [target]'s sweat off [t_His] body", + "slurps the salty sweat running through [target]'s skin", + "has a nice taste of \the [target]'s drenched body", + "takes a whiff of \the [target]'s musk and drinks [t_His] warm sweat") + + message = "\The [src] [pick(lines)]" + visible_message(message, ignored_mobs = get_unconsenting()) + playlewdinteractionsound(loc, 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1) + +/mob/living/proc/smother_armpit(mob/living/target) + var/message + var/u_His = p_their() + var/list/musk = list("musky ", "sweaty ", "damp ", "smelly ", "") + var/list/lines = list( + "shoves \the [target]'s face in [u_His] [pick(musk)] armpit", + "squeezes \the [target]'s nose under [u_His] [pick(musk)] pit", + "makes sure to squeeze \the [target]'s face well under [u_His] [pick(musk)] armpit and let them take a whiff" + ) + + message = "\The [src] [pick(lines)]" + visible_message(message, ignored_mobs = get_unconsenting()) + playlewdinteractionsound(loc, pick( + 'modular_sand/sound/interactions/squelch1.ogg', + 'modular_sand/sound/interactions/squelch2.ogg', + 'modular_sand/sound/interactions/squelch3.ogg'), 50, 1, -1) + +/mob/living/proc/lick_armpit(mob/living/target) + var/message + var/u_His = p_their() + var/list/musk = list("musky ", "sweaty ", "damp ", "smelly ", "") + var/list/lines = list( + "shoves [u_His] nose deep into \the [target]'s armpit, giving it a big [pick(list("whiff", "lick", "nuzzle"))].", + "presses [u_His] face under \the [target]'s [pick(musk)] pit, [pick(list("tasting and lapping it all over", "sniffing its scent"))]", + "goes face deep into \the [target] [pick(musk)] armpit, worshipping it with [u_His] tongue and nose" + ) + + message = "\The [src] [pick(lines)]" + visible_message(message, ignored_mobs = get_unconsenting()) + playlewdinteractionsound(loc, pick( + 'modular_sand/sound/interactions/squelch1.ogg', + 'modular_sand/sound/interactions/squelch2.ogg', + 'modular_sand/sound/interactions/squelch3.ogg'), 50, 1, -1) + //////////////////////////////////////////////////////////////////////////////////////////////////////// ///////// U N H O L Y ///////// //////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -180,6 +242,43 @@ message = "\The [src] [pick(hell)]" visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) - playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1) + playlewdinteractionsound(loc, pick(GLOB.brap_noises), 70, 1, -1) + playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', + 'modular_sand/sound/interactions/bang2.ogg', + 'modular_sand/sound/interactions/bang3.ogg', + 'modular_sand/sound/interactions/bang4.ogg', + 'modular_sand/sound/interactions/bang5.ogg', + 'modular_sand/sound/interactions/bang6.ogg'), 70, 1, -1) handle_post_sex(NORMAL_LUST, CUM_TARGET_ANUS, target) target.handle_post_sex(NORMAL_LUST, null, src) + +/mob/living/proc/piss_over(mob/living/target) + var/message + var/u_His = p_their() + var/list/hell = list( + "relieves [u_His] bladder all over \the [target][pick(list("", "'s body"))]", + "starts coating all of \the [target]'s body in warm piss", + "lets out a moan of relief as yellow rain starts pouring over \the [target]" + ) + + message = "\The [src] [pick(hell)]" + visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) + if(get_lust() < 10) + add_lust(10) + +/mob/living/carbon/proc/piss_mouth(mob/living/target) + var/message + var/pee_pee = (has_penis(REQUIRE_EXPOSED) ? getorganslot(ORGAN_SLOT_PENIS) : (has_vagina(REQUIRE_EXPOSED) ? getorganslot(ORGAN_SLOT_VAGINA) : null)) + var/u_His = p_their() + var/t_Him = target.p_them() + var/list/hell = list( + "relieves [u_His] bladder inside \the [target]'s mouth [pick(list("filling it with [pick(list("warm", "salty"))] yellow goodness", "making [t_Him] taste all of that piss"))]", + "coats the back of \the [target]'s throat with [u_His] golden treat", + "lets out a moan of relief as yellow rain starts pouring in between \the [target]'s lips" + ) + + message = "\The [src] [pick(hell)]" + visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) + if(!is_fucking(target, CUM_TARGET_MOUTH)) + set_is_fucking(target, CUM_TARGET_MOUTH, pee_pee) + handle_post_sex(NORMAL_LUST, CUM_TARGET_MOUTH, target) diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm index 446dac5169..e5ebf29687 100644 --- a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm +++ b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm @@ -1,4 +1,3 @@ -/* TODO: Finish these tomorrow /datum/interaction/lewd/do_breastsmother command = "do_breastsmother" description = "Smother them in your breasts" @@ -8,6 +7,9 @@ write_log_target = "got breast smothered by" write_log_user = null +/datum/interaction/lewd/do_breastsmother/display_interaction(mob/living/user, mob/living/target) + user.do_breastsmother(target) + /datum/interaction/lewd/lick_sweat command = "lick_sweat" description = "Lick their sweat" @@ -17,14 +19,19 @@ write_log_target = "got their sweat licked by" write_log_user = "licked sweat" +/datum/interaction/lewd/lick_sweat/display_interaction(mob/living/user, mob/living/target) + user.lick_sweat(target) + /datum/interaction/lewd/smother_armpit command = "smother_armpit" description = "Press your armpit against their face" - require_target_mouth = TRUE max_distance = 1 interaction_sound = null write_log_target = "Got armpit smothered by" - wtrite_log_user = "Smothered someone in their armpit" + write_log_user = "Smothered someone in their armpit" + +/datum/interaction/lewd/smother_armpit/display_interaction(mob/living/user, mob/living/target) + user.smother_armpit(target) /datum/interaction/lewd/lick_armpit command = "lick_armpit" @@ -32,9 +39,11 @@ require_user_mouth = TRUE max_distance = 1 interaction_sound = null - write_log_target = "Got their armpit licked by" + write_log_target = "Got dem armpit ate by" write_log_user = "ate some armpit" -*/ + +/datum/interaction/lewd/lick_armpit/display_interaction(mob/living/user, mob/living/target) + user.lick_armpit(target) //////////////////////////////////////////////////////////////////////////////////////////////////////// ///////// U N H O L Y ///////// @@ -115,3 +124,30 @@ /datum/interaction/lewd/unholy/do_shitfuck/display_interaction(mob/living/user, mob/living/target) user.do_shitfuck(target) + +/datum/interaction/lewd/unholy/piss_over + command = "piss_over" + description = "Piss all over them" + require_user_bottomless = TRUE + max_distance = 1 + interaction_sound = null + write_log_target = "got pissed all over by" + +/datum/interaction/lewd/unholy/piss_over/display_interaction(mob/living/user, mob/living/target) + user.piss_over(target) + +/datum/interaction/lewd/unholy/piss_mouth + command = "piss_mouth" + description = "Piss inside their mouth" + max_distance = 1 + interaction_sound = null + require_user_bottomless = TRUE + require_target_mouth = TRUE + write_log_user = "pissed in someone's mouth" + write_log_target = "got their mouth filled with piss by" + +/datum/interaction/lewd/unholy/piss_mouth/display_interaction(mob/living/carbon/user, mob/living/target) + if(!istype(user)) + to_chat(user, "Erm, you may wanna be a carbon entity fo dat") + return + user.piss_mouth(target) diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm index 009be3d670..568a1add91 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm @@ -1,4 +1,134 @@ //Hyper tails + +//Mam tails +/datum/sprite_accessory/tails/mam_tails/deer + name = "Deer" + icon_state = "deer" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/mam_tails_animated/deer + name = "Deer" + icon_state = "deer" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/spade + name = "Demon spade" + icon_state = "spade" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/mam_tails_animated/spade + name = "Demon spade" + icon_state = "spade" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/mam_tails_animated/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/snaketail + name = "Snake tail" + icon_state = "snaketail" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/mam_tails_animated/snaketail + name = "Snake tail" + icon_state = "snaketail" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/chemlight + name = "Chemlight" + icon_state = "chemlight" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/tails_animated/mam_tails_animated/chemlight + name = "Chemlight" + icon_state = "chemlight" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/tails/mam_tails/gecko + name = "Gecko" + icon_state = "gecko" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/tails_animated/mam_tails_animated/gecko + name = "Gecko" + icon_state = "gecko" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +//Lizard tails +/datum/sprite_accessory/tails/lizard/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/lizard/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/lizard/snaketail + name = "Snake tail" + icon_state = "snaketail" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/lizard/snaketail + name = "Snake tail" + icon_state = "snaketail" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/lizard/gecko + name = "Gecko" + icon_state = "gecko" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/tails_animated/lizard/gecko + name = "Gecko" + icon_state = "gecko" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_ALL + +//Human tails /datum/sprite_accessory/tails/human/deer name = "Deer" icon_state = "deer" @@ -13,16 +143,30 @@ icon = 'modular_splurt/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED -/datum/sprite_accessory/tails/mam_tails/deer - name = "Deer" - icon_state = "deer" +/datum/sprite_accessory/tails/human/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" color_src = MATRIXED icon = 'modular_splurt/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED -/datum/sprite_accessory/tails_animated/mam_tails_animated/deer - name = "Deer" - icon_state = "deer" +/datum/sprite_accessory/tails_animated/human/tailmaw + name = "Tailmaw" + icon_state = "tailmaw" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/human/snaketail + name = "Snake tail" + icon_state = "snaketail" + color_src = MATRIXED + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails_animated/human/snaketail + name = "Snake tail" + icon_state = "snaketail" color_src = MATRIXED icon = 'modular_splurt/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED diff --git a/modular_splurt/icons/mob/mam_tails.dmi b/modular_splurt/icons/mob/mam_tails.dmi index 54f793aaac..d33e3fcf98 100644 Binary files a/modular_splurt/icons/mob/mam_tails.dmi and b/modular_splurt/icons/mob/mam_tails.dmi differ diff --git a/modular_splurt/sound/voice/farts/fart8.ogg b/modular_splurt/sound/voice/farts/fart8.ogg new file mode 100644 index 0000000000..8809ff9bb8 Binary files /dev/null and b/modular_splurt/sound/voice/farts/fart8.ogg differ