diff --git a/website/assets/img/project_files/npcs/fall/seasonalshop_open.png b/website/assets/img/project_files/npcs/fall/seasonalshop_open.png new file mode 100644 index 0000000000..cfbcc5bddd Binary files /dev/null and b/website/assets/img/project_files/npcs/fall/seasonalshop_open.png differ diff --git a/website/assets/img/project_files/npcs/spring/seasonalshop_open.png b/website/assets/img/project_files/npcs/spring/seasonalshop_open.png new file mode 100644 index 0000000000..e1f811893e Binary files /dev/null and b/website/assets/img/project_files/npcs/spring/seasonalshop_open.png differ diff --git a/website/assets/img/project_files/npcs/summer/seasonalshop_open.png b/website/assets/img/project_files/npcs/summer/seasonalshop_open.png new file mode 100644 index 0000000000..d66bf56d46 Binary files /dev/null and b/website/assets/img/project_files/npcs/summer/seasonalshop_open.png differ diff --git a/website/assets/img/project_files/npcs/winter/npc_bailey1.png b/website/assets/img/project_files/npcs/winter/npc_bailey1.png index cd25ee3f49..db86596503 100644 Binary files a/website/assets/img/project_files/npcs/winter/npc_bailey1.png and b/website/assets/img/project_files/npcs/winter/npc_bailey1.png differ diff --git a/website/assets/img/project_files/npcs/winter/npc_bailey2.png b/website/assets/img/project_files/npcs/winter/npc_bailey2.png index 5fc921cf0e..a5b680b3f5 100644 Binary files a/website/assets/img/project_files/npcs/winter/npc_bailey2.png and b/website/assets/img/project_files/npcs/winter/npc_bailey2.png differ diff --git a/website/assets/img/project_files/npcs/winter/npc_daniel.png b/website/assets/img/project_files/npcs/winter/npc_daniel.png index 4132b30145..f28a922a1a 100644 Binary files a/website/assets/img/project_files/npcs/winter/npc_daniel.png and b/website/assets/img/project_files/npcs/winter/npc_daniel.png differ diff --git a/website/assets/img/project_files/npcs/winter/npc_matt.png b/website/assets/img/project_files/npcs/winter/npc_matt.png index e2cff7aa85..ed0e3bab59 100644 Binary files a/website/assets/img/project_files/npcs/winter/npc_matt.png and b/website/assets/img/project_files/npcs/winter/npc_matt.png differ diff --git a/website/assets/img/project_files/npcs/winter/npc_timetravelers_active.png b/website/assets/img/project_files/npcs/winter/npc_timetravelers_active.png new file mode 100644 index 0000000000..422c355bcb Binary files /dev/null and b/website/assets/img/project_files/npcs/winter/npc_timetravelers_active.png differ diff --git a/website/assets/img/project_files/npcs/winter/seasonalshop_open.png b/website/assets/img/project_files/npcs/winter/seasonalshop_open.png new file mode 100644 index 0000000000..bf18da469c Binary files /dev/null and b/website/assets/img/project_files/npcs/winter/seasonalshop_open.png differ diff --git a/website/assets/sprites/css/index.css b/website/assets/sprites/css/index.css index d85a66e838..3c1c4ec371 100644 --- a/website/assets/sprites/css/index.css +++ b/website/assets/sprites/css/index.css @@ -1,9 +1,9 @@ /* Comment out for holiday events */ -.npc_ian { +/* .npc_ian { background: url("/npc_ian.gif") no-repeat; width: 78px; height: 135px; -} +} */ .quest_burnout { background: url("/quest_burnout.gif") no-repeat; diff --git a/website/assets/img/project_files/npcs/st_patties/npc_daniel.png b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Healer.png similarity index 64% rename from website/assets/img/project_files/npcs/st_patties/npc_daniel.png rename to website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Healer.png index cdfbb07ba2..d3663d4f6c 100644 Binary files a/website/assets/img/project_files/npcs/st_patties/npc_daniel.png and b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Healer.png differ diff --git a/website/assets/img/project_files/npcs/march/npc_daniel.png b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Mage.png similarity index 60% rename from website/assets/img/project_files/npcs/march/npc_daniel.png rename to website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Mage.png index f9cef8b91d..51a1c4656b 100644 Binary files a/website/assets/img/project_files/npcs/march/npc_daniel.png and b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Rogue.png new file mode 100644 index 0000000000..be9b315483 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Warrior.png new file mode 100644 index 0000000000..10c8c33821 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/broad_armor_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Healer.png new file mode 100644 index 0000000000..dce75e9cdf Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Mage.png new file mode 100644 index 0000000000..3df788f01a Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Rogue.png new file mode 100644 index 0000000000..99245e1c64 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Warrior.png new file mode 100644 index 0000000000..db93e4d416 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/head_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Healer.png new file mode 100644 index 0000000000..8baa664ad7 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Rogue.png new file mode 100644 index 0000000000..e242cfcc9e Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Warrior.png new file mode 100644 index 0000000000..56118b14e9 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shield_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Healer.png new file mode 100644 index 0000000000..ba7cc3168e Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Mage.png new file mode 100644 index 0000000000..93da14537e Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Rogue.png new file mode 100644 index 0000000000..2fd717a690 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Warrior.png new file mode 100644 index 0000000000..19dd551c75 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_armor_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Healer.png new file mode 100644 index 0000000000..597df0fa94 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Mage.png new file mode 100644 index 0000000000..a66a18fe47 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Rogue.png new file mode 100644 index 0000000000..0378a0f86f Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Warrior.png new file mode 100644 index 0000000000..261d0c7cab Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_head_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Healer.png new file mode 100644 index 0000000000..a5adcc5062 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Rogue.png new file mode 100644 index 0000000000..f6f264922f Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Warrior.png new file mode 100644 index 0000000000..a0d7f820e1 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_shield_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Healer.png new file mode 100644 index 0000000000..9afd88bb91 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Mage.png new file mode 100644 index 0000000000..a956be5780 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Rogue.png new file mode 100644 index 0000000000..68fbebc0e7 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Warrior.png new file mode 100644 index 0000000000..6a07a4b7e0 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/shop/shop_weapon_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Healer.png new file mode 100644 index 0000000000..d3663d4f6c Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Mage.png new file mode 100644 index 0000000000..6201c97859 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Rogue.png new file mode 100644 index 0000000000..82f33182fb Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Warrior.png new file mode 100644 index 0000000000..220db7db4a Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/slim_armor_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Healer.png b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Healer.png new file mode 100644 index 0000000000..55d271cf5b Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Healer.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Mage.png b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Mage.png new file mode 100644 index 0000000000..ee51f0cca8 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Mage.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Rogue.png new file mode 100644 index 0000000000..e88bfc637f Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Rogue.png differ diff --git a/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Warrior.png new file mode 100644 index 0000000000..cb15813be9 Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/winter/weapon_special_winter2017Warrior.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_alex.png b/website/assets/sprites/spritesmith/npcs/npc_alex.png index 67b7476d33..8d45538129 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_alex.png and b/website/assets/sprites/spritesmith/npcs/npc_alex.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_bailey.png b/website/assets/sprites/spritesmith/npcs/npc_bailey.png index d5940b986b..db86596503 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_bailey.png and b/website/assets/sprites/spritesmith/npcs/npc_bailey.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_daniel.png b/website/assets/sprites/spritesmith/npcs/npc_daniel.png index b12dd9e254..f28a922a1a 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_daniel.png and b/website/assets/sprites/spritesmith/npcs/npc_daniel.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_ian.png b/website/assets/sprites/spritesmith/npcs/npc_ian.png index 482eb467a8..6d490c1152 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_ian.png and b/website/assets/sprites/spritesmith/npcs/npc_ian.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_justin.png b/website/assets/sprites/spritesmith/npcs/npc_justin.png index 08ba7025c2..bf42f04508 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_justin.png and b/website/assets/sprites/spritesmith/npcs/npc_justin.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_matt.png b/website/assets/sprites/spritesmith/npcs/npc_matt.png index 2531f1084b..ed0e3bab59 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_matt.png and b/website/assets/sprites/spritesmith/npcs/npc_matt.png differ diff --git a/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png b/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png index f84a5ba2e0..422c355bcb 100644 Binary files a/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png and b/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png differ diff --git a/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png b/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png index f69fb9d792..bf18da469c 100644 Binary files a/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png and b/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png differ diff --git a/website/assets/sprites/spritesmith_large/promo/promo_winter_classes_2017.png b/website/assets/sprites/spritesmith_large/promo/promo_winter_classes_2017.png new file mode 100644 index 0000000000..2be218fb94 Binary files /dev/null and b/website/assets/sprites/spritesmith_large/promo/promo_winter_classes_2017.png differ diff --git a/website/common/locales/en/limited.json b/website/common/locales/en/limited.json index 41838256f7..0d239ed35b 100644 --- a/website/common/locales/en/limited.json +++ b/website/common/locales/en/limited.json @@ -43,6 +43,10 @@ "icicleDrakeSet": "Icicle Drake (Rogue)", "soothingSkaterSet": "Soothing Skater (Healer)", "gingerbreadSet": "Gingerbread Warrior (Warrior)", + "snowDaySet": "Snow Day Warrior (Warrior)", + "snowboardingSet": "Snowboarding Sorcerer (Mage)", + "festiveFairySet": "Festive Fairy (Healer)", + "cocoaSet": "Cocoa Rogue (Rogue)", "toAndFromCard": "To: <%= toName %>, From: <%= fromName %>", "nyeCard": "New Year's Card", "nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!", diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js index 83a135478a..69a8aa7c31 100644 --- a/website/common/script/content/constants.js +++ b/website/common/script/content/constants.js @@ -26,6 +26,7 @@ export const EVENTS = { spring2016: { start: '2016-03-18', end: '2016-05-02' }, summer2016: { start: '2016-06-21', end: '2016-08-02' }, fall2016: { start: '2016-09-20', end: '2016-11-02' }, + winter2017: { start: '2016-12-16', end: '2017-02-02' }, }; 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 1d3b2d0b3a..de842741ee 100644 --- a/website/common/script/content/gear/sets/special/index.js +++ b/website/common/script/content/gear/sets/special/index.js @@ -49,6 +49,9 @@ let armor = { notes: t('armorSpecialYetiNotes', { con: 9 }), con: 9, value: 90, + canBuy: () => { + return true; + }, }, ski: { event: EVENTS.winter, @@ -57,6 +60,9 @@ let armor = { notes: t('armorSpecialSkiNotes', { per: 15 }), per: 15, value: 90, + canBuy: () => { + return true; + }, }, candycane: { event: EVENTS.winter, @@ -65,6 +71,9 @@ let armor = { notes: t('armorSpecialCandycaneNotes', { int: 9 }), int: 9, value: 90, + canBuy: () => { + return true; + }, }, snowflake: { event: EVENTS.winter, @@ -73,6 +82,9 @@ let armor = { notes: t('armorSpecialSnowflakeNotes', { con: 15 }), con: 15, value: 90, + canBuy: () => { + return true; + }, }, birthday: { event: EVENTS.birthday, @@ -182,6 +194,9 @@ let armor = { notes: t('armorSpecialWinter2015RogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return true; + }, }, winter2015Warrior: { event: EVENTS.winter2015, @@ -190,6 +205,9 @@ let armor = { notes: t('armorSpecialWinter2015WarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return true; + }, }, winter2015Mage: { event: EVENTS.winter2015, @@ -198,6 +216,9 @@ let armor = { notes: t('armorSpecialWinter2015MageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return true; + }, }, winter2015Healer: { event: EVENTS.winter2015, @@ -206,6 +227,9 @@ let armor = { notes: t('armorSpecialWinter2015HealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return true; + }, }, birthday2015: { text: t('armorSpecialBirthday2015Text'), @@ -322,6 +346,9 @@ let armor = { notes: t('armorSpecialWinter2016RogueNotes', { per: 15 }), value: 90, per: 15, + canBuy: () => { + return true; + }, }, winter2016Warrior: { event: EVENTS.winter2016, @@ -330,6 +357,9 @@ let armor = { notes: t('armorSpecialWinter2016WarriorNotes', { con: 9 }), value: 90, con: 9, + canBuy: () => { + return true; + }, }, winter2016Mage: { event: EVENTS.winter2016, @@ -338,6 +368,9 @@ let armor = { notes: t('armorSpecialWinter2016MageNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return true; + }, }, winter2016Healer: { event: EVENTS.winter2016, @@ -346,6 +379,9 @@ let armor = { notes: t('armorSpecialWinter2016HealerNotes', { con: 15 }), value: 90, con: 15, + canBuy: () => { + return true; + }, }, birthday2016: { text: t('armorSpecialBirthday2016Text'), @@ -449,6 +485,38 @@ let armor = { value: 90, con: 15, }, + winter2017Rogue: { + event: EVENTS.winter2017, + specialClass: 'rogue', + text: t('armorSpecialWinter2017RogueText'), + notes: t('armorSpecialWinter2017RogueNotes', { per: 15 }), + value: 90, + per: 15, + }, + winter2017Warrior: { + event: EVENTS.winter2017, + specialClass: 'warrior', + text: t('armorSpecialWinter2017WarriorText'), + notes: t('armorSpecialWinter2017WarriorNotes', { con: 9 }), + value: 90, + con: 9, + }, + winter2017Mage: { + event: EVENTS.winter2017, + specialClass: 'wizard', + text: t('armorSpecialWinter2017MageText'), + notes: t('armorSpecialWinter2017MageNotes', { int: 9 }), + value: 90, + int: 9, + }, + winter2017Healer: { + event: EVENTS.winter2017, + specialClass: 'healer', + text: t('armorSpecialWinter2017HealerText'), + notes: t('armorSpecialWinter2017HealerNotes', { con: 15 }), + value: 90, + con: 15, + }, }; let back = { @@ -621,6 +689,9 @@ let head = { notes: t('headSpecialYetiNotes', { str: 9 }), str: 9, value: 60, + canBuy: () => { + return true; + }, }, ski: { event: EVENTS.winter, @@ -629,6 +700,9 @@ let head = { notes: t('headSpecialSkiNotes', { per: 9 }), per: 9, value: 60, + canBuy: () => { + return true; + }, }, candycane: { event: EVENTS.winter, @@ -637,6 +711,9 @@ let head = { notes: t('headSpecialCandycaneNotes', { per: 7 }), per: 7, value: 60, + canBuy: () => { + return true; + }, }, snowflake: { event: EVENTS.winter, @@ -645,6 +722,9 @@ let head = { notes: t('headSpecialSnowflakeNotes', { int: 7 }), int: 7, value: 60, + canBuy: () => { + return true; + }, }, springRogue: { event: EVENTS.spring, @@ -749,6 +829,9 @@ let head = { notes: t('headSpecialWinter2015RogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return true; + }, }, winter2015Warrior: { event: EVENTS.winter2015, @@ -757,6 +840,9 @@ let head = { notes: t('headSpecialWinter2015WarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return true; + }, }, winter2015Mage: { event: EVENTS.winter2015, @@ -765,6 +851,9 @@ let head = { notes: t('headSpecialWinter2015MageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return true; + }, }, winter2015Healer: { event: EVENTS.winter2015, @@ -773,6 +862,9 @@ let head = { notes: t('headSpecialWinter2015HealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return true; + }, }, nye2014: { text: t('headSpecialNye2014Text'), @@ -889,6 +981,9 @@ let head = { notes: t('headSpecialWinter2016RogueNotes', { per: 9 }), value: 60, per: 9, + canBuy: () => { + return true; + }, }, winter2016Warrior: { event: EVENTS.winter2016, @@ -897,6 +992,9 @@ let head = { notes: t('headSpecialWinter2016WarriorNotes', { str: 9 }), value: 60, str: 9, + canBuy: () => { + return true; + }, }, winter2016Mage: { event: EVENTS.winter2016, @@ -905,6 +1003,9 @@ let head = { notes: t('headSpecialWinter2016MageNotes', { per: 7 }), value: 60, per: 7, + canBuy: () => { + return true; + }, }, winter2016Healer: { event: EVENTS.winter2016, @@ -913,6 +1014,9 @@ let head = { notes: t('headSpecialWinter2016HealerNotes', { int: 7 }), value: 60, int: 7, + canBuy: () => { + return true; + }, }, nye2015: { text: t('headSpecialNye2015Text'), @@ -1016,6 +1120,38 @@ let head = { value: 60, int: 7, }, + winter2017Rogue: { + event: EVENTS.winter2017, + specialClass: 'rogue', + text: t('headSpecialWinter2017RogueText'), + notes: t('headSpecialWinter2017RogueNotes', { per: 9 }), + value: 60, + per: 9, + }, + winter2017Warrior: { + event: EVENTS.winter2017, + specialClass: 'warrior', + text: t('headSpecialWinter2017WarriorText'), + notes: t('headSpecialWinter2017WarriorNotes', { str: 9 }), + value: 60, + str: 9, + }, + winter2017Mage: { + event: EVENTS.winter2017, + specialClass: 'wizard', + text: t('headSpecialWinter2017MageText'), + notes: t('headSpecialWinter2017MageNotes', { per: 7 }), + value: 60, + per: 7, + }, + winter2017Healer: { + event: EVENTS.winter2017, + specialClass: 'healer', + text: t('headSpecialWinter2017HealerText'), + notes: t('headSpecialWinter2017HealerNotes', { int: 7 }), + value: 60, + int: 7, + }, }; let headAccessory = { @@ -1211,6 +1347,9 @@ let shield = { notes: t('shieldSpecialYetiNotes', { con: 7 }), con: 7, value: 70, + canBuy: () => { + return true; + }, }, ski: { event: EVENTS.winter, @@ -1219,6 +1358,9 @@ let shield = { notes: t('weaponSpecialSkiNotes', { str: 8 }), str: 8, value: 90, + canBuy: () => { + return true; + }, }, snowflake: { event: EVENTS.winter, @@ -1227,6 +1369,9 @@ let shield = { notes: t('shieldSpecialSnowflakeNotes', { con: 9 }), con: 9, value: 70, + canBuy: () => { + return true; + }, }, springRogue: { event: EVENTS.spring, @@ -1307,6 +1452,9 @@ let shield = { notes: t('shieldSpecialWinter2015RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return true; + }, }, winter2015Warrior: { event: EVENTS.winter2015, @@ -1315,6 +1463,9 @@ let shield = { notes: t('shieldSpecialWinter2015WarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return true; + }, }, winter2015Healer: { event: EVENTS.winter2015, @@ -1323,6 +1474,9 @@ let shield = { notes: t('shieldSpecialWinter2015HealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return true; + }, }, spring2015Rogue: { event: EVENTS.spring2015, @@ -1403,6 +1557,9 @@ let shield = { notes: t('shieldSpecialWinter2016RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return true; + }, }, winter2016Warrior: { event: EVENTS.winter2016, @@ -1411,6 +1568,9 @@ let shield = { notes: t('shieldSpecialWinter2016WarriorNotes', { con: 7 }), value: 70, con: 7, + canBuy: () => { + return true; + }, }, winter2016Healer: { event: EVENTS.winter2016, @@ -1419,6 +1579,9 @@ let shield = { notes: t('shieldSpecialWinter2016HealerNotes', { con: 9 }), value: 70, con: 9, + canBuy: () => { + return true; + }, }, spring2016Rogue: { event: EVENTS.spring2016, @@ -1492,6 +1655,30 @@ let shield = { value: 70, con: 9, }, + winter2017Rogue: { + event: EVENTS.winter2017, + specialClass: 'rogue', + text: t('shieldSpecialWinter2017RogueText'), + notes: t('shieldSpecialWinter2017RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + winter2017Warrior: { + event: EVENTS.winter2017, + specialClass: 'warrior', + text: t('shieldSpecialWinter2017WarriorText'), + notes: t('shieldSpecialWinter2017WarriorNotes', { con: 7 }), + value: 70, + con: 7, + }, + winter2017Healer: { + event: EVENTS.winter2017, + specialClass: 'healer', + text: t('shieldSpecialWinter2017HealerText'), + notes: t('shieldSpecialWinter2017HealerNotes', { con: 9 }), + value: 70, + con: 9, + }, }; let weapon = { @@ -1542,6 +1729,9 @@ let weapon = { notes: t('weaponSpecialYetiNotes', { str: 15 }), str: 15, value: 90, + canBuy: () => { + return true; + }, }, ski: { event: EVENTS.winter, @@ -1550,6 +1740,9 @@ let weapon = { notes: t('weaponSpecialSkiNotes', { str: 8 }), str: 8, value: 90, + canBuy: () => { + return true; + }, }, candycane: { event: EVENTS.winter, @@ -1560,6 +1753,9 @@ let weapon = { int: 15, per: 7, value: 160, + canBuy: () => { + return true; + }, }, snowflake: { event: EVENTS.winter, @@ -1568,6 +1764,9 @@ let weapon = { notes: t('weaponSpecialSnowflakeNotes', { int: 9 }), int: 9, value: 90, + canBuy: () => { + return true; + }, }, springRogue: { event: EVENTS.spring, @@ -1678,6 +1877,9 @@ let weapon = { notes: t('weaponSpecialWinter2015RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return true; + }, }, winter2015Warrior: { event: EVENTS.winter2015, @@ -1686,6 +1888,9 @@ let weapon = { notes: t('weaponSpecialWinter2015WarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return true; + }, }, winter2015Mage: { event: EVENTS.winter2015, @@ -1696,6 +1901,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return true; + }, }, winter2015Healer: { event: EVENTS.winter2015, @@ -1704,6 +1912,9 @@ let weapon = { notes: t('weaponSpecialWinter2015HealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return true; + }, }, spring2015Rogue: { event: EVENTS.spring2015, @@ -1814,6 +2025,9 @@ let weapon = { notes: t('weaponSpecialWinter2016RogueNotes', { str: 8 }), value: 80, str: 8, + canBuy: () => { + return true; + }, }, winter2016Warrior: { event: EVENTS.winter2016, @@ -1822,6 +2036,9 @@ let weapon = { notes: t('weaponSpecialWinter2016WarriorNotes', { str: 15 }), value: 90, str: 15, + canBuy: () => { + return true; + }, }, winter2016Mage: { event: EVENTS.winter2016, @@ -1832,6 +2049,9 @@ let weapon = { value: 160, int: 15, per: 7, + canBuy: () => { + return true; + }, }, winter2016Healer: { event: EVENTS.winter2016, @@ -1840,6 +2060,9 @@ let weapon = { notes: t('weaponSpecialWinter2016HealerNotes', { int: 9 }), value: 90, int: 9, + canBuy: () => { + return true; + }, }, spring2016Rogue: { event: EVENTS.spring2016, @@ -1943,6 +2166,40 @@ let weapon = { value: 90, int: 9, }, + winter2017Rogue: { + event: EVENTS.winter2017, + specialClass: 'rogue', + text: t('weaponSpecialWinter2017RogueText'), + notes: t('weaponSpecialWinter2017RogueNotes', { str: 8 }), + value: 80, + str: 8, + }, + winter2017Warrior: { + event: EVENTS.winter2017, + specialClass: 'warrior', + text: t('weaponSpecialWinter2017WarriorText'), + notes: t('weaponSpecialWinter2017WarriorNotes', { str: 15 }), + value: 90, + str: 15, + }, + winter2017Mage: { + event: EVENTS.winter2017, + specialClass: 'wizard', + twoHanded: true, + text: t('weaponSpecialWinter2017MageText'), + notes: t('weaponSpecialWinter2017MageNotes', { int: 15, per: 7 }), + value: 170, + int: 15, + per: 7, + }, + winter2017Healer: { + event: EVENTS.winter2017, + specialClass: 'healer', + text: t('weaponSpecialWinter2017HealerText'), + notes: t('weaponSpecialWinter2017HealerNotes', { int: 9 }), + value: 90, + int: 9, + }, }; let specialSet = { @@ -1957,3 +2214,4 @@ let specialSet = { }; module.exports = specialSet; + diff --git a/website/common/script/libs/shops.js b/website/common/script/libs/shops.js index 524e929bad..7c13eff9cf 100644 --- a/website/common/script/libs/shops.js +++ b/website/common/script/libs/shops.js @@ -218,6 +218,18 @@ shops.getTimeTravelersCategories = function getTimeTravelersCategories (user, la // }; shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, language) { const AVAILABLE_SETS = { + yeti: i18n.t('yetiSet', language), + ski: i18n.t('skiSet', language), + candycane: i18n.t('candycaneSet', language), + snowflake: i18n.t('snowflakeSet', language), + winter2015Healer: i18n.t('soothingSkaterSet', language), + winter2015Mage: i18n.t('northMageSet', language), + winter2015Rogue: i18n.t('icicleDrakeSet', language), + winter2015Warrior: i18n.t('gingerbreadSet', language), + winter2016Healer: i18n.t('festiveFairySet', language), + winter2016Mage: i18n.t('snowboardingSet', language), + winter2016Rogue: i18n.t('cocoaSet', language), + winter2016Warrior: i18n.t('snowDaySet', language), }; const AVAILABLE_SPELLS = [ diff --git a/website/server/controllers/api-v3/shops.js b/website/server/controllers/api-v3/shops.js index 4eded39970..47e2888205 100644 --- a/website/server/controllers/api-v3/shops.js +++ b/website/server/controllers/api-v3/shops.js @@ -107,8 +107,8 @@ api.getSeasonalShopItems = { let resObject = { identifier: 'seasonalShop', text: res.t('seasonalShop'), - notes: res.t('seasonalShopClosedText'), - imageName: 'seasonalshop_closed', + notes: res.t('seasonalShopWinterText'), + imageName: 'seasonalshop_open', categories: shops.getSeasonalShopCategories(user, req.language), }; diff --git a/website/views/options/inventory/seasonal-shop.jade b/website/views/options/inventory/seasonal-shop.jade index 4d12fd3294..f69a0fe1f0 100644 --- a/website/views/options/inventory/seasonal-shop.jade +++ b/website/views/options/inventory/seasonal-shop.jade @@ -1,12 +1,12 @@ .container-fluid .stable.row: .col-xs-12 - div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_closed'}").pull-left-sm.col-centered + div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_open'}").pull-left-sm.col-centered .popover.static-popover.fade.right.in.pull-left-sm.col-centered .arrow.hidden-xs h3.popover-title!=env.t('seasonalShopTitle', {linkStart:"", linkEnd: ""}) .popover-content - p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText') - p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText') + p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopWinterText') + p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopWinterText') li.customize-menu.inventory-gear menu.pets-menu(label='{{category.text}}', ng-repeat='category in seasonalShopCategories') diff --git a/website/views/shared/modals/classes.jade b/website/views/shared/modals/classes.jade index 754d6f31f0..005e87420d 100644 --- a/website/views/shared/modals/classes.jade +++ b/website/views/shared/modals/classes.jade @@ -9,57 +9,57 @@ script(type='text/ng-template', id='modals/chooseClass.html') figure.herobox(ng-class='{"selected-class": selectedClass=="warrior"}') .character-sprites span(class='skin_{{user.preferences.skin}}') - span(class='{{user.preferences.size}}_armor_warrior_5') + span(class='{{user.preferences.size}}_armor_special_winter2017Warrior') span(class='head_0') span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}') span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}') span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}') span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}') - span(class='head_warrior_5') - span(class='shield_warrior_5') - span(class='weapon_warrior_6') + span(class='head_special_winter2017Warrior') + span(class='shield_special_winter2017Warrior') + span(class='weapon_special_winter2017Warrior') .col-md-3(ng-click='selectedClass = "wizard"') h5!=env.t('mageWiki') figure.herobox(ng-class='{"selected-class": selectedClass=="wizard"}') .character-sprites span(class='skin_{{user.preferences.skin}}') - span(class='{{user.preferences.size}}_armor_wizard_5') + span(class='{{user.preferences.size}}_armor_special_winter2017Mage') span(class='head_0') span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}') span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}') span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}') span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}') - span(class='head_wizard_5') - span(class='shield_wizard_5') - span(class='weapon_wizard_6') + span(class='head_special_winter2017Mage') + span(class='shield_special_winter2017Mage') + span(class='weapon_special_winter2017Mage') .col-md-3(ng-click='selectedClass = "rogue"') h5!=env.t('rogueWiki') figure.herobox(ng-class='{"selected-class": selectedClass=="rogue"}') .character-sprites span(class='skin_{{user.preferences.skin}}') - span(class='{{user.preferences.size}}_armor_rogue_5') + span(class='{{user.preferences.size}}_armor_special_winter2017Rogue') span(class='head_0') span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}') span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}') span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}') span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}') - span(class='head_rogue_5') - span(class='shield_rogue_6') - span(class='weapon_rogue_6') + span(class='head_special_winter2017Rogue') + span(class='shield_special_winter2017Rogue') + span(class='weapon_special_winter2017Rogue') .col-md-3(ng-click='selectedClass = "healer"') h5!=env.t('healerWiki') figure.herobox(ng-class='{"selected-class": selectedClass=="healer"}') .character-sprites span(class='skin_{{user.preferences.skin}}') - span(class='{{user.preferences.size}}_armor_healer_5') + span(class='{{user.preferences.size}}_armor_special_winter2017Healer') span(class='head_0') span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}') span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}') span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}') span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}') - span(class='head_healer_5') - span(class='shield_healer_5') - span(class='weapon_healer_6') + span(class='head_special_winter2017Healer') + span(class='shield_special_winter2017Healer') + span(class='weapon_special_winter2017Healer') br .well(ng-show='selectedClass=="warrior"')=env.t('warriorText') .well(ng-show='selectedClass=="wizard"')=env.t('mageText') diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index 619d25c94e..e3ad2170bc 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -1,30 +1,53 @@ -h2 12/15/2016 - MOBILE APP UPDATES AND HOLIDAY HATCHING POTIONS! - .promo_holly_potions.pull-right +h2 12/16/2016 - WINTER WONDERLAND BEGINS: WINTER CLASS OUTFITS, SEASONAL SHOP, AND NPC DECORATIONS! hr tr td - h3 Mobile App Updates: Use Gems for Social Good - p We've released a new iOS update and a new Android update with a super exciting feature. - br - p We’ve partnered with Seeds, an organization that sends micro-loans to entrepreneurs in developing countries. Now when you buy the 84-gem pack, a portion of the proceeds will go directly to small business owners in developing countries to help improve their lives! You can learn more about how it works by tapping the gem icon in your app. - br - p We've also introduced bug fixes on iOS, and on Android we now also have sound effects and a To-Do widget! - br - p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the updates. - p.small.muted by viirus, negue, AlbRoehm, d954mas, anitawoodruff, caipivara, and the Seeds team + h3 Winter Wonderland Begins! + .promo_winter_classes_2017.center-block + p A wintery breeze is blowing in from the Stoïkalm Steppes, and the snow is gently drifting down over Habit City. The Winter Wonderland event has begun! tr td - h3 Holly and Peppermint Hatching Potions - p Need something to spend those newly-purchased gems on? Between now and January 31st, you can buy Holly and Peppermint Hatching Potions from the Market and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.) - br - p After they're gone, it will be at least a year before the Holly and Peppermint Hatching Potions are available again, so be sure to get them now! - p.small.muted by Vampitch, Lemoness, and SabreCat + h3 Winter Class Outfits + p From now until January 31st, limited edition outfits are available in the Rewards column. Depending on your class, you can be an Ice Hockey Warrior, Winter Wolf Mage, Frosty Rogue, or Sugar Plum Healer! You'd better get productive to earn enough gold before they disappear. Good luck! + p.small.muted by Stefalupagus, Beffymaroo, and yayannabelle + tr + td + .seasonalshop_open.pull-right + h3 Seasonal Shop is Open! + p The Seasonal Shop has opened! The Seasonal Sorceress is stocking the seasonal edition versions of previous winter outfits, now available for gems instead of gold, and the two winter quests, Trapper Santa and Find the Cub. Plus, there will be more fun things in the shop as the event progresses. The Seasonal Shop will only be open until January 31st, so don't wait! + p.small.muted by SabreCat and Lemoness + tr + td + .npc_daniel.pull-left.slight-right-margin + h3 NPC Costumes + p Looks like the NPCs are really getting in to the cheery winter mood around the site. Who wouldn't? After all, there's plenty more celebration to come.... + p.small.muted by Lemoness if menuItem !== 'oldNews' hr a(href='/static/old-news', target='_blank') Read older news mixin oldNews + h2 12/15/2016 - MOBILE APP UPDATES AND HOLIDAY HATCHING POTIONS! + .promo_holly_potions.pull-right + tr + td + h3 Mobile App Updates: Use Gems for Social Good + p We've released a new iOS update and a new Android update with a super exciting feature. + br + p We’ve partnered with Seeds, an organization that sends micro-loans to entrepreneurs in developing countries. Now when you buy the 84-gem pack, a portion of the proceeds will go directly to small business owners in developing countries to help improve their lives! You can learn more about how it works by tapping the gem icon in your app. + br + p We've also introduced bug fixes on iOS, and on Android we now also have sound effects and a To-Do widget! + br + p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the updates. + p.small.muted by viirus, negue, AlbRoehm, d954mas, anitawoodruff, caipivara, and the Seeds team + tr + td + h3 Holly and Peppermint Hatching Potions + p Need something to spend those newly-purchased gems on? Between now and January 31st, you can buy Holly and Peppermint Hatching Potions from the Market and use them to hatch any standard pet egg. (Magic Hatching Potions do not work on Quest Pet eggs.) + br + p After they're gone, it will be at least a year before the Holly and Peppermint Hatching Potions are available again, so be sure to get them now! + p.small.muted by Vampitch, Lemoness, and SabreCat h2 12/12/2016 - LAST CHANCE FOR HABITICA T-SHIRTS AND MUGS; STAFF SPOTLIGHT tr td