Thanks to your amazing work, I was able to unlock the rest. Thanks!Hi guys, I was looking for a mod for this everywhere, sadly, I was not able to find it. If anyone is still looking for it, I took it upon myself to make a working version!
Here is an updated script. I hope it works for you.
Code:
# Unlock all gallery images, replays, collectables (polaroids & tapes), and hidden events
# by faking seen flags and bypassing Ren'Py's gallery lock checks.
# Remove this file (and its compiled .rpyc) to return to the original behavior.
#
# This script unlocks:
# - 35 Polaroids (collectables in free roam)
# - 14 Tapes (collectables in free roam)
# - 2 Hidden Events (E4 donation, E5 Jessica diva)
# - 2 Bonus Scenes (B_1, B_2)
# - 30 Re-Live Events (all character events)
# - All gallery images and replay labels
init 999 python:
# Keep the script-level `renpy` name pointing at renpy.exports so we don't
# clobber it with the package module (which would break common scripts).
import renpy as _renpy_pkg
import renpy.exports as renpy
# Override bonus_active to always return True (unlocks bonus scenes)
def bonus_active():
return True
def _unlock_everything():
# Mark every label as seen so replay lists that rely on seen_label unlock.
try:
persistent._seen_ever = {str(label): True for label in renpy.get_all_labels()}
except Exception:
pass
# Mark every declared image as seen for gallery conditions that use seen_image.
try:
persistent._seen_images = {tuple(name.split()): True for name in renpy.list_images()}
except Exception:
pass
def _unlock_polaroids_and_hidden_events():
# Unlock all 35 polaroids (collectables in free roam)
try:
for i in range(1, 36):
_renpy_pkg.store.persistent.__dict__[f"polaroid_{i}_complete"] = True
except Exception:
pass
# Unlock all 14 tapes (collectables in free roam)
try:
for i in range(1, 15):
_renpy_pkg.store.persistent.__dict__[f"tape_{i}_complete"] = True
except Exception:
pass
# Unlock hidden events
try:
_renpy_pkg.store.persistent.hidden_event_e4_donation = True
_renpy_pkg.store.persistent.hidden_event_e5_jessica_diva = True
except Exception:
pass
def _set_relive_flags():
try:
store = _renpy_pkg.store
def _set(name, value):
setattr(store, name, value)
# Global unlock for the Re-Live menu.
_set("relive_menu_tutor_complete", 1)
# Quest/flag gates per character.
gates = {
# Megan
"meg_big_s_q_barged_in": 1,
"spyed_on_m_shower": 1,
"meg_big_s_q": 999,
# Jessica
"jess_quest": 999,
# Elizabeth
"eliz_quest": 999,
# Zoe
"talked_to_zoe_locker_room": 1,
"zoe_quest": 999,
# Ellie
"ellie_quest": 999,
# Nicole
"t_quest_alt_blackmail": 999,
# Sophie
"s_shop_q": 999,
# Shared
"ld_complete": 1,
}
for name, value in gates.items():
current = getattr(store, name, 0)
if current < value:
_set(name, value)
# Let the game keep its real max counts, but mark everything found.
# Use actual maxima (pulled from relive menu definitions) and mark found accordingly.
expected_max = {
"m_rel_e_max": 5, # Megan
"j_rel_e_max": 4, # Jessica
"s_rel_e_max": 9, # Elizabeth
"z_rel_e_max": 5, # Zoe
"e_rel_e_max": 3, # Ellie
"t_rel_e_max": 2, # Nicole (teacher)
"ss_rel_e_max": 2, # Sophie
}
total_max = sum(expected_max.values())
_set("max_rel_e", total_max)
_set("complete_rel_e", total_max)
for max_name, max_val in expected_max.items():
found_name = max_name.replace("_max", "_found")
_set(max_name, max_val)
_set(found_name, max_val)
# Default menu state toggles back to neutral.
for name in ("m_ex_active", "j_ex_active", "s_ex_active", "z_ex_active", "e_ex_active", "t_ex_active", "ss_ex_active"):
_set(name, 0)
except Exception:
pass
# Run once at init for new sessions, and again after loads.
_unlock_everything()
_set_relive_flags()
_unlock_polaroids_and_hidden_events()
try:
_renpy_pkg.config.start_callbacks.append(_set_relive_flags)
_renpy_pkg.config.after_load_callbacks.append(_set_relive_flags)
_renpy_pkg.config.start_interact_callbacks.append(_set_relive_flags)
_renpy_pkg.config.start_callbacks.append(_unlock_everything)
_renpy_pkg.config.after_load_callbacks.append(_unlock_everything)
_renpy_pkg.config.start_interact_callbacks.append(_unlock_everything)
_renpy_pkg.config.start_callbacks.append(_unlock_polaroids_and_hidden_events)
_renpy_pkg.config.after_load_callbacks.append(_unlock_polaroids_and_hidden_events)
_renpy_pkg.config.start_interact_callbacks.append(_unlock_polaroids_and_hidden_events)
except Exception:
pass
# If the game checks seen_label/seen_image directly, force them to always succeed.
renpy.seen_label = lambda label: True
renpy.seen_image = lambda name: True
# Bypass the built-in gallery lock checks so all buttons/images show as unlocked.
try:
import renpy.common._00gallery as _gallery
def _always_true(*args, **kwargs):
return True
_gallery.__GalleryImage.check_unlock = _always_true
_gallery.__GalleryButton.check_unlock = lambda self: True
except Exception:
pass