Compare commits

..

6 Commits

Author SHA1 Message Date
Sabe Jones ec63ed8bba 4.107.0 2019-08-13 19:16:35 -05:00
Sabe Jones 0a73a14bff chore(sprites): compile 2019-08-13 19:16:29 -05:00
Sabe Jones 1aef294646 feat(content): Silver Hatching Potion quest 2019-08-13 19:16:19 -05:00
Sabe Jones 6de5fed47a fix(test): change expectation of empty streak achievement 2019-08-12 16:17:01 -05:00
Sabe Jones 738221ea17 4.106.2 2019-08-12 16:03:21 -05:00
Sabe Jones 63f9304abf fix(mobile): set default streak achievement to 0 2019-08-12 16:02:23 -05:00
80 changed files with 7693 additions and 7387 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.106.1",
"version": "4.107.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.106.1",
"version": "4.107.0",
"main": "./website/server/index.js",
"dependencies": {
"@google-cloud/trace-agent": "^4.0.0",
+1 -1
View File
@@ -153,7 +153,7 @@ describe('shared.ops.scoreTask', () => {
it('does not give a streak achievement for a streak of zero', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'some daily', streak: -1 });
scoreTask({ user: ref.afterUser, task, direction: 'up' });
expect(ref.afterUser.achievements.streak).to.be.undefined;
expect(ref.afterUser.achievements.streak).to.equal(0);
});
it('does not remove a streak achievement when unticking a Daily gives a streak of zero', () => {
@@ -18,7 +18,7 @@
}
.quest_dilatoryDistress2 {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1757px -1023px;
background-position: -1757px -570px;
width: 150px;
height: 150px;
}
@@ -96,7 +96,7 @@
}
.quest_goldenknight2 {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -1546px;
background-position: -251px -1546px;
width: 250px;
height: 150px;
}
@@ -108,7 +108,7 @@
}
.quest_gryphon {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1314px -1332px;
background-position: -1322px -1112px;
width: 216px;
height: 177px;
}
@@ -174,7 +174,7 @@
}
.quest_mayhemMistiflying1 {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1757px -872px;
background-position: -1757px -1023px;
width: 150px;
height: 150px;
}
@@ -234,7 +234,7 @@
}
.quest_nudibranch {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1540px -868px;
background-position: -1540px 0px;
width: 216px;
height: 216px;
}
@@ -246,13 +246,13 @@
}
.quest_owl {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -660px -1112px;
background-position: -880px -1112px;
width: 219px;
height: 219px;
}
.quest_peacock {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1540px 0px;
background-position: -1540px -868px;
width: 216px;
height: 216px;
}
@@ -264,19 +264,19 @@
}
.quest_pterodactyl {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1320px -440px;
background-position: -660px -1112px;
width: 219px;
height: 219px;
}
.quest_rat {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -880px -892px;
background-position: -1320px -440px;
width: 219px;
height: 219px;
}
.quest_rock {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1540px -651px;
background-position: -1540px -434px;
width: 216px;
height: 216px;
}
@@ -288,17 +288,23 @@
}
.quest_sabretooth {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -892px;
background-position: -880px -892px;
width: 219px;
height: 219px;
}
.quest_seaserpent {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1100px 0px;
background-position: 0px -892px;
width: 219px;
height: 219px;
}
.quest_sheep {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1100px 0px;
width: 219px;
height: 219px;
}
.quest_silver {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -440px -672px;
width: 219px;
@@ -324,13 +330,13 @@
}
.quest_snake {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1322px -1112px;
background-position: -1097px -1332px;
width: 216px;
height: 177px;
}
.quest_spider {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -251px -1546px;
background-position: 0px -1546px;
width: 250px;
height: 150px;
}
@@ -342,7 +348,7 @@
}
.quest_stoikalmCalamity1 {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1757px -570px;
background-position: -1757px -872px;
width: 150px;
height: 150px;
}
@@ -366,7 +372,7 @@
}
.quest_taskwoodsTerror2 {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1540px -434px;
background-position: -1540px -651px;
width: 216px;
height: 216px;
}
@@ -378,7 +384,7 @@
}
.quest_treeling {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1097px -1332px;
background-position: -1314px -1332px;
width: 216px;
height: 177px;
}
@@ -394,9 +400,3 @@
width: 216px;
height: 177px;
}
.quest_triceratops {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -880px -1112px;
width: 219px;
height: 219px;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 121 KiB

+1
View File
@@ -289,6 +289,7 @@
"hatchingPotionSunshine": "Sunshine",
"hatchingPotionBronze": "Bronze",
"hatchingPotionWatery": "Watery",
"hatchingPotionSilver": "Silver",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs.",
+10 -1
View File
@@ -754,5 +754,14 @@
"questDolphinBoss": "Dolphin of Doubt",
"questDolphinCompletion": "Your battle of wills with the dolphin has left you tired but victorious. With your determination and encouragement, @mewrose, @khdarkwolf, and @confusedcicada pick themselves up and shake off the dolphins insidious telepathy. The four of you shield yourselves with a sense of accomplishment in your consistent Dailies, strong Habits, and completed To-Dos until it closes its glowing eyes in silent acknowledgment of your successes. With that, it tumbles back into the bay. As you trade high-fives and congratulations, you notice three eggs wash ashore.<br><br>“Hm, I wonder what we can do with those,” @khdarkwolf muses.",
"questDolphinDropDolphinEgg": "Dolphin (Egg)",
"questDolphinUnlockText": "Unlocks purchasable Dolphin eggs in the Market"
"questDolphinUnlockText": "Unlocks purchasable Dolphin eggs in the Market",
"questSilverText": "The Silver Solution",
"questSilverNotes": "The recent discovery of Bronze Hatching Potions has all of Habitica talking. Could potions of even brighter metals be possible? You head to Habit City's central Public Library, accompanied by @QuartzFox and @starsystemic, and gather up great armloads of books on alchemy to study.<br><br>After hours of eye-straining labor, @QuartzFox lets out a not-quite-library-appropriate shout of triumph. “Aha! I've found it!” You hurry over to see. “A Silver Hatching Potion can be made with runes of the zodiac sign Cancer, dissolved in pure silver melted over flame infused with the power of Moon runes.”<br><br>“We'll need a lot of those ingredients,” muses @starsystemic. “In case an attempt goes wrong.”<br><br>“There's only one place to find huge quantities of such random crafting materials,” says @Edge, standing in the shadow of the stacks with arms crossed. Have they been there the whole time? “The Dungeons of Drudgery. Let's get going.”",
"questSilverCompletion": "You've delved. You've dredged. You've scavenged. At last you emerge from the Dungeons, laden with runes and bars of silver, covered in sludge but exhilarated with success. You journey back to Habit City and set to work in an alchemy lab. You and @starsystemic follow the formulas @QuartzFox found, under the careful supervision of @Edge. Finally, in a great puff of glitter and smoke, your concoction settles into the familiar viscosity of a Hatching Potion!<br><br>@Edge scoops the mixture into vials and grins. “Let's give it a try, shall we? Anyone got any Eggs?”<br><br>You rush to the Stables, wondering what shining secrets may yet remain undiscovered...",
"questSilverCollectCancerRunes": "Cancer Zodiac Runes",
"questSilverCollectMoonRunes": "Moon Runes",
"questSilverCollectSilverIngots": "Silver Ingots",
"questSilverDropSilverPotion": "Silver Hatching Potion",
"questSilverUnlockText": "Unlocks purchasable Silver hatching potions in the Market"
}
@@ -190,9 +190,6 @@ let premium = {
text: t('hatchingPotionBronze'),
limited: true,
canBuy: hasQuestAchievementFunction('bronze'),
_addlNotes () {
return '';
},
},
Watery: {
value: 2,
@@ -200,6 +197,12 @@ let premium = {
limited: true,
_season: '_PENDING_',
},
Silver: {
value: 2,
text: t('hatchingPotionSilver'),
limited: true,
canBuy: hasQuestAchievementFunction('silver'),
},
};
const wacky = {
@@ -232,9 +235,7 @@ each(premium, (pot, key) => {
notes: t('hatchingPotionNotes', {
potText: pot.text,
}),
_addlNotes: t('eventAvailability', {
date: t(`dateEnd${pot._season}`),
}),
_addlNotes: t('premiumPotionAddlNotes'),
premium: true,
limited: false,
canBuy () {
+41
View File
@@ -3417,6 +3417,47 @@ let quests = {
unlock: t('questDolphinUnlockText'),
},
},
silver: {
text: t('questSilverText'),
notes: t('questSilverNotes'),
completion: t('questSilverCompletion'),
value: 4,
category: 'hatchingPotion',
collect: {
silverIngot: {
text: t('questSilverCollectSilverIngots'),
count: 20,
},
moonRune: {
text: t('questSilverCollectMoonRunes'),
count: 15,
},
cancerRune: {
text: t('questSilverCollectCancerRunes'),
count: 15,
},
},
drop: {
items: [
{
type: 'hatchingPotions',
key: 'Silver',
text: t('questSilverDropSilverPotion'),
}, {
type: 'hatchingPotions',
key: 'Silver',
text: t('questSilverDropSilverPotion'),
}, {
type: 'hatchingPotions',
key: 'Silver',
text: t('questSilverDropSilverPotion'),
},
],
gp: 50,
exp: 100,
unlock: t('questSilverUnlockText'),
},
},
};
each(quests, (v, key) => {
@@ -31,7 +31,7 @@ const featuredItems = {
},
{
type: 'quests',
path: 'quests.dolphin',
path: 'quests.silver',
},
],
seasonal: 'summer2019Mage',
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

+9 -7
View File
@@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
let api = {};
// @TODO export this const, cannot export it from here because only routes are exported from controllers
const LAST_ANNOUNCEMENT_TITLE = 'DISCOUNTED PET QUEST BUNDLE: FARM FRIENDS';
const LAST_ANNOUNCEMENT_TITLE = 'NEW MAGIC HATCHING POTION QUEST! AND SOMETHING SPECIAL ON THE WAY...';
const worldDmg = { // @TODO
bailey: false,
};
@@ -30,15 +30,17 @@ api.getNews = {
<div class="mr-3 ${baileyClass}"></div>
<div class="media-body">
<h1 class="align-self-center">${res.t('newStuff')}</h1>
<h2>8/6/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
<h2>8/13/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
</div>
</div>
<hr/>
<div class="promo_farm_friends_bundle center-block"></div>
<p>If you are looking to add critters from the barnyard to your Habitica stable, you're in luck! From now until August 30, you can purchase the Farm Friends Pet Quest Bundle and receive the Sheep, Cow, and Horse 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 <a href='/shops/quests'>Quest Shop</a> today!</p>
<div class="small">by Lemoness and SabreCat</div>
<div class="small">Art by UncommonCriminal, Soloana, fuzzytrees, Feralem Tau, Eevachu, Beffymaroo, JessicaChase, starsystemic, nonight, Misceo and Tocath</div>
<div class="small mb-3">Writing by schizelle, VikingRunner, Salambander, Leephon, and Lemoness</div>
<h3>Something Special is on the Way!</h3>
<p>Have you been looking to add more Habitican magic to your IRL world? Something exciting is coming to help you do just that! Keep your eyes peeled for a special announcement from Bailey soon!</p>
<div class="small mb-3">by the Habitica Team</div>
<div class="quest_silver center-block"></div>
<h3>New Magic Hatching Potion Quest!</h3>
<p>Where there's Bronze, there must be Silver... right? <a href='/shops/quests'>Get the latest Magic Hatching Potion quest</a>, "The Silver Solution," and collect Silver Ingots and Runes to earn Silver Magic Hatching Potions by completing your real-life tasks!</p>
<div class="small mb-3">by Beffymaroo, Edge, gawrone, QuartzFox, starsystemic, WillowTheWitty, and SabreCat</div>
</div>
`,
});
+1 -1
View File
@@ -94,7 +94,7 @@ let schema = new Schema({
spookySparkles: Number,
shinySeed: Number,
seafoam: Number,
streak: Number,
streak: {$type: Number, default: 0},
challenges: Array,
quests: {$type: Schema.Types.Mixed, default: () => {
return {};