From 1290dc00b75b8856bbfdefa05be69b91ee1932ff Mon Sep 17 00:00:00 2001 From: Tendsty <137620092+Tendsty@users.noreply.github.com> Date: Sun, 9 Jun 2024 03:06:08 +0200 Subject: [PATCH 01/22] hotfix for game crash --- package-lock.json | 4 +-- package.json | 2 +- public/version.txt | 2 +- src/js/modules/event/relic.js | 2 +- src/js/modules/event/weatherChaos/tick.js | 20 ++++++----- src/js/modules/farm/gene.js | 42 ++++++++++++++++------- src/js/modules/horde/cardList.js | 5 +-- src/js/modules/meta.js | 2 ++ src/js/modules/patchnote/v1_4_2.js | 30 ++++++++++++++++ src/lang/en/patchnote.js | 6 ++++ src/store/system.js | 2 +- 11 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 src/js/modules/patchnote/v1_4_2.js diff --git a/package-lock.json b/package-lock.json index 9145239e..eacde52c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gooboo", - "version": "1.4.0", + "version": "1.4.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gooboo", - "version": "1.4.0", + "version": "1.4.2", "license": "GPL-3.0-or-later", "dependencies": { "@fontsource/caveat": "^4.5.9", diff --git a/package.json b/package.json index 206ca121..9ea7dfcd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gooboo", - "version": "1.4.1", + "version": "1.4.2", "description": "An idle game", "author": "Tendsty", "main": "main.js", diff --git a/public/version.txt b/public/version.txt index 347f5833..9df886c4 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.4.1 +1.4.2 diff --git a/src/js/modules/event/relic.js b/src/js/modules/event/relic.js index 72c6dfc4..3f8a944f 100644 --- a/src/js/modules/event/relic.js +++ b/src/js/modules/event/relic.js @@ -76,7 +76,7 @@ export default { {name: 'currencyMiningScrapGain', type: 'mult', value: 1.08} ]}, suitcase: {icon: 'mdi-bag-carry-on', color: 'dark-blue', effect: [ - {name: 'hordeMaxItems', type: 'base', value: 1} + {name: 'currencyHordeBoneCap', type: 'mult', value: 1.07} ]}, // Summer festival diff --git a/src/js/modules/event/weatherChaos/tick.js b/src/js/modules/event/weatherChaos/tick.js index b9a54716..748882bb 100644 --- a/src/js/modules/event/weatherChaos/tick.js +++ b/src/js/modules/event/weatherChaos/tick.js @@ -2,15 +2,17 @@ import store from "../../../../store"; import { SECONDS_PER_HOUR } from "../../../constants"; export default function(seconds, oldTime, newTime) { - let step = oldTime; - while (step < newTime) { - const oldStep = step; - step = Math.min(Math.floor((step + SECONDS_PER_HOUR) / SECONDS_PER_HOUR) * SECONDS_PER_HOUR, newTime); - if (step % SECONDS_PER_HOUR === 0) { - store.dispatch('weatherChaos/nextWeatherStep'); - } - if (step > oldStep) { - singleTick(step - oldStep); + if (store.getters['weatherChaos/currentWeather'] !== undefined) { + let step = oldTime; + while (step < newTime) { + const oldStep = step; + step = Math.min(Math.floor((step + SECONDS_PER_HOUR) / SECONDS_PER_HOUR) * SECONDS_PER_HOUR, newTime); + if (step % SECONDS_PER_HOUR === 0) { + store.dispatch('weatherChaos/nextWeatherStep'); + } + if (step > oldStep) { + singleTick(step - oldStep); + } } } } diff --git a/src/js/modules/farm/gene.js b/src/js/modules/farm/gene.js index 8de5de64..83a16887 100644 --- a/src/js/modules/farm/gene.js +++ b/src/js/modules/farm/gene.js @@ -2,30 +2,33 @@ export default { // Level 1 genes yield: { icon: 'mdi-sack', - effect: [{name: 'farmCropGain', type: 'mult', value: 1.4}], - upgrade: [{name: 'farmCropGain', type: 'mult', value: lvl => Math.pow(1.1, lvl)}] + effect: [{name: 'farmCropGain', type: 'mult', value: 1.3}], + upgrade: [{name: 'farmCropGain', type: 'mult', value: lvl => lvl * 0.1 + 1}] }, gold: { icon: 'mdi-gold', - effect: [{name: 'farmGoldChance', type: 'mult', value: 1.75}], - upgrade: [{name: 'farmGoldChance', type: 'mult', value: lvl => Math.pow(1.12, lvl)}] + effect: [{name: 'farmGoldChance', type: 'mult', value: 1.4}], + upgrade: [{name: 'farmGoldChance', type: 'mult', value: lvl => lvl * 0.05 + 1}] }, exp: { icon: 'mdi-star', - effect: [{name: 'farmExperience', type: 'mult', value: 1.3}], + effect: [{name: 'farmExperience', type: 'mult', value: 1.175}], upgrade: [{name: 'farmExperience', type: 'base', value: lvl => lvl * 0.15}] }, rareDrop: { icon: 'mdi-dice-2', effect: [{name: 'farmRareDropChance', type: 'mult', value: 1.25}], - upgrade: [{name: 'farmRareDropChance', type: 'mult', value: lvl => Math.pow(1.08, lvl)}] + upgrade: [{name: 'farmRareDropChance', type: 'mult', value: lvl => lvl * 0.09 + 1}] }, // Level 5 genes grow: { icon: 'mdi-timer', effect: [{name: 'farmGrow', type: 'mult', value: 0.8}], - upgrade: [{name: 'farmExperience', type: 'base', value: lvl => lvl * 0.12}] + upgrade: [ + {name: 'farmGrow', type: 'mult', value: lvl => 1 / (lvl * 0.01 + 1)}, + {name: 'farmExperience', type: 'base', value: lvl => lvl * 0.1} + ] }, overgrow: { icon: 'mdi-sprout', @@ -38,7 +41,10 @@ export default { {name: 'farmGrow', type: 'mult', value: 5}, {name: 'farmAllGain', type: 'mult', value: 4} ], - upgrade: [{name: 'farmCropGain', type: 'mult', value: lvl => Math.pow(1.08, lvl)}] + upgrade: [ + {name: 'farmCropGain', type: 'mult', value: lvl => lvl * 0.06 + 1}, + {name: 'farmRareDropChance', type: 'mult', value: lvl => lvl * 0.04 + 1} + ] }, grass: { icon: 'mdi-grass', @@ -55,17 +61,26 @@ export default { gnome: { icon: 'mdi-human-child', effect: [{name: 'farmGnomeBoost', type: 'text'}], - upgrade: [{name: 'farmGoldChance', type: 'mult', value: lvl => Math.pow(1.09, lvl)}] + upgrade: [ + {name: 'farmCropGain', type: 'mult', value: lvl => lvl * 0.04 + 1}, + {name: 'farmExperience', type: 'base', value: lvl => lvl * 0.05} + ] }, lonely: { icon: 'mdi-circle-expand', effect: [{name: 'farmLonelyGrow', type: 'text'}], - upgrade: [{name: 'farmOvergrow', type: 'base', value: lvl => lvl * 0.12}] + upgrade: [ + {name: 'farmGrow', type: 'mult', value: lvl => 1 / (lvl * 0.01 + 1)}, + {name: 'farmOvergrow', type: 'base', value: lvl => lvl * 0.12} + ] }, fertile: { icon: 'mdi-sack-percent', effect: [{name: 'farmFertileBoost', type: 'text'}], - upgrade: [{name: 'farmAllGain', type: 'mult', value: lvl => lvl * 0.02 + 1}] + upgrade: [ + {name: 'farmAllGain', type: 'mult', value: lvl => lvl * 0.02 + 1}, + {name: 'farmOvergrow', type: 'base', value: lvl => lvl * 0.05} + ] }, // Level 15 genes @@ -77,7 +92,10 @@ export default { conversion: { icon: 'mdi-swap-horizontal', effect: [{name: 'farmYieldConversion', type: 'text'}], - upgrade: [{name: 'farmCropGain', type: 'mult', value: lvl => Math.pow(1.07, lvl)}] + upgrade: [ + {name: 'farmCropGain', type: 'mult', value: lvl => lvl * 0.04 + 1}, + {name: 'farmExperience', type: 'base', value: lvl => lvl * 0.05} + ] }, prestige: { icon: 'mdi-shimmer', diff --git a/src/js/modules/horde/cardList.js b/src/js/modules/horde/cardList.js index ffe3cd70..6732a982 100644 --- a/src/js/modules/horde/cardList.js +++ b/src/js/modules/horde/cardList.js @@ -60,7 +60,7 @@ export default [ ]}, {id: 7, collection: 'maintainingSafety', reward: [ - {name: 'hordeMaxItems', type: 'base', value: 1} + {name: 'hordeItemChance', type: 'mult', value: 1.6} ], color: 'pale-yellow', icons: [ {"x": 0, "y": 1, "rotate": 90, "size": 2, "icon": "mdi-rectangle"}, {"x": 0, "y": 0.35, "rotate": 0, "size": 1, "icon": "mdi-bag-personal"}, @@ -344,7 +344,8 @@ export default [ {"x": 0.5, "y": 0.5, "rotate": 0, "size": 3, "icon": "mdi-minus"} ]}, {id: 37, collection: 'againstTheCorruption', reward: [ - {name: 'hordeMaxItems', type: 'base', value: 3}, + {name: 'hordeAttack', type: 'mult', value: 1.75}, + {name: 'hordeHealth', type: 'mult', value: 1.75}, {name: 'hordeCorruption', type: 'mult', value: 1.15} ], color: 'brown', icons: [ {"x": 0.25, "y": -0.6, "rotate": 0, "size": 1.75, "icon": "mdi-truck-cargo-container"}, diff --git a/src/js/modules/meta.js b/src/js/modules/meta.js index 96d9123c..382ddb2d 100644 --- a/src/js/modules/meta.js +++ b/src/js/modules/meta.js @@ -18,6 +18,7 @@ import v1_3_5 from "./patchnote/v1_3_5"; import v1_4_0 from "./patchnote/v1_4_0"; import v1_3_6 from "./patchnote/v1_3_6"; import v1_4_1 from "./patchnote/v1_4_1"; +import v1_4_2 from "./patchnote/v1_4_2"; export default { name: 'meta', @@ -53,6 +54,7 @@ export default { store.commit('system/initTheme', {name: key, ...elem}); } for (const [key, elem] of Object.entries({ + '1.4.2': v1_4_2, '1.4.1': v1_4_1, '1.4.0': v1_4_0, '1.3.6': v1_3_6, diff --git a/src/js/modules/patchnote/v1_4_2.js b/src/js/modules/patchnote/v1_4_2.js new file mode 100644 index 00000000..c5975831 --- /dev/null +++ b/src/js/modules/patchnote/v1_4_2.js @@ -0,0 +1,30 @@ +export default { + day: '2024-06-09', + content: { + card: [ + { + type: 'balance', + text: '299_2' + } + ], + farm: [ + { + unlock: 'farmCropExp', + type: 'balance', + text: '299_4' + }, + ], + event: [ + { + unlock: 'weatherChaosEvent', + type: 'bugfix', + text: '299_1' + }, + { + unlock: 'weatherChaosEvent', + type: 'balance', + text: '299_3' + } + ] + } +} diff --git a/src/lang/en/patchnote.js b/src/lang/en/patchnote.js index dd457b5d..cbaffa13 100644 --- a/src/lang/en/patchnote.js +++ b/src/lang/en/patchnote.js @@ -358,6 +358,12 @@ export default { 297: 'Tier 4 offerings now increase their cost with each purchase', 298: 'Added a text shadow to the achievement message if it contains relics', 299: 'Increased the requirement for the "Mastermind" achievement after level 10', + + // v1.4.2 + '299_1': 'Fixed a game crash when the weather chaos event ends', + '299_2': 'Removed equipment capacity from horde cards', + '299_3': 'Removed equipment capacity from an event relic', + '299_4': 'Changed most genes to a linear scaling', }, v: { 1: { diff --git a/src/store/system.js b/src/store/system.js index 7f43c6e5..64cb7f12 100644 --- a/src/store/system.js +++ b/src/store/system.js @@ -7,7 +7,7 @@ import seedrandom from "seedrandom"; export default { namespaced: true, state: { - version: '1.4.1', + version: '1.4.2', patchnote: {}, timestamp: null, screen: 'newGame', From 1c0a1055af7bed4dce1112345ebf388dc507d2e2 Mon Sep 17 00:00:00 2001 From: Tendsty <137620092+Tendsty@users.noreply.github.com> Date: Sun, 9 Jun 2024 03:26:58 +0200 Subject: [PATCH 02/22] add german translation --- src/lang/de/patchnote.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lang/de/patchnote.js b/src/lang/de/patchnote.js index 05fd60c6..299c4431 100644 --- a/src/lang/de/patchnote.js +++ b/src/lang/de/patchnote.js @@ -358,6 +358,12 @@ export default { 297: 'Kosten von Stufe-4-Opfergaben steigen nun mit jedem Kauf', 298: 'Die Erfolgsnachricht hat jetzt einen Textschatten, wenn ein Relikt enthalten ist', 299: 'Die Anforderungen für den "Genie"-Erfolg wurden ab Stufe 10 erhöht', + + // v1.4.2 + '299_1': 'Ein Spielabsturz wurde behoben, der nach dem Ende vom Wetterchaos auftrat', + '299_2': 'Ausrüstungskapazität wurde von Horde-Karten entfernt', + '299_3': 'Ausrüstungskapazität wurde von einem Event-Relikt entfernt', + '299_4': 'Die meisten Gene steigern sich jetzt linear', }, v: { 1: { From dc1490accfbaf707895a490ea6b16f6f822265c6 Mon Sep 17 00:00:00 2001 From: Tendsty <137620092+Tendsty@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:28:51 +0200 Subject: [PATCH 03/22] 1.5 update --- package-lock.json | 4 +- package.json | 2 +- public/version.txt | 2 +- src/App.vue | 9 +- src/components/partial/card/CardItem.vue | 70 +- src/components/partial/card/CardOverview.vue | 43 +- src/components/partial/card/CardSelect.vue | 58 +- .../partial/card/CardSelectDisplay.vue | 8 +- src/components/partial/cryolab/LabFeature.vue | 4 +- .../event/NightHuntFavouritableDisplay.vue | 32 + .../partial/event/NightHuntInventory.vue | 43 +- src/components/partial/farm/BuildingCard.vue | 4 + src/components/partial/farm/CropCard.vue | 58 +- src/components/partial/farm/CropRareDrop.vue | 45 +- src/components/partial/farm/FieldBar.vue | 11 +- src/components/partial/farm/GeneIcon.vue | 16 +- src/components/partial/farm/Inventory.vue | 81 +- .../partial/farm/PlaceableSelectDisplay.vue | 163 +++ src/components/partial/gallery/Color.vue | 191 ++- src/components/partial/gallery/IdeaItem.vue | 2 +- src/components/partial/gallery/IdeaList.vue | 25 +- src/components/partial/gallery/Inventory.vue | 2 +- .../partial/gallery/PrestigeStatus.vue | 7 +- .../partial/gallery/ShapeMinigame.vue | 244 ++++ src/components/partial/horde/Active.vue | 193 ++- src/components/partial/horde/ActiveCost.vue | 54 + .../partial/horde/ActiveTooltip.vue | 113 ++ src/components/partial/horde/AreaMap.vue | 171 +++ src/components/partial/horde/BattlePass.vue | 153 +++ .../partial/horde/EnemyActiveTooltip.vue | 18 +- src/components/partial/horde/EnemyStatus.vue | 104 +- src/components/partial/horde/EntityStatus.vue | 40 +- .../partial/horde/FighterPrestigeStats.vue | 45 + src/components/partial/horde/Item.vue | 58 +- src/components/partial/horde/PlayerStatus.vue | 227 +-- .../partial/horde/PrestigeInventory.vue | 7 +- .../partial/horde/PrestigeStatus.vue | 109 +- src/components/partial/horde/SkillButton.vue | 227 +++ src/components/partial/horde/SkillTree.vue | 212 +++ src/components/partial/horde/Status.vue | 143 +- src/components/partial/horde/TowerTile.vue | 5 +- src/components/partial/horde/TrinketItem.vue | 116 ++ src/components/partial/horde/TrinketList.vue | 44 + .../partial/mining/BeaconSector.vue | 183 +++ src/components/partial/mining/Inventory.vue | 2 +- .../partial/mining/PrestigeStatus.vue | 18 +- .../partial/mining/SmelteryStation.vue | 13 +- src/components/partial/mining/Status.vue | 53 +- .../partial/patchnote/PatchnoteItem.vue | 4 + .../partial/prestige/StatusTemplate.vue | 27 +- src/components/partial/relic/Item.vue | 6 +- src/components/partial/relic/Mini.vue | 2 +- src/components/partial/relic/MuseumTab.vue | 35 + src/components/partial/relic/RelicList.vue | 19 + .../partial/render/CurrencyTooltip.vue | 7 +- .../partial/render/GoobooTooltip.vue | 7 +- src/components/partial/render/MultStat.vue | 3 +- src/components/partial/render/StatRow.vue | 5 + .../partial/snackbar/AchievementMessage.vue | 2 +- src/components/partial/treasure/ItemSlot.vue | 5 +- src/components/partial/upgrade/DisplayRow.vue | 49 +- .../partial/village/CraftingItem.vue | 43 + .../partial/village/CraftingList.vue | 234 ++++ .../partial/village/PrestigeInventory.vue | 7 +- .../partial/village/PrestigeStatus.vue | 23 +- src/components/partial/village/Resources.vue | 48 +- src/components/render/Consumable.vue | 4 +- src/components/render/Currency.vue | 15 +- src/components/render/CurrentConfirm.vue | 3 + src/components/render/PriceTag.vue | 3 +- src/components/render/Upgrade.vue | 4 +- src/components/render/UpgradeList.vue | 2 +- src/components/view/Card.vue | 28 +- src/components/view/Gallery.vue | 23 +- src/components/view/Horde.vue | 50 +- src/components/view/Info.vue | 4 + src/components/view/Relic.vue | 25 +- src/components/view/ResetProgress.vue | 65 + src/components/view/StatOverview.vue | 465 +++++++ src/components/view/Village.vue | 42 +- src/js/autoplay.js | 4 +- src/js/constants.js | 12 + src/js/init.js | 12 +- src/js/modules/achievement.js | 48 +- src/js/modules/card.js | 19 +- src/js/modules/cryolab.js | 14 +- src/js/modules/event.js | 21 +- src/js/modules/event/bloom/prize.js | 2 +- src/js/modules/event/card.js | 7 +- src/js/modules/event/cinders/prize.js | 2 +- src/js/modules/event/cinders/tick.js | 6 +- src/js/modules/event/nightHunt/prize.js | 2 +- src/js/modules/event/nightHunt/tick.js | 35 +- src/js/modules/event/nightHunt/upgrade.js | 19 +- src/js/modules/event/prize.js | 24 +- src/js/modules/event/relic.js | 58 +- src/js/modules/event/snowdown/prize.js | 2 +- src/js/modules/event/summerFestival/prize.js | 2 +- src/js/modules/event/weatherChaos/prize.js | 4 +- src/js/modules/event/weatherChaos/tick.js | 70 +- src/js/modules/farm.js | 85 +- src/js/modules/farm/achievement.js | 2 +- src/js/modules/farm/card.js | 21 +- src/js/modules/farm/cardList.js | 120 +- src/js/modules/farm/crop.js | 184 ++- src/js/modules/farm/fertilizer.js | 74 +- src/js/modules/farm/gene.js | 78 +- src/js/modules/farm/relic.js | 2 +- src/js/modules/farm/upgrade.js | 102 +- src/js/modules/farm/upgradePremium.js | 4 +- src/js/modules/gallery.js | 135 +- src/js/modules/gallery/achievement.js | 15 +- src/js/modules/gallery/card.js | 15 +- src/js/modules/gallery/cardList.js | 88 +- src/js/modules/gallery/idea.js | 99 +- src/js/modules/gallery/relic.js | 57 + src/js/modules/gallery/shape.js | 21 + src/js/modules/gallery/upgrade.js | 176 ++- src/js/modules/gallery/upgradePremium.js | 41 + src/js/modules/gallery/upgradePrestige.js | 197 ++- src/js/modules/gallery/upgradeShape.js | 165 +++ src/js/modules/gem/card.js | 7 +- src/js/modules/general.js | 16 +- src/js/modules/horde.js | 870 +++++++++--- src/js/modules/horde/achievement.js | 10 +- src/js/modules/horde/area/loveIsland.js | 165 +++ src/js/modules/horde/area/monkeyJungle.js | 281 ++++ src/js/modules/horde/area/warzone.js | 160 +++ src/js/modules/horde/battlePass.js | 35 + src/js/modules/horde/boss.js | 72 + src/js/modules/horde/card.js | 34 +- src/js/modules/horde/cardList.js | 178 ++- src/js/modules/horde/enemyType.js | 213 +++ src/js/modules/horde/equipment.js | 608 ++++++-- .../modules/horde/fighterClass/adventurer.js | 217 +++ src/js/modules/horde/fighterClass/archer.js | 226 +++ src/js/modules/horde/fighterClass/assassin.js | 23 + src/js/modules/horde/fighterClass/cultist.js | 22 + src/js/modules/horde/fighterClass/knight.js | 251 ++++ src/js/modules/horde/fighterClass/mage.js | 337 +++++ src/js/modules/horde/fighterClass/pirate.js | 233 ++++ src/js/modules/horde/fighterClass/scholar.js | 22 + src/js/modules/horde/fighterClass/shaman.js | 23 + src/js/modules/horde/fighterClass/undead.js | 22 + src/js/modules/horde/heirloom.js | 20 +- src/js/modules/horde/sigil.js | 37 +- src/js/modules/horde/sigil_boss.js | 371 +++++ src/js/modules/horde/tower.js | 37 +- src/js/modules/horde/trinket.js | 136 ++ src/js/modules/horde/upgrade.js | 46 +- src/js/modules/horde/upgrade2.js | 70 + src/js/modules/horde/upgradePrestige.js | 108 +- src/js/modules/meta.js | 2 + src/js/modules/migration/helper.js | 34 +- src/js/modules/migration/v1_3_0.js | 6 +- src/js/modules/migration/v1_5_0.js | 197 +++ src/js/modules/mining.js | 193 ++- src/js/modules/mining/achievement.js | 14 +- src/js/modules/mining/beacon.js | 32 + src/js/modules/mining/card.js | 19 +- src/js/modules/mining/cardList.js | 154 +-- src/js/modules/mining/enhancement.js | 7 +- src/js/modules/mining/ore.js | 18 + src/js/modules/mining/smeltery.js | 13 +- src/js/modules/mining/upgrade.js | 80 +- src/js/modules/mining/upgrade2.js | 10 +- src/js/modules/mining/upgradePremium.js | 16 + src/js/modules/mining/upgradePrestige.js | 61 +- src/js/modules/patchnote/v1_0_0.js | 6 + src/js/modules/patchnote/v1_5_0.js | 673 +++++++++ src/js/modules/relic.js | 11 +- src/js/modules/relic/glyph.js | 79 ++ src/js/modules/treasure.js | 4 +- src/js/modules/treasure/effect.js | 52 +- src/js/modules/village.js | 289 +++- src/js/modules/village/building.js | 6 +- src/js/modules/village/building2.js | 1 - src/js/modules/village/card.js | 20 +- src/js/modules/village/cardList.js | 180 ++- src/js/modules/village/craftingRecipe.js | 419 ++++++ src/js/modules/village/job.js | 2 +- src/js/modules/village/upgrade2.js | 98 ++ src/js/modules/village/upgradePrestige.js | 100 +- src/js/savefile.js | 97 +- src/js/theme/colors.js | 15 + src/js/theme/sky.js | 4 +- src/js/tick.js | 13 +- src/js/utils/array.js | 11 +- src/js/utils/format.js | 19 +- src/js/utils/math.js | 6 +- src/lang/de.js | 544 +++++++- src/lang/de/card.js | 5 +- src/lang/de/consumable.js | 24 + src/lang/de/currency.js | 118 +- src/lang/de/mult.js | 40 + src/lang/de/note.js | 2 +- src/lang/de/patchnote.js | 112 +- src/lang/de/relic.js | 18 + src/lang/de/stat.js | 64 +- src/lang/de/tag.js | 15 + src/lang/de/unlock.js | 16 + src/lang/de/upgrade.js | 149 +- src/lang/en.js | 548 +++++++- src/lang/en/card.js | 3 + src/lang/en/consumable.js | 24 + src/lang/en/currency.js | 118 +- src/lang/en/mult.js | 40 + src/lang/en/note.js | 2 +- src/lang/en/patchnote.js | 114 +- src/lang/en/relic.js | 18 + src/lang/en/stat.js | 62 +- src/lang/en/tag.js | 15 + src/lang/en/unlock.js | 16 + src/lang/en/upgrade.js | 147 +- src/store/achievement.js | 40 +- src/store/bloom.js | 2 +- src/store/card.js | 93 +- src/store/cryolab.js | 17 +- src/store/currency.js | 8 +- src/store/event.js | 9 +- src/store/farm.js | 279 +++- src/store/gallery.js | 483 ++++++- src/store/horde.js | 1224 +++++++++++++++-- src/store/index.js | 4 +- src/store/meta.js | 23 +- src/store/mining.js | 153 ++- src/store/mult.js | 3 + src/store/nightHunt.js | 48 +- src/store/relic.js | 38 +- src/store/school.js | 3 + src/store/snowdown.js | 2 +- src/store/stat.js | 11 +- src/store/summerFestival.js | 2 +- src/store/system.js | 300 +++- src/store/tag.js | 58 + src/store/treasure.js | 1 + src/store/upgrade.js | 43 +- src/store/village.js | 127 +- src/store/weatherChaos.js | 2 +- test/unit/setup.test.js | 2 +- 240 files changed, 17531 insertions(+), 2204 deletions(-) create mode 100644 src/components/partial/event/NightHuntFavouritableDisplay.vue create mode 100644 src/components/partial/farm/PlaceableSelectDisplay.vue create mode 100644 src/components/partial/gallery/ShapeMinigame.vue create mode 100644 src/components/partial/horde/ActiveCost.vue create mode 100644 src/components/partial/horde/ActiveTooltip.vue create mode 100644 src/components/partial/horde/AreaMap.vue create mode 100644 src/components/partial/horde/BattlePass.vue create mode 100644 src/components/partial/horde/FighterPrestigeStats.vue create mode 100644 src/components/partial/horde/SkillButton.vue create mode 100644 src/components/partial/horde/SkillTree.vue create mode 100644 src/components/partial/horde/TrinketItem.vue create mode 100644 src/components/partial/horde/TrinketList.vue create mode 100644 src/components/partial/mining/BeaconSector.vue create mode 100644 src/components/partial/relic/MuseumTab.vue create mode 100644 src/components/partial/relic/RelicList.vue create mode 100644 src/components/partial/village/CraftingItem.vue create mode 100644 src/components/partial/village/CraftingList.vue create mode 100644 src/components/view/ResetProgress.vue create mode 100644 src/components/view/StatOverview.vue create mode 100644 src/js/modules/gallery/shape.js create mode 100644 src/js/modules/gallery/upgradeShape.js create mode 100644 src/js/modules/horde/area/loveIsland.js create mode 100644 src/js/modules/horde/area/monkeyJungle.js create mode 100644 src/js/modules/horde/area/warzone.js create mode 100644 src/js/modules/horde/battlePass.js create mode 100644 src/js/modules/horde/boss.js create mode 100644 src/js/modules/horde/enemyType.js create mode 100644 src/js/modules/horde/fighterClass/adventurer.js create mode 100644 src/js/modules/horde/fighterClass/archer.js create mode 100644 src/js/modules/horde/fighterClass/assassin.js create mode 100644 src/js/modules/horde/fighterClass/cultist.js create mode 100644 src/js/modules/horde/fighterClass/knight.js create mode 100644 src/js/modules/horde/fighterClass/mage.js create mode 100644 src/js/modules/horde/fighterClass/pirate.js create mode 100644 src/js/modules/horde/fighterClass/scholar.js create mode 100644 src/js/modules/horde/fighterClass/shaman.js create mode 100644 src/js/modules/horde/fighterClass/undead.js create mode 100644 src/js/modules/horde/sigil_boss.js create mode 100644 src/js/modules/horde/trinket.js create mode 100644 src/js/modules/horde/upgrade2.js create mode 100644 src/js/modules/migration/v1_5_0.js create mode 100644 src/js/modules/mining/beacon.js create mode 100644 src/js/modules/patchnote/v1_5_0.js create mode 100644 src/js/modules/relic/glyph.js delete mode 100644 src/js/modules/village/building2.js create mode 100644 src/js/modules/village/craftingRecipe.js create mode 100644 src/js/modules/village/upgrade2.js create mode 100644 src/lang/de/tag.js create mode 100644 src/lang/en/tag.js create mode 100644 src/store/tag.js diff --git a/package-lock.json b/package-lock.json index eacde52c..ed940864 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gooboo", - "version": "1.4.2", + "version": "1.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gooboo", - "version": "1.4.2", + "version": "1.5.0", "license": "GPL-3.0-or-later", "dependencies": { "@fontsource/caveat": "^4.5.9", diff --git a/package.json b/package.json index 9ea7dfcd..b24a8863 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gooboo", - "version": "1.4.2", + "version": "1.5.0", "description": "An idle game", "author": "Tendsty", "main": "main.js", diff --git a/public/version.txt b/public/version.txt index 9df886c4..bc80560f 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.4.2 +1.5.0 diff --git a/src/App.vue b/src/App.vue index ae4dc0a8..b510a5b4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -425,6 +425,9 @@ {{ $vuetify.lang.t('$vuetify.gooboo.saveImport') }} + + {{ $vuetify.lang.t('$vuetify.gooboo.resetProgress') }} + @@ -488,8 +491,10 @@ import { mapGetters, mapState } from 'vuex'; import FeatureTile from './components/partial/main/FeatureTile.vue'; import NewGame from './components/view/NewGame.vue'; import OfflineSummary from './components/view/OfflineSummary.vue'; +import ResetProgress from './components/view/ResetProgress.vue'; import Mining from './components/view/Mining.vue'; import Info from './components/view/Info.vue'; +import StatOverview from './components/view/StatOverview.vue'; import TabDuplicate from './components/view/TabDuplicate.vue'; import Patchnote from './components/view/Patchnote.vue'; import Settings from './components/view/Settings.vue'; @@ -535,8 +540,10 @@ export default { components: { NewGame, OfflineSummary, + ResetProgress, Mining, Info, + StatOverview, TabDuplicate, Patchnote, Settings, @@ -687,8 +694,8 @@ export default { this.$store.commit('system/resetAutosaveTimer'); }, exportSave() { - exportFile(); this.$store.commit('system/updateKey', {key: 'backupTimer', value: 0}); + exportFile(); }, importSave() { let file = document.getElementById('gooboo-savefile-input').files[0]; diff --git a/src/components/partial/card/CardItem.vue b/src/components/partial/card/CardItem.vue index fda74bfb..4dd00bed 100644 --- a/src/components/partial/card/CardItem.vue +++ b/src/components/partial/card/CardItem.vue @@ -45,6 +45,36 @@ top: -5px; font-size: 10px; } +.card-playing-power-dark { + border: 4px solid white !important; +} +.card-playing-power-light { + border: 4px solid black !important; +} +.card-playing-power { + position: absolute; + width: 24px; + height: 24px; + right: -18px; + top: -26px; +} +.card-playing-power-inner { + width: 20px; + height: 20px; + margin-left: -2px; + margin-top: -2px; +} +.card-playing-power-mobile { + width: 20px; + height: 20px; + right: -15px; + top: -16px; +} +.card-playing-power-mobile > .card-playing-power-inner { + width: 16px; + height: 16px; + font-size: 12px; +} .card-playing-inner { border-top: 2px solid black !important; border-bottom: 2px solid black !important; @@ -76,6 +106,30 @@ .card-ma-05 { margin: 2px; } + +/* shiny card visuals */ +@keyframes shiny-card { + 0% {opacity: 30%;} + 10% {opacity: 40%;} + 20% {opacity: 55%;} + 30% {opacity: 30%;} + 40% {opacity: 40%;} + 50% {opacity: 30%;} + 60% {opacity: 60%;} + 70% {opacity: 40%;} + 80% {opacity: 30%;} + 90% {opacity: 45%;} + 100% {opacity: 30%;} +} +.card-shiny { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: linear-gradient(25deg, #FFFFFFFF, #E0F0FFC0); + animation: shiny-card 10s linear infinite; +} @@ -20,6 +21,9 @@ export default { }, premium() { return this.building.maxPremium - this.building.cachePremium; + }, + owned() { + return this.building.max - this.building.cacheAmount; } } } diff --git a/src/components/partial/farm/CropCard.vue b/src/components/partial/farm/CropCard.vue index 2eef6b6a..bb3d89d4 100644 --- a/src/components/partial/farm/CropCard.vue +++ b/src/components/partial/farm/CropCard.vue @@ -53,8 +53,8 @@ mdi-circle-small - - {{ $vuetify.lang.t('$vuetify.gooboo.free') }} + + {{ $vuetify.lang.t('$vuetify.gooboo.free') }} @@ -66,7 +65,7 @@ export default { } }, data: () => ({ - colors: ['green', 'yellow', 'red', 'blue', 'orange', 'pink', 'purple', 'brown'] + colors: ['brown', 'green', 'light-green', 'yellow', 'orange', 'red', 'pink', 'purple', 'indigo', 'blue'] }), methods: { deleteMode() { @@ -113,7 +112,7 @@ export default { } }, selectColor(name) { - this.$store.commit('farm/updateKey', {key: 'selectedColor', value: name}); + this.$store.commit('farm/updateKey', {key: 'selectedColor', value: this.selectedColor === name ? null : name}); }, toggleColors() { this.$store.commit('farm/updateKey', {key: 'showColors', value: !this.showColors}); diff --git a/src/components/partial/farm/GeneIcon.vue b/src/components/partial/farm/GeneIcon.vue index c55c82af..a183e9cb 100644 --- a/src/components/partial/farm/GeneIcon.vue +++ b/src/components/partial/farm/GeneIcon.vue @@ -12,7 +12,7 @@
- -   + {{ $vuetify.lang.t(`$vuetify.tag.${ elem.name }`, ...elem.value) }} +
@@ -86,7 +89,10 @@
-   + {{ $vuetify.lang.t(`$vuetify.tag.${ elem.name }`, ...elem.value) }} +
@@ -100,7 +106,7 @@
- + {{ $vuetify.lang.t('$vuetify.gooboo.maxed') }} @@ -180,11 +186,36 @@ export default { } } else if (elem.type === 'mult' && elem.value > 0) { value = Math.pow(value, masteryMult); + } else if (elem.type === 'tag') { + value = value.map(el => el * masteryMult); } } return {...elem, value}; }); } + obj = obj.map(elem => { + if (elem.type === 'tag') { + const types = this.$store.state.tag[elem.name].params; + return {...elem, value: elem.value.map((el, i) => { + switch (types[i]) { + case 'number': + return this.$formatNum(el, true); + case 'time': + return this.$formatTime(el); + case 'percent': + return this.$formatNum(el * 100, true) + '%'; + case 'perSecond': + return this.$formatNum(el, true) + '/s'; + case 'mult': + return this.$formatNum(el, true) + 'x'; + default: + return el; + } + })}; + } else { + return elem; + } + }); return obj; }, itemsFull() { @@ -204,11 +235,18 @@ export default { }, statDiff() { let after = [...this.item.stats(this.item.level + 1), ...this.item.active(this.item.level + 1), {value: this.item.cooldown(this.item.level + 1)}]; - return [...this.item.stats(this.item.level), ...this.item.active(this.item.level).map(elem => { - return {...elem, type: 'hordeActive', name: elem.type}; + let buffs = []; + const stats = [...this.item.stats(this.item.level), ...this.item.active(this.item.level).map(elem => { + return {...elem, type: elem.type === 'buff' ? 'hordeBuff' : 'hordeActive', name: elem.type}; }), {type: 'hordeCooldown', name: 'cooldown', value: this.item.cooldown(this.item.level)}].map((elem, key) => { - return {type: elem.type, name: elem.name, before: elem.value, after: after[key].value} - }).filter(elem => elem.before !== elem.after); + if (elem.type === 'hordeBuff') { + elem.effect.forEach((buff, bindex) => { + buffs.push({type: buff.type, name: buff.name, before: buff.value, after: after[key].effect[bindex].value, isBuff: true}); + }); + } + return {type: elem.type, name: elem.name, before: elem.value, after: after[key].value, isBuff: false}; + }); + return [...stats, ...buffs].filter(elem => elem.before !== elem.after); }, masteryZoneNeeded() { return Math.max(75, this.item.findZone + 25); @@ -218,7 +256,7 @@ export default { }, masteryPercent() { const before = this.item.masteryLevel > 0 ? this.$store.getters['horde/masteryRequired'](this.name, this.item.masteryLevel - 1) : 0; - return 100 * (this.item.masteryPoint - before) / this.masteryNeeded; + return 100 * (this.item.masteryPoint - before) / (this.masteryNeeded - before); }, canUseActive() { return this.item.equipped && !this.item.passive; @@ -242,7 +280,7 @@ export default { return this.$store.getters['mult/get']('hordeItemMasteryGain', this.masteryGainBase); }, masteryGainMiniboss() { - return this.masteryGainBase * HORDE_MASTERY_MINIBOSS_MULT; + return this.masteryGainBoss * HORDE_MASTERY_MINIBOSS_MULT; }, masteryMinibossMult() { return HORDE_MASTERY_MINIBOSS_MULT; diff --git a/src/components/partial/horde/PlayerStatus.vue b/src/components/partial/horde/PlayerStatus.vue index e23a29b0..b99c3916 100644 --- a/src/components/partial/horde/PlayerStatus.vue +++ b/src/components/partial/horde/PlayerStatus.vue @@ -4,11 +4,27 @@ left: 4px; top: 4px; } +.health-bar-defense { + position: absolute; + left: 0; + bottom: 0; + height: 3px; +} +.health-bar-execute { + position: absolute; + top: 0; + bottom: 0; + width: 2px; + opacity: 0.5; +} @@ -150,12 +152,11 @@ export default { canAfford() { return this.$store.getters['currency/canAfford'](this.conversionPrice); }, - conversionMult() { - const colorPrice = this.$store.getters['gallery/conversionColorPrice'](this.name); - return Math.max(1, Math.min( - this.$store.state.currency.gallery_converter.value / this.conversionPrice.gallery_converter, - this.$store.state.currency[colorPrice.name].value / colorPrice.amount - )) * this.$store.getters['mult/get'](`gallery${ this.statBaseName }Conversion`); + converterOverload() { + return this.$store.getters['gallery/converterOverload'](this.name); + }, + conversionGain() { + return this.canAfford ? this.$store.getters['gallery/conversionGain'](this.name) : this.$store.getters['mult/get'](`gallery${ capitalize(this.name) }Conversion`); }, isPremium() { if (this.name === 'beauty') { diff --git a/src/components/partial/horde/ActiveTooltip.vue b/src/components/partial/horde/ActiveTooltip.vue index fbff7009..ec447233 100644 --- a/src/components/partial/horde/ActiveTooltip.vue +++ b/src/components/partial/horde/ActiveTooltip.vue @@ -39,7 +39,7 @@ +{{ $formatNum(effect.int * healingMult * 100, true) }}% mdi-lightbulb-on ) -
(can crit at {{ $formatNum(critEffect * 100) }}% efficiency)
+
({{ $vuetify.lang.t(`$vuetify.horde.active.canCrit`, $formatNum(critEffect * 100)) }})
diff --git a/src/components/partial/horde/Item.vue b/src/components/partial/horde/Item.vue index dbe17502..b4a5a4c1 100644 --- a/src/components/partial/horde/Item.vue +++ b/src/components/partial/horde/Item.vue @@ -243,6 +243,8 @@ export default { elem.effect.forEach((buff, bindex) => { buffs.push({type: buff.type, name: buff.name, before: buff.value, after: after[key].effect[bindex].value, isBuff: true}); }); + } else if (elem.type === 'hordeActive' && elem.canCrit !== undefined) { + buffs.push({type: 'hordeActiveCrit', name: elem.name, before: elem.canCrit, after: after[key].canCrit, isBuff: false}); } return {type: elem.type, name: elem.name, before: elem.value, after: after[key].value, isBuff: false}; }); diff --git a/src/components/partial/render/MultStat.vue b/src/components/partial/render/MultStat.vue index b231273d..ee828cbb 100644 --- a/src/components/partial/render/MultStat.vue +++ b/src/components/partial/render/MultStat.vue @@ -45,7 +45,7 @@ export default { return this.$store.state.mult.items[this.mult]; }, display() { - if (this.type === 'hordeActive') { + if (this.type === 'hordeActive' || this.type === 'hordeActiveCrit') { return ['revive', 'divisionShield'].includes(this.mult) ? 'number' : (['stun', 'silence'].includes(this.mult) ? 'time' : 'percent'); } else if (this.type === 'hordeCooldown' || this.type === 'hordeBuff') { return 'time'; diff --git a/src/components/partial/upgrade/DisplayRow.vue b/src/components/partial/upgrade/DisplayRow.vue index db35ad44..eaab4322 100644 --- a/src/components/partial/upgrade/DisplayRow.vue +++ b/src/components/partial/upgrade/DisplayRow.vue @@ -136,6 +136,9 @@ export default { case 'hordeActive': cacheValue = this.$vuetify.lang.t(`$vuetify.horde.active.${this.name}.0`) + ' ' + this.$vuetify.lang.t(`$vuetify.horde.active.${this.name}.1`); break; + case 'hordeActiveCrit': + cacheValue = this.$vuetify.lang.t(`$vuetify.horde.active.canCritDiff`); + break; case 'hordeBuff': cacheValue = this.$vuetify.lang.t(`$vuetify.horde.active.buff.duration`); break; diff --git a/src/components/render/Currency.vue b/src/components/render/Currency.vue index f5d4d024..a6951b0d 100644 --- a/src/components/render/Currency.vue +++ b/src/components/render/Currency.vue @@ -1,6 +1,6 @@