Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
NickWildish committed Nov 15, 2023
2 parents 4c23185 + ce27da5 commit f10941c
Show file tree
Hide file tree
Showing 7 changed files with 158 additions and 73 deletions.
2 changes: 1 addition & 1 deletion game/Submods/NSFW Submod/nsfw_brb.rpy
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ label monika_brb_nsfw_masturbate_callback:
# Expansion - add in choices for added interaction, e.g. "I came" "I didnt get off" etc
if mas_isMoniEnamored(higher=True):
if mas_brbs.was_idle_for_at_least(datetime.timedelta(minutes=30), "nsfw_monika_brb_masturbate"):
m 2eubfb "There you are, [player]!" # | - Thankyou for the fixes @ephemlw
m 2eubfb "There you are, [player]!" # | - Thank you for the fixes @ephemlw
m 2eubfa "You had been gone for a little while." # |
m 1hubfb "Were you able to...you know...get off? I hope so. Ahaha~"
m 2eua "Anyway..."
Expand Down
18 changes: 9 additions & 9 deletions game/Submods/NSFW Submod/nsfw_fetish.rpy
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ label nsfw_fetish_bondage:
"No thanks.":
m 3eka "Okay, that's fine."
m 3ekb "I'll save it for another time then."
m 1eka "Regardless...thankyou for telling me about your preferences, [player]."
m 1eka "Regardless...thank you for telling me about your preferences, [player]."
m 1rkbla "It can be difficult to talk about your fetishes with someone, so I appreciate you opening up to me."
m 1ekbla "If you ever want to talk about this again, or if you change your mind, I'll be here."
m 5ekbla "I love you, and I'll never judge you."
Expand All @@ -226,9 +226,9 @@ label nsfw_fetish_bondage:
m 7eub "There isn't any particular line of seperation here - especially since each style has gradually been hybridized as they're exposed to greater and greater degrees."
m 7eua "But there are a few points that can be broadly contributed to one side or the other."
m 4eub "Western bondage usually ties people up so that things can be {i}done{/i} to them."
m 4rub "It finds roots in the classic 'dansel in distress' archetype in old Hollywood films, which inspired John Wille in the 1940's to create erotic artwork and photography that would inspire many."
m 4rub "Guess you'll never look at dansels in distress the same way again, ahaha~"
m 1eua "But anways, the style is generally designed to deal with restraint and handling a struggle, since the bonds are merely a means to an end. It commonly involves armbinders, gags, or furniture."
m 4rub "It finds roots in the classic 'damnsel in distress' archetype in old Hollywood films, which inspired John Wille in the 1940's to create erotic artwork and photography that would inspire many."
m 4rub "Guess you'll never look at damsels in distress the same way again, ahaha~"
m 1eua "But anyways, the style is generally designed to deal with restraint and handling a struggle, since the bonds are merely a means to an end. It commonly involves armbinders, gags, or furniture."
m 3eua "In comparison, Eastern bondage usually focuses on the act of being being tied up {i}is{/i} what's happening to them."
m 3eub "It finds roots in the work of Seiu Ito, an artist who incorporated rope bondage into his erotic work in the 20th century, and many attribute it to the importance of rope in important traditions, including the restraint of suspected criminals with rope."
m 4eub "It's usually concerned with beauty, symbolism, and or the pleasure of the experience. The arms being folded behind the back is common, as is partial or full suspension."
Expand Down Expand Up @@ -416,9 +416,9 @@ label nsfw_fetish_anal:

"Yeah, it sounds hot.":
if is_into_anal == True:
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAM", "MBH", "MXM", "FAM", "IAP", "PBH", "FXP", "FAP"], ["U"])
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAM", "MBH", "FXM", "FAM", "IAP", "PBH", "FXP", "FAP"], ["U"])
else:
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAP", "PBH", "FXP", "FAP"], ["IAM", "MBH", "MXM", "FAM"])
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAP", "PBH", "FXP", "FAP"], ["IAM", "MBH", "FXM", "FAM"])

