UI.wrapCallback(async function () { await initializeDB(); // Load existing state if (localStorage.getItem('state')) { Memory.loadFromLocalStorage(); } // Start New Game else { const possibleStarterMonsters = await Promise.all( [ 'budaye', 'dollfin', 'grintot', 'ignibus', 'memnomnom', ].map(async (monsterSlug) => await fetchMonster(monsterSlug)) ); const monsterSelection = UI.openStarterMonsterSelection(possibleStarterMonsters); monsterSelection.addEventListener('starter:monster:selected', UI.wrapCallback(async (event) => { if (!confirm(`Select ${event.detail.monster.name}?`)) { return; } Memory.state.player = new Trainer({ monsters: [ event.detail.monster, ], inventory: [ new InventoryItem(await fetchItem('tuxeball'), 5), new InventoryItem(await fetchItem('potion')), ] }); await Memory.state.player.initialize(); Game.setActivePlayerMonster(Memory.state.player.monsters[0]); Memory.state.activeBall = 'tuxeball'; // set rival monster possibleStarterMonsters.splice(possibleStarterMonsters.indexOf(event.detail.monster), 1); const rivalMonster = possibleStarterMonsters[Math.round(Math.random() * (possibleStarterMonsters.length - 1))]; Memory.state.opponent = new Trainer({ monsters: [ rivalMonster ] }); await Memory.state.opponent.initialize(); Memory.state.rivalMonster = rivalMonster.slug // go to starting area await Game.goToArea('paper-town'); UI.drawActiveMonster(); UI.drawActiveTechniques(); event.detail.popup.remove(); })); } })();