686 lines
17 KiB
JavaScript
686 lines
17 KiB
JavaScript
var initialState = {
|
|
axeNr: 0,
|
|
answerPrice: 1,
|
|
answerStates: [],
|
|
bAncientCubeFound: false,
|
|
bAncientPlanet: false,
|
|
bAppleProgress: 0,
|
|
bBarCocoPrice: 10,
|
|
bBarCocoSell: 30,
|
|
bBurgulonUnlocked: false,
|
|
bMyBeans: [],
|
|
bBeanieImaginationUpgrade: false,
|
|
bBeanieProgress: 0,
|
|
bBeanShop: false,
|
|
bBentProgress: 0,
|
|
bBret: false,
|
|
bBretDoingCoco: false,
|
|
bBobMessage: false,
|
|
bCelestialSummoner: false,
|
|
bCelestialSummonerCharged: false,
|
|
bCoco: 0,
|
|
bCocoPS: 0,
|
|
bCoreCapacity: 50,
|
|
bCoreLevel: 1,
|
|
bCoreState: "coreBlue",
|
|
bDerekProgress: 0,
|
|
bGold: 0,
|
|
bGoldPS: 0,
|
|
bCoreStardust: 50,
|
|
bCoreStardustIncrement: 1,
|
|
bDerekShipStates: [],
|
|
bDerekSummoningDevice: false,
|
|
bDoubleRings: false,
|
|
bEggProgress: 0,
|
|
bFriendBananaMan: false,
|
|
bFriendJerkWiseman: false,
|
|
bFriendBrokenRobot: false,
|
|
bFriendJerkinson: false,
|
|
bFriendSweatson: false,
|
|
bFriendAncientDerek: false,
|
|
bGardenBoys: false,
|
|
bGnomeRecords: [0,0,0],
|
|
bJackLetters: 0,
|
|
bJackProgress: 0,
|
|
bJerkCanCool: false,
|
|
bJerkCanFantastic: false,
|
|
bJerkClub: false,
|
|
bJerkStarted: false,
|
|
bJerkActions: 3,
|
|
bJerksPerTurn: 4,
|
|
bJerkAttackPower: 1,
|
|
bJerkMuffinPower: 1,
|
|
bJerkinsonRecruited: false,
|
|
bLemonada: false,
|
|
bLollipops: 0,
|
|
bMayonadaProgress: 0,
|
|
bMillionDerekCubeFound: false,
|
|
bMinionsKilled: 0,
|
|
bMouladinLollipops: 0,
|
|
bMouladinProgress: 0,
|
|
bMouladinUpgrades: [false,false,false,false],
|
|
bMouladinUpgradePoints: 0,
|
|
bWood: 0,
|
|
bWoodPS: 0,
|
|
bPlanetBack: false,
|
|
bPokerCubeFound: false,
|
|
bPotato: false,
|
|
bRemoveJerkPrice: 10,
|
|
bRouletteCubeFound: false,
|
|
bShipsSummoned: [false,false,false,false],
|
|
bSlopnax: false,
|
|
bSlopnaxProgress: 0,
|
|
bStanley: false,
|
|
bStanleyStardust: 0,
|
|
bStardust: 0,
|
|
bSpaceBar: false,
|
|
bSpaceBarCoco: 0,
|
|
bSpaceBarGold: 0,
|
|
bSpaceBarRate: 1,
|
|
bSpaceBen: false,
|
|
bSpaceBenPrices: [25,25,25,0],
|
|
bSpaceBenUpgraded: false,
|
|
bSpaceRadio: false,
|
|
bSpaceRings: 0,
|
|
bWarshipProgress: 0,
|
|
bWoodSynthesizer: false,
|
|
bottleFound: false,
|
|
burgerDoing: '',
|
|
burgerGoldPS: 1,
|
|
burgerWoodPS: 1,
|
|
burgerGift: false,
|
|
burgerLost: false,
|
|
burgerReview: false,
|
|
burgulonCreated: false,
|
|
burgulonDungeon: [4,4,4],
|
|
burgulonTime: false,
|
|
broccoliChapter: false,
|
|
chosenTTItem: false,
|
|
chosenTTJerk: false,
|
|
coco: 0,
|
|
cocoDungeonsCompleted: false,
|
|
cocoDungeonsFound: false,
|
|
cocoPenguinFound: false,
|
|
cocoPopsAsteroid: false,
|
|
cocoPS: 0,
|
|
coins: 0,
|
|
curGhostID: 0,
|
|
curCreatureID: 0,
|
|
derekDead: false,
|
|
derekDefrosted: false,
|
|
derekHealth: 50,
|
|
derekItems: [],
|
|
derekMaxHealth: 50,
|
|
derekToughness: 50,
|
|
derekulusX: false,
|
|
derekulusXCubeFound: false,
|
|
drillNr: 0,
|
|
ddsPrice: [300, 20, 0, 0, false],
|
|
dungeonFound: false,
|
|
dungeon2Found: false,
|
|
dungeon3Found: false,
|
|
dungeonMasterSummoned: false,
|
|
dungeons: [],
|
|
dungeonsCompleted: false,
|
|
firstCocoTrade: false,
|
|
friendHousePrice: [500, 0, 0, 0, false],
|
|
friends: [],
|
|
ghostTradeFound: false,
|
|
ghosts: 0,
|
|
ghostPrice: 13,
|
|
ghostTrend: 10,
|
|
ghostTrendy: true,
|
|
gold: 0,
|
|
goldChance: 0.3,
|
|
goldFishPurity: 10,
|
|
goldPS: 0,
|
|
healthPotionCapacity: 1,
|
|
healthPotionHeal: 50,
|
|
healthPotions: 0,
|
|
imgaOver: true,
|
|
impatientMode: false,
|
|
jerkPile: [],
|
|
lochJuiceVomit: false,
|
|
monsterDungeons: false,
|
|
monsterDungeonsCompleted: false,
|
|
musicMuted: false,
|
|
penguinCocoPS: 0,
|
|
pickedRobot: false,
|
|
planetudFound: false,
|
|
planetudFoundAgain: false,
|
|
planetudPrices: [],
|
|
playIntro: true,
|
|
productStates: [],
|
|
purchasedChapter2: false,
|
|
purchasedChapter3: false,
|
|
quizDone: false,
|
|
quizHalfway: false,
|
|
randomDungeonDifficulty: 8,
|
|
repairSlipFound: false,
|
|
remouladinFound: false,
|
|
revivePrice: [0, 0, 0, 1],
|
|
savedLevel: 0,
|
|
shopFound: false,
|
|
shopPrices: [],
|
|
skillStates: [],
|
|
slotmachinePrice: [400, 50, 200, 0, false],
|
|
soundMuted: false,
|
|
spaceDungeon: false,
|
|
stardust: 0,
|
|
stardustPS: 0,
|
|
starmapNr: 0,
|
|
strawCocoPS: 1,
|
|
strawNr: 0,
|
|
strawPrice: [100, 10, 0, 0, false],
|
|
stateInitialized: false,
|
|
svenFound: false,
|
|
svenWoodPS: 0,
|
|
tTerrariumFound: false,
|
|
tClosetArray: [],
|
|
tClosetSlots: 1,
|
|
tClubArray: [],
|
|
tClubSlots: 1,
|
|
tWoodPS: 1,
|
|
tWood: 0,
|
|
tWoodCapacity: 500,
|
|
tCocoPS: 1,
|
|
tCoco: 0,
|
|
tCocoCapacity: 500,
|
|
tGamesCompleted: 0,
|
|
tGoldPS: 0,
|
|
tGold: 0,
|
|
tGoldCapacity: 100,
|
|
unlockedFullHeal: false,
|
|
villaKey: false,
|
|
villaPortal: false,
|
|
wood: 0,
|
|
woodPS: 0,
|
|
workshopDemolished: false,
|
|
workshopPrice: [20, 0, 0, 0, false],
|
|
wormCubes: 0,
|
|
wormFound: false,
|
|
wormFoundAgain: false,
|
|
wormholePaid: false,
|
|
wormOut: false,
|
|
version: 12,
|
|
};
|
|
|
|
var state = initialState;
|
|
var stateQueue = {
|
|
paused: false,
|
|
};
|
|
|
|
// https://github.com/Northplay/PlanetLife/compare/212c2b611e8ddffc96830e1d658efe9492ca19ad...master
|
|
var stateMigrations = [
|
|
{
|
|
// First migration
|
|
from: undefined,
|
|
to: 2,
|
|
added: [
|
|
{ key: 'answerPrice', value: 1 },
|
|
{ key: 'answerStates', value: [] },
|
|
{ key: 'bBarCocoPrice', value: 10 },
|
|
{ key: 'bBarCocoSell', value: 30 },
|
|
{ key: 'bBret', value: false },
|
|
{ key: 'bBretDoingCoco', value: false },
|
|
{ key: 'bCelestialSummoner', value: false },
|
|
{ key: 'bCoco', value: 0 },
|
|
{ key: 'bCocoPS', value: 0 },
|
|
{ key: 'bGold', value: 0 },
|
|
{ key: 'bGoldPS', value: 0 },
|
|
{ key: 'bWood', value: 0 },
|
|
{ key: 'bWoodPS', value: 0 },
|
|
{ key: 'bStardust', value: 0 },
|
|
{ key: 'bSpaceBar', value: false },
|
|
{ key: 'bWoodSynthesizer', value: false },
|
|
{ key: 'bottleFound', value: false },
|
|
{ key: 'burgerLost', value: false },
|
|
{ key: 'burgulonCreated', value: false },
|
|
{ key: 'burgulonTime', value: false },
|
|
{ key: 'broccoliChapter', value: false },
|
|
{ key: 'cocoDungeonsCompleted', value: false },
|
|
{ key: 'cocoDungeonsFound', value: false},
|
|
{ key: 'cocoPenguinFound', value: false },
|
|
{ key: 'coins', value: 0 },
|
|
{ key: 'curGhostID', value: 0 },
|
|
{ key: 'curCreatureID', value: 0 },
|
|
{ key: 'derekDead', value: false },
|
|
{ key: 'derekulusX', value: false },
|
|
{ key: 'ddsPrice', value: [300,20,0,0,false] },
|
|
{ key: 'dungeon2Found', value: false },
|
|
{ key: 'dungeon3Found', value: false },
|
|
{ key: 'dungeonMasterSummoned', value: false },
|
|
{ key: 'dungeons', value: [] },
|
|
{ key: 'dungeonsCompleted', value: false },
|
|
{ key: 'ghostTradeFound', value: false },
|
|
{ key: 'ghosts', value: 0 },
|
|
{ key: 'ghostPrice', value: 13 },
|
|
{ key: 'ghostTrend', value: 10 },
|
|
{ key: 'ghostTrendy', value: true },
|
|
{ key: 'goldFishPurity', value: 10 },
|
|
{ key: 'healthPotionHeal', value: 50 },
|
|
{ key: 'imgaOver', value: true },
|
|
{ key: 'lochJuiceVomit', value: false },
|
|
{ key: 'monsterDungeons', value: false },
|
|
{ key: 'monsterDungeonsCompleted', value: false },
|
|
{ key: 'penguinCocoPS', value: 0 },
|
|
{ key: 'planetudFoundAgain', value: false },
|
|
{ key: 'productStates', value: [] },
|
|
{ key: 'quizDone', value: false },
|
|
{ key: 'quizHalfway', value: false },
|
|
{ key: 'randomDungeonDifficulty', value: 8 },
|
|
{ key: 'remouladinFound', value: false },
|
|
//{ key: 'revivePrice', value: [0,0,0,1] },
|
|
{ key: 'skillStates', value: [] },
|
|
{ key: 'spaceDungeon', value: false },
|
|
{ key: 'strawCocoPS', value: 1 },
|
|
{ key: 'svenFound', value: false },
|
|
{ key: 'svenWoodPS', value: 0 },
|
|
{ key: 'unlockedFullHeal', value: false },
|
|
{ key: 'villaKey', value: false },
|
|
{ key: 'villaPortal', value: false },
|
|
{ key: 'workshopDemolished', value: false },
|
|
{ key: 'wormFoundAgain', value: false },
|
|
{ key: 'version', value: 2},
|
|
{ key: 'didPlayOriginal', value: true },
|
|
],
|
|
removed: [
|
|
'beltUpgradeNr', 'healthUpgradeNr', 'toughnessUpgradeNr',
|
|
],
|
|
updated: [
|
|
// { key: 'test', value: 'what does the fox say?'},
|
|
],
|
|
},
|
|
{
|
|
from: 2,
|
|
to: 3,
|
|
added: [
|
|
{ key: 'burgerReview', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
},
|
|
{
|
|
from: 3,
|
|
to: 4,
|
|
added: [
|
|
{ key: 'jerkPile', value: [] },
|
|
{ key: 'burgulonDungeon', value: [2,2] },
|
|
{ key: 'bBeanieProgress', value: 0 },
|
|
{ key: 'bEggProgress', value: 0 },
|
|
{ key: 'bWarshipProgress', value: 0 },
|
|
{ key: 'bJerkClub', value: false },
|
|
{ key: 'bCoreStardust', value: 50 },
|
|
{ key: 'bCoreStardustIncrement', value: 1 },
|
|
{ key: 'bJerkStarted', value: false },
|
|
{ key: 'bSpaceRings', value: 0 },
|
|
{ key: 'bJerkActions', value: 3 },
|
|
{ key: 'bJerksPerTurn', value: 3 },
|
|
{ key: 'bJerkAttackPower', value: 1 },
|
|
{ key: 'bJerkMuffinPower', value: 1 },
|
|
{ key: 'bMyBeans', value: [] },
|
|
{ key: 'bCoreState', value: "coreBlue" },
|
|
{ key: 'bCoreLevel', value: 1 },
|
|
{ key: 'bCoreCapacity', value: 100 },
|
|
{ key: 'bBentProgress', value: 0 },
|
|
{ key: 'bAncientPlanet', value: false },
|
|
{ key: 'bGardenBoys', value: false },
|
|
{ key: 'bStanley', value: false },
|
|
{ key: 'bStanleyStardust', value: 0 },
|
|
{ key: 'bAppleProgress', value: 0 },
|
|
{ key: 'bMinionsKilled', value: 0 },
|
|
{ key: 'bSlopnaxProgress', value: 0 },
|
|
{ key: 'bMouladinProgress', value: 0 },
|
|
{ key: 'bMouladinLollipops', value: 0 },
|
|
{ key: 'bLollipops', value: 0 },
|
|
{ key: 'bMouladinUpgradePoints', value: 0 },
|
|
{ key: 'bMouladinUpgrades', value: [false,false,false,false] },
|
|
{ key: 'bMayonadaProgress', value: 0 },
|
|
{ key: 'bJerkCanCool', value: false },
|
|
{ key: 'bJerkCanFantastic', value: false },
|
|
{ key: 'bJackProgress', value: 0 },
|
|
{ key: 'bSpaceBarCoco', value: 0 },
|
|
{ key: 'bSpaceBarGold', value: 0 },
|
|
{ key: 'bSpaceBarRate', value: 1 },
|
|
{ key: 'bCelestialSummonerCharged', value: false},
|
|
{ key: 'bSpaceBen', value: false },
|
|
{ key: 'bSpaceBenPrices', value: [25,25,25,0] },
|
|
{ key: 'bPotato', value: false },
|
|
{ key: 'bSlopnax', value: false },
|
|
{ key: 'bLemonada', value: false },
|
|
{ key: 'bGnomeRecords', value: [0,0,0] },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
},
|
|
{
|
|
from: 4,
|
|
to: 5,
|
|
added: [
|
|
{ key: 'bBeanShop', value: false },
|
|
{ key: 'bFriendSweatson', value: false },
|
|
{ key: 'bFriendJerkinson', value: false },
|
|
{ key: 'bFriendAncientDerek', value: false },
|
|
{ key: 'bDoubleRings', value: false },
|
|
{ key: 'bBobMessage', value: false },
|
|
{ key: 'bJerkinsonRecruited', value: false },
|
|
{ key: 'bDerekShipStates', value: [] },
|
|
{ key: 'bShipsSummoned', value: [false,false,false,false] },
|
|
{ key: 'bSpaceRadio', value: false },
|
|
{ key: 'bFriendBananaMan', value: false },
|
|
{ key: 'bFriendBrokenRobot', value: false },
|
|
{ key: 'bFriendJerkWiseman', value: false },
|
|
{ key: 'bRemoveJerkPrice', value: 10 },
|
|
{ key: 'bJackLetters', value: 0 },
|
|
{ key: 'bDerekProgress', value: 0 },
|
|
{ key: 'bPlanetBack', value: false },
|
|
{ key: 'bDerekSummoningDevice', value: false },
|
|
{ key: 'bBurgulonUnlocked', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [
|
|
{ key: 'bBarCocoPrice', value: 10 },
|
|
{ key: 'bBarCocoSell', value: 30 },
|
|
{ key: 'bBret', value: false },
|
|
{ key: 'bBretDoingCoco', value: false },
|
|
{ key: 'bCelestialSummoner', value: false },
|
|
{ key: 'bCoco', value: 0 },
|
|
{ key: 'bCocoPS', value: 0 },
|
|
{ key: 'bGold', value: 0 },
|
|
{ key: 'bGoldPS', value: 0 },
|
|
{ key: 'bWood', value: 0 },
|
|
{ key: 'bWoodPS', value: 0 },
|
|
{ key: 'bStardust', value: 0 },
|
|
{ key: 'bSpaceBar', value: false },
|
|
{ key: 'bWoodSynthesizer', value: false },
|
|
],
|
|
customFunction: function(state) {
|
|
var newState = state;
|
|
|
|
console.log("Fixing the burgulon product states");
|
|
|
|
var newProductStates = state.productStates;
|
|
newProductStates[18] = 0;
|
|
newProductStates[19] = 0;
|
|
newProductStates[20] = 0;
|
|
newProductStates[21] = 0;
|
|
newProductStates[22] = 0;
|
|
updateState('productStates', newProductStates);
|
|
|
|
return newState;
|
|
},
|
|
},
|
|
{
|
|
from: 5,
|
|
to: 6,
|
|
added: [
|
|
{ key: 'wormholePaid', value: false },
|
|
{ key: 'bSpaceBenUpgrade', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
},
|
|
{
|
|
from: 6,
|
|
to: 7,
|
|
added: [
|
|
{ key: 'impatientMode', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
},
|
|
{
|
|
from: 7,
|
|
to: 8,
|
|
added: [
|
|
{ key: 'bBeanieImaginationUpgrade', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
},
|
|
{
|
|
from: 8,
|
|
to: 9,
|
|
added: [
|
|
{ key: 'purchasedChapter2', value: false },
|
|
{ key: 'purchasedChapter3', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
|
|
},
|
|
{
|
|
from: 9,
|
|
to: 10,
|
|
added: [
|
|
{ key: 'tTerrariumFound', value: false },
|
|
{ key: 'tWoodPS', value: 1 },
|
|
{ key: 'tWoodCapacity', value: 500 },
|
|
{ key: 'tCocoPS', value: 1 },
|
|
{ key: 'tCocoCapacity', value: 500 },
|
|
{ key: 'tGoldPS', value: 0 },
|
|
{ key: 'tGoldCapacity', value: 100 },
|
|
{ key: 'tWood', value: 0 },
|
|
{ key: 'tCoco', value: 0 },
|
|
{ key: 'tGold', value: 0 },
|
|
{ key: 'wormCubes', value: 0 },
|
|
{ key: 'tGamesCompleted', value: 0 },
|
|
{ key: 'bAncientCubeFound', value: false },
|
|
{ key: 'derekulusXCubeFound', value: false },
|
|
{ key: 'bMillionDerekCubeFound', value: false },
|
|
{ key: 'bPokerCubeFound', value: false },
|
|
{ key: 'bRouletteCubeFound', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
|
|
},
|
|
{
|
|
from: 10,
|
|
to: 11,
|
|
added: [
|
|
{ key: 'derekItems', value: [] },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
|
|
},
|
|
{
|
|
from: 11,
|
|
to: 12,
|
|
added: [
|
|
{ key: 'tClosetArray', value: [] },
|
|
{ key: 'tClosetSlots', value: 1 },
|
|
{ key: 'tClubArray', value: [] },
|
|
{ key: 'tClubSlots', value: 1 },
|
|
{ key: 'chosenTTJerk', value: false },
|
|
{ key: 'chosenTTItem', value: false },
|
|
],
|
|
removed: [],
|
|
updated: [],
|
|
|
|
},
|
|
// {
|
|
// from: 2,
|
|
// to: 3,
|
|
// added: [],
|
|
// removed: [],
|
|
// updated: [{ key: 'wormFoundAgain', value: true }],
|
|
// },
|
|
];
|
|
|
|
//ADMIN HACKS
|
|
// updateState('dungeonFound',true);
|
|
// updateState('derekDefrosted',true);
|
|
// updateState('playIntro',false);
|
|
// updateState('muted',true);
|
|
|
|
function hasLocalStorage() {
|
|
var test = 'test';
|
|
try {
|
|
localStorage.setItem(test, test);
|
|
localStorage.removeItem(test);
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function hasBridge() {
|
|
return typeof BridgeCommander !== 'undefined';
|
|
}
|
|
|
|
function decodeState(string) {
|
|
if (typeof string !== 'undefined' && string !== null && string.length > 0) {
|
|
var decoded = Base64.decode(string);
|
|
var parsed = JSON.parse(decoded);
|
|
return parsed;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function encodeState(data) {
|
|
var string = JSON.stringify(data);
|
|
var encoded = Base64.encode(string);
|
|
|
|
return encoded;
|
|
}
|
|
|
|
function loadState(onComplete) {
|
|
stateQueue.paused = true;
|
|
|
|
if (hasBridge() === true) {
|
|
loadFromBridge(onComplete);
|
|
} else if (hasLocalStorage() === true) {
|
|
loadFromLocalStorage(onComplete);
|
|
} else {
|
|
stateQueue.paused = false;
|
|
onComplete();
|
|
}
|
|
}
|
|
|
|
function parseAndSetState(value) {
|
|
var decoded = decodeState(value);
|
|
if (decoded !== null && decoded['gold'] !== undefined) {
|
|
var migratedState = migrateStateIfNeeded(decoded);
|
|
state = migratedState;
|
|
} else {
|
|
state = initialState;
|
|
}
|
|
|
|
stateQueue.paused = false;
|
|
}
|
|
|
|
function loadFromBridge(onComplete) {
|
|
var call = BridgeCommander.call('loadState');
|
|
|
|
call.then(function(value) {
|
|
parseAndSetState(value);
|
|
onComplete();
|
|
});
|
|
call.catch(function(error) {
|
|
console.log('Error trying to load state');
|
|
onComplete();
|
|
});
|
|
}
|
|
|
|
function loadFromLocalStorage(onComplete) {
|
|
var value = localStorage.getItem('state');
|
|
console.log("load state");
|
|
// console.log("load state: " + value);
|
|
parseAndSetState(value);
|
|
onComplete();
|
|
}
|
|
|
|
function updateState(key, value) {
|
|
if (stateQueue.paused) { return; }
|
|
|
|
state[key] = value;
|
|
saveState();
|
|
}
|
|
|
|
var ignoreStateSaves = false;
|
|
|
|
function saveState() {
|
|
if (ignoreStateSaves) { return; }
|
|
var encoded = encodeState(state);
|
|
|
|
if (hasBridge()) {
|
|
BridgeCommander.call('updateState', encoded);
|
|
} else if (hasLocalStorage()) {
|
|
localStorage.setItem('state', encoded);
|
|
}
|
|
}
|
|
|
|
function updateArrayState(key, index, value) {
|
|
var arrayValue = state[key];
|
|
arrayValue[index] = value;
|
|
updateState(key, arrayValue);
|
|
}
|
|
|
|
function migrateStateIfNeeded(decoded) {
|
|
var version = decoded.version;
|
|
var migrations = stateMigrations.filter(m => m.from === version);
|
|
if (migrations.length > 0) {
|
|
var migratedState = runMigration(decoded, migrations[0]);
|
|
return migrateStateIfNeeded(migratedState);
|
|
}
|
|
|
|
return decoded;
|
|
}
|
|
|
|
function runMigration(currentState, migration) {
|
|
var state = currentState;
|
|
|
|
migration.added.forEach(m => (state[m.key] = m.value));
|
|
migration.updated.forEach(m => (state[m.key] = m.value));
|
|
migration.removed.forEach(m => delete state[m]);
|
|
|
|
if (migration.customFunction !== undefined) {
|
|
state = migration.customFunction(state);
|
|
}
|
|
|
|
state.version = migration.to;
|
|
|
|
return state;
|
|
}
|
|
|
|
function removeUsedBeans() {
|
|
// Check for used beans
|
|
var mb = state.bMyBeans;
|
|
for (var i = 0; i < mb.length; i++) {
|
|
if (mb[i].used) {
|
|
console.log("Removed bean " + i);
|
|
mb.splice(i,1);
|
|
i--;
|
|
}
|
|
}
|
|
updateState('bMyBeans', mb);
|
|
}
|
|
|
|
function cleanUpRemovedJerks() {
|
|
// Check for removed jerks
|
|
var mb = state.jerkPile;
|
|
for (var i = 0; i < mb.length; i++) {
|
|
if (mb[i].removed) {
|
|
console.log("Removed jerk " + i);
|
|
mb.splice(i,1);
|
|
i--;
|
|
}
|
|
}
|
|
updateState('jerkPile', mb);
|
|
}
|
|
|
|
|
|
function fixOldBurgulonState() {
|
|
console.log("Fixing the burgulon product states");
|
|
|
|
var newProductStates = state.productStates;
|
|
newProductStates[18] = 0;
|
|
newProductStates[19] = 0;
|
|
newProductStates[20] = 0;
|
|
newProductStates[21] = 0;
|
|
newProductStates[22] = 0;
|
|
updateState('productStates', newProductStates);
|
|
} |