feat(seasonal): Shiny Seed

This commit is contained in:
Sabe Jones 2015-04-01 22:36:07 -05:00
parent 507c1dd69a
commit b6a4d65d8c
22 changed files with 126 additions and 41 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -6,6 +6,8 @@
"annoyingFriendsText": "Got snowballed <%= snowballs %> times by party members.",
"alarmingFriends": "Alarming Friends",
"alarmingFriendsText": "Got spooked <%= spookDust %> times by party members.",
"agriculturalFriends": "Agricultural Friends",
"agriculturalFriendsText": "Got transformed into a flower <%= flowers %> times by party members.",
"valentineCard": "Valentine's Day Card",
"valentineCardNotes": "Send a Valentine's Day card to a party member.",
"valentine0": "\"Roses are red<%= lineBreak %>My Dailies are blue<%= lineBreak %>I'm happy that I'm<%= lineBreak %>In a Party with you!\"",

View file

@ -53,8 +53,13 @@
"spellSpecialSaltNotes": "Someone has snowballed you. Ha ha, very funny. Now get this snow off me!",
"spellSpecialSpookDustText": "Spooky Sparkles",
"spellSpecialSpookDustNotes": "Turn your friends into a floating blanket with eyes!",
"spellSpecialSpookDustNotes": "Turn a friend into a floating blanket with eyes!",
"spellSpecialOpaquePotionText": "Opaque Potion",
"spellSpecialOpaquePotionNotes": "Cancel the effects of Spooky Sparkles."
"spellSpecialOpaquePotionNotes": "Cancel the effects of Spooky Sparkles.",
"spellSpecialFlowerText": "Shiny Seed",
"spellSpecialFlowerNotes": "Turn a friend into a joyous flower!",
"spellSpecialPetalFreePotionText": "Petal-Free Potion",
"spellSpecialPetalFreePotionNotes": "Cancel the effects of a Shiny Seed."
}

View file

@ -693,6 +693,8 @@ api.spells =
notes: t('spellSpecialSnowballAuraNotes')
cast: (user, target) ->
target.stats.buffs.snowball = true
target.stats.buffs.spookDust = false
target.stats.buffs.flower = false
target.achievements.snowball ?= 0
target.achievements.snowball++
user.items.special.snowball--
@ -715,7 +717,9 @@ api.spells =
target: 'user'
notes: t('spellSpecialSpookDustNotes')
cast: (user, target) ->
target.stats.buffs.snowball = false
target.stats.buffs.spookDust = true
target.stats.buffs.flower = false
target.achievements.spookDust ?= 0
target.achievements.spookDust++
user.items.special.spookDust--
@ -731,6 +735,31 @@ api.spells =
user.stats.buffs.spookDust = false
user.stats.gp -= 5
flower:
text: t('spellSpecialFlowerText')
mana: 0
value: 15
target: 'user'
notes: t('spellSpecialFlowerNotes')
cast: (user, target) ->
target.stats.buffs.snowball = false
target.stats.buffs.spookDust = false
target.stats.buffs.flower = true
target.achievements.flower ?= 0
target.achievements.flower++
user.items.special.flower--
petalFreePotion:
text: t('spellSpecialPetalFreePotionText')
mana: 0
value: 5
immediateUse: true
target: 'self'
notes: t('spellSpecialPetalFreePotionNotes')
cast: (user, target) ->
user.stats.buffs.flower = false
user.stats.gp -= 5
nye:
text: t('nyeCard')
mana: 0

View file

