feat(content): Sea Serpent Pet Quest
@@ -235,6 +235,10 @@
|
|||||||
"questEggSquirrelMountText": "Squirrel",
|
"questEggSquirrelMountText": "Squirrel",
|
||||||
"questEggSquirrelAdjective": "bushy-tailed",
|
"questEggSquirrelAdjective": "bushy-tailed",
|
||||||
|
|
||||||
|
"questEggSeaSerpentText": "Sea Serpent",
|
||||||
|
"questEggSeaSerpentMountText": "Sea Serpent",
|
||||||
|
"questEggSeaSerpentAdjective": "shimmering",
|
||||||
|
|
||||||
"eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.",
|
"eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.",
|
||||||
|
|
||||||
"hatchingPotionBase": "Base",
|
"hatchingPotionBase": "Base",
|
||||||
|
|||||||
@@ -700,5 +700,12 @@
|
|||||||
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.",
|
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.",
|
||||||
|
|
||||||
"aquaticAmigosText": "Aquatic Amigos Quest Bundle",
|
"aquaticAmigosText": "Aquatic Amigos Quest Bundle",
|
||||||
"aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until June 30."
|
"aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until June 30.",
|
||||||
|
|
||||||
|
"questSeaSerpentText": "Danger in the Depths: Sea Serpent Strike!",
|
||||||
|
"questSeaSerpentNotes": "Your streaks have you feeling lucky—it’s the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but you’ve barely submerged when an impact rocks the sub, sending its occupants tumbling. “What’s going on?” @AriesFaries shouts.<br><br>You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, it’s coming ‘round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. ‘Maybe if we work together and complete them,’ you think, ‘we can drive this monster away!’",
|
||||||
|
"questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.",
|
||||||
|
"questSeaSerpentBoss": "The Mighty Sea Serpent",
|
||||||
|
"questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)",
|
||||||
|
"questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -356,6 +356,12 @@ let quests = {
|
|||||||
adjective: t('questEggSquirrelAdjective'),
|
adjective: t('questEggSquirrelAdjective'),
|
||||||
canBuy: hasQuestAchievementFunction('squirrel'),
|
canBuy: hasQuestAchievementFunction('squirrel'),
|
||||||
},
|
},
|
||||||
|
SeaSerpent: {
|
||||||
|
text: t('questEggSeaSerpentText'),
|
||||||
|
mountText: t('questEggSeaSerpentMountText'),
|
||||||
|
adjective: t('questEggSeaSerpentAdjective'),
|
||||||
|
canBuy: hasQuestAchievementFunction('seaserpent'),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
applyEggDefaults(drops, {
|
applyEggDefaults(drops, {
|
||||||
|
|||||||
@@ -3225,6 +3225,38 @@ let quests = {
|
|||||||
unlock: t('questSquirrelUnlockText'),
|
unlock: t('questSquirrelUnlockText'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
seaserpent: {
|
||||||
|
text: t('questSeaSerpentText'),
|
||||||
|
notes: t('questSeaSerpentNotes'),
|
||||||
|
completion: t('questSeaSerpentCompletion'),
|
||||||
|
value: 4,
|
||||||
|
category: 'pet',
|
||||||
|
boss: {
|
||||||
|
name: t('questSeaSerpentBoss'),
|
||||||
|
hp: 1200,
|
||||||
|
str: 2.5,
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'SeaSerpent',
|
||||||
|
text: t('questSeaSerpentDropSeaSerpentEgg'),
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'SeaSerpent',
|
||||||
|
text: t('questSeaSerpentDropSeaSerpentEgg'),
|
||||||
|
}, {
|
||||||
|
type: 'eggs',
|
||||||
|
key: 'SeaSerpent',
|
||||||
|
text: t('questSeaSerpentDropSeaSerpentEgg'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
gp: 80,
|
||||||
|
exp: 800,
|
||||||
|
unlock: t('questSeaSerpentUnlockText'),
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
each(quests, (v, key) => {
|
each(quests, (v, key) => {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const featuredItems = {
|
|||||||
quests: [
|
quests: [
|
||||||
{
|
{
|
||||||
type: 'quests',
|
type: 'quests',
|
||||||
path: 'quests.dilatory_derby',
|
path: 'quests.seaserpent',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'quests',
|
type: 'quests',
|
||||||
|
|||||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 915 B |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 799 B |
|
After Width: | Height: | Size: 843 B |
|
After Width: | Height: | Size: 805 B |
|
After Width: | Height: | Size: 839 B |
|
After Width: | Height: | Size: 777 B |
|
After Width: | Height: | Size: 853 B |
|
After Width: | Height: | Size: 787 B |
|
After Width: | Height: | Size: 757 B |
|
After Width: | Height: | Size: 751 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 786 B |
|
After Width: | Height: | Size: 799 B |
|
After Width: | Height: | Size: 767 B |
|
After Width: | Height: | Size: 781 B |
|
After Width: | Height: | Size: 778 B |
|
After Width: | Height: | Size: 795 B |
|
After Width: | Height: | Size: 717 B |
|
After Width: | Height: | Size: 583 B |
|
After Width: | Height: | Size: 761 B |
|
After Width: | Height: | Size: 853 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1013 B |
|
After Width: | Height: | Size: 975 B |
|
After Width: | Height: | Size: 785 B |
|
After Width: | Height: | Size: 963 B |
|
After Width: | Height: | Size: 1.2 KiB |
BIN
website/raw_sprites/spritesmith_large/promo_seaserpent.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
@@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
|
|||||||
let api = {};
|
let api = {};
|
||||||
|
|
||||||
// @TODO export this const, cannot export it from here because only routes are exported from controllers
|
// @TODO export this const, cannot export it from here because only routes are exported from controllers
|
||||||
const LAST_ANNOUNCEMENT_TITLE = 'iOS APP UPDATE!';
|
const LAST_ANNOUNCEMENT_TITLE = 'NEW PET QUEST: SEA SERPENT!';
|
||||||
const worldDmg = { // @TODO
|
const worldDmg = { // @TODO
|
||||||
bailey: false,
|
bailey: false,
|
||||||
};
|
};
|
||||||
@@ -30,18 +30,17 @@ api.getNews = {
|
|||||||
<div class="mr-3 ${baileyClass}"></div>
|
<div class="mr-3 ${baileyClass}"></div>
|
||||||
<div class="media-body">
|
<div class="media-body">
|
||||||
<h1 class="align-self-center">${res.t('newStuff')}</h1>
|
<h1 class="align-self-center">${res.t('newStuff')}</h1>
|
||||||
<h2>7/16/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
<h2>7/17/2018 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="media align-items-center">
|
<div class="media align-items-center">
|
||||||
<div class="media-body">
|
<div class="media-body">
|
||||||
<p>We've updated our <a href='https://itunes.apple.com/us/app/habitica-gamified-taskmanager/id994882113?mt=8' target='_blank'>iOS app</a>! Lots of pages have been upgraded, including Tasks, Equipment, Guilds, and Parties. We’ve also added sound effects, hooray! You can now also delete your account from within the app. We also smashed a number of pesky bugs, including display issues with Parties, Items, and backgrounds, some bugs with To-Do due dates and more!</p>
|
<p>A submersible expedition launching from the Diligent Docks turns to danger when a mighty Sea Serpent swims into the picture! Get the latest pet quest, <a href="/shops/quests" target="_blank">Danger in the Depths: Sea Serpent Strike!</a>, and earn some shimmering Sea Serpent pets by completing your real-life tasks.</p>
|
||||||
<p>We hope you enjoy the update! Be sure to download it now for a better Habitica experience.</p>
|
<div class="small">Art by Aries Faries, Witticaster, *~Seraphina~, Mara, and 1920-kun</div>
|
||||||
<p>If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! Old reviews get hidden with each update, but if you go to the review section you can re-post them again with a single tap.</p>
|
<div class="small mb-3">Writing by gwyllgi</div>
|
||||||
<div class="small mb-3">by viirus and piyo</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="promo_ios ml-3 mb-3"></div>
|
<div class="promo_seaserpent ml-3 mb-3"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
|
|||||||