From c05071ab6e2bbb27f6870f7d6cd75a4245260942 Mon Sep 17 00:00:00 2001 From: Chorizorro Date: Wed, 4 Nov 2020 13:54:52 +0100 Subject: [PATCH 1/4] Add sim gains calculation support up to v2.0.31 Add the Dragon scale upgrade in gains calculation. Add the following achievements in gains calculation: - Quincentennial and a half - Sexcentennial - Grand design - Ecumenopolis - The full picture - When there's nothing left to add - Polymath - Renaissance baker - Gotta hand it to you - The devil's workshop --- CookieMonster.js | 14 ++++++++++++-- src/Sim.js | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index fc68285..fd1fa5e 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -3243,6 +3243,8 @@ CM.Sim.CalculateGains = function() { if (CM.Sim.Has('Fortune #100')) mult *= 1.01; if (CM.Sim.Has('Fortune #101')) mult *= 1.07; + if (CM.Sim.Has('Dragon scale')) mult *= 1.03; + var buildMult = 1; if (Game.hasGod) { var godLvl = Game.hasGod('asceticism'); @@ -3425,19 +3427,25 @@ CM.Sim.CheckOtherAchiev = function() { if (minAmount >= 400) CM.Sim.Win('Quadricentennial'); if (minAmount >= 450) CM.Sim.Win('Quadricentennial and a half'); if (minAmount >= 500) CM.Sim.Win('Quincentennial'); + if (minAmount >= 550) CM.Sim.Win('Quincentennial and a half'); + if (minAmount >= 600) CM.Sim.Win('Sexcentennial'); if (buildingsOwned >= 100) CM.Sim.Win('Builder'); if (buildingsOwned >= 500) CM.Sim.Win('Architect'); if (buildingsOwned >= 1000) CM.Sim.Win('Engineer'); if (buildingsOwned >= 2000) CM.Sim.Win('Lord of Constructs'); + if (buildingsOwned >= 4000) CM.Sim.Win('Grand design'); + if (buildingsOwned >= 8000) CM.Sim.Win('Ecumenopolis'); if (CM.Sim.UpgradesOwned >= 20) CM.Sim.Win('Enhancer'); if (CM.Sim.UpgradesOwned >= 50) CM.Sim.Win('Augmenter'); if (CM.Sim.UpgradesOwned >= 100) CM.Sim.Win('Upgrader'); if (CM.Sim.UpgradesOwned >= 200) CM.Sim.Win('Lord of Progress'); + if (CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('The full picture'); + if (CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('When there\'s nothing left to add'); - if (buildingsOwned >= 3000 && CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('Polymath'); - if (buildingsOwned >= 4000 && CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('Renaissance baker'); + if (buildingsOwned >= 4000 && CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('Polymath'); + if (buildingsOwned >= 8000 && CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('Renaissance baker'); if (CM.Sim.Objects['Cursor'].amount + CM.Sim.Objects['Grandma'].amount >= 777) CM.Sim.Win('The elder scrolls'); @@ -3480,6 +3488,8 @@ CM.Sim.BuyBuildings = function(amount, target) { if (me.amount >= 400) CM.Sim.Win('Dr. T'); if (me.amount >= 500) CM.Sim.Win('Thumbs, phalanges, metacarpals'); if (me.amount >= 600) CM.Sim.Win('With her finger and her thumb'); + if (me.amount >= 700) CM.Sim.Win('Gotta hand it to you'); + if (me.amount >= 800) CM.Sim.Win('The devil\'s workshop'); } else { for (var j in Game.Objects[me.name].tieredAchievs) { diff --git a/src/Sim.js b/src/Sim.js index feed0f6..0e6b60f 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -220,6 +220,8 @@ CM.Sim.CalculateGains = function() { if (CM.Sim.Has('Fortune #100')) mult *= 1.01; if (CM.Sim.Has('Fortune #101')) mult *= 1.07; + if (CM.Sim.Has('Dragon scale')) mult *= 1.03; + var buildMult = 1; if (Game.hasGod) { var godLvl = Game.hasGod('asceticism'); @@ -402,19 +404,25 @@ CM.Sim.CheckOtherAchiev = function() { if (minAmount >= 400) CM.Sim.Win('Quadricentennial'); if (minAmount >= 450) CM.Sim.Win('Quadricentennial and a half'); if (minAmount >= 500) CM.Sim.Win('Quincentennial'); + if (minAmount >= 550) CM.Sim.Win('Quincentennial and a half'); + if (minAmount >= 600) CM.Sim.Win('Sexcentennial'); if (buildingsOwned >= 100) CM.Sim.Win('Builder'); if (buildingsOwned >= 500) CM.Sim.Win('Architect'); if (buildingsOwned >= 1000) CM.Sim.Win('Engineer'); if (buildingsOwned >= 2000) CM.Sim.Win('Lord of Constructs'); + if (buildingsOwned >= 4000) CM.Sim.Win('Grand design'); + if (buildingsOwned >= 8000) CM.Sim.Win('Ecumenopolis'); if (CM.Sim.UpgradesOwned >= 20) CM.Sim.Win('Enhancer'); if (CM.Sim.UpgradesOwned >= 50) CM.Sim.Win('Augmenter'); if (CM.Sim.UpgradesOwned >= 100) CM.Sim.Win('Upgrader'); if (CM.Sim.UpgradesOwned >= 200) CM.Sim.Win('Lord of Progress'); + if (CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('The full picture'); + if (CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('When there\'s nothing left to add'); - if (buildingsOwned >= 3000 && CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('Polymath'); - if (buildingsOwned >= 4000 && CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('Renaissance baker'); + if (buildingsOwned >= 4000 && CM.Sim.UpgradesOwned >= 300) CM.Sim.Win('Polymath'); + if (buildingsOwned >= 8000 && CM.Sim.UpgradesOwned >= 400) CM.Sim.Win('Renaissance baker'); if (CM.Sim.Objects['Cursor'].amount + CM.Sim.Objects['Grandma'].amount >= 777) CM.Sim.Win('The elder scrolls'); @@ -457,6 +465,8 @@ CM.Sim.BuyBuildings = function(amount, target) { if (me.amount >= 400) CM.Sim.Win('Dr. T'); if (me.amount >= 500) CM.Sim.Win('Thumbs, phalanges, metacarpals'); if (me.amount >= 600) CM.Sim.Win('With her finger and her thumb'); + if (me.amount >= 700) CM.Sim.Win('Gotta hand it to you'); + if (me.amount >= 800) CM.Sim.Win('The devil\'s workshop'); } else { for (var j in Game.Objects[me.name].tieredAchievs) { From f69fe119214cfc51c085b3e4f0d6cd6615432d3b Mon Sep 17 00:00:00 2001 From: Chorizorro Date: Wed, 4 Nov 2020 13:55:48 +0100 Subject: [PATCH 2/4] =?UTF-8?q?Fix=20grandma=20Cps=20gains=20calculation?= =?UTF-8?q?=20with=20Milkhelp=C2=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for the "Milkhelp® lactose intolerance relief tablets" ascension upgrade, as it isn't computed in the game's Grandma CpS. --- CookieMonster.js | 52 +++++++++++++++++++++++++----------------------- src/Sim.js | 52 +++++++++++++++++++++++++----------------------- 2 files changed, 54 insertions(+), 50 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index fd1fa5e..6ef8eb7 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -3275,16 +3275,8 @@ CM.Sim.CalculateGains = function() { if (CM.Sim.Has('Santa\'s legacy')) mult *= 1 + (Game.santaLevel + 1) * 0.03; - for (var i in CM.Sim.Objects) { - var me = CM.Sim.Objects[i]; - var storedCps = (typeof(me.cps) == 'function' ? me.cps(me) : me.cps); - if (Game.ascensionMode != 1) storedCps *= (1 + me.level * 0.01) * buildMult; - CM.Sim.cookiesPs += me.amount * storedCps; - } - - if (CM.Sim.Has('"egg"')) CM.Sim.cookiesPs += 9; // "egg" - - var milkMult=1; + var milkProgress = CM.Sim.AchievementsOwned / 25; + var milkMult = 1; if (CM.Sim.Has('Santa\'s milk and cookies')) milkMult *= 1.05; //if (CM.Sim.hasAura('Breath of Milk')) milkMult *= 1.05; milkMult *= 1 + CM.Sim.auraMult('Breath of Milk') * 0.05; @@ -3299,21 +3291,31 @@ CM.Sim.CalculateGains = function() { var catMult = 1; - if (CM.Sim.Has('Kitten helpers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.1 * milkMult); - if (CM.Sim.Has('Kitten workers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.125 * milkMult); - if (CM.Sim.Has('Kitten engineers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.15 * milkMult); - if (CM.Sim.Has('Kitten overseers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.175 * milkMult); - if (CM.Sim.Has('Kitten managers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten accountants')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten specialists')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten experts')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten consultants')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten assistants to the regional manager')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.175 * milkMult); - if (CM.Sim.Has('Kitten marketeers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.15 * milkMult); - if (CM.Sim.Has('Kitten analysts')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.125 * milkMult); - if (CM.Sim.Has('Kitten executives')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.115 * milkMult); - if (CM.Sim.Has('Kitten angels')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.1 * milkMult); - if (CM.Sim.Has('Fortune #103')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.05 * milkMult); + if (CM.Sim.Has('Kitten helpers')) catMult *= (1 + milkProgress * 0.1 * milkMult); + if (CM.Sim.Has('Kitten workers')) catMult *= (1 + milkProgress * 0.125 * milkMult); + if (CM.Sim.Has('Kitten engineers')) catMult *= (1 + milkProgress * 0.15 * milkMult); + if (CM.Sim.Has('Kitten overseers')) catMult *= (1 + milkProgress * 0.175 * milkMult); + if (CM.Sim.Has('Kitten managers')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten accountants')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten specialists')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten experts')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten consultants')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten assistants to the regional manager')) catMult *= (1 + milkProgress * 0.175 * milkMult); + if (CM.Sim.Has('Kitten marketeers')) catMult *= (1 + milkProgress * 0.15 * milkMult); + if (CM.Sim.Has('Kitten analysts')) catMult *= (1 + milkProgress * 0.125 * milkMult); + if (CM.Sim.Has('Kitten executives')) catMult *= (1 + milkProgress * 0.115 * milkMult); + if (CM.Sim.Has('Kitten angels')) catMult *= (1 + milkProgress * 0.1 * milkMult); + if (CM.Sim.Has('Fortune #103')) catMult *= (1 + milkProgress * 0.05 * milkMult); + + for (var i in CM.Sim.Objects) { + var me = CM.Sim.Objects[i]; + var storedCps = (typeof(me.cps) == 'function' ? me.cps(me) : me.cps); + if (Game.ascensionMode != 1) storedCps *= (1 + me.level * 0.01) * buildMult; + if (me.name == "Grandma" && CM.Sim.Has('Milkhelp® lactose intolerance relief tablets')) storedCps *= 1 + 0.05 * milkProgress * milkMult; + CM.Sim.cookiesPs += me.amount * storedCps; + } + + if (CM.Sim.Has('"egg"')) CM.Sim.cookiesPs += 9;//"egg" mult *= catMult; diff --git a/src/Sim.js b/src/Sim.js index 0e6b60f..15adeb1 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -252,16 +252,8 @@ CM.Sim.CalculateGains = function() { if (CM.Sim.Has('Santa\'s legacy')) mult *= 1 + (Game.santaLevel + 1) * 0.03; - for (var i in CM.Sim.Objects) { - var me = CM.Sim.Objects[i]; - var storedCps = (typeof(me.cps) == 'function' ? me.cps(me) : me.cps); - if (Game.ascensionMode != 1) storedCps *= (1 + me.level * 0.01) * buildMult; - CM.Sim.cookiesPs += me.amount * storedCps; - } - - if (CM.Sim.Has('"egg"')) CM.Sim.cookiesPs += 9; // "egg" - - var milkMult=1; + var milkProgress = CM.Sim.AchievementsOwned / 25; + var milkMult = 1; if (CM.Sim.Has('Santa\'s milk and cookies')) milkMult *= 1.05; //if (CM.Sim.hasAura('Breath of Milk')) milkMult *= 1.05; milkMult *= 1 + CM.Sim.auraMult('Breath of Milk') * 0.05; @@ -276,21 +268,31 @@ CM.Sim.CalculateGains = function() { var catMult = 1; - if (CM.Sim.Has('Kitten helpers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.1 * milkMult); - if (CM.Sim.Has('Kitten workers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.125 * milkMult); - if (CM.Sim.Has('Kitten engineers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.15 * milkMult); - if (CM.Sim.Has('Kitten overseers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.175 * milkMult); - if (CM.Sim.Has('Kitten managers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten accountants')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten specialists')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten experts')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten consultants')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.2 * milkMult); - if (CM.Sim.Has('Kitten assistants to the regional manager')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.175 * milkMult); - if (CM.Sim.Has('Kitten marketeers')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.15 * milkMult); - if (CM.Sim.Has('Kitten analysts')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.125 * milkMult); - if (CM.Sim.Has('Kitten executives')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.115 * milkMult); - if (CM.Sim.Has('Kitten angels')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.1 * milkMult); - if (CM.Sim.Has('Fortune #103')) catMult *= (1 + (CM.Sim.AchievementsOwned / 25) * 0.05 * milkMult); + if (CM.Sim.Has('Kitten helpers')) catMult *= (1 + milkProgress * 0.1 * milkMult); + if (CM.Sim.Has('Kitten workers')) catMult *= (1 + milkProgress * 0.125 * milkMult); + if (CM.Sim.Has('Kitten engineers')) catMult *= (1 + milkProgress * 0.15 * milkMult); + if (CM.Sim.Has('Kitten overseers')) catMult *= (1 + milkProgress * 0.175 * milkMult); + if (CM.Sim.Has('Kitten managers')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten accountants')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten specialists')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten experts')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten consultants')) catMult *= (1 + milkProgress * 0.2 * milkMult); + if (CM.Sim.Has('Kitten assistants to the regional manager')) catMult *= (1 + milkProgress * 0.175 * milkMult); + if (CM.Sim.Has('Kitten marketeers')) catMult *= (1 + milkProgress * 0.15 * milkMult); + if (CM.Sim.Has('Kitten analysts')) catMult *= (1 + milkProgress * 0.125 * milkMult); + if (CM.Sim.Has('Kitten executives')) catMult *= (1 + milkProgress * 0.115 * milkMult); + if (CM.Sim.Has('Kitten angels')) catMult *= (1 + milkProgress * 0.1 * milkMult); + if (CM.Sim.Has('Fortune #103')) catMult *= (1 + milkProgress * 0.05 * milkMult); + + for (var i in CM.Sim.Objects) { + var me = CM.Sim.Objects[i]; + var storedCps = (typeof(me.cps) == 'function' ? me.cps(me) : me.cps); + if (Game.ascensionMode != 1) storedCps *= (1 + me.level * 0.01) * buildMult; + if (me.name == "Grandma" && CM.Sim.Has('Milkhelp® lactose intolerance relief tablets')) storedCps *= 1 + 0.05 * milkProgress * milkMult; + CM.Sim.cookiesPs += me.amount * storedCps; + } + + if (CM.Sim.Has('"egg"')) CM.Sim.cookiesPs += 9;//"egg" mult *= catMult; From 356b1fec573b16bd7a55d860e175830b7b5695f5 Mon Sep 17 00:00:00 2001 From: Chorizorro Date: Thu, 5 Nov 2020 00:11:02 +0100 Subject: [PATCH 3/4] Handle Prism heart biscuits from Valentine season Add Prism heart biscuits to Valentine cookies data. Update required Valentine upgrade for "Lovely cookies" achievement to "Prism heart biscuits". --- CookieMonster.js | 4 ++-- src/Data.js | 2 +- src/Sim.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 6ef8eb7..112ead6 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -619,7 +619,7 @@ CM.Data.Fortunes = [ ]; CM.Data.HalloCookies = ['Skull cookies', 'Ghost cookies', 'Bat cookies', 'Slime cookies', 'Pumpkin cookies', 'Eyeball cookies', 'Spider cookies']; CM.Data.ChristCookies = ['Christmas tree biscuits', 'Snowflake biscuits', 'Snowman biscuits', 'Holly biscuits', 'Candy cane biscuits', 'Bell biscuits', 'Present biscuits']; -CM.Data.ValCookies = ['Pure heart biscuits', 'Ardent heart biscuits', 'Sour heart biscuits', 'Weeping heart biscuits', 'Golden heart biscuits', 'Eternal heart biscuits']; +CM.Data.ValCookies = ['Pure heart biscuits', 'Ardent heart biscuits', 'Sour heart biscuits', 'Weeping heart biscuits', 'Golden heart biscuits', 'Eternal heart biscuits', 'Prism heart biscuits']; /******** * Disp * @@ -3535,7 +3535,7 @@ CM.Sim.BuyUpgrades = function() { else if (i == 'Elder Covenant') { CM.Sim.Win('Elder calm') } - else if (i == 'Eternal heart biscuits') { + else if (i == 'Prism heart biscuits') { CM.Sim.Win('Lovely cookies'); } else if (i == 'Heavenly key') { diff --git a/src/Data.js b/src/Data.js index 4202c89..3f0c872 100644 --- a/src/Data.js +++ b/src/Data.js @@ -28,5 +28,5 @@ CM.Data.Fortunes = [ ]; CM.Data.HalloCookies = ['Skull cookies', 'Ghost cookies', 'Bat cookies', 'Slime cookies', 'Pumpkin cookies', 'Eyeball cookies', 'Spider cookies']; CM.Data.ChristCookies = ['Christmas tree biscuits', 'Snowflake biscuits', 'Snowman biscuits', 'Holly biscuits', 'Candy cane biscuits', 'Bell biscuits', 'Present biscuits']; -CM.Data.ValCookies = ['Pure heart biscuits', 'Ardent heart biscuits', 'Sour heart biscuits', 'Weeping heart biscuits', 'Golden heart biscuits', 'Eternal heart biscuits']; +CM.Data.ValCookies = ['Pure heart biscuits', 'Ardent heart biscuits', 'Sour heart biscuits', 'Weeping heart biscuits', 'Golden heart biscuits', 'Eternal heart biscuits', 'Prism heart biscuits']; diff --git a/src/Sim.js b/src/Sim.js index 15adeb1..8d5a712 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -512,7 +512,7 @@ CM.Sim.BuyUpgrades = function() { else if (i == 'Elder Covenant') { CM.Sim.Win('Elder calm') } - else if (i == 'Eternal heart biscuits') { + else if (i == 'Prism heart biscuits') { CM.Sim.Win('Lovely cookies'); } else if (i == 'Heavenly key') { From e2ec8a34f29344046cea202fb41cc4644725b797 Mon Sep 17 00:00:00 2001 From: Chorizorro Date: Thu, 5 Nov 2020 00:13:16 +0100 Subject: [PATCH 4/4] Add Fortune #018 to Fortunes data. Add Fortune #018 (Idleverse related fortune cookie) introduced in v2.031 to the list of fortune cookies. --- CookieMonster.js | 1 + src/Data.js | 1 + 2 files changed, 2 insertions(+) diff --git a/CookieMonster.js b/CookieMonster.js index 112ead6..8df1f29 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -611,6 +611,7 @@ CM.Data.Fortunes = [ 'Fortune #015', 'Fortune #016', 'Fortune #017', + 'Fortune #018', 'Fortune #100', 'Fortune #101', 'Fortune #102', diff --git a/src/Data.js b/src/Data.js index 3f0c872..f5a8bde 100644 --- a/src/Data.js +++ b/src/Data.js @@ -20,6 +20,7 @@ CM.Data.Fortunes = [ 'Fortune #015', 'Fortune #016', 'Fortune #017', + 'Fortune #018', 'Fortune #100', 'Fortune #101', 'Fortune #102',