@ -44,6 +44,7 @@ var UserSchema = new Schema({
veteran: Boolean,
snowball: Number,
spookDust: Number,
flower: Number,
streak: Number,
challenges: Array,
quests: Schema.Types.Mixed,
@ -191,6 +192,7 @@ var UserSchema = new Schema({
special:{
snowball: {type: Number, 'default': 0},
spookDust: {type: Number, 'default': 0},
flower: {type: Number, 'default': 0},
valentine: Number,
valentineReceived: Array, // array of strings, by sender name
nye: Number,
@ -356,7 +358,8 @@ var UserSchema = new Schema({
stealth: {type: Number, 'default': 0},
streaks: {type: Boolean, 'default': false},
snowball: {type: Boolean, 'default': false},
spookDust: {type: Boolean, 'default': false}
spookDust: {type: Boolean, 'default': false},
flower: {type: Boolean, 'default': false}
},
training: {
int: {type: Number, 'default': 0},

View file

@ -53,13 +53,18 @@ script(type='text/ng-template', id='partials/options.inventory.seasonalshop.html
p
| {{::quest.value}}&nbsp;
span.Pet_Currency_Gem1x.inline-gems
// menu.pets-menu(label=env.t('seasonalItems'))
menu.pets-menu(label=env.t('seasonalItems'))
div
button.customize-option(popover='{{::Content.spells.special.flower.notes()}}', popover-title='{{::Content.spells.special.flower.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase("special", Content.spells.special.flower)', class='inventory_special_flower')
p
| {{::Content.spells.special.flower.value}}
span(class='shop_gold')
// div
button.customize-option(popover='{{::Content.spells.special.snowball.notes()}}', popover-title='{{::Content.spells.special.snowball.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase("special", Content.spells.special.snowball)', class='inventory_special_snowball')
p
| {{::Content.spells.special.snowball.value}}
span(class='shop_gold')
div
// div
button.customize-option(popover='{{::Content.spells.special.nye.notes()}}', popover-title='{{::Content.spells.special.nye.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='castStart(Content.spells.special.nye)', class='inventory_special_nye')
p
| {{Content.spells.special.nye.value}}
@ -143,6 +148,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html')
.badge.badge-info.stack-count {{user.items.special.#{k}}}
+specialItem('snowball')
+specialItem('spookDust')
+specialItem('flower')
div(ng-if='user.items.special.valentineReceived[0]')
button.customize-option(popover="Valentine's Day Card from {{User.user.items.special.valentineReceived[0]}}", popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='openModal("valentine")', class='inventory_special_valentine')

View file

@ -17,60 +17,62 @@ mixin avatar(opts)
span.snowman
span(ng-if='profile.stats.buffs.spookDust')
span.spookman
span(ng-if='!profile.stats.buffs.snowball && !profile.stats.buffs.spookDust')
span(ng-if='profile.stats.buffs.flower')
span(class='avatar_flower_{{profile.stats.class}}')
span(ng-if='!profile.stats.buffs.snowball && !profile.stats.buffs.spookDust && !profile.stats.buffs.flower')
// Back Accessory
span(class='{{profile.items.gear.equipped.back}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.back}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}', ng-if='profile.preferences.costume')
// Avatar
span(class='skin_{{profile.preferences.skin}}', ng-if='!profile.preferences.sleep')
span(class='skin_{{profile.preferences.skin}}_sleep', ng-if='profile.preferences.sleep')
span(class='skin_{{profile.preferences.skin}}', ng-if='!profile.preferences.sleep')
span(class='skin_{{profile.preferences.skin}}_sleep', ng-if='profile.preferences.sleep')
// Shirt
span(class='{{profile.preferences.size}}_shirt_{{profile.preferences.shirt}}')
span(class='{{profile.preferences.size}}_shirt_{{profile.preferences.shirt}}')
// Armor
span(class='{{profile.preferences.size}}_{{profile.items.gear.equipped.armor}}', ng-if='!profile.preferences.costume')
span(class='{{profile.preferences.size}}_{{profile.items.gear.costume.armor}}', ng-if='profile.preferences.costume')
span(class='{{profile.preferences.size}}_{{profile.items.gear.equipped.armor}}', ng-if='!profile.preferences.costume')
span(class='{{profile.preferences.size}}_{{profile.items.gear.costume.armor}}', ng-if='profile.preferences.costume')
//- Cape collar
span(class='{{profile.items.gear.equipped.back}}_collar', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}_collar', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.back}}_collar', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}_collar', ng-if='profile.preferences.costume')
// Body
span(class='{{profile.items.gear.equipped.body}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.body}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.body}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.body}}', ng-if='profile.preferences.costume')
// Hair
span(class='head_0')
span(class='hair_base_{{profile.preferences.hair.base}}_{{profile.preferences.hair.color}}')
span(class='hair_bangs_{{profile.preferences.hair.bangs}}_{{profile.preferences.hair.color}}')
span(class='hair_mustache_{{profile.preferences.hair.mustache}}_{{profile.preferences.hair.color}}')
span(class='hair_beard_{{profile.preferences.hair.beard}}_{{profile.preferences.hair.color}}')
span(class='head_0')
span(class='hair_base_{{profile.preferences.hair.base}}_{{profile.preferences.hair.color}}')
span(class='hair_bangs_{{profile.preferences.hair.bangs}}_{{profile.preferences.hair.color}}')
span(class='hair_mustache_{{profile.preferences.hair.mustache}}_{{profile.preferences.hair.color}}')
span(class='hair_beard_{{profile.preferences.hair.beard}}_{{profile.preferences.hair.color}}')
// Eyewear
span(class='{{profile.items.gear.equipped.eyewear}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.eyewear}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.eyewear}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.eyewear}}', ng-if='profile.preferences.costume')
// Helm
span(class='{{profile.items.gear.equipped.head}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.head}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.head}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.head}}', ng-if='profile.preferences.costume')
// Head Accessory
span(class='{{profile.items.gear.equipped.headAccessory}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.headAccessory}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.headAccessory}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.headAccessory}}', ng-if='profile.preferences.costume')
// Flower
span(class='hair_flower_{{profile.preferences.hair.flower}}')
// Shield
span(class='{{profile.items.gear.equipped.shield}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.shield}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.shield}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.shield}}', ng-if='profile.preferences.costume')
// Weapon
span(class='{{profile.items.gear.equipped.weapon}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.weapon}}', ng-if='profile.preferences.costume')
span(class='{{profile.items.gear.equipped.weapon}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.weapon}}', ng-if='profile.preferences.costume')
// Mount Head

View file

@ -1,19 +1,49 @@
h5 4/1/2015 - HOSTILE FLOWER TAKEOVER OF JOY AND DOOM
h5 4/2/2015 - LAST CHANCE FOR MARCH ITEM SET; SHINY SEEDS; MESSAGE CHALLENGE CREATORS; ITEM DROP ICONS
hr
tr
td
h5 Joy and Doom to All!
p THE SPRING FLING HAS FLUNG TOO FAR! Run while you can, Habiticans! The floral theme has come to life and is taking over Habitica with horrifying cheer, repeat, the flowers are taking over HMMMPH MMPH MMMHPPPH....
.avatar_flower_wizard
p CELEBRATE FLOWER POWER.
h5 Last Chance for March Item Set
p Reminder: this is the final day to <a href='https://habitrpg.com/#/options/settings/subscription' target='_blank'>subscribe</a> and receive the Aquamarine Item Set! If you want the Aquamarine Eyewear or the Aquamarine Armor, now's the time! Thanks so much for your support <3
tr
td
.inventory_present.pull-right
p Cool! What could it be? All Habiticans who are subscribed during the month of April will receive the April Mystery Item Set! It will be revealed on the 25th, so keep your eyes peeled. Thanks for supporting the site <3
p.small.muted by Lemoness
tr
td
h5 Shiny Seeds
p Phew! Was that whole incident with the flowers just a colorful bad dream? But wait... what are these Shiny Seeds in the Seasonal Shop?
br
p RESISTANCE IS SILLY.
p.small.muted by Lemoness and Baconsaur
.inventory_special_flower.pull-right
p Whatever you do, don't drop one of these on a party member! Or yourself! That could be floral, I mean, <i>dangerous.</i>
p.small.muted by Lemoness and SabreCat
tr
td
h5 Message Challenge Creators
p Now on the Challenges page, you can to click on the challenge creator's name to view their profile, message them, or to see how long ago they last logged in if you are curious about whether the challenge might still be active.
p.small.muted by TheHollidayInn
tr
td
.promo_item_notif.pull-right
h5 Icons in Notifications
p Now, when you find an item from scoring a task, an image of the item appears in the drop notification. Instant gratification when that egg or potion you've been hunting for finally appears!
p.small.muted by TheHollidayInn
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h5 4/1/2015 - HOSTILE FLOWER TAKEOVER OF JOY AND DOOM
tr
td
h5 Joy and Doom to All!
p THE SPRING FLING HAS FLUNG TOO FAR! Run while you can, Habiticans! The floral theme has come to life and is taking over Habitica with horrifying cheer, repeat, the flowers are taking over HMMMPH MMPH MMMHPPPH....
.avatar_flower_wizard
p CELEBRATE FLOWER POWER.
br
p RESISTANCE IS SILLY.
p.small.muted by Lemoness and Baconsaur
h5 3/29/2015 - PASTEL SKIN, SHIMMER HAIR COLORS, SURVEY BADGES AWARDED, AND PARTY SORT ORDER
tr
td

View file

@ -178,6 +178,13 @@ div(ng-if='profile.achievements.spookDust')
=env.t('alarmingFriendsText', {spookDust: "{{profile.achievements.spookDust}}"})
hr
div(ng-if='profile.achievements.flower')
.achievement.achievement-flower
h5=env.t('agriculturalFriends')
small
=env.t('agriculturalFriendsText', {flowers: "{{profile.achievements.flower}}"})
hr
div(ng-if='::profile.achievements.habitBirthdays')
.achievement.achievement-habitBirthday
h5=env.t('habitBirthday')

View file

@ -97,7 +97,7 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template")
p.task-text {{item.text()}}
// Events
ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust)')
ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust || user.items.special.flower>0 || user.stats.buffs.flower)')
mixin specialSpell(k,canceler)
li.task.reward-item(ng-if='#{canceler ? "user.stats.buffs."+canceler : "user.items.special."+k+">0"}',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.#{k}.notes()}}')
@ -118,9 +118,10 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template")
+specialSpell('snowball')
+specialSpell('spookDust')
+specialSpell('flower')
+specialSpell('salt','snowball')
+specialSpell('opaquePotion','spookDust')
+specialSpell('petalFreePotion','flower')
// Actual List
ul(class='{{list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', hrpg-sort-tasks)