diff --git a/migrations/mysteryitems.js b/migrations/mysteryitems.js
index 47437570ef..392fb05262 100644
--- a/migrations/mysteryitems.js
+++ b/migrations/mysteryitems.js
@@ -2,7 +2,7 @@ var _id = '';
var update = {
$push: {
'purchased.plan.mysteryItems':{
- $each:['head_mystery_201412','armor_mystery_201412']
+ $each:['head_mystery_201501','armor_mystery_201501']
}
}
};
diff --git a/public/audio/danielTheBard/Death.mp3 b/public/audio/danielTheBard/Death.mp3
new file mode 100644
index 0000000000..cda07e9076
Binary files /dev/null and b/public/audio/danielTheBard/Death.mp3 differ
diff --git a/public/audio/danielTheBard/Death.ogg b/public/audio/danielTheBard/Death.ogg
new file mode 100644
index 0000000000..9c0711cbfd
Binary files /dev/null and b/public/audio/danielTheBard/Death.ogg differ
diff --git a/public/audio/wattsTheme/Achievement_Unlocked.mp3 b/public/audio/wattsTheme/Achievement_Unlocked.mp3
new file mode 100755
index 0000000000..f21b4dd9ab
Binary files /dev/null and b/public/audio/wattsTheme/Achievement_Unlocked.mp3 differ
diff --git a/public/audio/wattsTheme/Achievement_Unlocked.ogg b/public/audio/wattsTheme/Achievement_Unlocked.ogg
new file mode 100755
index 0000000000..5fb69d90fa
Binary files /dev/null and b/public/audio/wattsTheme/Achievement_Unlocked.ogg differ
diff --git a/public/audio/wattsTheme/Chat.mp3 b/public/audio/wattsTheme/Chat.mp3
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/public/audio/wattsTheme/Chat.ogg b/public/audio/wattsTheme/Chat.ogg
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/public/audio/wattsTheme/Daily.mp3 b/public/audio/wattsTheme/Daily.mp3
new file mode 100755
index 0000000000..8ad2ccf91b
Binary files /dev/null and b/public/audio/wattsTheme/Daily.mp3 differ
diff --git a/public/audio/wattsTheme/Daily.ogg b/public/audio/wattsTheme/Daily.ogg
new file mode 100755
index 0000000000..55cbdd1ab7
Binary files /dev/null and b/public/audio/wattsTheme/Daily.ogg differ
diff --git a/public/audio/wattsTheme/Death.mp3 b/public/audio/wattsTheme/Death.mp3
new file mode 100755
index 0000000000..f540666a76
Binary files /dev/null and b/public/audio/wattsTheme/Death.mp3 differ
diff --git a/public/audio/wattsTheme/Death.ogg b/public/audio/wattsTheme/Death.ogg
new file mode 100755
index 0000000000..a2db1834fb
Binary files /dev/null and b/public/audio/wattsTheme/Death.ogg differ
diff --git a/public/audio/wattsTheme/Item_Drop.mp3 b/public/audio/wattsTheme/Item_Drop.mp3
new file mode 100755
index 0000000000..2d5b879fc7
Binary files /dev/null and b/public/audio/wattsTheme/Item_Drop.mp3 differ
diff --git a/public/audio/wattsTheme/Item_Drop.ogg b/public/audio/wattsTheme/Item_Drop.ogg
new file mode 100755
index 0000000000..9a69aea16d
Binary files /dev/null and b/public/audio/wattsTheme/Item_Drop.ogg differ
diff --git a/public/audio/wattsTheme/Level_Up.mp3 b/public/audio/wattsTheme/Level_Up.mp3
new file mode 100755
index 0000000000..7e4be04d88
Binary files /dev/null and b/public/audio/wattsTheme/Level_Up.mp3 differ
diff --git a/public/audio/wattsTheme/Level_Up.ogg b/public/audio/wattsTheme/Level_Up.ogg
new file mode 100755
index 0000000000..da782f56f7
Binary files /dev/null and b/public/audio/wattsTheme/Level_Up.ogg differ
diff --git a/public/audio/wattsTheme/Minus_Habit.mp3 b/public/audio/wattsTheme/Minus_Habit.mp3
new file mode 100755
index 0000000000..71cf23cd53
Binary files /dev/null and b/public/audio/wattsTheme/Minus_Habit.mp3 differ
diff --git a/public/audio/wattsTheme/Minus_Habit.ogg b/public/audio/wattsTheme/Minus_Habit.ogg
new file mode 100755
index 0000000000..981dc429e6
Binary files /dev/null and b/public/audio/wattsTheme/Minus_Habit.ogg differ
diff --git a/public/audio/wattsTheme/Plus_Habit.mp3 b/public/audio/wattsTheme/Plus_Habit.mp3
new file mode 100755
index 0000000000..54f132127d
Binary files /dev/null and b/public/audio/wattsTheme/Plus_Habit.mp3 differ
diff --git a/public/audio/wattsTheme/Plus_Habit.ogg b/public/audio/wattsTheme/Plus_Habit.ogg
new file mode 100755
index 0000000000..3436395de8
Binary files /dev/null and b/public/audio/wattsTheme/Plus_Habit.ogg differ
diff --git a/public/audio/wattsTheme/Reward.mp3 b/public/audio/wattsTheme/Reward.mp3
new file mode 100755
index 0000000000..d90efdd83c
Binary files /dev/null and b/public/audio/wattsTheme/Reward.mp3 differ
diff --git a/public/audio/wattsTheme/Reward.ogg b/public/audio/wattsTheme/Reward.ogg
new file mode 100755
index 0000000000..1fce2f529c
Binary files /dev/null and b/public/audio/wattsTheme/Reward.ogg differ
diff --git a/public/audio/wattsTheme/ToDo.mp3 b/public/audio/wattsTheme/ToDo.mp3
new file mode 100755
index 0000000000..9c85f09e26
Binary files /dev/null and b/public/audio/wattsTheme/ToDo.mp3 differ
diff --git a/public/audio/wattsTheme/ToDo.ogg b/public/audio/wattsTheme/ToDo.ogg
new file mode 100755
index 0000000000..9dbf533418
Binary files /dev/null and b/public/audio/wattsTheme/ToDo.ogg differ
diff --git a/public/js/controllers/notificationCtrl.js b/public/js/controllers/notificationCtrl.js
index dae22b9d0f..6c30b511c2 100644
--- a/public/js/controllers/notificationCtrl.js
+++ b/public/js/controllers/notificationCtrl.js
@@ -6,6 +6,7 @@ habitrpg.controller('NotificationCtrl',
$rootScope.$watch('user.stats.hp', function (after, before) {
if (after <= 0){
+ $rootScope.playSound('Death');
$rootScope.openModal('death', {keyboard:false, backdrop:'static'});
}
if (after == before) return;
diff --git a/src/models/user.js b/src/models/user.js
index c47e1a9db6..a16f0936cf 100644
--- a/src/models/user.js
+++ b/src/models/user.js
@@ -281,7 +281,7 @@ var UserSchema = new Schema({
skin: {type:String, 'default':'915533'},
shirt: {type: String, 'default': 'blue'},
timezoneOffset: Number,
- sound: {type:String, 'default':'off', enum: ['off','danielTheBard']},
+ sound: {type:String, 'default':'off', enum: ['off','danielTheBard', 'wattsTheme']},
language: String,
automaticAllocation: Boolean,
allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'},
diff --git a/views/options/inventory/inventory.jade b/views/options/inventory/inventory.jade
index 50ca1259d8..39bed5cc49 100644
--- a/views/options/inventory/inventory.jade
+++ b/views/options/inventory/inventory.jade
@@ -32,14 +32,18 @@ script(type='text/ng-template', id='partials/options.inventory.seasonalshop.html
p!=env.t('seasonalShopText')
li.customize-menu.inventory-gear
menu.pets-menu(label='{{::label}}', ng-repeat='(set,label) in ::{candycane:env.t("candycaneSet"), ski:env.t("skiSet"), snowflake:env.t("snowflakeSet"), yeti:env.t("yetiSet")}')
- div(ng-repeat='item in ::getSeasonalShopArray(set)' ng-class="{transparent: user.items.gear.owned[item.key]}")
+ // The `if true || false` conditional for applying the transparent class is necessary because
+ // when a user activates the orb of rebirth, the seasonal items are still in their inventory, but
+ // they have each have a value of false. The item can be purchased for gold in the rewards column,
+ // not the seasonal shop. This makes that more clear.
+ div(ng-repeat='item in ::getSeasonalShopArray(set)' ng-class="{transparent: user.items.gear.owned[item.key] === true ||user.items.gear.owned[item.key] === false}")
button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='purchase(item.type,item)', class='shop_{{::item.key}}')
.text-center
| {{((item.specialClass == "wizard") && (item.type == "weapon")) + 1}}
span.Pet_Currency_Gem1x.inline-gems
menu.pets-menu(label=env.t('quests'))
div(ng-repeat='quest in ::getSeasonalShopQuests()')
- button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='buyQuest(quest.key)', class='inventory_quest_scroll', ng-class='::{locked: quest.previous && !user.achievements.quests[quest.previous]}')
+ button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"')
p
| {{::quest.value}}
span.Pet_Currency_Gem1x.inline-gems
@@ -114,7 +118,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html')
p.muted(ng-show='questCount < 1')=env.t('noScrolls')
p.muted!=env.t('scrollsText1') + ' ' + env.t('scrollsText2') + ''
div(ng-repeat='(quest_key,points) in ownedItems(user.items.quests)', ng-init='quest = Content.quests[quest_key]')
- button.customize-option(popover="{{:: quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='showQuest(quest_key)', class='inventory_quest_scroll', ng-class='::{locked: quest.previous && !user.achievements.quests[quest.previous]}')
+ button.customize-option(popover="{{:: quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='showQuest(quest_key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"')
.badge.badge-info.stack-count {{points}}
li.customize-menu
@@ -209,7 +213,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html')
menu.pets-menu(label=env.t('quests'))
p.muted!=env.t('scrollsText1') + ' ' + env.t('scrollsText2') + ''
div(ng-repeat='quest in Content.quests', ng-if='quest.canBuy')
- button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='top', ng-click='buyQuest(quest.key)', class='inventory_quest_scroll', ng-class='::{locked: quest.previous && !user.achievements.quests[quest.previous]}')
+ button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='top', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"')
p
| {{::quest.value}}
span.Pet_Currency_Gem1x.inline-gems
diff --git a/views/shared/header/menu.jade b/views/shared/header/menu.jade
index 467fbeeab7..549af9c4e5 100644
--- a/views/shared/header/menu.jade
+++ b/views/shared/header/menu.jade
@@ -215,7 +215,7 @@ nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}')
div
ul.toolbar-submenu(ng-click='expandMenu(null)')
// Using [{k,v}] instead of {k:v,k:v} to maintain order ('off' at top)
- for theme in ['off','danielTheBard']
+ for theme in ['off','danielTheBard', 'wattsTheme']
li
a(ng-class="{'bg-primary':user.preferences.sound=='#{theme}'}", ng-click="set({'preferences.sound':'#{theme}'})")=env.t('audioTheme_'+theme)
diff --git a/views/shared/new-stuff.jade b/views/shared/new-stuff.jade
index 2d26c740aa..727135e69d 100644
--- a/views/shared/new-stuff.jade
+++ b/views/shared/new-stuff.jade
@@ -1,22 +1,44 @@
-h5 VICTORY!
+h5 1/26/2015 - SUBSCRIBER OUTFIT REVEALED, NEW AUDIO THEME, QUEST SCROLL REDESIGN, AND SPREAD THE WORD CHALLENGE REMINDER
hr
tr
td
- h5 The Abominable Stressbeast is DEFEATED!
- p We've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!
+ h5 Subscriber Outfit Revealed
+ .promo_mystery_201501.pull-right
+ p The January Subscriber Item has been revealed: the Starry Knight Item Set! All January subscribers will receive the Starry Helm and the Starry Armor. You still have five days to subscribe and receive the item set! Thank you so much for your support - we really do rely on you to keep HabitRPG free to use and running smoothly.
+ p.small.muted by Lemoness
tr
td
- h5 Stoïkalm is Saved!
- p SabreCat speaks gently to a small sabertooth. "Please find the citizens of the Stoïkalm Steppes and bring them to us," he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognize the head rider as Lady Glaciate, the leader of Stoïkalm.
- p "Mighty Habiticans," she says, "My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals." Her sad gaze follows the falling snow. "We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you."
- .Pet-Mammoth-Base.pull-right
- p She turns to where @Baconsaur is snuggling with some of the baby mammoths. "We have brought your animals an offering of food to apologize for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them."
- p.small.muted by everyone who completed a Daily or a To-Do during the battle!
+ h5 New Audio Theme
+ p A new audio theme is available: Watts' Theme! You can toggle between Watts' Theme and Daniel the Bard's Theme by selecting the megaphone in the upper right-hand corner. Watts' Theme was created by Harry Pepe. You can visit his LinkedIn page here.
+ p.small.muted by Hpepe4 and Blade
+ tr
+ td
+ h5 Quest Scroll Redesign
+ p We've redesigned the quest scrolls so that they are visually unique! Quest type and difficulty is determined by the scroll lining (Easy Boss = Green, Medium Boss = Yellow, Hard Boss = Red, Collection Quest = Blue, Rage Bar Boss = Purple speckles), and an icon symbolizing the quest is located in the lower left.
+ p.small.muted by UncommonCriminal and Rattify
+ tr
+ td
+ h5 Spread the Word Challenge Ending Soon
+ p Reminder: January 31st is the last day to enter the Spread the Word Challenge for your chance at winning 100 gems! We will stop accepting new applications on February 1st, but it will be some time before the winners are announced because we have to go over all the entries ourselves. Good luck!
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
+ h5 1/23/2015
+ hr
+ tr
+ td
+ h5 The Abominable Stressbeast is DEFEATED!
+ p We've done it! With a final bellow, the Abominable Stressbeast dissipates into a cloud of snow. The flakes twinkle down through the air as cheering Habiticans embrace their pets and mounts. Our animals and our NPCs are safe once more!
+ tr
+ td
+ h5 Stoïkalm is Saved!
+ p SabreCat speaks gently to a small sabertooth. "Please find the citizens of the Stoïkalm Steppes and bring them to us," he says. Several hours later, the sabertooth returns, with a herd of mammoth riders following slowly behind. You recognize the head rider as Lady Glaciate, the leader of Stoïkalm.
+ p "Mighty Habiticans," she says, "My citizens and I owe you the deepest thanks, and the deepest apologies. In an effort to protect our Steppes from turmoil, we began to secretly banish all of our stress into the icy mountains. We had no idea that it would build up over generations into the Stressbeast that you saw! When it broke loose, it trapped all of us in the mountains in its stead and went on a rampage against our beloved animals." Her sad gaze follows the falling snow. "We put everyone at risk with our foolishness. Rest assured that in the future, we will come to you with our problems before our problems come to you."
+ .Pet-Mammoth-Base.pull-right
+ p She turns to where @Baconsaur is snuggling with some of the baby mammoths. "We have brought your animals an offering of food to apologize for frightening them, and as a symbol of trust, we will leave some of our pets and mounts with you. We know that you will all take care good care of them."
+ p.small.muted by everyone who completed a Daily or a To-Do during the battle!
h5 1/21/2015
tr
td