Merge pull request #432 from SabreCat/stressbeast

World boss for Winter Wonderland 2015
This commit is contained in:
Sabe Jones 2015-01-08 15:51:23 -06:00
commit fd7ba143cc
30 changed files with 2152 additions and 1954 deletions

File diff suppressed because one or more lines are too long

View file

@ -12185,9 +12185,7 @@ api.spells = {
target.value += diminishingReturns(bonus * .02, 4);
bonus *= Math.ceil((target.value < 0 ? 1 : target.value + 1) * .075);
user.stats.exp += diminishingReturns(bonus, 75);
if (user.party.quest.key) {
return user.party.quest.progress.up += diminishingReturns(bonus * .1, 50, 30);
}
return user.party.quest.progress.up += diminishingReturns(bonus * .1, 50, 30);
}
},
mpheal: {
@ -12243,9 +12241,7 @@ api.spells = {
notes: t('spellWarriorSmashNotes'),
cast: function(user, target) {
target.value += 2.5 * (user._statsComputed.str / (user._statsComputed.str + 50)) * user.fns.crit('con');
if (user.party.quest.key) {
return user.party.quest.progress.up += Math.ceil(user._statsComputed.str * .2);
}
return user.party.quest.progress.up += Math.ceil(user._statsComputed.str * .2);
}
},
defensiveStance: {
@ -12671,14 +12667,16 @@ api.specialPets = {
'Turkey-Base': 'turkey',
'BearCub-Polar': 'polarBearPup',
'MantisShrimp-Base': 'mantisShrimp',
'JackOLantern-Base': 'jackolantern'
'JackOLantern-Base': 'jackolantern',
'Mammoth-Base': 'mammoth'
};
api.specialMounts = {
'BearCub-Polar': 'polarBear',
'LionCub-Ethereal': 'etherealLion',
'MantisShrimp-Base': 'mantisShrimp',
'Turkey-Base': 'turkey'
'Turkey-Base': 'turkey',
'Mammoth-Base': 'mammoth'
};
api.hatchingPotions = {
@ -13051,6 +13049,83 @@ api.quests = {
exp: 0
}
},
stressbeast: {
text: t("questStressbeastText"),
notes: t("questStressbeastNotes"),
completion: t("questStressbeastCompletion"),
completionChat: t("questStressbeastCompletionChat"),
value: 0,
canBuy: false,
boss: {
name: t("questStressbeastBoss"),
hp: 2750000,
str: 1,
def: 1,
rage: {
title: t("questStressbeastBossRageTitle"),
description: t("questStressbeastBossRageDescription"),
value: 1450000,
stables: t('questStressbeastBossRageStables'),
bailey: t('questStressbeastBossRageBailey'),
guide: t('questStressbeastBossRageGuide')
}
},
drop: {
items: [
{
type: 'pets',
key: 'Mammoth-Base',
text: t('questStressbeastDropMammothPet')
}, {
type: 'mounts',
key: 'Mammoth-Base',
text: t('questStressbeastDropMammothMount')
}, {
type: 'food',
key: 'Meat',
text: t('foodMeat')
}, {
type: 'food',
key: 'Milk',
text: t('foodMilk')
}, {
type: 'food',
key: 'Potatoe',
text: t('foodPotatoe')
}, {
type: 'food',
key: 'Strawberry',
text: t('foodStrawberry')
}, {
type: 'food',
key: 'Chocolate',
text: t('foodChocolate')
}, {
type: 'food',
key: 'Fish',
text: t('foodFish')
}, {
type: 'food',
key: 'RottenMeat',
text: t('foodRottenMeat')
}, {
type: 'food',
key: 'CottonCandyPink',
text: t('foodCottonCandyPink')
}, {
type: 'food',
key: 'CottonCandyBlue',
text: t('foodCottonCandyBlue')
}, {
type: 'food',
key: 'Honey',
text: t('foodHoney')
}
],
gp: 0,
exp: 0
}
},
evilsanta: {
canBuy: false,
text: t('questEvilSantaText'),
@ -16568,5 +16643,5 @@ api.wrap = function(user, main) {
};
}).call(this,require("/home/matteo/Dev/habitrpg/habitrpg-shared/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))
},{"./content.coffee":5,"./i18n.coffee":6,"/home/matteo/Dev/habitrpg/habitrpg-shared/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":2,"lodash":3,"moment":4}]},{},[1])
}).call(this,require("/home/sabrecat/habitrpg-shared/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))
},{"./content.coffee":5,"./i18n.coffee":6,"/home/sabrecat/habitrpg-shared/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":2,"lodash":3,"moment":4}]},{},[1])

