var loadorder = ['hide_mod.py', 'local_mod_mod.py', 'pubic_hair_mod.py', 'cheats_mod.py', 'wear_whatever.py', 'bug_report.py', 'font_mod.py', 'my_mod.py', 'always_holiday.py', 'no_whore_mod.py', 'save_slots_mod.py']; var active_mods = ['cheats_mod.py', 'bug_report.py', 'font_mod.py', 'save_slots_mod.py']; var mods_desc = {'hide_mod.py': " Hide Mod v1 for SlutED\n Removes the icon and changes the title page to 'Untitled 1'\n This is a sample mod, made to demonstrate how mods work.\n Note: The current Mod Manager gets confused by some comments\n Do not use multiline comments with triple quotes.\n Do not use inline comments on end of the lines\n", 'local_mod_mod.py': ' Local Mod Mod v1 for SlutED\n allows loading mods from local files (even if the game is run online)\n This is a sample mod, made to demonstrate how mods work.\n', 'pubic_hair_mod.py': ' Pubic Hair Mod v2 for SlutED\n Adds pubic hair to the avatar/paperdoll\n and a set of buttons to the mod menu to customize the look\n some assets made by: mrnow19\n This is a sample mod, made to demonstrate how mods work.\n Note: The current Mod Manager gets confused by some comments\n Do not use multiline comments with triple quotes.\n Do not use inline comments on end of the lines\n', 'cheats_mod.py': ' Cheat Mod v1 for SlutED\n adds buttons that give money, change slut values, show map,\n give clothes and allow changing clothes at any moment\n This is a sample mod, made to demonstrate how mods work.\n Note: The current Mod Manager gets confused by some comments\n Do not use multiline comments with triple quotes.\n Do not use inline comments on end of the lines\n', 'wear_whatever.py': '', 'bug_report.py': ' Bug Report Mod v1\n Adds a bunch of buttons to create a bug-report file\n', 'font_mod.py': ' Font mod\n replaces the default Monofonto font used for text with Atkinson Hyperlegible \n', 'my_mod.py': 'This is a sample mod, whatever....\n', 'always_holiday.py': '', 'no_whore_mod.py': ' No-Whore-Mod\n Adds an option not to go whoring yourself out in the slums when Ben ask you to.\n', 'save_slots_mod.py': ' Save Slots v3 Mod for SlutED\n This mod adds save and load slots\n NOTE: This mod may break the game if the browsers localStorage quota is exceeded!\n'}; var mods = {'hide_mod.py': "\ndoc['favico1'].href = 'img/potato.ico'\ndoc['favico2'].href = 'img/potato.ico'\ndoc['title'].textContent = 'Untitled 1'\n\nprint('Hide Mod v1 installed!')\n", 'local_mod_mod.py': '\n\n\ndef load_mod(event=None):\n def _on_load(event):\n raw_mod_source = event.target.result\n try:\n exec(raw_mod_source)\n except Exception as e:\n print(str(e))\n mod_file = doc[\'import_mod\'].files[0]\n reader = data.FileReader.new()\n reader.readAsText(mod_file)\n reader.bind(\'load\', _on_load)\n\n\nmod_panel = add_mod_cfg(\'Load Local Mod Mod v1\', {})\nmod_panel.appendChild(html.BR())\nlabel = html.LABEL(\'Select mod file...\', Class="mod_button")\nmod_file_input = html.INPUT(type="file", id="import_mod", name="import_mod")\nmod_file_input.bind(\'input\', load_mod)\nlabel.appendChild(mod_file_input)\nmod_panel.appendChild(label)\nmod_panel.appendChild(html.BR())\nprint(\'Local Mod Mod v1 installed!\')\n', 'pubic_hair_mod.py': '\nbush_img = html.IMG(id=\'pc_img_pubic_hair\', alt=\'bush\', Class="pc_img", srcset="mods/sample_mods_data/bush.png", style={\'display\': \'none\'})\ndoc[\'pc_imgs\'].insertBefore(bush_img, doc[\'pc_img_underwear_bottom\'])\ndef monkey_patch_function(func):\n def wrapped(*args, **kwargs):\n func(*args, **kwargs)\n visible = True\n if \'visible\' in kwargs:\n visible = kwargs[\'visible\']\n elif args:\n visible = args[0]\n _show(\'pc_img_pubic_hair\', visible)\n save.mod_pubic_hair = 1\n return wrapped\n\nshow_pc = monkey_patch_function(show_pc)\n\ndef set_pub_hair(img):\n doc[\'pc_img_pubic_hair\'].srcset = img\n save.mod_pubic_hair_img = img\n\nbuttons = { \'Shaved\': lambda x: set_pub_hair(\'mods/sample_mods_data/shaved.png\'),\n \'Bush\': lambda x: set_pub_hair(\'mods/sample_mods_data/bush.png\'),\n \'Heart\': lambda x: set_pub_hair(\'mods/sample_mods_data/heart.png\'),\n \'Strip\': lambda x: set_pub_hair(\'mods/sample_mods_data/landing_strip.png\'),\n \'Small Strip\': lambda x: set_pub_hair(\'mods/sample_mods_data/landing_strip_small.png\'),\n \'Stubble\': lambda x: set_pub_hair(\'mods/sample_mods_data/stubble.png\'),\n \'Triangle\': lambda x: set_pub_hair(\'mods/sample_mods_data/triangle.png\'),\n }\nadd_mod_cfg(\'Pubic Hair Mod v2\', buttons)\n\nif save.mod_pubic_hair_img:\n doc[\'pc_img_pubic_hair\'].srcset = save.mod_pubic_hair_img\n\nprint(\'Pubic Hair Mod v2 installed!\')\n', 'cheats_mod.py': "\n\ndef cheat_give_100(event=None):\n save.money += 100\n\ndef cheat_slut(event=None):\n save.max_slut += 1\n\ndef cheat_exec(event=None):\n ''' Execute the command typed into the console\n '''\n cmd = doc['cheat_console'].value\n if cmd:\n try:\n exec(cmd)\n except Exception as e:\n print(str(e))\n\ndef cheat_teleport_home(event=None):\n svg_filter('default')\n overlay_img(None)\n set_body_overlay(None)\n if not get_equipped():\n needed_slots = ['top', 'bottom', 'underwear_top', 'underwear_bottom']\n items_to_equip = []\n for itm_id, slot in inventory.items():\n if needed_slots and itm_id in data.items:\n target_slot = data.items[item_id]['slot']\n if target_slot in needed_slots:\n items_to_equip.append(itm_id)\n del needed_slots[needed_slots.index(target_slot)]\n if items_to_equip:\n set_clothes(items_to_equip)\n remove_tce()\n save.current_location = 'map_home'\n move_to('map_home')\n\nbuttons = { '+ $100': cheat_give_100,\n '+1 Max Slut': cheat_slut,\n 'Change Clothes': lambda x: change_clothes(enforce_stats=0, loopback=True),\n 'All School Clothes': lambda x: give_clothes_by_tag('school'),\n 'All Sport Clothes': lambda x: give_clothes_by_tag('sport'),\n 'All Maid Clothes': lambda x: give_clothes_by_tag('maid'),\n 'Teleport Home': cheat_teleport_home,\n }\nmod_panel = add_mod_cfg('Cheat Mod v1', buttons)\nmod_panel.appendChild(html.BR())\nmod_panel.appendChild(html.SPAN('Python Console:'))\nmod_panel.appendChild(html.INPUT(type='text', size='50', id='cheat_console'))\nexec_button = html.BUTTON(' exec ', type='button')\nexec_button.bind('click', cheat_exec)\nmod_panel.appendChild(exec_button)\n\nprint('Cheat Mod v1 installed!')\n", 'wear_whatever.py': "\ndef mod_ww_close_shop(event=None):\n if int(save.money) < 0:\n _restart_anim('wear_money', 'blink_red')\n return\n save.remove('last_shopping_cart')\n _show(['buy_grid', 'sell_grid', 'cloths','outfit_grid'], False)\n show_pc(False)\n current_clothes = []\n for item_id, item_slot in inventory.items():\n if item_slot:\n current_clothes.append(item_id)\n if not save.last_shop_limited:\n save.set_list('_current_clothes', current_clothes)\n if not rollback_save.is_empty():\n _show('rollback')\n if not quests.is_empty():\n _show('questlog')\n history_log_txt = '[ Changed clothes to: '\n for item_id, slot in inventory.items():\n if slot:\n name = data.items[item_id]['name']\n if name != '- Nothing -':\n history_log_txt+= name+', '\n history_log_txt += str(save.current_slut)+' ]'\n doc['history_txt'].textContent += history_log_txt\n\n if save.last_shop_loopback:\n save.remove('last_shop_loopback')\n move_to(save.current_plot_node)\n return\n save.remove('last_shop_loopback')\n\n _move_to_next()\n\ndoc['shop_close'].unbind('click')\ndoc['shop_close'].bind('click', mod_ww_close_shop)\n\nprint('Wear Whatever Mod installed!')\n", 'bug_report.py': '\n\ndef bug_report_write(event=None):\n storage_dict = {\'info\':\'This is a SlutED game bug report file.\',\n \'date\': Date.new().toLocaleString(),\n \'user_agent\': str(data.navigator.userAgent),\n \'game_version\': str(data.data_version) +\'-\'+str(doc[\'version\'].content)}\n storage_dict[\'inventory\'] = inventory.to_string()\n storage_dict[\'save\'] = save.to_string()\n storage_dict[\'bug_rep_comment\'] = str(doc[\'bug_rep_comment\'].value)\n storage_dict[\'bug_rep_name\'] = str(doc[\'bug_rep_name\'].value)\n storage_dict[\'bug_rep_next\'] = str(doc[\'bug_rep_next\'].value)\n storage_dict[\'bug_rep_pc\'] = str(doc[\'bug_rep_pc\'].value)\n storage_dict[\'bug_rep_txt\'] = str(doc[\'bug_rep_txt\'].value)\n storage_dict[\'bug_rep_npc\'] = str(doc[\'bug_rep_npc\'].value)\n storage_dict[\'bug_rep_img\'] = str(doc[\'bug_rep_img\'].value)\n storage_dict[\'bug_rep_jump\'] = str(doc[\'bug_rep_jump\'].value)\n storage_dict[\'bug_rep_choice\'] = str(doc[\'bug_rep_choice\'].value)\n storage_dict[\'bug_rep_branch\'] = str(doc[\'bug_rep_branch\'].value)\n storage_dict[\'bug_rep_cmd\'] = str(doc[\'bug_rep_cmd\'].value)\n\n jdata = JSON.stringify(storage_dict, None, 2)\n doc[\'bug_rep_save\'].href = \'data:text/plain,\' + jdata\n\ndef bug_rep_new(event=None):\n doc[\'bug_rep_comment\'].value =\'\'\n for err, node in _error_log:\n doc[\'bug_rep_comment\'].value += str(f\'[{node}] : {err}\\n\')\n if \'_current\' in data.glob:\n current_bug_node = str(data.glob._current)\n doc[\'bug_rep_name\'].value = current_bug_node\n _show(\'bug_rep_div\')\n if \'next\' in data.plot[current_bug_node]:\n doc[\'bug_rep_next\'].value = data.plot[current_bug_node][\'next\']\n else:\n doc[\'bug_rep_next\'].value = \'\'\n\n if \'pc\' in data.plot[current_bug_node]:\n doc[\'bug_rep_pc\'].value = data.plot[current_bug_node][\'pc\']\n else:\n doc[\'bug_rep_pc\'].value = \'\'\n\n if \'txt\' in data.plot[current_bug_node]:\n doc[\'bug_rep_txt\'].value = data.plot[current_bug_node][\'txt\']\n else:\n doc[\'bug_rep_txt\'].value = \'\'\n\n if \'npc\' in data.plot[current_bug_node]:\n doc[\'bug_rep_npc\'].value = data.plot[current_bug_node][\'npc\']\n else:\n doc[\'bug_rep_npc\'].value = \'\'\n\n if \'img\' in data.plot[current_bug_node]:\n doc[\'bug_rep_img\'].value = data.plot[current_bug_node][\'img\']\n else:\n doc[\'bug_rep_img\'].value = \'\'\n\n if \'eval_jump_to\' in data.plot[current_bug_node]:\n doc[\'bug_rep_jump\'].value = data.plot[current_bug_node][\'eval_jump_to\']\n else:\n doc[\'bug_rep_jump\'].value = \'\'\n\n if \'choice\' in data.plot[current_bug_node]:\n choice_dump = \'\'\n for choice_condition, choice_label, choice_target in data.plot[current_bug_node][\'choice\']:\n choice_dump+= str(f\'["{choice_condition}", "{choice_label}", "{choice_target}"]\\n\')\n\n doc[\'bug_rep_choice\'].value = choice_dump\n else:\n doc[\'bug_rep_choice\'].value = \'\'\n\n if \'branch\' in data.plot[current_bug_node]:\n branch_dump = \'\'\n for branch_condition, branch_target in data.plot[current_bug_node][\'branch\']:\n branch_dump+= str(f\'["{branch_condition}", "{branch_target}"]\\n\')\n\n doc[\'bug_rep_branch\'].value = branch_dump\n else:\n doc[\'bug_rep_branch\'].value = \'\'\n\n if \'cmd\' in data.plot[current_bug_node]:\n cmd_dump = \'\'\n for cmd in data.plot[current_bug_node][\'cmd\']:\n cmd_dump+= str(cmd)+\'\\n\'\n\n doc[\'bug_rep_cmd\'].value = cmd_dump\n else:\n doc[\'bug_rep_cmd\'].value = \'\'\n else:\n doc[\'bug_rep_comment\'].value += \'Error making error report! Unknown node \'\n print (data.glob)\n\n\nmod_panel = add_mod_cfg(\'Bug Report v1\', { \'Generate Bug Report\': bug_rep_new})\n\nmod_panel.appendChild(html.BR())\nmod_panel.appendChild(html.DIV("Click on the \'Generate Bug Report\' to start."))\n\nbug_rep_div = html.DIV(id="bug_rep_div", style={\'display\': \'none\'})\n\nbug_rep_div.appendChild(html.DIV("DESCRIBE THE ERROR:"))\nbug_rep_div.appendChild(html.DIV("(if it\'s a typo or spelling mistake - just edit the text field below)"))\nbug_rep_div.appendChild(html.TEXTAREA(id="bug_rep_comment", rows="6", cols="60"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.BR())\n\nbug_rep_div.appendChild(html.DIV("SUGGEST A FIX:"))\nbug_rep_div.appendChild(html.DIV("You can edit the fields below if you know how to fix the error you have encountered."))\nbug_rep_div.appendChild(html.DIV("Text:"))\nbug_rep_div.appendChild(html.TEXTAREA(id="bug_rep_txt", rows="6", cols="60"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.SPAN("Node Name:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_name", size="30"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.SPAN("Next Node ID:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_next", size="30"))\nbug_rep_div.appendChild(html.BR())\n\nbug_rep_div.appendChild(html.SPAN("PC:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_pc", size="30"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.SPAN("NPC:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_npc", size="30"))\nbug_rep_div.appendChild(html.BR())\n\nbug_rep_div.appendChild(html.SPAN("Image:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_img", size="30"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.SPAN("Jump:"))\nbug_rep_div.appendChild(html.INPUT(type="text", id="bug_rep_jump", size="30"))\nbug_rep_div.appendChild(html.BR())\n\n\nbug_rep_div.appendChild(html.DIV("Choices:"))\nbug_rep_div.appendChild(html.TEXTAREA(id="bug_rep_choice", rows="6", cols="60", wrap="off"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.DIV("Branches:"))\nbug_rep_div.appendChild(html.TEXTAREA(id="bug_rep_branch", rows="6", cols="60", wrap="off"))\nbug_rep_div.appendChild(html.BR())\n\nbug_rep_div.appendChild(html.DIV("Commands:"))\nbug_rep_div.appendChild(html.TEXTAREA(id="bug_rep_cmd", rows="6", cols="60", wrap="off"))\nbug_rep_div.appendChild(html.BR())\nbug_rep_div.appendChild(html.DIV("Click the button below to save a bug report file:"))\nbug_rep_div.appendChild(html.A(\'WRITE FILE\', Class="cfg_button", id="bug_rep_save", href="", download="bug_report.txt"))\nmod_panel.appendChild(bug_rep_div)\n\ndoc[\'bug_rep_save\'].bind(\'mousedown\', bug_report_write)\n\nprint(\'Bug Report Mod v1 installed!\')\n', 'font_mod.py': "\ndef set_font(font_name):\n\tdoc['txt'].style['font-family'] = font_name\n\nbuttons = { 'Atkinson Hyperlegible': lambda x: set_font('atkinson'),\n 'Monofonto': lambda x: set_font('monofonto'), \n }\nadd_mod_cfg('Font Mod v1', buttons)\n\nprint('Font Mod v1 installed!')\n", 'my_mod.py': '\nmy_new_items = {\n\t"xmas_socks":{\n\t "name":"Xmas Socks",\n\t "img":"mods/my_mod/xmas_socks.png",\n\t "slot":"stockings",\n\t "tags":[\'stockings\'],\n\t "slutty":0,\n\t "value":20\n\t },\n\t"xmas_dress":{\n\t "name":"Xmas Dress",\n\t "img":"mods/my_mod/xmas_dress.png",\n\t "slot":"top",\n\t "tags":[\'clothes_top\', \'clothes_bottom\', \'cover_boobs\', \'partial_cover_boobs\'],\n\t "slutty":0,\n\t "value":30\n\t },\n}\n\nfor itm_id, itm_data in my_new_items.items():\n\tdata.items[itm_id] = itm_data\n\ndata.shops[\'dress_shop\'].append(\'xmas_dress\')\ndata.shops[\'dress_shop\'].append(\'xmas_socks\')\n\nprint(\'Bla, bla, bla.. installed mod or something....\')\n', 'always_holiday.py': "\n\ndef check_irl_month(min_month, max_month=12): \n return True\n\nprint('Always Holiday Mod installed!')\n", 'no_whore_mod.py': '\nmod_plot = {\n "d8_ben_whore_3" : {\n "next" : "d8_ben_whore_4",\n "pc" : "upset",\n "txt" : "Emily:\\nThe slums? Great... what am I supposed to do there?"\n },\n "d8_ben_whore_10" : {\n "next" : "d8_ben_whore_10_choice",\n "txt" : "Ben:\\nAnd what if granny had a beard? We both know you want to do it.",\n "npc" : "img/npc/ben.png"\n },\n "d8_ben_whore_10_choice" : {\n "choice" : [["True", "No way!", "d8_ben_whore_10_nope"], ["True", "Play along.", "d8_ben_whore_11"]]\n },\n "d8_ben_whore_10_nope" : {\n "next" : "d8_ben_whore_10_nope_1",\n "pc" : "upset",\n "txt" : "Emily:\\nYou\\\'re out of your fucking mind! I pull you out of trouble and this is what I get in return?"\n },\n "d8_ben_whore_10_nope_1" : {\n "next" : "d8_ben_whore_10_nope_2",\n "txt" : "Ben:\\nOh c\\\'mon! I\\\'m doing you a favor here! I know you can fuck your way through school, but what then? What kind of job do you think you can get, huh? ",\n "npc" : "img/npc/ben.png"\n },\n "d8_ben_whore_10_nope_2" : {\n "next" : "d8_ben_whore_10_nope_3",\n "pc" : "neutral",\n "txt" : "Emily:\\nI can be a... well, I could..."\n },\n "d8_ben_whore_10_nope_3" : {\n "next" : "d8_ben_whore_10_nope_4",\n "txt" : "Ben:\\nWake up. Wake up and smell the ashes. You\\\'re never gonna be anyone! Learn to earn money with your body girl, that\\\'s all you ever gonna do!",\n "npc" : "img/npc/ben.png"\n },\n "d8_ben_whore_10_nope_4" : {\n "next" : "d8_ben_whore_10_nope_5",\n "pc" : "upset",\n "txt" : "Emily:\\nBut..."\n },\n "d8_ben_whore_10_nope_5" : {\n "next" : "d8_ben_whore_10_nope_6",\n "txt" : "Ben:\\nMoney for sex! What part of \\\'money for sex\\\' don\\\'t you understand? I know you\\\'re stupid, but you can\\\'t be that stupid! ",\n "npc" : "img/npc/ben.png"\n },\n "d8_ben_whore_10_nope_6" : {\n "next" : "d8_ben_whore_10_nope_7",\n "pc" : "upset",\n "txt" : "Emily:\\nFucking fuck you Ben!"\n },\n "d8_ben_whore_10_nope_7" : {\n "next" : "d8_ben_whore_10_nope_8",\n "txt" : "Ben:\\nYeah, I\\\'m not in the mood anymore. We\\\'re done here. You\\\'re waste of time. ",\n "npc" : "img/npc/ben.png"\n },\n "d8_ben_whore_10_nope_8" : {\n "next" : "d8_ben_whore_10_nope_9",\n "pc" : "upset",\n "txt" : "He turns around and starts walking away. You yell \\\'Asshole!\\\' to his back and he flips you off over his shoulder without even turning his head.",\n "cmd" : ["exec_once(\\\'save.rep_ben -= 2\\\')"]\n },\n "d8_ben_whore_10_nope_9" : {\n "eval_jump_to" : "\\\'d8_ben_whore_end_11\\\'"\n }\n} \nfor k,v in mod_plot.items(): \n data.plot[k] = v \n', 'save_slots_mod.py': '\nsave_mod_num_slots = 8\n\ndef save_mod_guess_storage_size():\n total_data=\'\'\n for key in data.localStorage: \n if data.localStorage.hasOwnProperty(key):\n total_data += data.localStorage.getItem(key)\n total_data += key \n return round(len(total_data) * 0.001953125, 2)\n\ndef save_mod_save(event):\n slot = int(event.target.id[14:])\n print(\'saving to slot \'+str(slot))\n smod_save[slot] = DataStore(\'save_\'+str(slot))\n smod_inventory[slot] = DataStore(\'inventory_\'+str(slot))\n smod_quests[slot] = DataStore(\'quests_\'+str(slot))\n\n smod_save[slot].from_string(save.to_string())\n smod_inventory[slot].from_string(inventory.to_string())\n smod_quests[slot].from_string(quests.to_string())\n _show(\'modal_box\', False)\n\ndef save_mod_load(event):\n slot = int(event.target.id[14:])\n print(\'loading from slot \'+str(slot))\n save.from_string(smod_save[slot].to_string())\n inventory.from_string(smod_inventory[slot].to_string())\n quests.from_string(smod_quests[slot].to_string())\n rollback_save.clear()\n rollback_inventory.clear()\n rollback_quests.clear()\n _show(\'modal_box\', False)\n move_to(\'load_last\')\n\ndef save_mod_show_saves(event=None):\n elements=[]\n for i in range(1,save_mod_num_slots+1):\n b1 = html.BUTTON(\'LOAD\', type=\'button\', Class=\'mod_button\', id=\'save_mod_slot_\'+str(i))\n text=f\'{i}: [EMPTY]\'\n if DataStore.exists(\'inventory_\'+str(i)):\n smod_inventory[i] = DataStore(\'inventory_\'+str(i))\n smod_save[i] = DataStore(\'save_\'+str(i))\n smod_quests[i]= DataStore(\'quests_\'+str(i))\n time = smod_save[i][\'time\']\n day, hour = divmod(time, 24)\n time_name = TIME.TIME_NAMES[hour//4]\n day_name = TIME.DAY_NAMES[int(day%7)]\n text = f\'{i}: Day {day}, {day_name} {time_name}\' \n b1.bind(\'click\', save_mod_load)\n\n d=html.DIV(text) \n b2 = html.BUTTON(\'SAVE\', type=\'button\', Class=\'mod_button\', id=\'save_mod_slot_\'+str(i))\n b2.bind(\'click\', save_mod_save) \n d.appendChild(b1)\n d.appendChild(b2)\n elements.append(d)\n\n mem_left = int(100 - round((save_mod_guess_storage_size()/2000.0) +0.5))\n elements.append(html.DIV(\'Storaged left: ~\'+str(mem_left)+\'%\')) \n _show_modal(\'Save/Load:\', elements, None)\n\nif \'in_memory_storage\' in data.glob: \n show_error("Warning: Game uses in-memory-storage, Save Slots Mod DISABLED.") \nelse: \n smod_save = {}\n smod_inventory = {}\n smod_quests = {}\n\n doc[\'left_corner\'].appendChild(html.DIV(chr(int(\'f0c7\', 16)),id=\'save_mod_button\', Class=\'icon_button_aws\'))\n\n doc[\'save_mod_button\'].bind(\'click\', save_mod_show_saves)\n\n print(\'Save Slots v3 Mod installed!\')\n'};