if store.persistent.gender == "M":
m 1wubsd "Really?"
Expand All @@ -432,15 +432,15 @@ label nsfw_fetish_anal:

"No, I'm not into that.":
if is_into_anal == True:
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAM", "MBH", "MXM", "FAM"], ["IAP", "PBH", "FXP", "FAP"])
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["IAM", "MBH", "FXM", "FAM"], ["IAP", "PBH", "FXP", "FAP"])
else:
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["U"], ["IAM", "MBH", "MXM", "FAM", "IAP", "PBH", "FXP", "FAP"])
$ store.mas_nsfw.save_fetish_to_persistent("Anal", ["U"], ["IAM", "MBH", "FXM", "FAM", "IAP", "PBH", "FXP", "FAP"])

m 1ekbsa "That's fair enough, [player]."
m 2hkbsb "I'm not sure if I'd be any good at it anyway."
m 2lkbsa "But, regardless..."

m 1ekbla "Thankyou for talking about this with me."
m 1ekbla "Thank you for talking about this with me."
m 3ekblb "I know this sort of thing isn't comfortable for everyone."
m 3hubla "But I want to experience and learn as much about sex as I can with you."
m 1ekbla "You mean the world to me, [player]."
Expand Down
100 changes: 72 additions & 28 deletions game/Submods/NSFW Submod/nsfw_main.rpy
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ init -990 python in mas_submod_utils:
Submod(
author="NickWildish",
name="NSFW Submod",
version="1.3.3",
version="1.3.4",
description="A collection of NSFW topics and features for MAS.",
settings_pane="nsfw_submod_screen",
version_updates= {
"nickwildish_nsfw_submod_v1_0_3": "nickwildish_nsfw_submod_v1_1_0",
"nickwildish_nsfw_submod_v1_1_0": "nickwildish_nsfw_submod_v1_1_1",
"nickwildish_nsfw_submod_v1_2_7": "nickwildish_nsfw_submod_v1_3_0",
"nickwildish_nsfw_submod_v1_3_0": "nickwildish_nsfw_submod_v1_3_2",
"nickwildish_nsfw_submod_v1_3_2": "nickwildish_nsfw_submod_v1_3_4"
},
coauthors=["mizuotana-nirera", "TreeWizard96"]
) # https://github.com/NickWildish/Mas-NSFW-Submod
Expand All @@ -27,6 +28,7 @@ init -989 python:

default persistent._nsfw_player_endurance = 1
default persistent._nsfw_monika_sexting_frequency = 1
default persistent._nsfw_debug_mode = False

screen nsfw_submod_screen():
python:
Expand All @@ -42,6 +44,15 @@ screen nsfw_submod_screen():
xfill True
xmaximum 700

# hbox:
# style_prefix "check"
# box_wrap False
# textbutton _("Enable Debug"):
# action Function(store.mas_nsfw.toggle_debug)
# selected persistent._nsfw_debug_mode
# hovered SetField(_tooltip, "value", ("Enables the NSFW Submod's Debugging Features.\n MAY CAUSE IMMERSION-BREAKING ISSUES."))
# unhovered SetField(_tooltip, "value", _tooltip.default)

hbox:
style_prefix "check"
box_wrap False
Expand Down Expand Up @@ -134,6 +145,15 @@ init python in mas_nsfw:
import random
import os

def toggle_debug():
"""
Toggles debug mode on and off.
"""
if store.persistent._nsfw_debug_mode:
store.persistent._nsfw_debug_mode = False
else:
store.persistent._nsfw_debug_mode = True