1132
dist/spritesmith0.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith0.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 199 KiB

36
dist/spritesmith1.css vendored
View file

@ -12,13 +12,13 @@
}
.hair_base_1_brown {
background-image: url(spritesmith1.png);
background-position: -637px -1092px;
background-position: -728px -1092px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_brown {
background-image: url(spritesmith1.png);
background-position: -662px -1107px;
background-position: -753px -1107px;
width: 60px;
height: 60px;
}
@ -1956,25 +1956,25 @@
}
.hair_base_6_black {
background-image: url(spritesmith1.png);
background-position: 0px 0px;
background-position: -637px -1092px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_6_black {
background-image: url(spritesmith1.png);
background-position: -25px -15px;
background-position: -662px -1107px;
width: 60px;
height: 60px;
}
.hair_base_6_blond {
background-image: url(spritesmith1.png);
background-position: -728px -1092px;
background-position: 0px 0px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_6_blond {
background-image: url(spritesmith1.png);
background-position: -753px -1107px;
background-position: -25px -15px;
width: 60px;
height: 60px;
}
@ -3910,3 +3910,27 @@
width: 60px;
height: 60px;
}
.skin_ghost {
background-image: url(spritesmith1.png);
background-position: -1638px -182px;
width: 90px;
height: 90px;
}
.customize-option.skin_ghost {
background-image: url(spritesmith1.png);
background-position: -1663px -197px;
width: 60px;
height: 60px;
}
.skin_ghost_sleep {
background-image: url(spritesmith1.png);
background-position: -1638px -273px;
width: 90px;
height: 90px;
}
.customize-option.skin_ghost_sleep {
background-image: url(spritesmith1.png);
background-position: -1663px -288px;
width: 60px;
height: 60px;
}

BIN
dist/spritesmith1.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 92 KiB

746
dist/spritesmith2.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith2.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

718
dist/spritesmith3.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith3.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 KiB

After

Width:  |  Height:  |  Size: 413 KiB

674
dist/spritesmith4.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith4.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 288 KiB

636
dist/spritesmith5.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith5.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -85,5 +85,7 @@
"October": "October",
"November": "November",
"December": "December",
"dateFormat": "Date Format"
"dateFormat": "Date Format",
"achievementStressbeast": "Savior of Stoïkalm",
"achievementStressbeastText": "Helped defeat the Abominable Stressbeast during the 2015 Winter Wonderland Event!"
}

View file

@ -27,7 +27,7 @@
"card": "Card",
"paymentMethods": "Payment Methods:",
"welcomeHabit": "Welcome to HabitRPG",
"welcomeHabitT1": "Welcome to HabitRPG, a habit-tracker which treats your tasks like a Role Playing Game. I'm",
"welcomeHabitT1": "Welcome to HabitRPG, a habit tracker that treats your tasks like a Role Playing Game. I'm",
"welcomeHabitT2": "your guide!",
"yourAvatar": "Your Avatar",
"yourAvatarText": "This is your avatar. It represents you in the world of Habitica. As you accomplish tasks, your avatar will gain levels, earn gold, and equip itself for further challenges ahead.",

View file

@ -13,6 +13,7 @@
"cerberusPup": "Cerberus Pup",
"hydra": "Hydra",
"mantisShrimp": "Mantis Shrimp",
"mammoth": "Woolly Mammoth",
"rarePetPop1": "Click the gold paw to learn more about how you can obtain this rare pet through contributing to HabitRPG!",
"rarePetPop2": "How to Get this Pet!",
"potion": "<%= potionType %> Potion",

View file

