diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue
index 3c8111b5ee..5c14acdc7f 100644
--- a/website/client/src/components/notifications.vue
+++ b/website/client/src/components/notifications.vue
@@ -319,6 +319,14 @@ const NOTIFICATIONS = {
achievement: 'bugBonanza', // defined manually until the server sends all the necessary data
},
},
+ ACHIEVEMENT_BARE_NECESSITIES: {
+ achievement: true,
+ label: $t => `${$t('achievement')}: ${$t('achievementBareNecessities')}`,
+ modalId: 'generic-achievement',
+ data: {
+ achievement: 'bareNecessities', // defined manually until the server sends all the necessary data
+ },
+ },
};
export default {
@@ -377,7 +385,7 @@ export default {
'ACHIEVEMENT_MOUNT_MASTER', 'ACHIEVEMENT_TRIAD_BINGO', 'ACHIEVEMENT_DUST_DEVIL', 'ACHIEVEMENT_ARID_AUTHORITY',
'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', 'ACHIEVEMENT_PRIMED_FOR_PAINTING',
'ACHIEVEMENT_PEARLY_PRO', 'ACHIEVEMENT_TICKLED_PINK', 'ACHIEVEMENT_ROSY_OUTLOOK', 'ACHIEVEMENT',
- 'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA',
+ 'ONBOARDING_COMPLETE', 'FIRST_DROPS', 'ACHIEVEMENT_BUG_BONANZA', 'ACHIEVEMENT_BARE_NECESSITIES',
].forEach(type => {
handledNotifications[type] = true;
});
@@ -792,6 +800,7 @@ export default {
case 'ACHIEVEMENT_TICKLED_PINK':
case 'ACHIEVEMENT_ROSY_OUTLOOK':
case 'ACHIEVEMENT_BUG_BONANZA':
+ case 'ACHIEVEMENT_BARE_NECESSITIES':
case 'GENERIC_ACHIEVEMENT':
this.showNotificationWithModal(notification);
break;
diff --git a/website/client/src/components/userMenu/profile.vue b/website/client/src/components/userMenu/profile.vue
index e27d9a05c8..7dfd643f09 100644
--- a/website/client/src/components/userMenu/profile.vue
+++ b/website/client/src/components/userMenu/profile.vue
@@ -318,7 +318,7 @@
>
."
}
diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js
index 3d986bbe68..50a648747d 100644
--- a/website/common/script/content/achievements.js
+++ b/website/common/script/content/achievements.js
@@ -192,6 +192,11 @@ const basicAchievs = {
titleKey: 'achievementBugBonanza',
textKey: 'achievementBugBonanzaText',
},
+ bareNecessities: {
+ icon: 'achievement-bareNecessities',
+ titleKey: 'achievementBareNecessities',
+ textKey: 'achievementBareNecessitiesText',
+ },
};
Object.assign(achievementsData, basicAchievs);
diff --git a/website/common/script/content/bundles.js b/website/common/script/content/bundles.js
index f72d00f538..3c64bfd6ba 100644
--- a/website/common/script/content/bundles.js
+++ b/website/common/script/content/bundles.js
@@ -221,6 +221,21 @@ const bundles = {
type: 'quests',
value: 7,
},
+ jungleBuddies: {
+ key: 'jungleBuddies',
+ text: t('jungleBuddiesText'),
+ notes: t('jungleBuddiesNotes', { date: moment('2020-05-31').format('LL') }),
+ bundleKeys: [
+ 'monkey',
+ 'sloth',
+ 'treeling',
+ ],
+ canBuy () {
+ return moment().isBetween('2020-05-19', '2020-06-02');
+ },
+ type: 'quests',
+ value: 7,
+ },
};
export default bundles;
diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js
index 81dc6aa33c..9d2eee34f4 100644
--- a/website/common/script/content/constants.js
+++ b/website/common/script/content/constants.js
@@ -282,6 +282,11 @@ export const QUEST_SERIES_ACHIEVEMENTS = {
'snail',
'spider',
],
+ bareNecessities: [
+ 'monkey',
+ 'sloth',
+ 'treeling',
+ ],
};
export const ANIMAL_COLOR_ACHIEVEMENTS = [
diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js
index 1b316d3c0d..751174c109 100644
--- a/website/common/script/libs/achievements.js
+++ b/website/common/script/libs/achievements.js
@@ -200,6 +200,7 @@ function _getBasicAchievements (user, language) {
_addSimple(result, user, { path: 'tickledPink', language });
_addSimple(result, user, { path: 'rosyOutlook', language });
_addSimple(result, user, { path: 'bugBonanza', language });
+ _addSimple(result, user, { path: 'bareNecessities', language });
_addSimpleWithMasterCount(result, user, { path: 'beastMaster', language });
_addSimpleWithMasterCount(result, user, { path: 'mountMaster', language });
diff --git a/website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png b/website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png
new file mode 100644
index 0000000000..f440a1aa13
Binary files /dev/null and b/website/raw_sprites/spritesmith/achievements/achievement-bareNecessities2x.png differ
diff --git a/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png b/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png
new file mode 100644
index 0000000000..b7fbe7e1cf
Binary files /dev/null and b/website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_jungleBuddies.png differ
diff --git a/website/raw_sprites/spritesmith_large/promo_jungle_buddies_bundle.png b/website/raw_sprites/spritesmith_large/promo_jungle_buddies_bundle.png
new file mode 100644
index 0000000000..16eb9d4a52
Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_jungle_buddies_bundle.png differ
diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js
index f49d47c172..5aff557c83 100644
--- a/website/server/controllers/api-v3/news.js
+++ b/website/server/controllers/api-v3/news.js
@@ -4,7 +4,7 @@ const api = {};
// @TODO export this const, cannot export it from here because only routes are exported from
// controllers
-const LAST_ANNOUNCEMENT_TITLE = 'BLOG POST: RESTING IN THE INN';
+const LAST_ANNOUNCEMENT_TITLE = 'NEW PET ACHIEVEMENT AND QUEST BUNDLE!';
const worldDmg = { // @TODO
bailey: false,
};
@@ -35,16 +35,37 @@ api.getNews = {
-
+
+ New Quest Pet Badge!
- This month's featured Wiki article is about Resting in the Inn! We hope that it
- will help you when you need a break from your Dailies. Be sure to check it out, and let
- us know what you think by reaching out on Twitter,
- Tumblr, and Facebook.
+ We're releasing a new achievement so you can celebrate your successes in the world of
+ Habitican Pet collecting! Earn the Bare Necessities achievement by collecting all
+ Habitica's jungle-dwelling Pets and you'll earn a nifty badge for your profile.
- by shanaqui and the Wiki Wizards
+
+ If you’ve already completed the required Quests for a newly released achievement, you
+ don’t have to do them all again! Just complete one of the relevant Quests and the
+ Achievement will unlock. Check your profile and celebrate your new Achievement with
+ pride.
+
+ by Beffymaroo and SabreCat
+
+ New Discounted Pet Quest Bundle: Jungle Buddies!
+
+ If you're eager to complete the Bare Necessities quests, or if you're simply looking to
+ add some equatorial pets to your Habitica stable, you're in luck! From now until May 30,
+ you can purchase the Jungle Buddies Pet Quest Bundle and receive the Monkey, Sloth, and
+ Treeling quests, all for only 7 Gems! That's a discount of 5 Gems from the price of
+ purchasing them separately. Check it out in the Quest Shop
+ today!
+
+ by SabreCat
+ Writing by PixelHunter, Emily Austin, Flutter Bee, and Felipe NA
+
+ Art by JaizakAripaik, Drevian, McCoyly, awakebyjava, PainterProphet, Kiwibot,
+ greenpencil, fuzzytrees, PainterProphet, aurakami, yamato, leephon, Misceo, and
+ Oneironaut
+
`,
});
diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js
index 4788278a15..a6eae81943 100644
--- a/website/server/models/user/schema.js
+++ b/website/server/models/user/schema.js
@@ -134,6 +134,7 @@ export default new Schema({
tickledPink: Boolean,
rosyOutlook: Boolean,
bugBonanza: Boolean,
+ bareNecessities: Boolean,
// Onboarding Guide
createdTask: Boolean,
completedTask: Boolean,
diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js
index e7775c6cd1..214b1e580d 100644
--- a/website/server/models/userNotification.js
+++ b/website/server/models/userNotification.js
@@ -55,6 +55,7 @@ const NOTIFICATION_TYPES = [
'ACHIEVEMENT_TICKLED_PINK',
'ACHIEVEMENT_ROSY_OUTLOOK',
'ACHIEVEMENT_BUG_BONANZA',
+ 'ACHIEVEMENT_BARE_NECESSITIES',
'ACHIEVEMENT', // generic achievement notification, details inside `notification.data`
];