# Neko Paradise cheat console
# Based on the decompiled scripts from the game's .rpa archives.
init -1100 python:
if "neko_cheat_panel" not in config.keymap:
config.keymap["neko_cheat_panel"] = [ ]
for binding in ["shift_K_o", "K_F6"]:
if binding not in config.keymap["neko_cheat_panel"]:
config.keymap["neko_cheat_panel"].append(binding)
init 1101 python:
try:
config.underlay.append(renpy.Keymap(neko_cheat_panel=ToggleScreen("neko_cheat_console")))
except Exception:
pass
define neko_cheat_characters = [
("violet", "Violet", "vp", "vs"),
("lily", "Lily", "lp", "ls"),
("kleo", "Kleo", "kp", "ks"),
("ash", "Ash", "bp", "bs"),
("autumn", "Autumn", "aup", "aus"),
("bera", "Bera", "bap", "bas"),
("marie", "Marie", "marp", "mars"),
("nina", "Nina", "np", "ns"),
("daisy", "Daisy", "daip", "dais"),
("rayne", "Rayne", "rayp", "rays"),
("corynn", "Corynn", "corp", "cors"),
("chocomint", "Chocomint", "chp", "chs"),
("cream", "Cream", "crp", "crs"),
("caramel", "Caramel", "carp", "cars"),
("cotton", "Cotton", "ctp", "cts"),
("blueberry", "Blueberry", "bbp", "bbs"),
("mitty", "Mitty", "mtp", "mts"),
("pudding", "Pudding", "pudp", "puds"),
("theobroma", "Thea", "theop", "theos"),
("grace", "Grace", "grap", "gras"),
("meeki", "Meeki", "meekip", "meekis"),
]
define neko_cheat_persistent_adds = [
"violetadd", "beraadd", "ashadd", "kleoadd", "autumnadd", "rayneadd",
"lilyadd", "chocomintadd", "creamadd", "mittyadd", "corynnadd", "daisyadd",
"specialadd", "marieadd", "ninaadd", "cottonadd", "carameladd", "blueberryadd",
"hazeladd", "puddingadd", "theoadd", "graceadd", "meekiadd",
]
init python:
def neko_cheat_get_character(char_key):
for row in neko_cheat_characters:
if row[0] == char_key:
return row
return None
def neko_cheat_select(char_key):
row = neko_cheat_get_character(char_key)
if row is None:
renpy.store.neko_cheat_message = "Unknown heroine: %s" % char_key
return
renpy.store.neko_cheat_selected = char_key
renpy.store.neko_cheat_message = "Selected: %s" % row[1]
def neko_cheat_button_text(char_key):
store = renpy.store
row = neko_cheat_get_character(char_key)
if row is None:
return char_key
display_name = row[1]
point_var = row[2]
progress_var = row[3]
points_value = getattr(store, point_var, 0)
progress_value = getattr(store, progress_var, 0)
prefix = ""
if getattr(store, "neko_cheat_selected", "violet") == char_key:
prefix = "> "
return "%s%s P:%s S:%s" % (prefix, display_name, points_value, progress_value)
def neko_cheat_selected_display_name():
row = neko_cheat_get_character(renpy.store.neko_cheat_selected)
if row is None:
return "Unknown"
return row[1]
def neko_cheat_selected_point_var():
row = neko_cheat_get_character(renpy.store.neko_cheat_selected)
if row is None:
return "?"
return row[2]
def neko_cheat_selected_progress_var():
row = neko_cheat_get_character(renpy.store.neko_cheat_selected)
if row is None:
return "?"
return row[3]
def neko_cheat_get_money():
return getattr(renpy.store, "nc", 0)
def neko_cheat_get_selected_points():
store = renpy.store
row = neko_cheat_get_character(store.neko_cheat_selected)
if row is None:
return "?"
return getattr(store, row[2], 0)
def neko_cheat_get_selected_progress():
store = renpy.store
row = neko_cheat_get_character(store.neko_cheat_selected)
if row is None:
return "?"
return getattr(store, row[3], 0)
def neko_cheat_parse_int(text_value):
try:
return int(text_value)
except Exception:
return None
def neko_cheat_set_money():
store = renpy.store
amount = neko_cheat_parse_int(store.neko_cheat_money_input)
if amount is None:
store.neko_cheat_message = "Coins value must be a number."
return
store.nc = amount
store.neko_cheat_message = "Neko Coins set to %s." % store.nc
def neko_cheat_add_money():
store = renpy.store
amount = neko_cheat_parse_int(store.neko_cheat_money_input)
if amount is None:
store.neko_cheat_message = "Coins value must be a number."
return
store.nc = getattr(store, "nc", 0) + amount
store.neko_cheat_message = "Added %s coins. Current: %s." % (amount, store.nc)
def neko_cheat_set_selected_points():
store = renpy.store
row = neko_cheat_get_character(store.neko_cheat_selected)
amount = neko_cheat_parse_int(store.neko_cheat_points_input)
if row is None:
store.neko_cheat_message = "Select a heroine first."
return
if amount is None:
store.neko_cheat_message = "Points value must be a number."
return
setattr(store, row[2], amount)
store.neko_cheat_message = "%s points set to %s." % (row[1], amount)
def neko_cheat_add_selected_points():
store = renpy.store
row = neko_cheat_get_character(store.neko_cheat_selected)
amount = neko_cheat_parse_int(store.neko_cheat_points_input)
if row is None:
store.neko_cheat_message = "Select a heroine first."
return
if amount is None:
store.neko_cheat_message = "Points value must be a number."
return
setattr(store, row[2], getattr(store, row[2], 0) + amount)
store.neko_cheat_message = "%s points increased by %s. Current: %s." % (row[1], amount, getattr(store, row[2], 0))
def neko_cheat_set_all_points():
store = renpy.store
amount = neko_cheat_parse_int(store.neko_cheat_points_input)
if amount is None:
store.neko_cheat_message = "Points value must be a number."
return
for key, display_name, point_var, progress_var in neko_cheat_characters:
setattr(store, point_var, amount)
store.neko_cheat_message = "All heroine point variables set to %s." % amount
def neko_cheat_prepare_story_defaults():
store = renpy.store
if not hasattr(store, "name") or not store.name:
store.name = "John"
if not hasattr(store, "bestfriend") or not store.bestfriend:
store.bestfriend = "Ash"
if not hasattr(store, "Autumn") or not store.Autumn:
store.Autumn = "Autumn"
if not hasattr(store, "bfs") or not store.bfs:
store.bfs = "Female"
def neko_cheat_unlock_all():
store = renpy.store
neko_cheat_prepare_story_defaults()
for key, display_name, point_var, progress_var in neko_cheat_characters:
setattr(store, point_var, 999)
setattr(store, progress_var, 99)
extra_values = {
"story": 999,
"days": 999,
"relations": 999,
"aulove": 1,
"baro": 1,
"ev_vina": 1,
"ev_chcr": 1,
"ev_trio": 1,
"sps": 1,
"meeki_bjs": 3,
"food_donated": 999,
"fish_fresh": 1,
"shopitem_honey": 1,
}
for var_name, value in extra_values.items():
setattr(store, var_name, value)
for i in range(1, 26):
setattr(store, "pic%s" % i, True)
for attr in neko_cheat_persistent_adds:
setattr(persistent, attr, True)
store.neko_cheat_message = "All points, gallery progress and wallpapers unlocked. Use Open Gallery to verify."
def neko_cheat_open_gallery():
try:
neko_cheat_prepare_story_defaults()
renpy.hide_screen("neko_cheat_console")
renpy.call_in_new_context("game_gallery")
except Exception as e:
renpy.store.neko_cheat_message = "Failed to open gallery: %s" % e
default neko_cheat_selected = "violet"
default neko_cheat_money_input = "10000"
default neko_cheat_points_input = "25"
default neko_cheat_message = "Shift+O or F6 opens this cheat console."
screen neko_cheat_console():
modal True
zorder 300
key "shift_K_o" action Hide("neko_cheat_console")
key "K_F6" action Hide("neko_cheat_console")
key "game_menu" action Hide("neko_cheat_console")
frame:
xalign 0.5
yalign 0.5
xsize 1120
ysize 720
background "#202020ee"
padding (18, 18)
hbox:
spacing 18
frame:
xsize 390
yfill True
background "#2a2a2a"
padding (12, 12)
vbox:
spacing 10
label "Heroines" text_size 24 text_color "#ffffff"
text "Real point/progress vars from the decompiled archives." size 14 color "#bbbbbb"
viewport:
mousewheel True
draggable True
scrollbars "vertical"
yfill True
vbox:
spacing 6
for key, display_name, point_var, progress_var in neko_cheat_characters:
textbutton (neko_cheat_button_text(key)) action Function(neko_cheat_select, key) selected (neko_cheat_selected == key) text_size 17
frame:
xfill True
yfill True
background "#2a2a2a"
padding (16, 16)
vbox:
spacing 14
label "Cheat Console" text_size 26 text_color "#ffffff"
text ("Selected: %s" % neko_cheat_selected_display_name()) size 20 color "#ffd966"
text ("Point var: %s Progress var: %s" % (neko_cheat_selected_point_var(), neko_cheat_selected_progress_var())) size 15 color "#bdbdbd"
text ("Current points: %s Current progress: %s" % (neko_cheat_get_selected_points(), neko_cheat_get_selected_progress())) size 17 color "#ffffff"
null height 4
hbox:
spacing 10
text "Neko Coins (nc):" size 18 color "#dddddd" yalign 0.5
input value VariableInputValue("neko_cheat_money_input") length 12 size 18 color "#ffffff"
textbutton "Set" action Function(neko_cheat_set_money) text_size 16
textbutton "+ Add" action Function(neko_cheat_add_money) text_size 16
text ("Current coins: %s" % neko_cheat_get_money()) size 16 color "#ffd966"
null height 8
hbox:
spacing 10
text "Points amount:" size 18 color "#dddddd" yalign 0.5
input value VariableInputValue("neko_cheat_points_input") length 10 size 18 color "#ffffff"
textbutton "Set selected" action Function(neko_cheat_set_selected_points) text_size 16
textbutton "+ Add selected" action Function(neko_cheat_add_selected_points) text_size 16
hbox:
spacing 10
textbutton "Set all heroines" action Function(neko_cheat_set_all_points) text_size 16
textbutton "Unlock all scenes" action Function(neko_cheat_unlock_all) text_size 16
textbutton "Open gallery" action Function(neko_cheat_open_gallery) text_size 16
null height 8
frame:
xfill True
yfill True
background "#1b1b1b"
padding (12, 12)
viewport:
mousewheel True
scrollbars "vertical"
yfill True
vbox:
spacing 8
text "Notes" size 18 color "#ffffff"
text "Money in this build is the real variable 'nc'." size 15 color "#cccccc"
text "Unlock All sets real gallery counters like vs/ls/ks/dais/theos/meekis and the special flags story/aulove/ev_vina/ev_chcr/ev_trio." size 15 color "#cccccc"
text "If Shift+O conflicts on your keyboard layout, use F6." size 15 color "#cccccc"
null height 10
text "Status" size 18 color "#ffffff"
text neko_cheat_message size 15 color "#d9d9d9"
textbutton "Close (Shift+O, F6 or Esc)" action Hide("neko_cheat_console") text_size 15 text_color "#999999"