@ -168,5 +168,18 @@
"questPenguinNotes": "Although it's a hot summer day in the southernmost tip of Habitica, an unnatural chill has fallen upon Lively Lake. Strong, frigid winds rush around as the shore begins to freeze over. Ice spikes jut up from the ground, pushing grass and dirt away. @Melynnrose and @Breadstrings run up to you.<br><br>\"Help!\" says @Melynnrose. \"We brought a giant penguin in to freeze the lake so we could all go ice skating, but we ran out of fish to feed him!\"<br><br>\"He got angry and is using his freeze breath on everything he sees!\" says @Breadstrings. \"Please, you have to subdue him before all of us are covered in ice!\" Looks like you need this penguin to... <em>cool down.</em>",
"questPenguinCompletion": "Upon the penguin's defeat, the ice melts away. The giant penguin settles down in the sunshine, slurping up an extra bucket of fish you found. He skates off across the lake, blowing gently downwards to create smooth, sparkling ice. What an odd bird! \"It appears he left behind a few eggs, as well,\" says @Painter de Cluster. <br><br>@Rattify laughs. \"Maybe these penguins will be a little more... chill?\"",
"questPenguinBoss": "Frost Penguin",
"questPenguinDropPenguinEgg": "Penguin (Egg)"
"questPenguinDropPenguinEgg": "Penguin (Egg)",
"questStressbeastText": "The Abominable Stressbeast of the Stoïkalm Steppes",
"questStressbeastNotes": "Complete Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Stress Strike Bar. When the Stress Strike bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts who are not resting in the inn will have their incomplete Dailies tallied.<br><br>~*~<br><br>The first thing we hear are the footsteps, slower and more thundering than the stampede. One by one, Habiticans look outside their doors, and words fail us.<br><br>We've all seen Stressbeasts before, of course - tiny vicious creatures that attack during difficult times. But this? This towers taller than the buildings, with paws that could crush a dragon with ease. Frost swings from its stinking fur, and as it roars, the icy blast rips the roofs off our houses. A monster of this magnitude has never been mentioned outside of distant legend.<br><br>\"Beware, Habiticans!\" SabreCat cries. \"Barricade yourselves indoors - this is the Abominable Stressbeast itself!\"<br><br>\"That thing must be made of centuries of stress!\" Kiwibot says, locking the Tavern door tightly and shuttering the windows.<br><br>\"The Stoïkalm Steppes,\" Lemoness says, face grim. \"All this time, we thought they were placid and untroubled, but they must have been secretly hiding their stress somewhere. Over generations, it grew into this, and now it's broken free and attacked them - and us!\"<br><br>There's only one way to drive away a Stressbeast, Abominable or otherwise, and that's to attack it with completed Dailies and To-Dos! Let's all band together and fight off this fearsome foe - but be sure not to slack on your tasks, or our undone Dailies may enrage it so much that it lashes out...",
"questStressbeastBoss": "The Abominable Stressbeast",
"questStressbeastBossRageTitle": "Stress Strike",
"questStressbeastBossRageDescription": "When this gauge fills, the Abominable Stressbeast will unleash its Stress Strike on Habitica!",
"questStressbeastDropMammothPet": "Mammoth (Pet)",
"questStressbeastDropMammothMount": "Mammoth (Mount)",
"questStressbeastBossRageStables": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nOh no! Despite our best efforts, we've let some Dailies get away from us, and their dark-red color has infuriated the Abominable Stressbeast! The horrible creature lunges for the Stables, but Matt the Beast Master heroically leaps into the fray to protect the pets and mounts. The Stressbeast has seized Matt in its vicious grip, but at least it's distracted for the moment. Hurry! Let's keep our Dailies in check and defeat this monster before it attacks again!",
"questStressbeastBossRageBailey": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nAhh!!! Our incomplete Dailies caused the Abominable Stressbeast to become madder than ever! Bailey the Town Crier was shouting for citizens to get to safety, and now it has seized her in its other hand! Look at her, valiantly reporting on the news as the Stressbeast swings her around viciously... Let's be worthy of her bravery by being as productive as we can to save our NPCs!",
"questStressbeastBossRageGuide": "`Abominable Stressbeast uses STRESS STRIKE!`\n\nLook out! Justin the Guide is trying to distract the Stressbeast by running around its ankles, yelling productivity tips! The Abominable Stressbeast is stomping madly, but it seems like we're really wearing this beast down. I doubt it has enough energy for another strike. Don't give up... we're so close to finishing it off!",
"questStressbeastCompletion": "<strong>The Abominable Stressbeast is DEFEATED!</strong><br><br>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!<br><br><strong>Stoïkalm is Saved!</strong><br><br>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.<br><br>\"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.\"<br><br>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.\"",
"questStressbeastCompletionChat": "`The Abominable Stressbeast is DEFEATED!`\n\nWe'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!\n\n`Stoïkalm is Saved!`\n\nSabreCat 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.\n\n\"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.\"\n\nShe 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.\""
}