def hour_check(set_time=6, time_scale="hours", topic="nsfw_monika_gettingnude"):
"""
Checks if six hours has passed since the player has seen a topic and also been away from the pc for a set amount of hours.
Expand Down Expand Up @@ -534,6 +554,9 @@ init python in mas_nsfw:
(["STM"], ["DES", "DRM"]),
]

if store.persistent._nsfw_debug_mode:
renpy.say("System", "--TYPE REFINEMENT--{nw}") # DEBUG

for dialogue in dialogue_list:
if dialogue[2] in recent:
continue
Expand All @@ -553,22 +576,25 @@ init python in mas_nsfw:

if not dialogue_already_in_pool(dialogue, dp1, dp2, dp3):
if dp_to_append == 3:
# renpy.say("System", "Type match not found: " + ", ".join(str(x) for x in types) + " does not work with " + ", ".join(str(x) for x in dialogue[0]) + ".") # DEBUG
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Type match not found: " + ", ".join(str(x) for x in types) + " does not work with " + ", ".join(str(x) for x in dialogue[0]) + ".{nw}") # DEBUG
dp3.append(dialogue)
elif dp_to_append == 2:
# renpy.say("System", "Type match semi-found: " + ", ".join(str(x) for x in types) + " somewhat works with " + ", ".join(str(x) for x in dialogue[0]) + ".") # DEBUG
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Type match semi-found: " + ", ".join(str(x) for x in types) + " somewhat works with " + ", ".join(str(x) for x in dialogue[0]) + ".{nw}") # DEBUG
dp2.append(dialogue)
elif dp_to_append == 1:
# renpy.say("System", "Type match found: " + ", ".join(str(x) for x in types) + " works with " + ", ".join(str(x) for x in dialogue[0]) + ".") # DEBUG
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Type match found: " + ", ".join(str(x) for x in types) + " works with " + ", ".join(str(x) for x in dialogue[0]) + ".{nw}") # DEBUG
dp1.append(dialogue)

# if len(dp1) == 0: # DEBUG
# renpy.say("System", "No dialogue found for the given types. Using a less specific dialogue pool.")
# dp1 = dp2 if len(dp2) > 0 else dp3
# if len(dp2) > 0:
# renpy.say("System", "Dialogue pool 2 used.")
# else:
# renpy.say("System", "Dialogue pool 3 used.")
if len(dp1) == 0 and store.persistent._nsfw_debug_mode: # DEBUG
renpy.say("System", "No dialogue found for the given types. Using a less specific dialogue pool.{nw}")
dp1 = dp2 if len(dp2) > 0 else dp3
if len(dp2) > 0:
renpy.say("System", "Dialogue pool 2 used.{nw}")
else:
renpy.say("System", "Dialogue pool 3 used.{nw}")

return dp1

Expand Down Expand Up @@ -601,37 +627,38 @@ init python in mas_nsfw:
# These are the pools we'll use to collect the dialogue types
dp1, dp2, dp3 = [], [], []

for i, subtype in enumerate(subtypes):
for j, dialogue in enumerate(dialogue_list):
pool_no = 4
if store.persistent._nsfw_debug_mode:
renpy.say("System", "--SUBTYPE REFINEMENT--{nw}") # DEBUG

# If the dialogue has already been used recently, skip it
if dialogue[2] in recent:
continue
for i, dialogue in enumerate(dialogue_list):
pool_no = 4 # Default to 4, which means "no match"

# If the dialogue has already been used recently, skip it
if dialogue[2] in recent:
continue

for j, subtype in enumerate(subtypes):
# If the subtype is in the special tags
elif subtype in special_tags:
# TODO: Simplify logic using table similar to 'types' above
if subtype in special_tags:
target_pools = [2, 3]
if subtype == "GEN":
target_pools = [2, 3]
pool_no = 1 if subtype in dialogue[1] else target_pools[(j - len(dp1)) % 2]
pool_no = 1 if subtype in dialogue[1] else target_pools[(i - len(dp1)) % len(target_pools)]
elif subtype == "KIS":
target_pools = [2, 3]
pool_no = 1 if "FKS" in dialogue[1] else target_pools[(j - len(dp1)) % 2]
pool_no = 1 if "FKS" in dialogue[1] else target_pools[(i - len(dp1)) % len(target_pools)]
elif subtype == "UND":
target_pools = [2, 3]
pool_no = 1 if "MCL" in dialogue[1] or "PCL" in dialogue[1] else target_pools[(j - len(dp1)) % 2]
pool_no = 1 if "MCL" in dialogue[1] or "PCL" in dialogue[1] else target_pools[(i - len(dp1)) % len(target_pools)]
elif subtype == "CHE":
target_pools = [2, 3]
pool_no = 1 if subtype in dialogue[1] else target_pools[(j - len(dp1)) % 2]
pool_no = 1 if subtype in dialogue[1] else target_pools[(i - len(dp1)) % len(target_pools)]
else: # Shouldn't activate, but here in case any get added
target_pools = [1, 2, 3]
pool_no = target_pools[(j - len(dp1)) % 3]
pool_no = target_pools[(i - len(dp1)) % len(target_pools)]

# If there are multiple subtypes
elif len(subtypes) > 1:
if subtype in dialogue[1]:
# we match subtype index to the pool index
pool_no = i + 1
pool_no = j + 1
else:
pool_no = 3 if len(subtypes) != 3 else 4

Expand All @@ -657,10 +684,16 @@ init python in mas_nsfw:
pool_no = 3

if pool_no == 1 and not dialogue_already_in_pool(dialogue, dp1, dp2, dp3):
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Subtype match for Pool 1: " + subtypes[j] + " and " + ", ".join(str(x) for x in dialogue[1]) + ".{nw}") # DEBUG
dp1.append(dialogue)
elif pool_no == 2 and not dialogue_already_in_pool(dialogue, dp1, dp2, dp3):
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Subtype match for Pool 2: " + subtypes[j] + " and " + ", ".join(str(x) for x in dialogue[1]) + ".{nw}") # DEBUG
dp2.append(dialogue)
elif pool_no == 3 and not dialogue_already_in_pool(dialogue, dp1, dp2, dp3):
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Subtype match for Pool 3: " + subtypes[j] + " and " + ", ".join(str(x) for x in dialogue[1]) + ".{nw}") # DEBUG
dp3.append(dialogue)

for i, pool in enumerate([dp1, dp2, dp3]):
Expand All @@ -671,18 +704,29 @@ init python in mas_nsfw:
non_empty_pools = [p for p in [dp1, dp2, dp3] if len(p) > 1 and p != pool]

if non_empty_pools == [dp3]:
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Dialogue Pool " + str(i + 1) + " empty. Using Dialogue Pool 3, a non-empty pool.{nw}")
index = random.randint(0, len(dp3) - 1)
for j, dialogue in enumerate(dp3):
if "GEN" in dialogue[1]:
index = j
pool.append(dp3.pop(index))
elif non_empty_pools:
if i == 2: # If we're on the last pool, choose the last non-empty pool
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Dialogue Pool " + str(i + 1) + " empty. Using Dialogue Pool " + str(len(non_empty_pools)) + ", a non-empty pool.{nw}")
chosen_pool = non_empty_pools[len(non_empty_pools) - 1]
else: # Otherwise, choose the first non-empty pool
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Dialogue Pool " + str(i + 1) + " empty. Using Dialogue Pool 1, a non-empty pool.{nw}")
chosen_pool = non_empty_pools[0]
index = random.randint(0, len(chosen_pool) - 1)
pool.append(chosen_pool.pop(index))
elif store.persistent._nsfw_debug_mode:
renpy.say("System", "All dialogue pools empty. Error will occur.")
else:
if store.persistent._nsfw_debug_mode:
renpy.say("System", "Dialogue Pool " + str(i + 1) + " has " + str(len(pool)) + " lines of dialogue.{nw}")

new_dialogue_list = [dp1, dp2, dp3] if dialogue_pool is None else [dp1, dp2, dp3][dialogue_pool]

Expand Down
Loading

0 comments on commit f10941c

Please sign in to comment.