diff --git a/website/client/src/assets/css/sprites.css b/website/client/src/assets/css/sprites.css
index ae92a2249d..f3ba66580d 100755
--- a/website/client/src/assets/css/sprites.css
+++ b/website/client/src/assets/css/sprites.css
@@ -4,6 +4,12 @@
height: 219px;
}
+.Pet_HatchingPotion_Dessert {
+ background: url("~@/assets/images/animated/Pet_HatchingPotion_Dessert.gif") no-repeat;
+ width: 68px;
+ height: 68px;
+}
+
.Pet_HatchingPotion_Veggie {
background: url("~@/assets/images/animated/Pet_HatchingPotion_Veggie.gif") no-repeat;
width: 68px;
diff --git a/website/client/src/assets/images/animated/Pet-HatchingPotion-Dessert.gif b/website/client/src/assets/images/animated/Pet-HatchingPotion-Dessert.gif
new file mode 100644
index 0000000000..4ac1c8e5be
Binary files /dev/null and b/website/client/src/assets/images/animated/Pet-HatchingPotion-Dessert.gif differ
diff --git a/website/common/locales/en/content.json b/website/common/locales/en/content.json
index d41aaf67d5..c7445fb395 100644
--- a/website/common/locales/en/content.json
+++ b/website/common/locales/en/content.json
@@ -299,6 +299,7 @@
"hatchingPotionAurora": "Aurora",
"hatchingPotionRuby": "Ruby",
"hatchingPotionBirchBark": "Birch Bark",
+ "hatchingPotionDessert": "Confection",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",
diff --git a/website/common/locales/en/questsContent.json b/website/common/locales/en/questsContent.json
index ce798a7aaf..1db1b182fd 100644
--- a/website/common/locales/en/questsContent.json
+++ b/website/common/locales/en/questsContent.json
@@ -796,5 +796,15 @@
"questRubyCollectVenusRunes": "Venus Runes",
"questRubyCollectRubyGems": "Ruby Gems",
"questRubyDropRubyPotion": "Ruby Hatching Potion",
- "questRubyUnlockText": "Unlocks Ruby Hatching Potions for purchase in the Market"
+ "questRubyUnlockText": "Unlocks Ruby Hatching Potions for purchase in the Market",
+
+ "questWaffleText": "Waffling with the Fool: Disaster Breakfast!",
+ "questWaffleNotes": "“April Fool!” storms a flustered Lady Glaciate. “You said your dessert-themed prank was ‘over with and completely cleaned up’!”
“Why, it was and is, my dear,” replies the Fool, puzzled. “And I am the most honest of Fools. What's wrong?”
“There's a giant sugary monster approaching Habit City!”
“Hmm,” muses the Fool. “I did raid a few lairs for the mystic reagents for my last event. Maybe I attracted some unwanted attention. Is it the Saccharine Serpent? The Torte-oise? Tiramisu Rex?”
“No! It's some sort of... Awful Waffle!”
“Huh. That's a new one! Perhaps it spawned from all the ambient shenanigan energy.” He turns to you and @beffymaroo with a lopsided smile. “I don't suppose you'd be available for some heroics?”",
+ "questWaffleCompletion": "Battered and buttered but triumphant, you savor sweet victory as the Awful Waffle collapses into a pool of sticky goo.
“Wow, you really creamed that monster,” says Lady Glaciate, impressed.
“A piece of cake!” beams the April Fool.
“Kind of a shame, though,” says @beffymaroo. “It looked good enough to eat.”
The Fool takes a set of potion bottles from somewhere in his cape, fills them with the syrupy leavings of the Waffle, and mixes in a pinch of sparkling dust. The liquid swirls with color--new Hatching Potions! He tosses them into your arms. “All that adventure has given me an appetite. Who wants to join me for breakfast?”",
+ "questWaffleBoss": "Awful Waffle",
+ "questWaffleRageTitle": "Maple Mire",
+ "questWaffleRageDescription": "Maple Mire: This bar fills when you don't complete your Dailies. When it is full, the Awful Waffle will set back the party's attack progress!",
+ "questWaffleRageEffect": "`Awful Waffle uses MAPLE MIRE!` Sticky sappy syrup slows your swings and spells!",
+ "questWaffleDropDessertPotion": "Confection Hatching Potion",
+ "questWaffleUnlockText": "Unlocks Confection Hatching Potions for purchase in the Market",
}
diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js
index 5229dfb3d5..7ac5b5ba77 100644
--- a/website/common/script/content/hatching-potions.js
+++ b/website/common/script/content/hatching-potions.js
@@ -286,6 +286,12 @@ const wacky = {
limited: true,
_season: '_PENDING_',
},
+ Dessert: {
+ text: t('hatchingPotionDessert'),
+ limited: true,
+ _season: '_PENDING_',
+ canBuy: hasQuestAchievementFunction('waffle'),
+ },
};
each(drops, (pot, key) => {
@@ -328,7 +334,7 @@ each(wacky, (pot, key) => {
notes: t('hatchingPotionNotes', {
potText: pot.text,
}),
- _addlNotes: pot._seasont && pot._season !== '_PENDING_' ? t('eventAvailability', {
+ _addlNotes: pot._season && pot._season !== '_PENDING_' ? t('eventAvailability', {
date: t(`dateEnd${pot._season}`),
}) : null,
premium: false,
diff --git a/website/common/script/content/quests.js b/website/common/script/content/quests.js
index dd9330e266..eb85629b6d 100644
--- a/website/common/script/content/quests.js
+++ b/website/common/script/content/quests.js
@@ -3578,6 +3578,45 @@ const quests = {
unlock: t('questRubyUnlockText'),
},
},
+ waffle: {
+ text: t('questWaffleText'),
+ notes: t('questWaffleNotes'),
+ completion: t('questWaffleCompletion'),
+ value: 4,
+ category: 'hatchingPotion',
+ boss: {
+ name: t('questWaffleBoss'),
+ hp: 500,
+ str: 2,
+ rage: {
+ title: t('questWaffleRageTitle'),
+ description: t('questWaffleRageDescription'),
+ value: 50,
+ progressDrain: 0.5,
+ effect: t('questWaffleRageEffect'),
+ },
+ },
+ drop: {
+ items: [
+ {
+ type: 'hatchingPotions',
+ key: 'Dessert',
+ text: t('questWaffleDropDessertPotion'),
+ }, {
+ type: 'hatchingPotions',
+ key: 'Dessert',
+ text: t('questWaffleDropDessertPotion'),
+ }, {
+ type: 'hatchingPotions',
+ key: 'Dessert',
+ text: t('questWaffleDropDessertPotion'),
+ },
+ ],
+ gp: 40,
+ exp: 500,
+ unlock: t('questWaffleUnlockText'),
+ },
+ },
};
each(quests, (v, key) => {
diff --git a/website/raw_sprites/spritesmith/quests/bosses/quest_waffle.png b/website/raw_sprites/spritesmith/quests/bosses/quest_waffle.png
new file mode 100644
index 0000000000..6d6ba6cd91
Binary files /dev/null and b/website/raw_sprites/spritesmith/quests/bosses/quest_waffle.png differ
diff --git a/website/server/models/group.js b/website/server/models/group.js
index 32c12d5b7a..a4e4d1b79d 100644
--- a/website/server/models/group.js
+++ b/website/server/models/group.js
@@ -1057,16 +1057,18 @@ schema.methods._processBossQuest = async function processBossQuest (options) {
if (quest.boss.rage.mpDrain) {
updates.$set = { 'stats.mp': 0 };
}
+ if (quest.boss.rage.progressDrain) {
+ updates.$mul = { 'party.quest.progress.up': quest.boss.rage.progressDrain };
+ }
}
}
- await User.update(
+ await User.updateMany(
{
_id:
{ $in: this.getParticipatingQuestMembers() },
},
updates,
- { multi: true },
).exec();
// Apply changes the currently cronning user locally
// so we don't have to reload it to get the updated state