View file

@ -485,7 +485,7 @@ api.spells =
bonus *= Math.ceil ((if target.value < 0 then 1 else target.value+1) *.075)
#console.log {bonus, expBonus:bonus,upBonus:bonus*.1}
user.stats.exp += diminishingReturns(bonus,75)
user.party.quest.progress.up += diminishingReturns(bonus*.1,50,30) if user.party.quest.key
user.party.quest.progress.up += diminishingReturns(bonus*.1,50,30)
mpheal:
text: t('spellWizardMPHealText')
@ -528,7 +528,7 @@ api.spells =
notes: t('spellWarriorSmashNotes')
cast: (user, target) ->
target.value += 2.5 * (user._statsComputed.str / (user._statsComputed.str + 50)) * user.fns.crit('con')
user.party.quest.progress.up += Math.ceil(user._statsComputed.str * .2) if user.party.quest.key
user.party.quest.progress.up += Math.ceil(user._statsComputed.str * .2)
defensiveStance:
text: t('spellWarriorDefensiveStanceText')
mana: 25
@ -786,12 +786,14 @@ api.specialPets =
'BearCub-Polar': 'polarBearPup'
'MantisShrimp-Base': 'mantisShrimp'
'JackOLantern-Base': 'jackolantern'
'Mammoth-Base': 'mammoth'
api.specialMounts =
'BearCub-Polar': 'polarBear'
'LionCub-Ethereal': 'etherealLion'
'MantisShrimp-Base': 'mantisShrimp'
'Turkey-Base': 'turkey'
'Mammoth-Base': 'mammoth'
api.hatchingPotions =
Base: value: 2, text: t('hatchingPotionBase')
@ -900,6 +902,45 @@ api.quests =
gp: 0
exp: 0
stressbeast:
text: t("questStressbeastText")
notes: t("questStressbeastNotes")
completion: t("questStressbeastCompletion")
completionChat: t("questStressbeastCompletionChat")
value: 0
canBuy: false
boss:
name: t("questStressbeastBoss")
hp: 2750000
str: 1
def: 1
rage:
title: t("questStressbeastBossRageTitle")
description: t("questStressbeastBossRageDescription")
value: 1450000
stables:t('questStressbeastBossRageStables')
bailey:t('questStressbeastBossRageBailey')
guide:t('questStressbeastBossRageGuide')
drop:
items: [
{type: 'pets', key: 'Mammoth-Base', text: t('questStressbeastDropMammothPet')}
{type: 'mounts', key: 'Mammoth-Base', text: t('questStressbeastDropMammothMount')}
{type: 'food', key: 'Meat', text: t('foodMeat')}
{type: 'food', key: 'Milk', text: t('foodMilk')}
{type: 'food', key: 'Potatoe', text: t('foodPotatoe')}
{type: 'food', key: 'Strawberry', text: t('foodStrawberry')}
{type: 'food', key: 'Chocolate', text: t('foodChocolate')}
{type: 'food', key: 'Fish', text: t('foodFish')}
{type: 'food', key: 'RottenMeat', text: t('foodRottenMeat')}
{type: 'food', key: 'CottonCandyPink', text: t('foodCottonCandyPink')}
{type: 'food', key: 'CottonCandyBlue', text: t('foodCottonCandyBlue')}
{type: 'food', key: 'Honey', text: t('foodHoney')}
]
gp: 0
exp: 0
evilsanta:
canBuy:false
text: t('questEvilSantaText') # title of the quest (eg, Deep into Vice's Layer)