feat(quests): add moonstone chain, lvl drop at 60

This commit is contained in:
Tyler Renelle 2014-10-23 10:33:20 -06:00
parent d0aafcd8af
commit d3ca101dd8
18 changed files with 1683 additions and 1490 deletions

File diff suppressed because one or more lines are too long

View file

@ -13131,6 +13131,108 @@ api.quests = {
gp: 31,
exp: 200
}
},
moonstone1: {
text: t('questMoonstone1Text'),
notes: t('questMoonstone1Notes'),
value: 4,
lvl: 60,
collect: {
moonstone: {
text: t('questMoonstone1CollectMoonstone'),
count: 500
}
},
drop: {
items: [
{
type: 'quests',
key: "moonstone2",
text: t('questMoonstone1DropMoonstone2Quest')
}
],
gp: 50,
exp: 100
}
},
moonstone2: {
text: t('questMoonstone2Text'),
notes: t('questMoonstone2Notes'),
value: 4,
lvl: 65,
previous: 'moonstone1',
boss: {
name: t('questMoonstone2Boss'),
hp: 1500,
str: 3
},
drop: {
items: [
{
type: 'quests',
key: 'moonstone3',
text: t('questMoonstone2DropMoonstone3Quest')
}
],
gp: 500,
exp: 1000
}
},
moonstone3: {
text: t('questMoonstone3Text'),
notes: t('questMoonstone3Notes'),
completion: t('questMoonstone3Completion'),
previous: 'moonstone2',
value: 4,
lvl: 70,
boss: {
name: t('questMoonstone3Boss'),
hp: 2000,
str: 3.5
},
drop: {
items: [
{
type: 'gear',
key: "armor_special_2",
text: t('armorSpecial2Text')
}, {
type: 'food',
key: 'RottenMeat',
text: t('questMoonstone3DropRottenMeat')
}, {
type: 'food',
key: 'RottenMeat',
text: t('questMoonstone3DropRottenMeat')
}, {
type: 'food',
key: 'RottenMeat',
text: t('questMoonstone3DropRottenMeat')
}, {
type: 'food',
key: 'RottenMeat',
text: t('questMoonstone3DropRottenMeat')
}, {
type: 'food',
key: 'RottenMeat',
text: t('questMoonstone3DropRottenMeat')
}, {
type: 'hatchingPotions',
key: 'Zombie',
text: t('questMoonstone3DropZombiePotion')
}, {
type: 'hatchingPotions',
key: 'Zombie',
text: t('questMoonstone3DropZombiePotion')
}, {
type: 'hatchingPotions',
key: 'Zombie',
text: t('questMoonstone3DropZombiePotion')
}
],
gp: 900,
exp: 1500
}
}
};
@ -15248,7 +15350,8 @@ api.wrap = function(user, main) {
}
_.each({
vice1: 30,
atom1: 15
atom1: 15,
moonstone1: 60
}, function(lvl, k) {
var _base, _base1, _ref;
if (!((_ref = user.flags.levelDrops) != null ? _ref[k] : void 0) && user.stats.lvl >= lvl) {

114
dist/spritesmith0.css vendored
View file

@ -2826,311 +2826,323 @@
}
.hair_bangs_3_pumpkin {
background-image: url(spritesmith0.png);
background-position: -455px -1138px;
background-position: -364px -1502px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_pumpkin {
background-image: url(spritesmith0.png);
background-position: -480px -1153px;
background-position: -389px -1517px;
width: 60px;
height: 60px;
}
.hair_bangs_3_purple {
background-image: url(spritesmith0.png);
background-position: -273px -592px;
background-position: -455px -1138px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_purple {
background-image: url(spritesmith0.png);
background-position: -298px -607px;
background-position: -480px -1153px;
width: 60px;
height: 60px;
}
.hair_bangs_3_pyellow {
background-image: url(spritesmith0.png);
background-position: -182px -592px;
background-position: -273px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_pyellow {
background-image: url(spritesmith0.png);
background-position: -207px -607px;
background-position: -298px -607px;
width: 60px;
height: 60px;
}
.hair_bangs_3_rainbow {
background-image: url(spritesmith0.png);
background-position: -91px -592px;
background-position: -182px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_rainbow {
background-image: url(spritesmith0.png);
background-position: -116px -607px;
background-position: -207px -607px;
width: 60px;
height: 60px;
}
.hair_bangs_3_red {
background-image: url(spritesmith0.png);
background-position: 0px -592px;
background-position: -91px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_red {
background-image: url(spritesmith0.png);
background-position: -25px -607px;
background-position: -116px -607px;
width: 60px;
height: 60px;
}
.hair_bangs_3_white {
background-image: url(spritesmith0.png);
background-position: -597px -444px;
background-position: 0px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_white {
background-image: url(spritesmith0.png);
background-position: -622px -459px;
background-position: -25px -607px;
width: 60px;
height: 60px;
}
.hair_bangs_3_winternight {
background-image: url(spritesmith0.png);
background-position: -506px -444px;
background-position: -597px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_winternight {
background-image: url(spritesmith0.png);
background-position: -531px -459px;
background-position: -622px -459px;
width: 60px;
height: 60px;
}
.hair_bangs_3_yellow {
background-image: url(spritesmith0.png);
background-position: -415px -444px;
background-position: -506px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_yellow {
background-image: url(spritesmith0.png);
background-position: -440px -459px;
background-position: -531px -459px;
width: 60px;
height: 60px;
}
.hair_bangs_3_zombie {
background-image: url(spritesmith0.png);
background-position: -324px -444px;
background-position: -415px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_bangs_3_zombie {
background-image: url(spritesmith0.png);
background-position: -349px -459px;
background-position: -440px -459px;
width: 60px;
height: 60px;
}
.hair_base_1_TRUred {
background-image: url(spritesmith0.png);
background-position: -233px -444px;
background-position: -324px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_TRUred {
background-image: url(spritesmith0.png);
background-position: -258px -459px;
background-position: -349px -459px;
width: 60px;
height: 60px;
}
.hair_base_1_black {
background-image: url(spritesmith0.png);
background-position: -142px -444px;
background-position: -233px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_black {
background-image: url(spritesmith0.png);
background-position: -167px -459px;
background-position: -258px -459px;
width: 60px;
height: 60px;
}
.hair_base_1_blond {
background-image: url(spritesmith0.png);
background-position: -364px -683px;
background-position: -142px -444px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_blond {
background-image: url(spritesmith0.png);
background-position: -389px -698px;
background-position: -167px -459px;
width: 60px;
height: 60px;
}
.hair_base_1_blue {
background-image: url(spritesmith0.png);
background-position: -273px -683px;
background-position: -364px -683px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_blue {
background-image: url(spritesmith0.png);
background-position: -298px -698px;
background-position: -389px -698px;
width: 60px;
height: 60px;
}
.hair_base_1_brown {
background-image: url(spritesmith0.png);
background-position: -182px -683px;
background-position: -273px -683px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_brown {
background-image: url(spritesmith0.png);
background-position: -207px -698px;
background-position: -298px -698px;
width: 60px;
height: 60px;
}
.hair_base_1_candycane {
background-image: url(spritesmith0.png);
background-position: -91px -683px;
background-position: -182px -683px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_candycane {
background-image: url(spritesmith0.png);
background-position: -116px -698px;
background-position: -207px -698px;
width: 60px;
height: 60px;
}
.hair_base_1_candycorn {
background-image: url(spritesmith0.png);
background-position: 0px -683px;
background-position: -91px -683px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_candycorn {
background-image: url(spritesmith0.png);
background-position: -25px -698px;
background-position: -116px -698px;
width: 60px;
height: 60px;
}
.hair_base_1_frost {
background-image: url(spritesmith0.png);
background-position: -707px -546px;
background-position: 0px -683px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_frost {
background-image: url(spritesmith0.png);
background-position: -732px -561px;
background-position: -25px -698px;
width: 60px;
height: 60px;
}
.hair_base_1_ghostwhite {
background-image: url(spritesmith0.png);
background-position: -707px -455px;
background-position: -707px -546px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_ghostwhite {
background-image: url(spritesmith0.png);
background-position: -732px -470px;
background-position: -732px -561px;
width: 60px;
height: 60px;
}
.hair_base_1_green {
background-image: url(spritesmith0.png);
background-position: -707px -364px;
background-position: -707px -455px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_green {
background-image: url(spritesmith0.png);
background-position: -732px -379px;
background-position: -732px -470px;
width: 60px;
height: 60px;
}
.hair_base_1_halloween {
background-image: url(spritesmith0.png);
background-position: -707px -273px;
background-position: -707px -364px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_halloween {
background-image: url(spritesmith0.png);
background-position: -732px -288px;
background-position: -732px -379px;
width: 60px;
height: 60px;
}
.hair_base_1_holly {
background-image: url(spritesmith0.png);
background-position: -707px -182px;
background-position: -707px -273px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_holly {
background-image: url(spritesmith0.png);
background-position: -732px -197px;
background-position: -732px -288px;
width: 60px;
height: 60px;
}
.hair_base_1_midnight {
background-image: url(spritesmith0.png);
background-position: -707px -91px;
background-position: -707px -182px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_midnight {
background-image: url(spritesmith0.png);
background-position: -732px -106px;
background-position: -732px -197px;
width: 60px;
height: 60px;
}
.hair_base_1_pblue {
background-image: url(spritesmith0.png);
background-position: -707px 0px;
background-position: -707px -91px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_pblue {
background-image: url(spritesmith0.png);
background-position: -732px -15px;
background-position: -732px -106px;
width: 60px;
height: 60px;
}
.hair_base_1_pgreen {
background-image: url(spritesmith0.png);
background-position: -546px -592px;
background-position: -707px 0px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_pgreen {
background-image: url(spritesmith0.png);
background-position: -571px -607px;
background-position: -732px -15px;
width: 60px;
height: 60px;
}
.hair_base_1_porange {
background-image: url(spritesmith0.png);
background-position: -455px -592px;
background-position: -546px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_porange {
background-image: url(spritesmith0.png);
background-position: -480px -607px;
background-position: -571px -607px;
width: 60px;
height: 60px;
}
.hair_base_1_ppink {
background-image: url(spritesmith0.png);
background-position: -364px -592px;
background-position: -455px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_ppink {
background-image: url(spritesmith0.png);
background-position: -480px -607px;
width: 60px;
height: 60px;
}
.hair_base_1_ppurple {
background-image: url(spritesmith0.png);
background-position: -364px -592px;
width: 90px;
height: 90px;
}
.customize-option.hair_base_1_ppurple {
background-image: url(spritesmith0.png);
background-position: -389px -607px;
width: 60px;

BIN
dist/spritesmith0.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

1150
dist/spritesmith1.css vendored

File diff suppressed because it is too large Load diff

BIN
dist/spritesmith1.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 76 KiB

566
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: 111 KiB

After

Width:  |  Height:  |  Size: 112 KiB

596
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: 204 KiB

After

Width:  |  Height:  |  Size: 218 KiB

566
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: 199 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View file

@ -78,6 +78,23 @@
"questVice3DropDragonEgg": "Dragon (Egg)",
"questVice3DropShadeHatchingPotion": "Shade Hatching Potion",
"questMoonstone1Text": "The Moonstone Chain",
"questMoonstone1Notes": "<p>A terrible affliction has struck Habiticans. Bad Habits thought long-dead are rising back up with a vengeance. Dishes lie unwashed, textbooks linger unread, and procrastination runs rampant!</p><br/><p>You track some of your own returning Bad Habits to the Swamps of Stagnation and discover the culprit: the ghostly Necromancer, Recidivate. You rush in, weapons swinging, but they slide through her specter uselessly.</p><br/><p>\"Dont bother,\" she hisses with a dry rasp. \"Without a chain of moonstones, nothing can harm me and master jeweler @aurakami scattered all the moonstones across Habitica long ago!\" Panting, you retreat... but you know what you must do.</p>",
"questMoonstone1CollectMoonstone": "Moonstones",
"questMoonstone1DropMoonstone2Quest": "The Moonstone Chain Part 2: Recidivate the Necromancer (Scroll)",
"questMoonstone2Text": "Recidivate The Necromancer",
"questMoonstone2Notes": "<p>The brave weaponsmith @Inventrix helps you fashion the enchanted moonstones into a chain. Youre ready to confront Recidivate at last, but as you enter the Swamps of Stagnation, a terrible chill sweeps over you.</p><br/><p>Rotting breath whispers in your ear. \"Back again? How delightful...\" You spin and lunge, and under the light of the moonstone chain, your weapon strikes solid flesh. \"You may have bound me to the world once more,\" Recidivate snarls, \"but now it is time for you to leave it!\"</p>",
"questMoonstone2Boss": "The Necromancer",
"questMoonstone2DropMoonstone3Quest": "The Moonstone Chain Part 3: Recidivate Transformed (Scroll)",
"questMoonstone3Text": "Recidivate Transformed",
"questMoonstone3Notes": "<p>Recidivate crumples to the ground, and you strike at her with the moonstone chain. To your horror, Recidivate seizes the gems, eyes burning with triumph.</p><br/><p>\"Foolish creature of flesh!\" she shouts. \"These moonstones will restore me to a physical form, true, but not as you imagined. As the full moon waxes from the dark, so too does my power flourish, and from the shadows I summon the specter of your most feared foe!\"</p><br/><p>A sickly green fog rises from the swamp, and Recidivates body writhes and contorts into a shape that fills you with dread the undead body of Vice, horribly reborn.</p>",
"questMoonstone3Completion": "<p>Your breath comes hard and sweat stings your eyes as the undead Wyrm collapses. The remains of Recidivate dissipate into a thin grey mist that clears quickly under the onslaught of a refreshing breeze, and you hear the distant, rallying cries of Habiticans defeating their Bad Habits for once and for all.</p><br/><p>@Baconsaur the beastmaster swoops down on a gryphon. \"I saw the end of your battle from the sky, and I was greatly moved. Please, take this enchanted tunic your bravery speaks of a noble heart, and I believe you were meant to have it.\"</p>",
"questMoonstone3Boss": "Necro-Vice",
"questMoonstone3DropRottenMeat": "Rotten Meat (Food)",
"questMoonstone3DropZombiePotion": "Zombie Hatching Potion",
"questEggHuntText": "Egg Hunt",
"questEggHuntNotes": "Overnight, strange plain eggs have appeared everywhere: in Matt's stables, behind the counter at the Tavern, and even among the pet eggs at the Marketplace! What a nuisance! \"Nobody knows where they came from, or what they might hatch into,\" says <strong>Megan</strong>, \"but we can't just leave them laying around! Work hard and search hard to help me gather up these mysterious eggs. Maybe if you collect enough, there will be some extras left over for you...\"",
"questEggHuntCompletion": "You did it! In gratitude, <strong>Megan</strong> gives you ten of the eggs. \"I don't think they hatch, exactly,\" she says, \"and they certainly won't grow into mounts. But that doesn't mean you can't dye them beautiful colors!\"",

View file

@ -1138,6 +1138,61 @@ api.quests =
gp: 31
exp: 200
moonstone1:
text: t('questMoonstone1Text')
notes: t('questMoonstone1Notes')
value: 4
lvl: 60
collect:
moonstone: text: t('questMoonstone1CollectMoonstone'), count: 500
drop:
items: [
{type: 'quests', key: "moonstone2", text: t('questMoonstone1DropMoonstone2Quest')}
]
gp: 50
exp: 100
moonstone2:
text: t('questMoonstone2Text')
notes: t('questMoonstone2Notes')
value: 4
lvl: 65
previous: 'moonstone1'
boss:
name: t('questMoonstone2Boss')
hp: 1500
str: 3
drop:
items: [
{type: 'quests', key: 'moonstone3', text: t('questMoonstone2DropMoonstone3Quest')}
]
gp: 500
exp: 1000
moonstone3:
text: t('questMoonstone3Text')
notes: t('questMoonstone3Notes')
completion: t('questMoonstone3Completion')
previous: 'moonstone2'
value: 4
lvl: 70
boss:
name: t('questMoonstone3Boss')
hp: 2000
str: 3.5
drop:
items: [
{type: 'gear', key: "armor_special_2", text: t('armorSpecial2Text')}
{type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')}
{type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')}
{type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')}
{type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')}
{type: 'food', key: 'RottenMeat', text: t('questMoonstone3DropRottenMeat')}
{type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')}
{type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')}
{type: 'hatchingPotions', key: 'Zombie', text: t('questMoonstone3DropZombiePotion')}
]
gp: 900
exp: 1500
_.each api.quests, (v,key) ->
_.defaults v, {key,canBuy:true}
b = v.boss

View file

@ -1254,7 +1254,7 @@ api.wrap = (user, main=true) ->
if !user.flags.classSelected and user.stats.lvl >= 10
user.flags.classSelected
# Level Drops
_.each {vice1:30, atom1:15}, (lvl,k)->
_.each {vice1:30, atom1:15, moonstone1:60}, (lvl,k)->
if !user.flags.levelDrops?[k] and user.stats.lvl >= lvl
user.items.quests[k] ?= 0
user.items.quests[k]++