October Prebuild (#15325)

* Add october background

* Add armoire

* Add subscriber gear

* add new pet

* improve quest tests

* Fixes from gear switchup

* use new sprite system for quest images

* fixes

* fix quest image alignment

* add missing string

* fix(style): lint warnings and typo

---------

Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Sabe Jones <sabe@habitica.com>
This commit is contained in:
Kalista Payne
2024-09-17 16:13:51 -05:00
committed by GitHub
parent ea398f6294
commit f9fb463128
19 changed files with 343 additions and 14 deletions

View File

@@ -0,0 +1,42 @@
import {
each,
} from 'lodash';
import {
expectValidTranslationString,
} from '../helpers/content.helper';
import { quests } from '../../website/common/script/content/quests';
describe('quests', () => {
let clock;
afterEach(() => {
if (clock) {
clock.restore();
}
});
it('contains basic information about each quest', () => {
each(quests, (quest, key) => {
expectValidTranslationString(quest.text);
expectValidTranslationString(quest.notes);
expectValidTranslationString(quest.completion);
expect(quest.key, key).to.equal(key);
expect(quest.category, key).to.be.a('string');
if (quest.boss) {
expectValidTranslationString(quest.boss.name);
expect(quest.boss.hp, key).to.be.a('number');
expect(quest.boss.str, key).to.be.a('number');
}
expect(quest.drop).to.be.an('object');
expect(quest.drop.gp, key).to.be.a('number');
expect(quest.drop.exp, key).to.be.a('number');
if (quest.drop.items) {
quest.drop.items.forEach(drop => {
expectValidTranslationString(drop.text);
expect(drop.type, key).to.exist;
});
}
});
});
});

View File

@@ -2165,6 +2165,11 @@
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_surrounded_by_ghosts {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_surrounded_by_ghosts.png');
width: 141px;
height: 147px;
}
.background_swan_boat { .background_swan_boat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_swan_boat.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_swan_boat.png');
width: 141px; width: 141px;
@@ -30794,6 +30799,11 @@
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.shield_armoire_safetyFlashlight {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_safetyFlashlight.png');
width: 114px;
height: 90px;
}
.shield_armoire_sandyBucket { .shield_armoire_sandyBucket {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_sandyBucket.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_sandyBucket.png');
width: 90px; width: 90px;
@@ -31934,6 +31944,11 @@
width: 114px; width: 114px;
height: 90px; height: 90px;
} }
.weapon_armoire_spookyCandyBucket {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_spookyCandyBucket.png');
width: 114px;
height: 90px;
}
.weapon_armoire_vermilionArcherBow { .weapon_armoire_vermilionArcherBow {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_vermilionArcherBow.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_vermilionArcherBow.png');
width: 90px; width: 90px;
@@ -35279,6 +35294,16 @@
width: 114px; width: 114px;
height: 90px; height: 90px;
} }
.back_mystery_202410 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/back_mystery_202410.png');
width: 114px;
height: 90px;
}
.headAccessory_mystery_202410 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_mystery_202410.png');
width: 114px;
height: 90px;
}
.broad_armor_mystery_301404 { .broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px; width: 90px;
@@ -40237,6 +40262,11 @@
width: 219px; width: 219px;
height: 219px; height: 219px;
} }
.quest_dog {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_dog.png');
width: 219px;
height: 219px;
}
.quest_dolphin { .quest_dolphin {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_dolphin.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/quest_dolphin.png');
width: 219px; width: 219px;
@@ -40967,6 +40997,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.inventory_quest_scroll_dog {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_dog.png');
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dolphin { .inventory_quest_scroll_dolphin {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_dolphin.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/inventory_quest_scroll_dolphin.png');
width: 68px; width: 68px;
@@ -42807,6 +42842,56 @@
width: 105px; width: 105px;
height: 105px; height: 105px;
} }
.Mount_Body_Dog-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Base.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-CottonCandyBlue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-CottonCandyBlue.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-CottonCandyPink {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-CottonCandyPink.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Desert {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Desert.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Golden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Golden.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Red {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Red.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Shade {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Shade.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Skeleton {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Skeleton.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-White {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-White.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dog-Zombie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dog-Zombie.png');
width: 105px;
height: 105px;
}
.Mount_Body_Dolphin-Base { .Mount_Body_Dolphin-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dolphin-Base.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Body_Dolphin-Base.png');
width: 105px; width: 105px;
@@ -48252,6 +48337,56 @@
width: 105px; width: 105px;
height: 105px; height: 105px;
} }
.Mount_Head_Dog-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Base.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-CottonCandyBlue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-CottonCandyBlue.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-CottonCandyPink {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-CottonCandyPink.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Desert {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Desert.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Golden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Golden.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Red {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Red.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Shade {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Shade.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Skeleton {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Skeleton.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-White {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-White.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dog-Zombie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dog-Zombie.png');
width: 105px;
height: 105px;
}
.Mount_Head_Dolphin-Base { .Mount_Head_Dolphin-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dolphin-Base.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Mount_Head_Dolphin-Base.png');
width: 105px; width: 105px;
@@ -53757,6 +53892,56 @@
width: 81px; width: 81px;
height: 99px; height: 99px;
} }
.Pet-Dog-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Base.png');
width: 81px;
height: 99px;
}
.Pet-Dog-CottonCandyBlue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-CottonCandyBlue.png');
width: 81px;
height: 99px;
}
.Pet-Dog-CottonCandyPink {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-CottonCandyPink.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Desert {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Desert.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Golden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Golden.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Red {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Red.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Shade {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Shade.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Skeleton {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Skeleton.png');
width: 81px;
height: 99px;
}
.Pet-Dog-White {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-White.png');
width: 81px;
height: 99px;
}
.Pet-Dog-Zombie {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dog-Zombie.png');
width: 81px;
height: 99px;
}
.Pet-Dolphin-Base { .Pet-Dolphin-Base {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dolphin-Base.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Dolphin-Base.png');
width: 81px; width: 81px;

View File

@@ -10,10 +10,10 @@
@hide="hide" @hide="hide"
> >
<div class="modal-body text-center"> <div class="modal-body text-center">
<div <Sprite
class="quest" class="quest"
:class="`quest_${user.party.quest.completed}`" :image-name="`quest_${user.party.quest.completed}`"
></div> />
<p <p
v-if="questData.completion && typeof questData.completion === 'function'" v-if="questData.completion && typeof questData.completion === 'function'"
v-html="questData.completion()" v-html="questData.completion()"
@@ -58,10 +58,12 @@ import percent from '@/../../common/script/libs/percent';
import { MAX_HEALTH as maxHealth } from '@/../../common/script/constants'; import { MAX_HEALTH as maxHealth } from '@/../../common/script/constants';
import { mapState } from '@/libs/store'; import { mapState } from '@/libs/store';
import QuestRewards from '../shops/quests/questRewards'; import QuestRewards from '../shops/quests/questRewards';
import Sprite from '../ui/sprite';
export default { export default {
components: { components: {
QuestRewards, QuestRewards,
Sprite,
}, },
data () { data () {
return { return {

View File

@@ -11,10 +11,11 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="pull-right-sm text-center"> <div class="pull-right-sm text-center">
<div <div class="col-centered">
class="col-centered" <Sprite
:class="`quest_${quests[user.party.quest.key].key}`" :image-name="`quest_${quests[user.party.quest.key].key}`"
></div> />
</div>
<div ng-if="quests[user.party.quest.key].boss"> <div ng-if="quests[user.party.quest.key].boss">
<h4>{{ quests[user.party.quest.key].boss.name() }}</h4> <h4>{{ quests[user.party.quest.key].boss.name() }}</h4>
<p> <p>
@@ -93,8 +94,12 @@ import * as quests from '@/../../common/script/content/quests';
import percent from '@/../../common/script/libs/percent'; import percent from '@/../../common/script/libs/percent';
import { MAX_HEALTH as maxHealth } from '@/../../common/script/constants'; import { MAX_HEALTH as maxHealth } from '@/../../common/script/constants';
import { mapState } from '@/libs/store'; import { mapState } from '@/libs/store';
import Sprite from '@/components/ui/sprite';
export default { export default {
components: [
Sprite,
],
data () { data () {
return { return {
maxHealth, maxHealth,

View File

@@ -51,10 +51,10 @@
:class="{'not-participating': !userIsOnQuest}" :class="{'not-participating': !userIsOnQuest}"
> >
<div class="col-12 text-center"> <div class="col-12 text-center">
<div <Sprite
class="quest-boss" class="quest-boss"
:class="'quest_' + questData.key" :image-name="'quest_' + questData.key"
></div> />
<div class="quest-box"> <div class="quest-box">
<div <div
v-if="questData.collect" v-if="questData.collect"
@@ -66,7 +66,7 @@
class="quest-item-row" class="quest-item-row"
> >
<div class="quest-item-icon"> <div class="quest-item-icon">
<div :class="'quest_' + questData.key + '_' + key"></div> <Sprite :image-name="'quest_' + questData.key + '_' + key" />
</div> </div>
<div class="quest-item-info"> <div class="quest-item-info">
<span class="label quest-label">{{ value.text() }}</span> <span class="label quest-label">{{ value.text() }}</span>
@@ -643,6 +643,7 @@ import * as quests from '@/../../common/script/content/quests';
import percent from '@/../../common/script/libs/percent'; import percent from '@/../../common/script/libs/percent';
import { mapState } from '@/libs/store'; import { mapState } from '@/libs/store';
import sidebarSection from '../sidebarSection'; import sidebarSection from '../sidebarSection';
import Sprite from '../ui/sprite';
import questIcon from '@/assets/svg/quest.svg'; import questIcon from '@/assets/svg/quest.svg';
import swordIcon from '@/assets/svg/sword.svg'; import swordIcon from '@/assets/svg/sword.svg';
@@ -653,6 +654,7 @@ import questActionsMixin from '@/components/groups/questActions.mixin';
export default { export default {
components: { components: {
sidebarSection, sidebarSection,
Sprite,
}, },
mixins: [questActionsMixin], mixins: [questActionsMixin],
props: ['group'], props: ['group'],

View File

@@ -1,9 +1,10 @@
<template> <template>
<div class="quest-content"> <div class="quest-content">
<div <Sprite
class="quest-image" class="quest-image"
:class="item.purchaseType === 'bundles' ? `quest_bundle_${item.key}` : `quest_${item.key}`" :image-name="item.purchaseType === 'bundles'
></div> ? `quest_bundle_${item.key}` : `quest_${item.key}`"
/>
<h3 class="text-center"> <h3 class="text-center">
{{ itemText }} {{ itemText }}
</h3> </h3>
@@ -40,6 +41,7 @@
margin: 0 auto; margin: 0 auto;
margin-bottom: 16px; margin-bottom: 16px;
margin-top: 24px; margin-top: 24px;
display: block;
} }
.leader-label { .leader-label {
@@ -67,11 +69,13 @@
<script> <script>
import QuestInfo from './questInfo.vue'; import QuestInfo from './questInfo.vue';
import UserLabel from '../../userLabel'; import UserLabel from '../../userLabel';
import Sprite from '../../ui/sprite';
export default { export default {
components: { components: {
UserLabel, UserLabel,
QuestInfo, QuestInfo,
Sprite,
}, },
props: { props: {
item: { item: {

View File

@@ -995,6 +995,10 @@
"backgroundMagicDoorInForestText": "Magic Door in the Forest", "backgroundMagicDoorInForestText": "Magic Door in the Forest",
"backgroundMagicDoorInForestNotes": "Dare to step through the Magic Door in the Forest.", "backgroundMagicDoorInForestNotes": "Dare to step through the Magic Door in the Forest.",
"backgrounds102024": "SET 124: Released September 2024",
"backgroundSurroundedByGhostsText": "Surrounded by Ghosts",
"backgroundSurroundedByGhostsNotes": "Spend a spooky evening Surrounded by Ghosts.",
"timeTravelBackgrounds": "Steampunk Backgrounds", "timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship", "backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",

View File

@@ -267,6 +267,10 @@
"questEggRaccoonMountText": "Raccoon", "questEggRaccoonMountText": "Raccoon",
"questEggRaccoonAdjective": "a ravenous", "questEggRaccoonAdjective": "a ravenous",
"questEggDogText": "Puppy",
"questEggDogMountText": "Dog",
"questEggDogAdjective": "a friendy",
"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",

View File

@@ -787,6 +787,8 @@
"weaponArmoireDragonKnightsLanceNotes": "This red and silver lance has unseated many opponents from their mounts. Increases Constitution by <%= con %>. Enchanted Armoire: Dragon Knight Set (Item 3 of 3)", "weaponArmoireDragonKnightsLanceNotes": "This red and silver lance has unseated many opponents from their mounts. Increases Constitution by <%= con %>. Enchanted Armoire: Dragon Knight Set (Item 3 of 3)",
"weaponArmoireFunnyFoolBatonText": "Funny Fool Baton", "weaponArmoireFunnyFoolBatonText": "Funny Fool Baton",
"weaponArmoireFunnyFoolBatonNotes": "With a wave of your baton you can deliver a punchline, redirect attention, or summon applause. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Funny Fool Set (Item 3 of 3)", "weaponArmoireFunnyFoolBatonNotes": "With a wave of your baton you can deliver a punchline, redirect attention, or summon applause. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Funny Fool Set (Item 3 of 3)",
"weaponArmoireSpookyCandyBucketText": "Spooky Candy Bucket",
"weaponArmoireSpookyCandyBucketNotes": "With an epic costume like that, youre going to get so much candy! Good thing youve got this bottomless bucket to hold it all. Try not to snack on any until you get home. Increases Intelligence by <%= int %>. Enchanted Armoire: Trick or Treat Set (Item 2 of 2)",
"armor": "armor", "armor": "armor",
"armorCapitalized": "Armor", "armorCapitalized": "Armor",
@@ -3002,6 +3004,8 @@
"shieldArmoireThrownVesselNotes": "You know what they say: practice makes progress. And this is the best one youve made so far! Increases Constitution by <%= con %>. Enchanted Armoire: Potter Set (Item 3 of 4).", "shieldArmoireThrownVesselNotes": "You know what they say: practice makes progress. And this is the best one youve made so far! Increases Constitution by <%= con %>. Enchanted Armoire: Potter Set (Item 3 of 4).",
"shieldArmoireBuoyantBeachBallText": "Beachball", "shieldArmoireBuoyantBeachBallText": "Beachball",
"shieldArmoireBuoyantBeachBallNotes": "Got too many balls up in the air already? Heres one that you can safely set down, roll, bounce and bounce and bounce... Increases Strength by <%= str %>. Enchanted Armoire: Beachside Set (Item 4 of 4).", "shieldArmoireBuoyantBeachBallNotes": "Got too many balls up in the air already? Heres one that you can safely set down, roll, bounce and bounce and bounce... Increases Strength by <%= str %>. Enchanted Armoire: Beachside Set (Item 4 of 4).",
"shieldArmoireSafetyFlashlightText": "Safety Flashlight",
"shieldArmoireSafetyFlashlightNotes": "Wait, did you hear that noise? Quick! Shine your flashlight into the shadows over there. Hmmm. Looks like it was just the wind. Or was it…? Increases Constitution by <%= con $>. Enchanted Armoire: Trick or Treat Set (Item 1 of 2)",
"back": "Back Accessory", "back": "Back Accessory",
"backBase0Text": "No Back Accessory", "backBase0Text": "No Back Accessory",
@@ -3082,6 +3086,8 @@
"backMystery202402Notes": "Let an aura of loving energy surround you wherever you go! Confers no benefit. February 2024 Subscriber Item.", "backMystery202402Notes": "Let an aura of loving energy surround you wherever you go! Confers no benefit. February 2024 Subscriber Item.",
"backMystery202405Text": "Gilded Drake Wings", "backMystery202405Text": "Gilded Drake Wings",
"backMystery202405Notes": "These magnificent wings have the glow of pure gold but are as light as a feather. Confers no benefit. May 2024 Subscriber Item.", "backMystery202405Notes": "These magnificent wings have the glow of pure gold but are as light as a feather. Confers no benefit. May 2024 Subscriber Item.",
"backMystery202410Text": "Candy Corn Tail",
"backMystery202410Notes": "This tail perks up at the mention of spooky treats. Confers no benefit. October 2024 Subscriber Item.",
"backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedText": "Mighty Cape",
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",
@@ -3325,6 +3331,8 @@
"headAccessoryMystery202310Notes": "Like a will-o'-the-wisp, these unearthly lights may lure curious souls to their doom. Confers no benefit. October 2023 Subscriber Item.", "headAccessoryMystery202310Notes": "Like a will-o'-the-wisp, these unearthly lights may lure curious souls to their doom. Confers no benefit. October 2023 Subscriber Item.",
"headAccessoryMystery202405Text": "Gilded Drake Horns", "headAccessoryMystery202405Text": "Gilded Drake Horns",
"headAccessoryMystery202405Notes": "The metallic sheen of these fine horns reflects the dancing colors of dragon fire. Confers no benefit. May 2024 Subscriber Item.", "headAccessoryMystery202405Notes": "The metallic sheen of these fine horns reflects the dancing colors of dragon fire. Confers no benefit. May 2024 Subscriber Item.",
"headAccessoryMystery202410Text": "Candy Corn Ears",
"headAccessoryMystery202410Notes": "Is that the sound of trick-or-treaters at your door? Confers no benefit. October 2024 Subscriber Item.",
"headAccessoryMystery301405Text": "Headwear Goggles", "headAccessoryMystery301405Text": "Headwear Goggles",
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.", "headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",

View File

@@ -923,6 +923,16 @@
"questRaccoonDropRaccoonEgg": "Raccoon (Egg)", "questRaccoonDropRaccoonEgg": "Raccoon (Egg)",
"questRaccoonUnlockText": "Unlocks Raccoon Eggs for purchase in the Market.", "questRaccoonUnlockText": "Unlocks Raccoon Eggs for purchase in the Market.",
"questDogText": "Triple Dog Dare!",
"questDogNotes": "Youve been chosen for an expedition to map Habiticas underground cave systems! Researchers in Habit City theorize that there may be new tools for managing tasks or even undiscovered creatures in these depths.<br><br>As you map rocky tunnels near the foothills of the Meandering Mountains, you notice a glow emanating from a craggy entrance ahead. As you near you see… toys? Stuffed animals and rubber balls are scattered around the cave floor. Is that barking you hear?<br><br>A huge, three-headed dog jumps out, darting for the toy you were right about to pick up! You freeze, almost losing a limb there! But... the dogs mouths seem too occupied with toys to attack?<br><br>“Woof!” one of the dog's mouths barks, dropping a torn toy raccoon. “Are you here to help me clean?? I reeeally need to tidy up but every time I pick up a toy, I just end up playing with it… Here, think fast!!”<br><br>He launches a ball at you, and then another, and another. Those extra heads really make dodging a workout!",
"questDogCompletion": "After gathering all the toys that you (thankfully) dodged, you give Shiberus a gentle pat on his center head.<br><br>“Its great to be excited about a big task, but it might help to go in with a plan. Maybe next time try starting at the entrance and working backwards? Or doing it 30 minutes at a time with some short play breaks in between.”<br><br>“Thats a good idea,” the pups left head chimes in. The right head places some items near you, including what appear to be eggs… “I found some things you might like while we were playing. Thanks for your help!”",
"questDogBoss": "Shiberus",
"questDogRageTitle": "Triple Toy Toss",
"questDogRageDescription": "This bar fills when you don't complete your Dailies. When it's full, Shiberus will take away some of your party's MP!",
"questDogRageEffect": "Shiberus throws toys at you rapid-fire and blocks your magic spells! The partys MP is reduced!",
"questDogDropDogEgg": "Dog (Egg)",
"questDogUnlockText": "Unlocks Dog Eggs for purchase in the Market.",
"questFungiText": "The Moody Mushroom", "questFungiText": "The Moody Mushroom",
"questFungiNotes": "Its been a rainy spring in Habitica and the ground around the stables is spongy and damp. You notice quite a few mushrooms have appeared along the wooden stable walls and fences. Theres a fog hanging about, not quite letting the sun peek through, and its a bit dispiriting.<br><br>Out of the mist you see the outline of the April Fool, not at all his usual bouncy self.<br><br>”Id hoped to bring you all some delightful Fungi Magic Hatching Potions so that you can keep your mushroom friends from my special day forever,” he says, his expression alarmingly unsmiling. “But this cold fog is really getting to me, its making me feel too tired and dismal to work my usual magic.”<br><br>“Oh no, sorry to hear that,” you say, noticing your own increasingly somber mood. “This fog is really making the day gloomy. I wonder where it came from…”<br><br>A low rumble sounds across the fields, and you see an outline emerging from the mist. Youre alarmed to see a gigantic and unhappy looking mushroom creature, and the mist appears to be emanating from it.<br><br>“Aha,” says the Fool, “I think this fungal fellow may be the source of our blues. Lets see if we can summon a little cheer for our friend here and ourselves.”", "questFungiNotes": "Its been a rainy spring in Habitica and the ground around the stables is spongy and damp. You notice quite a few mushrooms have appeared along the wooden stable walls and fences. Theres a fog hanging about, not quite letting the sun peek through, and its a bit dispiriting.<br><br>Out of the mist you see the outline of the April Fool, not at all his usual bouncy self.<br><br>”Id hoped to bring you all some delightful Fungi Magic Hatching Potions so that you can keep your mushroom friends from my special day forever,” he says, his expression alarmingly unsmiling. “But this cold fog is really getting to me, its making me feel too tired and dismal to work my usual magic.”<br><br>“Oh no, sorry to hear that,” you say, noticing your own increasingly somber mood. “This fog is really making the day gloomy. I wonder where it came from…”<br><br>A low rumble sounds across the fields, and you see an outline emerging from the mist. Youre alarmed to see a gigantic and unhappy looking mushroom creature, and the mist appears to be emanating from it.<br><br>“Aha,” says the Fool, “I think this fungal fellow may be the source of our blues. Lets see if we can summon a little cheer for our friend here and ourselves.”",
"questFungiCompletion": "You and the April Fool look at each other with a sign of relief as the mushroom retreats to the forest.<br><br>“Ah,” the Fool exclaims, “that was quite a mycelial melancholy. Im glad we could improve his mood, and ours too! I feel my energy coming back. Come with me and well get those Fungi potions going together.”", "questFungiCompletion": "You and the April Fool look at each other with a sign of relief as the mushroom retreats to the forest.<br><br>“Ah,” the Fool exclaims, “that was quite a mycelial melancholy. Im glad we could improve his mood, and ours too! I feel my energy coming back. Come with me and well get those Fungi potions going together.”",

View File

@@ -166,6 +166,7 @@
"mysterySet202407": "Amiable Axolotl Set", "mysterySet202407": "Amiable Axolotl Set",
"mysterySet202408": "Arcane Aegis Set", "mysterySet202408": "Arcane Aegis Set",
"mysterySet202409": "Heliotrope Magus Set", "mysterySet202409": "Heliotrope Magus Set",
"mysterySet202410": "Candy Corn Fox Set",
"mysterySet301404": "Steampunk Standard Set", "mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set", "mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set", "mysterySet301703": "Peacock Steampunk Set",

View File

@@ -632,6 +632,9 @@ const backgrounds = {
backgrounds092024: { backgrounds092024: {
magic_door_in_forest: { }, magic_door_in_forest: { },
}, },
backgrounds102024: {
surrounded_by_ghosts: { },
},
eventBackgrounds: { eventBackgrounds: {
birthday_bash: { birthday_bash: {
price: 0, price: 0,

View File

@@ -11,6 +11,7 @@ export const ARMOIRE_RELEASE_DATES = {
corsairSet: { year: 2024, month: 7 }, corsairSet: { year: 2024, month: 7 },
dragonKnightSet: { year: 2024, month: 8 }, dragonKnightSet: { year: 2024, month: 8 },
funnyFoolSet: { year: 2024, month: 9 }, funnyFoolSet: { year: 2024, month: 9 },
trickOrTreatSet: { year: 2024, month: 10 },
}; };
export const EGGS_RELEASE_DATES = { export const EGGS_RELEASE_DATES = {
@@ -18,6 +19,7 @@ export const EGGS_RELEASE_DATES = {
Chameleon: { year: 2024, month: 7, day: 14 }, Chameleon: { year: 2024, month: 7, day: 14 },
Crab: { year: 2024, month: 8, day: 14 }, Crab: { year: 2024, month: 8, day: 14 },
Raccoon: { year: 2024, month: 9, day: 14 }, Raccoon: { year: 2024, month: 9, day: 14 },
Dog: { year: 2024, month: 10, day: 14 },
}; };
export const HATCHING_POTIONS_RELEASE_DATES = { export const HATCHING_POTIONS_RELEASE_DATES = {

View File

@@ -527,6 +527,7 @@ export const MONTHLY_SCHEDULE = {
'rock', 'rock',
'ferret', 'ferret',
'hedgehog', 'hedgehog',
'dog',
], ],
}, },
{ {

View File

@@ -417,6 +417,12 @@ const quests = {
adjective: t('questEggRaccoonAdjective'), adjective: t('questEggRaccoonAdjective'),
canBuy: hasQuestAchievementFunction('raccoon'), canBuy: hasQuestAchievementFunction('raccoon'),
}, },
Dog: {
text: t('questEggDogText'),
mountText: t('questEggDogMountText'),
adjective: t('questEggDogAdjective'),
canBuy: hasQuestAchievementFunction('dog'),
},
}; };
applyEggDefaults(drops, { applyEggDefaults(drops, {

View File

@@ -1370,6 +1370,10 @@ const shield = {
str: 12, str: 12,
set: 'beachsideSet', set: 'beachsideSet',
}, },
safetyFlashlight: {
con: 10,
set: 'trickOrTreatSet',
},
}; };
const headAccessory = { const headAccessory = {
@@ -1869,6 +1873,10 @@ const weapon = {
str: 15, str: 15,
set: 'funnyFoolSet', set: 'funnyFoolSet',
}, },
spookyCandyBucket: {
int: 10,
set: 'trickOrTreatSet',
},
}; };
const releaseDay = 7; const releaseDay = 7;

View File

@@ -110,6 +110,7 @@ const back = {
202401: { }, 202401: { },
202402: { }, 202402: { },
202405: { }, 202405: { },
202410: { },
}; };
const body = { const body = {
@@ -262,6 +263,7 @@ const headAccessory = {
202309: { }, 202309: { },
202310: { }, 202310: { },
202405: { }, 202405: { },
202410: { },
301405: { }, 301405: { },
}; };

View File

@@ -398,6 +398,45 @@ const QUEST_PETS = {
unlock: t('questSeahorseUnlockText'), unlock: t('questSeahorseUnlockText'),
}, },
}, },
dog: {
text: t('questDogText'),
notes: t('questDogNotes'),
completion: t('questDogCompletion'),
value: 4,
category: 'pet',
boss: {
name: t('questDogBoss'),
hp: 600,
str: 1.5,
rage: {
title: t('questDogRageTitle'),
description: t('questDogRageDescription'),
value: 50,
mpDrain: 0.3,
effect: t('questDogRageEffect'),
},
},
drop: {
items: [
{
type: 'eggs',
key: 'Dog',
text: t('questDogDropDogEgg'),
}, {
type: 'eggs',
key: 'Dog',
text: t('questDogDropDogEgg'),
}, {
type: 'eggs',
key: 'Dog',
text: t('questDogDropDogEgg'),
},
],
gp: 55,
exp: 500,
unlock: t('questDogUnlockText'),
},
},
dolphin: { dolphin: {
text: t('questDolphinText'), text: t('questDolphinText'),
notes: t('questDolphinNotes'), notes: t('questDolphinNotes'),

View File

@@ -29,6 +29,7 @@ const potentialFeaturedPetQuests = [
'raccoon', 'raccoon',
'snail', 'snail',
'dog',
'kangaroo', 'kangaroo',
'owl', 'owl',