Compare commits
No commits in common. "66f8f5ab2880399faf40e0c1157c7ef9be75b7d9" and "04f76d2b548941cb61f570a6211a681b898be115" have entirely different histories.
66f8f5ab28
...
04f76d2b54
@ -331,15 +331,15 @@ init -1 python:
|
|||||||
|
|
||||||
def get_store_menu_item(self, disabled=False):
|
def get_store_menu_item(self, disabled=False):
|
||||||
if disabled:
|
if disabled:
|
||||||
return gui.menu_item(f'-{self.name}-', None, style="disabled")
|
return gui.menu_item('-{}-'.format(self.name), None, style="disabled")
|
||||||
else:
|
else:
|
||||||
return gui.menu_item(f'-{self.name}-', self)
|
return gui.menu_item('-{}-'.format(self.name), self)
|
||||||
|
|
||||||
def get_craft_menu_item(self, disabled=False):
|
def get_craft_menu_item(self, disabled=False):
|
||||||
if disabled:
|
if disabled:
|
||||||
return gui.menu_item(f'-Craft: "{self.name}"-', self.ingredients, style="disabled")
|
return gui.menu_item('-Craft: "{}"-'.format(self.name), self.ingredients, style="disabled")
|
||||||
else:
|
else:
|
||||||
return gui.menu_item(f'-Craft: "{self.name}"-', self.id)
|
return gui.menu_item('-Craft: "{}"-'.format(self.name), self.id)
|
||||||
|
|
||||||
def get_mix_text(self):
|
def get_mix_text(self):
|
||||||
return ">You mix the {i}" + potion_lib.get_name_by_id(self.ingredients[0]) \
|
return ">You mix the {i}" + potion_lib.get_name_by_id(self.ingredients[0]) \
|
||||||
|
@ -15,16 +15,16 @@ python early:
|
|||||||
return "DirectX" if preferences.renderer == "angle2" else "OpenGL"
|
return "DirectX" if preferences.renderer == "angle2" else "OpenGL"
|
||||||
|
|
||||||
class stdcol:
|
class stdcol:
|
||||||
PURPLE = '\033[1;35;48m'
|
PURPLE = '\033[1;35;48m'
|
||||||
CYAN = '\033[1;36;48m'
|
CYAN = '\033[1;36;48m'
|
||||||
BOLD = '\033[1;37;48m'
|
BOLD = '\033[1;37;48m'
|
||||||
BLUE = '\033[1;34;48m'
|
BLUE = '\033[1;34;48m'
|
||||||
GREEN = '\033[1;32;48m'
|
GREEN = '\033[1;32;48m'
|
||||||
YELLOW = '\033[1;33;48m'
|
YELLOW = '\033[1;33;48m'
|
||||||
RED = '\033[1;31;48m'
|
RED = '\033[1;31;48m'
|
||||||
BLACK = '\033[1;30;48m'
|
BLACK = '\033[1;30;48m'
|
||||||
UNDERLINE = '\033[4;37;48m'
|
UNDERLINE = '\033[4;37;48m'
|
||||||
END = '\033[1;37;0m'
|
END = '\033[1;37;0m'
|
||||||
|
|
||||||
if config.developer:
|
if config.developer:
|
||||||
# Debug
|
# Debug
|
||||||
@ -42,7 +42,7 @@ python early:
|
|||||||
orphaned.append(i)
|
orphaned.append(i)
|
||||||
|
|
||||||
if orphaned:
|
if orphaned:
|
||||||
raise Exception(f"Orphaned compiled scripts detected, please delete them before continuing:\n{orphaned}")
|
raise Exception("Orphaned compiled scripts detected, please delete them before continuing:\n{}".format(orphaned))
|
||||||
|
|
||||||
detect_orphaned_rpyc_files()
|
detect_orphaned_rpyc_files()
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ init -2 python:
|
|||||||
return Image(file + ".png")
|
return Image(file + ".png")
|
||||||
|
|
||||||
if config.developer:
|
if config.developer:
|
||||||
raise IOError(f"Missing image: {path}")
|
raise IOError("Missing image: {}".format(path))
|
||||||
return Image("images/blank.webp")
|
return Image("images/blank.webp")
|
||||||
|
|
||||||
def missing_label_func(name):
|
def missing_label_func(name):
|
||||||
|
@ -86,7 +86,7 @@ init python:
|
|||||||
elif what == "temp_attr":
|
elif what == "temp_attr":
|
||||||
setattr(node, "temporary_attributes", tuple(contents))
|
setattr(node, "temporary_attributes", tuple(contents))
|
||||||
else:
|
else:
|
||||||
raise TypeError(f"Type {what!r} is not implemented.")
|
raise TypeError("Type {!r} is not implemented.".format(what))
|
||||||
|
|
||||||
def replace_expression(self, expr, val):
|
def replace_expression(self, expr, val):
|
||||||
node = self.node
|
node = self.node
|
||||||
@ -97,14 +97,14 @@ init python:
|
|||||||
# We need to make sure not to add quotes
|
# We need to make sure not to add quotes
|
||||||
# to expressions or variables.
|
# to expressions or variables.
|
||||||
if isinstance(val, str):
|
if isinstance(val, str):
|
||||||
val = repr(val)
|
val = "\"{}\"".format(val)
|
||||||
|
|
||||||
# Insert new expression
|
# Insert new expression
|
||||||
d = self.get_expressions_active(who)
|
d = self.get_expressions_active(who)
|
||||||
d[expr] = val
|
d[expr] = val
|
||||||
|
|
||||||
# Convert to list of tuples
|
# Convert to list of tuples
|
||||||
# l = [(k, repr(v)) for k, v in d.items() if not v is None] # This is faster, but not robust enough.
|
# l = [(k, "\"{}\"".format(v)) for k, v in d.items() if not v is None] # This is faster, but not robust enough.
|
||||||
|
|
||||||
l = _list()
|
l = _list()
|
||||||
l2 = _list()
|
l2 = _list()
|
||||||
|
@ -39,13 +39,13 @@ init python:
|
|||||||
|
|
||||||
if cache_size >= cache_limit:
|
if cache_size >= cache_limit:
|
||||||
if config.developer:
|
if config.developer:
|
||||||
print(f"Cache limit reached, purging cache... ({cache_size}/{cache_limit})\n{renpy.get_filename_line()}")
|
print("Cache limit reached, purging cache... ({}/{})\n{}".format(cache_size, cache_limit, renpy.get_filename_line()))
|
||||||
|
|
||||||
cache.clear()
|
cache.clear()
|
||||||
|
|
||||||
if renpy.game.interface is not None:
|
if renpy.game.interface is not None:
|
||||||
if config.developer:
|
if config.developer:
|
||||||
print(f"Statements limit reached, cleaning textures... ({self.limit})\n{renpy.get_filename_line()}")
|
print("Statements limit reached, cleaning textures... ({})\n{}".format(self.limit, renpy.get_filename_line()))
|
||||||
|
|
||||||
renpy.game.interface.full_redraw = True
|
renpy.game.interface.full_redraw = True
|
||||||
renpy.game.interface.restart_interaction = True
|
renpy.game.interface.restart_interaction = True
|
||||||
@ -144,13 +144,13 @@ python early hide:
|
|||||||
# return (_CallException, (self.label, self.args, self.kwargs, self.from_current))
|
# return (_CallException, (self.label, self.args, self.kwargs, self.from_current))
|
||||||
|
|
||||||
# class _JumpException(Exception):
|
# class _JumpException(Exception):
|
||||||
|
|
||||||
# def __init__(self, label):
|
# def __init__(self, label):
|
||||||
# for i in renpy.config._label_callbacks:
|
# for i in renpy.config._label_callbacks:
|
||||||
# i(label)
|
# i(label)
|
||||||
|
|
||||||
# class _JumpOutException(Exception):
|
# class _JumpOutException(Exception):
|
||||||
|
|
||||||
# def __init__(self, label):
|
# def __init__(self, label):
|
||||||
# for i in renpy.config._label_callbacks:
|
# for i in renpy.config._label_callbacks:
|
||||||
# i(label)
|
# i(label)
|
||||||
|
@ -137,7 +137,7 @@ init -1 python:
|
|||||||
renpy.lint.report_node = node
|
renpy.lint.report_node = node
|
||||||
has_failed = True
|
has_failed = True
|
||||||
|
|
||||||
msg = f"{key!r} requires an integer, or a pre-defined named position, not {val!r}"
|
msg = "{!r} requires an integer, or a pre-defined named position, not {!r}".format(key, val)
|
||||||
renpy.lint.report(msg)
|
renpy.lint.report(msg)
|
||||||
|
|
||||||
# This would require fixing hundreds of calls. Might postpone it...
|
# This would require fixing hundreds of calls. Might postpone it...
|
||||||
@ -161,7 +161,7 @@ init -1 python:
|
|||||||
|
|
||||||
if key == "emote":
|
if key == "emote":
|
||||||
msg = repr(key)
|
msg = repr(key)
|
||||||
fn = f"characters/{SAYERS.get(who)}/emote/{val}.webp"
|
fn = "characters/{}/emote/{}.webp".format(SAYERS.get(who), val)
|
||||||
|
|
||||||
if not has_failed:
|
if not has_failed:
|
||||||
# Avoid repeating node destination
|
# Avoid repeating node destination
|
||||||
|
@ -75,7 +75,7 @@ init python in cli:
|
|||||||
|
|
||||||
for i, s in enumerate(strings):
|
for i, s in enumerate(strings):
|
||||||
n = round(float(i)/(nstrings)*100)
|
n = round(float(i)/(nstrings)*100)
|
||||||
print(f"\rGenerating strings for {language} ... Total progress:{n} % ... Stage 2/2", end="")
|
print("\rGenerating strings for {} ... Total progress:{} % ... Stage 2/2".format(language, n), end="")
|
||||||
|
|
||||||
tlfn = renpy.translation.generation.translation_filename(s)
|
tlfn = renpy.translation.generation.translation_filename(s)
|
||||||
|
|
||||||
@ -96,17 +96,17 @@ init python in cli:
|
|||||||
tlfn = os.path.join(renpy.config.gamedir, renpy.config.tl_directory, language, tlfn)
|
tlfn = os.path.join(renpy.config.gamedir, renpy.config.tl_directory, language, tlfn)
|
||||||
|
|
||||||
f = open_tl_file(tlfn, mode="w")
|
f = open_tl_file(tlfn, mode="w")
|
||||||
f.write(f"translate {language} strings:\n")
|
f.write(u"translate {} strings:\n".format(language))
|
||||||
f.write("\n")
|
f.write(u"\n")
|
||||||
|
|
||||||
for s in sl:
|
for s in sl:
|
||||||
original = s.text
|
original = s.text
|
||||||
translation = stl.translate(s.text) # Keeps translated strings
|
translation = stl.translate(s.text) # Keeps translated strings
|
||||||
|
|
||||||
f.write(f" # {elide_filename(s.filename)}:{s.line}\n")
|
f.write(u" # {}:{}\n".format(elide_filename(s.filename), s.line))
|
||||||
f.write(f" old \"{quote_unicode(original)}\"\n")
|
f.write(u" old \"{}\"\n".format(quote_unicode(original)))
|
||||||
f.write(f" new \"{quote_unicode(translation)}\"\n")
|
f.write(u" new \"{}\"\n".format(quote_unicode(translation)))
|
||||||
f.write("\n")
|
f.write(u"\n")
|
||||||
|
|
||||||
def retranslate():
|
def retranslate():
|
||||||
translator = renpy.game.script.translator
|
translator = renpy.game.script.translator
|
||||||
@ -135,7 +135,7 @@ init python in cli:
|
|||||||
|
|
||||||
for language in translator.languages:
|
for language in translator.languages:
|
||||||
|
|
||||||
print(f"\rGenerating dialogues for {language} ... Total progress:{n} % ... Stage 1/2", end="")
|
print("\rGenerating dialogues for {} ... Total progress:{} % ... Stage 1/2".format(language, n), end="")
|
||||||
|
|
||||||
for _, trans in translator.file_translates[filepath]:
|
for _, trans in translator.file_translates[filepath]:
|
||||||
|
|
||||||
@ -159,9 +159,9 @@ init python in cli:
|
|||||||
|
|
||||||
f = open_tl_file(fp, mode="w")
|
f = open_tl_file(fp, mode="w")
|
||||||
|
|
||||||
f.write(f"# {trans.filename}:{trans.linenumber}\n")
|
f.write(u"# {}:{}\n".format(trans.filename, trans.linenumber))
|
||||||
f.write("translate {} {}:\n".format(language, trans.identifier.replace(".", "_")))
|
f.write(u"translate {} {}:\n".format(language, trans.identifier.replace(".", "_")))
|
||||||
f.write("\n")
|
f.write(u"\n")
|
||||||
|
|
||||||
for n in trans.block:
|
for n in trans.block:
|
||||||
f.write(u" # " + n.get_code() + "\n")
|
f.write(u" # " + n.get_code() + "\n")
|
||||||
@ -196,7 +196,7 @@ init python in cli:
|
|||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
if args.dry:
|
if args.dry:
|
||||||
print(f"Removal required: {filepath}")
|
print("Removal required: {}".format(filepath))
|
||||||
else:
|
else:
|
||||||
os.unlink(filepath)
|
os.unlink(filepath)
|
||||||
os.unlink(filepath + "c")
|
os.unlink(filepath + "c")
|
||||||
|
@ -106,7 +106,7 @@ init python:
|
|||||||
current = getattr(store, "version", latest)
|
current = getattr(store, "version", latest)
|
||||||
|
|
||||||
if current < 1.452:
|
if current < 1.452:
|
||||||
|
|
||||||
for i in states.dolls:
|
for i in states.dolls:
|
||||||
doll = getattr(store, i)
|
doll = getattr(store, i)
|
||||||
doll._sprite = DefaultQueue()
|
doll._sprite = DefaultQueue()
|
||||||
@ -121,7 +121,7 @@ init python:
|
|||||||
|
|
||||||
# Fix makeup object types inside saved outfits
|
# Fix makeup object types inside saved outfits
|
||||||
if j.has_type("makeup"):
|
if j.has_type("makeup"):
|
||||||
|
|
||||||
objects = [x.parent.clone() for x in j.group]
|
objects = [x.parent.clone() for x in j.group]
|
||||||
|
|
||||||
j.group = objects
|
j.group = objects
|
||||||
@ -214,7 +214,7 @@ init python:
|
|||||||
delattr(store, "achievements_dict")
|
delattr(store, "achievements_dict")
|
||||||
|
|
||||||
if current > latest:
|
if current > latest:
|
||||||
raise Exception(f"Loaded save file is incompatible. (Save Version: {current}, Game Version: {latest})")
|
raise Exception("Loaded save file is incompatible. (Save Version: {}, Game Version: {})".format(current, latest))
|
||||||
|
|
||||||
if current < latest:
|
if current < latest:
|
||||||
setattr(store, "version", latest)
|
setattr(store, "version", latest)
|
||||||
@ -228,7 +228,7 @@ init python:
|
|||||||
|
|
||||||
def version_logo():
|
def version_logo():
|
||||||
url = UPDATE_URL
|
url = UPDATE_URL
|
||||||
filename = f"logo_{UPDATE_VER}.webp"
|
filename = "logo_{}.webp".format(UPDATE_VER)
|
||||||
path = os.path.join(config.basedir, "update", filename)
|
path = os.path.join(config.basedir, "update", filename)
|
||||||
|
|
||||||
# Read file if exists
|
# Read file if exists
|
||||||
|
@ -30,7 +30,7 @@ init python in studio:
|
|||||||
fp, fn = os.path.split(f)
|
fp, fn = os.path.split(f)
|
||||||
fn, ext = os.path.splitext(fn)
|
fn, ext = os.path.splitext(fn)
|
||||||
expression = os.path.split(fp)[1]
|
expression = os.path.split(fp)[1]
|
||||||
|
|
||||||
|
|
||||||
if part in ("cheeks", "tears"):
|
if part in ("cheeks", "tears"):
|
||||||
expressions = d.setdefault(charname, _dict()).setdefault(part, _list((False,)))
|
expressions = d.setdefault(charname, _dict()).setdefault(part, _list((False,)))
|
||||||
@ -203,7 +203,7 @@ screen studio():
|
|||||||
$ bg_blur = studio.choices["background"]["blur"]
|
$ bg_blur = studio.choices["background"]["blur"]
|
||||||
$ bg_matrix = bg_hue*bg_saturation*bg_brightness
|
$ bg_matrix = bg_hue*bg_saturation*bg_brightness
|
||||||
$ bg_image = studio.choices["background"]["list"][studio.choices["background"]["image"]]
|
$ bg_image = studio.choices["background"]["list"][studio.choices["background"]["image"]]
|
||||||
$ bg_image = f"images/rooms/_bg_/{bg_image}.webp"
|
$ bg_image = "images/rooms/_bg_/{}.webp".format(bg_image)
|
||||||
$ bg = Transform(bg_image, matrixcolor=bg_matrix, blur=bg_blur)
|
$ bg = Transform(bg_image, matrixcolor=bg_matrix, blur=bg_blur)
|
||||||
|
|
||||||
$ ov_hue = HueMatrix(studio.choices["overlay"]["hue"])
|
$ ov_hue = HueMatrix(studio.choices["overlay"]["hue"])
|
||||||
@ -214,8 +214,9 @@ screen studio():
|
|||||||
$ ov_matrix = ov_hue*ov_saturation*ov_brightness
|
$ ov_matrix = ov_hue*ov_saturation*ov_brightness
|
||||||
$ ov_image = studio.choices["overlay"]["list"][studio.choices["overlay"]["image"]]
|
$ ov_image = studio.choices["overlay"]["list"][studio.choices["overlay"]["image"]]
|
||||||
|
|
||||||
if ov_image is not None:
|
if not ov_image is None:
|
||||||
$ ov = Transform(f"images/rooms/overlays/{ov_image}.webp", matrixcolor=ov_matrix, blur=ov_blur, alpha=ov_alpha)
|
$ ov_image = "images/rooms/overlays/{}.webp".format(ov_image)
|
||||||
|
$ ov = Transform(ov_image, matrixcolor=ov_matrix, blur=ov_blur, alpha=ov_alpha)
|
||||||
else:
|
else:
|
||||||
$ ov = None
|
$ ov = None
|
||||||
|
|
||||||
@ -336,7 +337,7 @@ screen studio():
|
|||||||
selected v[1] text_color ("#009900" if active else "#f9d592")
|
selected v[1] text_color ("#009900" if active else "#f9d592")
|
||||||
text_hover_color "#fff"
|
text_hover_color "#fff"
|
||||||
text_first_indent 20
|
text_first_indent 20
|
||||||
background Transform(f"interface/icons/head/{k}.webp", size=(16, 16), offset=(22, 3))
|
background Transform("interface/icons/head/{}.webp".format(k), size=(16, 16), offset=(22, 3))
|
||||||
|
|
||||||
vbox:
|
vbox:
|
||||||
align (1.0, 1.0)
|
align (1.0, 1.0)
|
||||||
|
@ -638,16 +638,22 @@ screen wardrobe_menu(xx, yy):
|
|||||||
yspacing 18
|
yspacing 18
|
||||||
|
|
||||||
for i, category in enumerate(wardrobe_categories):
|
for i, category in enumerate(wardrobe_categories):
|
||||||
|
if wardrobe_check_category(category):
|
||||||
|
$ icon = Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/{}/{}.webp".format(states.active_girl, category), zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5)), icon_frame)
|
||||||
|
else:
|
||||||
|
$ icon = Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/{}/{}.webp".format(states.active_girl, category), zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5), matrixcolor=SaturationMatrix(0.0)), icon_frame)
|
||||||
|
$ icon_xoffset = -18 if (i % 2) == 0 else 18
|
||||||
|
|
||||||
button:
|
button:
|
||||||
focus_mask None
|
focus_mask None
|
||||||
xysize (72, 72)
|
xysize (72, 72)
|
||||||
background lock_wardrobe_icon(Fixed(icon_bg, Transform(f"interface/wardrobe/icons/categories/{states.active_girl}/{category}.webp", zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5), matrixcolor=(IdentityMatrix() if wardrobe_check_category(category) else SaturationMatrix(0.0))), icon_frame))
|
background lock_wardrobe_icon(icon)
|
||||||
activate_sound "sounds/scroll.ogg"
|
activate_sound "sounds/scroll.ogg"
|
||||||
tooltip category
|
tooltip category
|
||||||
sensitive (not bool(DollThread._count))
|
sensitive (not bool(DollThread._count))
|
||||||
action Return(["category", category])
|
action Return(["category", category])
|
||||||
if current_category == category:
|
if current_category == category:
|
||||||
xoffset -18 if (i % 2) == 0 else 18
|
xoffset icon_xoffset
|
||||||
|
|
||||||
# Outfits and Studio
|
# Outfits and Studio
|
||||||
hbox:
|
hbox:
|
||||||
@ -771,7 +777,7 @@ screen wardrobe_menuitem(xx, yy):
|
|||||||
pos (12, 108)
|
pos (12, 108)
|
||||||
|
|
||||||
for subcategory in category_items.keys():
|
for subcategory in category_items.keys():
|
||||||
$ icon = lock_wardrobe_icon(f"interface/wardrobe/icons/{subcategory}.webp")
|
$ icon = lock_wardrobe_icon("interface/wardrobe/icons/{}.webp".format(subcategory))
|
||||||
|
|
||||||
button:
|
button:
|
||||||
focus_mask None
|
focus_mask None
|
||||||
@ -824,7 +830,7 @@ screen wardrobe_outfit_menuitem(xx, yy):
|
|||||||
pos (8, 108)
|
pos (8, 108)
|
||||||
|
|
||||||
for subcategory in category_items.keys():
|
for subcategory in category_items.keys():
|
||||||
$ icon = lock_wardrobe_icon(f"interface/wardrobe/icons/{subcategory}.webp")
|
$ icon = lock_wardrobe_icon("interface/wardrobe/icons/{}.webp".format(subcategory))
|
||||||
$ action = Return(["subcategory", subcategory])
|
$ action = Return(["subcategory", subcategory])
|
||||||
|
|
||||||
if subcategory == "schedule" and not get_character_scheduling(states.active_girl):
|
if subcategory == "schedule" and not get_character_scheduling(states.active_girl):
|
||||||
@ -897,7 +903,7 @@ screen wardrobe_schedule_menuitem(item):
|
|||||||
spacing 0
|
spacing 0
|
||||||
for i in wardrobe_outfit_schedule:
|
for i in wardrobe_outfit_schedule:
|
||||||
$ boolean = "" if item.schedule[i] else "Not "
|
$ boolean = "" if item.schedule[i] else "Not "
|
||||||
$ caption = f"{boolean}worn during the {i}" if i in ("day", "night") else f"{boolean}worn in {i} weather"
|
$ caption = "{}worn during the {}".format(boolean, i) if i in ("day", "night") else "{}worn in {} weather".format(boolean, i)
|
||||||
textbutton i:
|
textbutton i:
|
||||||
style gui.theme("dropdown")
|
style gui.theme("dropdown")
|
||||||
tooltip caption
|
tooltip caption
|
||||||
|
Loading…
Reference in New Issue
Block a user