diff --git a/test/api/v3/integration/world-state/GET-world-state.test.js b/test/api/v3/integration/world-state/GET-world-state.test.js index 5c91062769..e8c650d0bb 100644 --- a/test/api/v3/integration/world-state/GET-world-state.test.js +++ b/test/api/v3/integration/world-state/GET-world-state.test.js @@ -32,4 +32,11 @@ describe('GET /world-state', () => { }, }); }); -}); + + it('returns a string representing the current season for NPC sprites', async () => { + const res = await requester().get('/world-state'); + + expect(res).to.have.nested.property('npcImageSuffix'); + expect(res.npcImageSuffix).to.be.a('string'); + }); +}}); diff --git a/website/client/assets/images/npc/spring/market_background.png b/website/client/assets/images/npc/spring/market_background.png new file mode 100644 index 0000000000..f60453b66b Binary files /dev/null and b/website/client/assets/images/npc/spring/market_background.png differ diff --git a/website/client/assets/images/npc/spring/market_banner_npc.png b/website/client/assets/images/npc/spring/market_banner_npc.png new file mode 100644 index 0000000000..172798d3f3 Binary files /dev/null and b/website/client/assets/images/npc/spring/market_banner_npc.png differ diff --git a/website/client/assets/images/npc/spring/npc_bailey.png b/website/client/assets/images/npc/spring/npc_bailey.png new file mode 100644 index 0000000000..0fe6763311 Binary files /dev/null and b/website/client/assets/images/npc/spring/npc_bailey.png differ diff --git a/website/raw_sprites/spritesmith_large/scene_coding.png b/website/client/assets/images/npc/spring/npc_justin.png similarity index 57% rename from website/raw_sprites/spritesmith_large/scene_coding.png rename to website/client/assets/images/npc/spring/npc_justin.png index cdad452fa5..9365bc12c9 100644 Binary files a/website/raw_sprites/spritesmith_large/scene_coding.png and b/website/client/assets/images/npc/spring/npc_justin.png differ diff --git a/website/client/assets/images/npc/spring/npc_matt.png b/website/client/assets/images/npc/spring/npc_matt.png new file mode 100644 index 0000000000..e129d6e43e Binary files /dev/null and b/website/client/assets/images/npc/spring/npc_matt.png differ diff --git a/website/client/assets/images/npc/spring/quest_shop_background.png b/website/client/assets/images/npc/spring/quest_shop_background.png new file mode 100644 index 0000000000..89f0826528 Binary files /dev/null and b/website/client/assets/images/npc/spring/quest_shop_background.png differ diff --git a/website/client/assets/images/npc/spring/quest_shop_npc.png b/website/client/assets/images/npc/spring/quest_shop_npc.png new file mode 100644 index 0000000000..90cc1cd08e Binary files /dev/null and b/website/client/assets/images/npc/spring/quest_shop_npc.png differ diff --git a/website/client/assets/images/npc/spring/seasonal_shop_closed_background.png b/website/client/assets/images/npc/spring/seasonal_shop_closed_background.png new file mode 100644 index 0000000000..9367206b62 Binary files /dev/null and b/website/client/assets/images/npc/spring/seasonal_shop_closed_background.png differ diff --git a/website/client/assets/images/npc/spring/seasonal_shop_closed_npc.png b/website/client/assets/images/npc/spring/seasonal_shop_closed_npc.png new file mode 100644 index 0000000000..861ffad211 Binary files /dev/null and b/website/client/assets/images/npc/spring/seasonal_shop_closed_npc.png differ diff --git a/website/client/assets/images/npc/spring/seasonal_shop_opened_background.png b/website/client/assets/images/npc/spring/seasonal_shop_opened_background.png new file mode 100644 index 0000000000..4eea76bbf2 Binary files /dev/null and b/website/client/assets/images/npc/spring/seasonal_shop_opened_background.png differ diff --git a/website/client/assets/images/npc/spring/seasonal_shop_opened_npc.png b/website/client/assets/images/npc/spring/seasonal_shop_opened_npc.png new file mode 100644 index 0000000000..effad5957e Binary files /dev/null and b/website/client/assets/images/npc/spring/seasonal_shop_opened_npc.png differ diff --git a/website/client/assets/images/npc/spring/tavern_background.png b/website/client/assets/images/npc/spring/tavern_background.png new file mode 100644 index 0000000000..3547e122fb Binary files /dev/null and b/website/client/assets/images/npc/spring/tavern_background.png differ diff --git a/website/client/assets/images/npc/spring/tavern_npc.png b/website/client/assets/images/npc/spring/tavern_npc.png new file mode 100644 index 0000000000..fd0a03f5af Binary files /dev/null and b/website/client/assets/images/npc/spring/tavern_npc.png differ diff --git a/website/client/assets/images/npc/spring/time_travelers_background.png b/website/client/assets/images/npc/spring/time_travelers_background.png new file mode 100644 index 0000000000..1705f515e2 Binary files /dev/null and b/website/client/assets/images/npc/spring/time_travelers_background.png differ diff --git a/website/client/assets/images/npc/spring/time_travelers_closed_banner.png b/website/client/assets/images/npc/spring/time_travelers_closed_banner.png new file mode 100644 index 0000000000..d6346979ac Binary files /dev/null and b/website/client/assets/images/npc/spring/time_travelers_closed_banner.png differ diff --git a/website/client/assets/images/npc/spring/time_travelers_open_banner.png b/website/client/assets/images/npc/spring/time_travelers_open_banner.png new file mode 100644 index 0000000000..91bc2c3f31 Binary files /dev/null and b/website/client/assets/images/npc/spring/time_travelers_open_banner.png differ diff --git a/website/client/assets/scss/variables.scss b/website/client/assets/scss/variables.scss index 879194b5d2..11124495dd 100644 --- a/website/client/assets/scss/variables.scss +++ b/website/client/assets/scss/variables.scss @@ -1,9 +1,9 @@ // this variables are used to determine which shop npc/backgrounds should be loaded -// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines +// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring // more to be added on future seasons -$npc_market_flavor: 'normal'; -$npc_quests_flavor: 'normal'; -$npc_seasonal_flavor: 'normal'; -$npc_timetravelers_flavor: 'normal'; -$npc_tavern_flavor: 'normal'; +$npc_market_flavor: 'spring'; +$npc_quests_flavor: 'spring'; +$npc_seasonal_flavor: 'spring'; +$npc_timetravelers_flavor: 'spring'; +$npc_tavern_flavor: 'spring'; diff --git a/website/client/components/avatar.vue b/website/client/components/avatar.vue index d288bb0e80..ed0d8eeee6 100644 --- a/website/client/components/avatar.vue +++ b/website/client/components/avatar.vue @@ -21,7 +21,6 @@ span(:class="member.preferences.size + '_shirt_' + member.preferences.shirt") span.head_0 span(:class="member.preferences.size + '_' + getGearClass('armor')") - span.head_0 span(:class="getGearClass('back_collar')") span(:class="getGearClass('body')") template(v-for="type in ['bangs', 'base', 'mustache', 'beard']") diff --git a/website/client/components/shops/market/index.vue b/website/client/components/shops/market/index.vue index c939cb4006..2eb6b91c92 100644 --- a/website/client/components/shops/market/index.vue +++ b/website/client/components/shops/market/index.vue @@ -295,7 +295,7 @@ .content { display: flex; flex-direction: column; - z-index: 1; // Always cover background. + z-index: 1; // Always cover background. } .npc { @@ -467,7 +467,7 @@ export default { }, async mounted () { const worldState = await this.$store.dispatch('worldState:getWorldState'); - this.broken = worldState.worldBoss.extra.worldDmg.market; + this.broken = worldState && worldState.worldBoss && worldState.worldBoss.extra && worldState.worldBoss.extra.worldDmg && worldState.worldBoss.extra.worldDmg.market; }, computed: { ...mapState({ diff --git a/website/client/components/shops/quests/index.vue b/website/client/components/shops/quests/index.vue index 8f050e644e..a08d084f24 100644 --- a/website/client/components/shops/quests/index.vue +++ b/website/client/components/shops/quests/index.vue @@ -400,7 +400,7 @@ export default { }, async mounted () { const worldState = await this.$store.dispatch('worldState:getWorldState'); - this.broken = worldState.worldBoss.extra.worldDmg.quests; + this.broken = worldState && worldState.worldBoss && worldState.worldBoss.extra && worldState.worldBoss.extra.worldDmg && worldState.worldBoss.extra.worldDmg.quests; }, computed: { ...mapState({ diff --git a/website/client/components/shops/seasonal/index.vue b/website/client/components/shops/seasonal/index.vue index 0b9d05a35b..167e504f11 100644 --- a/website/client/components/shops/seasonal/index.vue +++ b/website/client/components/shops/seasonal/index.vue @@ -23,8 +23,7 @@ ) .standard-page div.featuredItems - .background(:class="{opened: seasonal.opened && !broken, broken: broken}") - .background(:class="{cracked: broken, broken: broken}") + .background(:class="{opened: seasonal.opened}") div.npc div.featured-label span.rectangle @@ -373,7 +372,7 @@ }, async mounted () { const worldState = await this.$store.dispatch('worldState:getWorldState'); - this.broken = worldState.worldBoss.extra.worldDmg.seasonalShop; + this.broken = worldState && worldState.worldBoss && worldState.worldBoss.extra && worldState.worldBoss.extra.worldDmg && worldState.worldBoss.extra.worldDmg.seasonalShop; }, computed: { ...mapState({ diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index 4485dda287..0b588113d9 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -276,6 +276,15 @@ "weaponSpecialWinter2018HealerText": "Mistletoe Wand", "weaponSpecialWinter2018HealerNotes": "This mistletoe ball is sure to enchant and delight passersby! Increases Intelligence by <%= int %>. Limited Edition 2017-2018 Winter Gear.", + "weaponSpecialSpring2018RogueText": "Buoyant Bullrush", + "weaponSpecialSpring2018RogueNotes": "What might appear to be cute cattails are actually quite effective weapons in the right wings. Increases Strength by <%= str %>. Limited Edition 2018 Spring Gear.", + "weaponSpecialSpring2018WarriorText": "Axe of Daybreak", + "weaponSpecialSpring2018WarriorNotes": "Made of bright gold, this axe is mighty enough to attack the reddest task! Increases Strength by <%= str %>. Limited Edition 2018 Spring Gear.", + "weaponSpecialSpring2018MageText": "Tulip Stave", + "weaponSpecialSpring2018MageNotes": "This magic flower never wilts! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018 Spring Gear.", + "weaponSpecialSpring2018HealerText": "Garnet Rod", + "weaponSpecialSpring2018HealerNotes": "The stones in this staff will focus your power when you cast healing spells! Increases Intelligence by <%= int %>. Limited Edition 2018 Spring Gear.", + "weaponMystery201411Text": "Pitchfork of Feasting", "weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.", "weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth", @@ -605,6 +614,15 @@ "armorSpecialWinter2018HealerText": "Mistletoe Robes", "armorSpecialWinter2018HealerNotes": "These robes are woven with spells for extra holiday joy. Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", + "armorSpecialSpring2018RogueText": "Feather Suit", + "armorSpecialSpring2018RogueNotes": "This fluffy yellow costume will trick your enemies into thinking you're just a harmless ducky! Increases Perception by <%= per %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018WarriorText": "Armor of Dawn", + "armorSpecialSpring2018WarriorNotes": "This colorful plate is forged with the sunrise's fire. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018MageText": "Tulip Robe", + "armorSpecialSpring2018MageNotes": "Your spell casting can only improve while clad in these soft, silky petals. Increases Intelligence by <%= int %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018HealerText": "Garnet Armor", + "armorSpecialSpring2018HealerNotes": "Let this bright armor infuse your heart with power for healing. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "armorMystery201402Text": "Messenger Robes", "armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.", "armorMystery201403Text": "Forest Walker Armor", @@ -1005,6 +1023,15 @@ "headSpecialWinter2018HealerText": "Mistletoe Hood", "headSpecialWinter2018HealerNotes": "This fancy hood will keep you warm with happy holiday feelings! Increases Intelligence by <%= int %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialSpring2018RogueText": "Duck-Billed Helm", + "headSpecialSpring2018RogueNotes": "Quack quack! Your cuteness belies your clever and sneaky nature. Increases Perception by <%= per %>. Limited Edition 2018 Spring Gear.", + "headSpecialSpring2018WarriorText": "Helm of Rays", + "headSpecialSpring2018WarriorNotes": "The brightness of this helm will dazzle any enemies nearby! Increases Strength by <%= str %>. Limited Edition 2018 Spring Gear.", + "headSpecialSpring2018MageText": "Tulip Helm", + "headSpecialSpring2018MageNotes": "The fancy petals of this helm will grant you special springtime magic. Increases Perception by <%= per %>. Limited Edition 2018 Spring Gear.", + "headSpecialSpring2018HealerText": "Garnet Circlet", + "headSpecialSpring2018HealerNotes": "The polished gems of this circlet will enhance your mental energy. Increases Intelligence by <%= int %>. Limited Edition 2018 Spring Gear.", + "headSpecialGaymerxText": "Rainbow Warrior Helm", "headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.", @@ -1334,6 +1361,11 @@ "shieldSpecialWinter2018HealerText": "Mistletoe Bell", "shieldSpecialWinter2018HealerNotes": "What's that sound? The sound of warmth and cheer for all to hear! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", + "shieldSpecialSpring2018WarriorText": "Shield of the Morning", + "shieldSpecialSpring2018WarriorNotes": "This sturdy shield glows with the glory of first light. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "shieldSpecialSpring2018HealerText": "Garnet Shield", + "shieldSpecialSpring2018HealerNotes": "Despite its fancy appearance, this garnet shield is quite durable! Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "shieldMystery201601Text": "Resolution Slayer", "shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.", "shieldMystery201701Text": "Time-Freezer Shield", diff --git a/website/common/locales/en/limited.json b/website/common/locales/en/limited.json index 2ba6c562c3..4226d73968 100644 --- a/website/common/locales/en/limited.json +++ b/website/common/locales/en/limited.json @@ -29,10 +29,10 @@ "seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>Seasonal Sorceress<%= linkEnd %>", "seasonalShopClosedText": "The Seasonal Shop is currently closed!! It’s only open during Habitica’s four Grand Galas.", - "seasonalShopText": "Happy Spring Fling!! Would you like to buy some rare items? They’ll only be available until April 30th!", "seasonalShopSummerText": "Happy Summer Splash!! Would you like to buy some rare items? They’ll only be available until July 31st!", "seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? They’ll only be available until October 31st!", "seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? They’ll only be available until January 31st!", + "seasonalShopSpringText": "Happy Spring Fling!! Would you like to buy some rare items? They’ll only be available until April 30th!", "seasonalShopFallTextBroken": "Oh.... Welcome to the Seasonal Shop... We're stocking autumn Seasonal Edition goodies, or something... Everything here will be available to purchase during the Fall Festival event each year, but we're only open until October 31... I guess you should to stock up now, or you'll have to wait... and wait... and wait... *sigh*", "seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!", "seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", @@ -117,6 +117,10 @@ "winter2018GiftWrappedSet": "Gift-Wrapped Warrior (Warrior)", "winter2018MistletoeSet": "Mistletoe Healer (Healer)", "winter2018ReindeerSet": "Reindeer Rogue (Rogue)", + "spring2018SunriseWarriorSet": "Sunrise Warrior (Warrior)", + "spring2018TulipMageSet": "Tulip Mage (Mage)", + "spring2018GarnetHealerSet": "Garnet Healer (Healer)", + "spring2018DucklingRogueSet": "Duckling Rogue (Rogue)", "eventAvailability": "Available for purchase until <%= date(locale) %>.", "dateEndMarch": "March 31", "dateEndApril": "April 19", diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js index 6f6632466e..cf83e0c7f3 100644 --- a/website/common/script/content/constants.js +++ b/website/common/script/content/constants.js @@ -31,6 +31,7 @@ export const EVENTS = { summer2017: { start: '2017-06-20', end: '2017-08-02' }, fall2017: { start: '2017-09-21', end: '2017-11-02' }, winter2018: { start: '2017-12-19', end: '2018-02-02' }, + spring2018: { start: '2018-03-20', end: '2018-05-02' }, }; export const SEASONAL_SETS = { @@ -65,6 +66,37 @@ export const SEASONAL_SETS = { 'winter2018MistletoeSet', 'winter2018ReindeerSet', ], + spring: [ + // spring 2014 + 'mightyBunnySet', + 'magicMouseSet', + 'lovingPupSet', + 'stealthyKittySet', + + // spring 2015 + 'bewareDogSet', + 'magicianBunnySet', + 'comfortingKittySet', + 'sneakySqueakerSet', + + // spring 2016 + 'springingBunnySet', + 'grandMalkinSet', + 'cleverDogSet', + 'braveMouseSet', + + // spring 2017 + 'spring2017FelineWarriorSet', + 'spring2017CanineConjurorSet', + 'spring2017FloralMouseSet', + 'spring2017SneakyBunnySet', + + // spring 2018 + 'spring2018TulipMageSet', + 'spring2018SunriseWarriorSet', + 'spring2018DucklingRogueSet', + 'spring2018GarnetHealerSet', + ], }; export const GEAR_TYPES = [ diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js index f221af0bcb..1f2f026127 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -8,7 +8,7 @@ import takeThisGear from './special-takeThis'; import wonderconGear from './special-wondercon'; import t from '../../../translation'; -const CURRENT_SEASON = 'winter'; +const CURRENT_SEASON = 'spring'; let armor = { 0: backerGear.armorSpecial0, @@ -167,6 +167,9 @@ let armor = { notes: t('armorSpecialSpringRogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springWarrior: { event: EVENTS.spring, @@ -176,6 +179,9 @@ let armor = { notes: t('armorSpecialSpringWarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springMage: { event: EVENTS.spring, @@ -185,6 +191,9 @@ let armor = { notes: t('armorSpecialSpringMageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springHealer: { event: EVENTS.spring, @@ -194,6 +203,9 @@ let armor = { notes: t('armorSpecialSpringHealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summerRogue: { event: EVENTS.summer, @@ -353,6 +365,9 @@ let armor = { notes: t('armorSpecialSpring2015RogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Warrior: { event: EVENTS.spring2015, @@ -362,6 +377,9 @@ let armor = { notes: t('armorSpecialSpring2015WarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Mage: { event: EVENTS.spring2015, @@ -371,6 +389,9 @@ let armor = { notes: t('armorSpecialSpring2015MageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Healer: { event: EVENTS.spring2015, @@ -380,6 +401,9 @@ let armor = { notes: t('armorSpecialSpring2015HealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2015Rogue: { event: EVENTS.summer2015, @@ -545,6 +569,9 @@ let armor = { notes: t('armorSpecialSpring2016RogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Warrior: { event: EVENTS.spring2016, @@ -554,6 +581,9 @@ let armor = { notes: t('armorSpecialSpring2016WarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Mage: { event: EVENTS.spring2016, @@ -563,6 +593,9 @@ let armor = { notes: t('armorSpecialSpring2016MageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Healer: { event: EVENTS.spring2016, @@ -572,6 +605,9 @@ let armor = { notes: t('armorSpecialSpring2016HealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2016Rogue: { event: EVENTS.summer2016, @@ -731,6 +767,9 @@ let armor = { notes: t('armorSpecialSpring2017RogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Warrior: { event: EVENTS.spring2017, @@ -740,6 +779,9 @@ let armor = { notes: t('armorSpecialSpring2017WarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Mage: { event: EVENTS.spring2017, @@ -749,6 +791,9 @@ let armor = { notes: t('armorSpecialSpring2017MageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Healer: { event: EVENTS.spring2017, @@ -758,6 +803,9 @@ let armor = { notes: t('armorSpecialSpring2017HealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2017Rogue: { event: EVENTS.summer2017, @@ -873,6 +921,42 @@ let armor = { value: 0, canOwn: ownsItem('armor_special_birthday2018'), }, + spring2018Rogue: { + event: EVENTS.spring2018, + specialClass: 'rogue', + set: 'spring2018DucklingRogueSet', + text: t('armorSpecialSpring2018RogueText'), + notes: t('armorSpecialSpring2018RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + spring2018Warrior: { + event: EVENTS.spring2018, + specialClass: 'warrior', + set: 'spring2018SunriseWarriorSet', + text: t('armorSpecialSpring2018WarriorText'), + notes: t('armorSpecialSpring2018WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + spring2018Mage: { + event: EVENTS.spring2018, + specialClass: 'wizard', + set: 'spring2018TulipMageSet', + text: t('armorSpecialSpring2018MageText'), + notes: t('armorSpecialSpring2018MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + spring2018Healer: { + event: EVENTS.spring2018, + specialClass: 'healer', + set: 'spring2018GarnetHealerSet', + text: t('armorSpecialSpring2018HealerText'), + notes: t('armorSpecialSpring2018HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, }; let back = { @@ -1222,6 +1306,9 @@ let head = { notes: t('headSpecialSpringRogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springWarrior: { event: EVENTS.spring, @@ -1231,6 +1318,9 @@ let head = { notes: t('headSpecialSpringWarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springMage: { event: EVENTS.spring, @@ -1240,6 +1330,9 @@ let head = { notes: t('headSpecialSpringMageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springHealer: { event: EVENTS.spring, @@ -1249,6 +1342,9 @@ let head = { notes: t('headSpecialSpringHealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summerRogue: { event: EVENTS.summer, @@ -1408,6 +1504,9 @@ let head = { notes: t('headSpecialSpring2015RogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Warrior: { event: EVENTS.spring2015, @@ -1417,6 +1516,9 @@ let head = { notes: t('headSpecialSpring2015WarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Mage: { event: EVENTS.spring2015, @@ -1426,6 +1528,9 @@ let head = { notes: t('headSpecialSpring2015MageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Healer: { event: EVENTS.spring2015, @@ -1435,6 +1540,9 @@ let head = { notes: t('headSpecialSpring2015HealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2015Rogue: { event: EVENTS.summer2015, @@ -1600,6 +1708,9 @@ let head = { notes: t('headSpecialSpring2016RogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Warrior: { event: EVENTS.spring2016, @@ -1609,6 +1720,9 @@ let head = { notes: t('headSpecialSpring2016WarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Mage: { event: EVENTS.spring2016, @@ -1618,6 +1732,9 @@ let head = { notes: t('headSpecialSpring2016MageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Healer: { event: EVENTS.spring2016, @@ -1627,6 +1744,9 @@ let head = { notes: t('headSpecialSpring2016HealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2016Rogue: { event: EVENTS.summer2016, @@ -1786,6 +1906,9 @@ let head = { notes: t('headSpecialSpring2017RogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Warrior: { event: EVENTS.spring2017, @@ -1795,6 +1918,9 @@ let head = { notes: t('headSpecialSpring2017WarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Mage: { event: EVENTS.spring2017, @@ -1804,6 +1930,9 @@ let head = { notes: t('headSpecialSpring2017MageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Healer: { event: EVENTS.spring2017, @@ -1813,6 +1942,9 @@ let head = { notes: t('headSpecialSpring2017HealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2017Rogue: { event: EVENTS.summer2017, @@ -1934,6 +2066,42 @@ let head = { value: 60, int: 7, }, + spring2018Rogue: { + event: EVENTS.spring2018, + specialClass: 'rogue', + set: 'spring2018DucklingRogueSet', + text: t('headSpecialSpring2018RogueText'), + notes: t('headSpecialSpring2018RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + spring2018Warrior: { + event: EVENTS.spring2018, + specialClass: 'warrior', + set: 'spring2018SunriseWarriorSet', + text: t('headSpecialSpring2018WarriorText'), + notes: t('headSpecialSpring2018WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + spring2018Mage: { + event: EVENTS.spring2018, + specialClass: 'wizard', + set: 'spring2018TulipMageSet', + text: t('headSpecialSpring2018MageText'), + notes: t('headSpecialSpring2018MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + spring2018Healer: { + event: EVENTS.spring2018, + specialClass: 'healer', + set: 'spring2018GarnetHealerSet', + text: t('headSpecialSpring2018HealerText'), + notes: t('headSpecialSpring2018HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, }; let headAccessory = { @@ -1944,6 +2112,9 @@ let headAccessory = { text: t('headAccessorySpecialSpringRogueText'), notes: t('headAccessorySpecialSpringRogueNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springWarrior: { event: EVENTS.spring, @@ -1952,6 +2123,9 @@ let headAccessory = { text: t('headAccessorySpecialSpringWarriorText'), notes: t('headAccessorySpecialSpringWarriorNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springMage: { event: EVENTS.spring, @@ -1960,6 +2134,9 @@ let headAccessory = { text: t('headAccessorySpecialSpringMageText'), notes: t('headAccessorySpecialSpringMageNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springHealer: { event: EVENTS.spring, @@ -1968,6 +2145,9 @@ let headAccessory = { text: t('headAccessorySpecialSpringHealerText'), notes: t('headAccessorySpecialSpringHealerNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Rogue: { event: EVENTS.spring2015, @@ -1976,6 +2156,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2015RogueText'), notes: t('headAccessorySpecialSpring2015RogueNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Warrior: { event: EVENTS.spring2015, @@ -1984,6 +2167,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2015WarriorText'), notes: t('headAccessorySpecialSpring2015WarriorNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Mage: { event: EVENTS.spring2015, @@ -1992,6 +2178,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2015MageText'), notes: t('headAccessorySpecialSpring2015MageNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Healer: { event: EVENTS.spring2015, @@ -2000,6 +2189,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2015HealerText'), notes: t('headAccessorySpecialSpring2015HealerNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, bearEars: { gearSet: 'animal', @@ -2088,6 +2280,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2016RogueText'), notes: t('headAccessorySpecialSpring2016RogueNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Warrior: { event: EVENTS.spring2016, @@ -2096,6 +2291,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2016WarriorText'), notes: t('headAccessorySpecialSpring2016WarriorNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Mage: { event: EVENTS.spring2016, @@ -2104,6 +2302,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2016MageText'), notes: t('headAccessorySpecialSpring2016MageNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Healer: { event: EVENTS.spring2016, @@ -2112,6 +2313,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2016HealerText'), notes: t('headAccessorySpecialSpring2016HealerNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Rogue: { event: EVENTS.spring2017, @@ -2120,6 +2324,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2017RogueText'), notes: t('headAccessorySpecialSpring2017RogueNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Warrior: { event: EVENTS.spring2017, @@ -2128,6 +2335,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2017WarriorText'), notes: t('headAccessorySpecialSpring2017WarriorNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Mage: { event: EVENTS.spring2017, @@ -2136,6 +2346,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2017MageText'), notes: t('headAccessorySpecialSpring2017MageNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Healer: { event: EVENTS.spring2017, @@ -2144,6 +2357,9 @@ let headAccessory = { text: t('headAccessorySpecialSpring2017HealerText'), notes: t('headAccessorySpecialSpring2017HealerNotes'), value: 20, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, }; @@ -2252,6 +2468,9 @@ let shield = { notes: t('shieldSpecialSpringRogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springWarrior: { event: EVENTS.spring, @@ -2261,6 +2480,9 @@ let shield = { notes: t('shieldSpecialSpringWarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springHealer: { event: EVENTS.spring, @@ -2270,6 +2492,9 @@ let shield = { notes: t('shieldSpecialSpringHealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summerRogue: { event: EVENTS.summer, @@ -2387,6 +2612,9 @@ let shield = { notes: t('shieldSpecialSpring2015RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Warrior: { event: EVENTS.spring2015, @@ -2396,6 +2624,9 @@ let shield = { notes: t('shieldSpecialSpring2015WarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Healer: { event: EVENTS.spring2015, @@ -2405,6 +2636,9 @@ let shield = { notes: t('shieldSpecialSpring2015HealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2015Rogue: { event: EVENTS.summer2015, @@ -2522,6 +2756,9 @@ let shield = { notes: t('shieldSpecialSpring2016RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Warrior: { event: EVENTS.spring2016, @@ -2531,6 +2768,9 @@ let shield = { notes: t('shieldSpecialSpring2016WarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Healer: { event: EVENTS.spring2016, @@ -2540,6 +2780,9 @@ let shield = { notes: t('shieldSpecialSpring2016HealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2016Rogue: { event: EVENTS.summer2016, @@ -2657,6 +2900,9 @@ let shield = { notes: t('shieldSpecialSpring2017RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Warrior: { event: EVENTS.spring2017, @@ -2666,6 +2912,9 @@ let shield = { notes: t('shieldSpecialSpring2017WarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Healer: { event: EVENTS.spring2017, @@ -2675,6 +2924,9 @@ let shield = { notes: t('shieldSpecialSpring2017HealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2017Rogue: { event: EVENTS.summer2017, @@ -2757,6 +3009,33 @@ let shield = { value: 70, con: 9, }, + spring2018Rogue: { + event: EVENTS.spring2018, + specialClass: 'rogue', + set: 'spring2018DucklingRogueSet', + text: t('weaponSpecialSpring2018RogueText'), + notes: t('weaponSpecialSpring2018RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + spring2018Warrior: { + event: EVENTS.spring2018, + specialClass: 'warrior', + set: 'spring2018SunriseWarriorSet', + text: t('shieldSpecialSpring2018WarriorText'), + notes: t('shieldSpecialSpring2018WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + spring2018Healer: { + event: EVENTS.spring2018, + specialClass: 'healer', + set: 'spring2018GarnetHealerSet', + text: t('shieldSpecialSpring2018HealerText'), + notes: t('shieldSpecialSpring2018HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, }; let weapon = { @@ -2918,6 +3197,9 @@ let weapon = { notes: t('weaponSpecialSpringRogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springWarrior: { event: EVENTS.spring, @@ -2927,6 +3209,9 @@ let weapon = { notes: t('weaponSpecialSpringWarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springMage: { event: EVENTS.spring, @@ -2938,6 +3223,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, springHealer: { event: EVENTS.spring, @@ -2947,6 +3235,9 @@ let weapon = { notes: t('weaponSpecialSpringHealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summerRogue: { event: EVENTS.summer, @@ -3106,6 +3397,9 @@ let weapon = { notes: t('weaponSpecialSpring2015RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Warrior: { event: EVENTS.spring2015, @@ -3115,6 +3409,9 @@ let weapon = { notes: t('weaponSpecialSpring2015WarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Mage: { event: EVENTS.spring2015, @@ -3126,6 +3423,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2015Healer: { event: EVENTS.spring2015, @@ -3135,6 +3435,9 @@ let weapon = { notes: t('weaponSpecialSpring2015HealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2015Rogue: { event: EVENTS.summer2015, @@ -3294,6 +3597,9 @@ let weapon = { notes: t('weaponSpecialSpring2016RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Warrior: { event: EVENTS.spring2016, @@ -3303,6 +3609,9 @@ let weapon = { notes: t('weaponSpecialSpring2016WarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Mage: { event: EVENTS.spring2016, @@ -3314,6 +3623,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2016Healer: { event: EVENTS.spring2016, @@ -3323,6 +3635,9 @@ let weapon = { notes: t('weaponSpecialSpring2016HealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2016Rogue: { event: EVENTS.summer2016, @@ -3482,6 +3797,9 @@ let weapon = { notes: t('weaponSpecialSpring2017RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Warrior: { event: EVENTS.spring2017, @@ -3491,6 +3809,9 @@ let weapon = { notes: t('weaponSpecialSpring2017WarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Mage: { event: EVENTS.spring2017, @@ -3502,6 +3823,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, spring2017Healer: { event: EVENTS.spring2017, @@ -3511,6 +3835,9 @@ let weapon = { notes: t('weaponSpecialSpring2017HealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return CURRENT_SEASON === 'spring'; + }, }, summer2017Rogue: { event: EVENTS.summer2017, @@ -3626,6 +3953,44 @@ let weapon = { value: 90, int: 9, }, + spring2018Rogue: { + event: EVENTS.spring2018, + specialClass: 'rogue', + set: 'spring2018DucklingRogueSet', + text: t('weaponSpecialSpring2018RogueText'), + notes: t('weaponSpecialSpring2018RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + spring2018Warrior: { + event: EVENTS.spring2018, + specialClass: 'warrior', + set: 'spring2018SunriseWarriorSet', + text: t('weaponSpecialSpring2018WarriorText'), + notes: t('weaponSpecialSpring2018WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + spring2018Mage: { + event: EVENTS.spring2018, + specialClass: 'wizard', + set: 'spring2018TulipMageSet', + twoHanded: true, + text: t('weaponSpecialSpring2018MageText'), + notes: t('weaponSpecialSpring2018MageNotes', { int: 15, per: 7 }), + value: 160, + int: 15, + per: 7, + }, + spring2018Healer: { + event: EVENTS.spring2018, + specialClass: 'healer', + set: 'spring2018GarnetHealerSet', + text: t('weaponSpecialSpring2018HealerText'), + notes: t('weaponSpecialSpring2018HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, }; let specialSet = { diff --git a/website/common/script/content/quests.js b/website/common/script/content/quests.js index 26dfcd28da..be7c3a3bbf 100644 --- a/website/common/script/content/quests.js +++ b/website/common/script/content/quests.js @@ -509,7 +509,7 @@ let quests = { value: 1, category: 'pet', canBuy () { - return false; + return true; }, collect: { plainEgg: { diff --git a/website/common/script/content/shop-featuredItems.js b/website/common/script/content/shop-featuredItems.js index 011ce22b2d..b187e7132a 100644 --- a/website/common/script/content/shop-featuredItems.js +++ b/website/common/script/content/shop-featuredItems.js @@ -24,18 +24,18 @@ const featuredItems = { }, { type: 'quests', - path: 'quests.stoikalmCalamity1', + path: 'quests.taskwoodsTerror1', }, { type: 'quests', - path: 'quests.badger', + path: 'quests.egg', }, { type: 'bundles', path: 'bundles.hugabug', }, ], - seasonal: 'summerMage', + seasonal: 'springHealer', timeTravelers: [ // TODO ], diff --git a/website/common/script/libs/shops-seasonal.config.js b/website/common/script/libs/shops-seasonal.config.js index dac4fb8524..6efe2d5c9d 100644 --- a/website/common/script/libs/shops-seasonal.config.js +++ b/website/common/script/libs/shops-seasonal.config.js @@ -1,23 +1,29 @@ -// import { SEASONAL_SETS } from '../content/constants'; +import { SEASONAL_SETS } from '../content/constants'; module.exports = { - opened: false, + opened: true, - currentSeason: 'Closed', + currentSeason: 'Spring', - dateRange: { start: '2017-12-19', end: '2018-01-31' }, + dateRange: { start: '2018-03-20', end: '2018-04-30' }, availableSets: [ + ...SEASONAL_SETS.spring, ], pinnedSets: { + wizard: 'spring2018TulipMageSet', + warrior: 'spring2018SunriseWarriorSet', + rogue: 'spring2018DucklingRogueSet', + healer: 'spring2018GarnetHealerSet', }, availableSpells: [ ], availableQuests: [ + 'egg', ], - featuredSet: 'yetiSet', + featuredSet: 'comfortingKittySet', }; diff --git a/website/raw_sprites/spritesmith/gear/armoire/broad_armor_armoire_flutteryFrock.png b/website/raw_sprites/spritesmith/gear/armoire/broad_armor_armoire_flutteryFrock.png index 774d7eec65..4f7f79b552 100644 Binary files a/website/raw_sprites/spritesmith/gear/armoire/broad_armor_armoire_flutteryFrock.png and b/website/raw_sprites/spritesmith/gear/armoire/broad_armor_armoire_flutteryFrock.png differ diff --git a/website/raw_sprites/spritesmith/gear/armoire/slim_armor_armoire_flutteryFrock.png b/website/raw_sprites/spritesmith/gear/armoire/slim_armor_armoire_flutteryFrock.png index 8e4bbbe154..a5513747fc 100644 Binary files a/website/raw_sprites/spritesmith/gear/armoire/slim_armor_armoire_flutteryFrock.png and b/website/raw_sprites/spritesmith/gear/armoire/slim_armor_armoire_flutteryFrock.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Healer.png new file mode 100644 index 0000000000..f8eee54c0b Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Mage.png new file mode 100644 index 0000000000..ae3ff4a325 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Rogue.png new file mode 100644 index 0000000000..b6cecdfda7 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Warrior.png new file mode 100644 index 0000000000..e66450a1a3 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/broad_armor_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Healer.png new file mode 100644 index 0000000000..d7e1e063e0 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Mage.png new file mode 100644 index 0000000000..bbcab931bb Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Rogue.png new file mode 100644 index 0000000000..4742086598 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Warrior.png new file mode 100644 index 0000000000..8a9d55e3e0 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/head_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Healer.png new file mode 100644 index 0000000000..3af1a47f1d Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Rogue.png new file mode 100644 index 0000000000..c63d6811b6 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Warrior.png new file mode 100644 index 0000000000..c56eb1920b Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shield_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Healer.png new file mode 100644 index 0000000000..384d1d1255 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Mage.png new file mode 100644 index 0000000000..5e32ae36d6 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Rogue.png new file mode 100644 index 0000000000..a1c03f395d Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Warrior.png new file mode 100644 index 0000000000..a9c0ecf543 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_armor_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Healer.png new file mode 100644 index 0000000000..55ddbbab62 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Mage.png new file mode 100644 index 0000000000..01b6735874 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Rogue.png new file mode 100644 index 0000000000..2889942626 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Warrior.png new file mode 100644 index 0000000000..2c8ea5170a Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_head_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Healer.png new file mode 100644 index 0000000000..28dd90b505 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Rogue.png new file mode 100644 index 0000000000..e2d648d115 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Warrior.png new file mode 100644 index 0000000000..660d7f299b Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_shield_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Healer.png new file mode 100644 index 0000000000..cc095ab4fc Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Mage.png new file mode 100644 index 0000000000..b1d16c7c41 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Rogue.png new file mode 100644 index 0000000000..a9fdbbe036 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Warrior.png new file mode 100644 index 0000000000..894872e381 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/shop/shop_weapon_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Healer.png new file mode 100644 index 0000000000..562cdc39b5 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Mage.png new file mode 100644 index 0000000000..5b3661336b Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Rogue.png new file mode 100644 index 0000000000..d5e3944be3 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Warrior.png new file mode 100644 index 0000000000..b7952580e1 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/slim_armor_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Healer.png b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Healer.png new file mode 100644 index 0000000000..95bacb97a7 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Healer.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Mage.png b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Mage.png new file mode 100644 index 0000000000..714fe4f8d4 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Mage.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Rogue.png b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Rogue.png new file mode 100644 index 0000000000..f7347bb0c0 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Rogue.png differ diff --git a/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Warrior.png b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Warrior.png new file mode 100644 index 0000000000..bb680e2fb2 Binary files /dev/null and b/website/raw_sprites/spritesmith/gear/events/spring/weapon_special_spring2018Warrior.png differ diff --git a/website/raw_sprites/spritesmith/npcs/npc_bailey.png b/website/raw_sprites/spritesmith/npcs/npc_bailey.png index 4957f1a3f9..0fe6763311 100644 Binary files a/website/raw_sprites/spritesmith/npcs/npc_bailey.png and b/website/raw_sprites/spritesmith/npcs/npc_bailey.png differ diff --git a/website/raw_sprites/spritesmith/npcs/npc_justin.png b/website/raw_sprites/spritesmith/npcs/npc_justin.png index 08ba7025c2..9365bc12c9 100644 Binary files a/website/raw_sprites/spritesmith/npcs/npc_justin.png and b/website/raw_sprites/spritesmith/npcs/npc_justin.png differ diff --git a/website/raw_sprites/spritesmith/npcs/npc_matt.png b/website/raw_sprites/spritesmith/npcs/npc_matt.png index 2531f1084b..e129d6e43e 100644 Binary files a/website/raw_sprites/spritesmith/npcs/npc_matt.png and b/website/raw_sprites/spritesmith/npcs/npc_matt.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_cupid_potions.png b/website/raw_sprites/spritesmith_large/promo_cupid_potions.png deleted file mode 100644 index 53c5fac248..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_cupid_potions.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_dysheartener.png b/website/raw_sprites/spritesmith_large/promo_dysheartener.png deleted file mode 100644 index 9b3eb10cca..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_dysheartener.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_egg_hunt.png b/website/raw_sprites/spritesmith_large/promo_egg_hunt.png new file mode 100644 index 0000000000..8013b18129 Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_egg_hunt.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_hippogriff.png b/website/raw_sprites/spritesmith_large/promo_hippogriff.png deleted file mode 100644 index 511bd687aa..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_hippogriff.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_seasonalshop_broken.png b/website/raw_sprites/spritesmith_large/promo_seasonalshop_broken.png deleted file mode 100644 index 7f70478f32..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_seasonalshop_broken.png and /dev/null differ diff --git a/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png b/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png new file mode 100644 index 0000000000..e1f811893e Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_seasonalshop_spring.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png b/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png new file mode 100644 index 0000000000..6a172abe39 Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_spring_fling_2018.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_valentines.png b/website/raw_sprites/spritesmith_large/promo_valentines.png deleted file mode 100644 index d65128389a..0000000000 Binary files a/website/raw_sprites/spritesmith_large/promo_valentines.png and /dev/null differ diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index 622808e665..0bea648ad4 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -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 = 'KEYS TO THE KENNELS AND USE CASE SPOTLIGHT'; +const LAST_ANNOUNCEMENT_TITLE = 'SPRING FLING BEGINS! LIMITED EDITION EQUIPMENT, SEASONAL SHOP OPENS, AND EGG QUEST IS AVAILABLE!'; const worldDmg = { // @TODO bailey: false, }; @@ -32,26 +32,28 @@ api.getNews = {
The Keys to the Kennels have returned! Now, when you collect all 90 standard pets or mounts, you can release them for 4 Gems, letting you collect them all over again! If you want a real challenge, you can attain the elusive Triad Bingo by filling your stable with all of both, then set them all free at once at no cost!
-Scroll to the bottom of the Market to purchase a Key. It takes effect immediately on purchase, so say your goodbyes first!
-This month's Use Case Spotlight is about Spring Cleaning! It features a number of great suggestions submitted by Habiticans in the Use Case Spotlights Guild. We hope it helps any of you who might be looking to start spring with a nice, clean dwelling.
-Plus, we're collecting user submissions for the next spotlight! How do you use Habitica to Make a Difference? We’ll be featuring player-submitted examples in Use Case Spotlights on the Habitica Blog next month, so post your suggestions in the Use Case Spotlight Guild now. We look forward to learning more about how you use Habitica to improve your life and get things done!
-From now until April 30th, limited edition outfits are available in the Rewards column! Depending on your class, you can be a Tulip Mage, Sunrise Warrior, Duckling Rogue, or Garnet Healer. You'd better get productive to earn enough gold before your time runs out...
+The Seasonal Shop has opened! It's stocking springtime Seasonal Edition goodies at the moment, including past spring outfits. Everything there will be available to purchase during the Spring Fling event each year, but it's only open until April 30th, so be sure to stock up now, or you'll have to wait a year to buy these items again!
+The Egg Quest is also available again in the Quest Shop! Strange eggs are appearing all over Habitica. Can you collect them all to earn some colorful Egg pets and mounts?
+