Files
2023-08-25 13:31:04 +05:30

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);
}