Lost Masterclasser Quest Line (#9183)
* fix(sprites): serve animated GIFs Also add new GIF for upcoming quest line * feat(content): Masterclasser capstone quest Also fixes Quests page for clearer lock/unlock display * chore(sprites): compile * feat(achievements): award quest completionist cheevo * feat(quests): Siphoning Void fix Achievements page styling and text spacing fix display of Rage bar on party page * test(quests): Lost Masterclasser * chore(news): Bailey * fix(test): only use Masterclasser in relevant scenario
@@ -282,7 +282,7 @@ describe('Group Model', () => {
|
|||||||
expect(finishQuest).to.be.calledWith(quest);
|
expect(finishQuest).to.be.calledWith(quest);
|
||||||
});
|
});
|
||||||
|
|
||||||
context('with Rage', () => {
|
context('with healing Rage', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
party.quest.active = false;
|
party.quest.active = false;
|
||||||
party.quest.key = 'trex_undead';
|
party.quest.key = 'trex_undead';
|
||||||
@@ -327,6 +327,46 @@ describe('Group Model', () => {
|
|||||||
expect(party.quest.progress.hp).to.eql(500);
|
expect(party.quest.progress.hp).to.eql(500);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
context('with Mana drain Rage', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
party.quest.active = false;
|
||||||
|
party.quest.key = 'lostMasterclasser4';
|
||||||
|
|
||||||
|
await party.startQuest(questLeader);
|
||||||
|
await party.save();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('applies down progress to boss rage', async () => {
|
||||||
|
progress.down = -2;
|
||||||
|
|
||||||
|
await Group.processQuestProgress(participatingMember, progress);
|
||||||
|
|
||||||
|
party = await Group.findOne({_id: party._id});
|
||||||
|
|
||||||
|
expect(party.quest.progress.rage).to.eql(8);
|
||||||
|
|
||||||
|
let drainedUser = await User.findById(participatingMember._id);
|
||||||
|
expect(drainedUser.stats.mp).to.eql(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('activates rage when progress.down triggers rage bar', async () => {
|
||||||
|
let quest = questScrolls[party.quest.key];
|
||||||
|
|
||||||
|
progress.down = -999;
|
||||||
|
|
||||||
|
await party.save();
|
||||||
|
await Group.processQuestProgress(participatingMember, progress);
|
||||||
|
|
||||||
|
party = await Group.findOne({_id: party._id});
|
||||||
|
|
||||||
|
expect(Group.prototype.sendChat).to.be.calledWith(quest.boss.rage.effect('en'));
|
||||||
|
expect(party.quest.progress.rage).to.eql(0);
|
||||||
|
|
||||||
|
let drainedUser = await User.findById(participatingMember._id);
|
||||||
|
expect(drainedUser.stats.mp).to.eql(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
context('Collection Quests', () => {
|
context('Collection Quests', () => {
|
||||||
@@ -1342,6 +1382,42 @@ describe('Group Model', () => {
|
|||||||
expect(updatedParticipatingMember.achievements.quests[quest.key]).to.eql(1);
|
expect(updatedParticipatingMember.achievements.quests[quest.key]).to.eql(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('gives out super awesome Masterclasser achievement to the deserving', async () => {
|
||||||
|
quest = questScrolls.lostMasterclasser4;
|
||||||
|
party.quest.key = quest.key;
|
||||||
|
|
||||||
|
questLeader.achievements.quests = {
|
||||||
|
mayhemMistiflying1: 1,
|
||||||
|
mayhemMistiflying2: 1,
|
||||||
|
mayhemMistiflying3: 1,
|
||||||
|
stoikalmCalamity1: 1,
|
||||||
|
stoikalmCalamity2: 1,
|
||||||
|
stoikalmCalamity3: 1,
|
||||||
|
taskwoodsTerror1: 1,
|
||||||
|
taskwoodsTerror2: 1,
|
||||||
|
taskwoodsTerror3: 1,
|
||||||
|
dilatoryDistress1: 1,
|
||||||
|
dilatoryDistress2: 1,
|
||||||
|
dilatoryDistress3: 1,
|
||||||
|
lostMasterclasser1: 1,
|
||||||
|
lostMasterclasser2: 1,
|
||||||
|
lostMasterclasser3: 1,
|
||||||
|
};
|
||||||
|
await questLeader.save();
|
||||||
|
await party.finishQuest(quest);
|
||||||
|
|
||||||
|
let [
|
||||||
|
updatedLeader,
|
||||||
|
updatedParticipatingMember,
|
||||||
|
] = await Promise.all([
|
||||||
|
User.findById(questLeader._id),
|
||||||
|
User.findById(participatingMember._id),
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(updatedLeader.achievements.lostMasterclasser).to.eql(true);
|
||||||
|
expect(updatedParticipatingMember.achievements.lostMasterclasser).to.not.eql(true);
|
||||||
|
});
|
||||||
|
|
||||||
it('gives xp and gold', async () => {
|
it('gives xp and gold', async () => {
|
||||||
await party.finishQuest(quest);
|
await party.finishQuest(quest);
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,19 @@
|
|||||||
} */
|
} */
|
||||||
|
|
||||||
.quest_burnout {
|
.quest_burnout {
|
||||||
background: url("/quest_burnout.gif") no-repeat;
|
background: url("~assets/images/quest_burnout.gif") no-repeat;
|
||||||
width: 219px;
|
width: 219px;
|
||||||
height: 249px;
|
height: 249px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.quest_bewilder {
|
.quest_bewilder {
|
||||||
background: url("/quest_bewilder.gif") no-repeat;
|
background: url("~assets/images/quest_bewilder.gif") no-repeat;
|
||||||
|
width: 219px;
|
||||||
|
height: 219px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.quest_lostMasterclasser4 {
|
||||||
|
background: url("~assets/images/quest_lostMasterclasser4.gif") no-repeat;
|
||||||
width: 219px;
|
width: 219px;
|
||||||
height: 219px;
|
height: 219px;
|
||||||
}
|
}
|
||||||
@@ -36,6 +42,67 @@
|
|||||||
background-color: #727272;
|
background-color: #727272;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* These sprites are oversized until a move to 105 avatar box happens*/
|
||||||
|
|
||||||
|
/* Backer */
|
||||||
|
.weapon_special_0, .head_special_0 {
|
||||||
|
width: 105px;
|
||||||
|
height: 105px;
|
||||||
|
margin-left: -3px;
|
||||||
|
margin-top: -18px;
|
||||||
|
}
|
||||||
|
.slim_armor_special_0, .broad_armor_special_0, .shield_special_0 {
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Critical */
|
||||||
|
.weapon_special_critical {
|
||||||
|
background: url("~assets/images/weapon_special_critical.gif") no-repeat;
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
margin-left:-12px;
|
||||||
|
margin-top:12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is oversized until a move to 105 avatar box happens*/
|
||||||
|
.weapon_special_1 {
|
||||||
|
margin-left: -12px;
|
||||||
|
}
|
||||||
|
.broad_armor_special_1, .slim_armor_special_1, .head_special_1 {
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.head_special_0 {
|
||||||
|
background: url("~assets/images/BackerOnly-Equip-ShadeHelmet.gif") no-repeat;
|
||||||
|
}
|
||||||
|
.head_special_1 {
|
||||||
|
background: url("~assets/images/ContributorOnly-Equip-CrystalHelmet.gif") no-repeat;
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.broad_armor_special_0,.slim_armor_special_0 {
|
||||||
|
background: url("~assets/images/BackerOnly-Equip-ShadeArmor.gif") no-repeat;
|
||||||
|
}
|
||||||
|
.broad_armor_special_1,.slim_armor_special_1 {
|
||||||
|
background: url("~assets/images/ContributorOnly-Equip-CrystalArmor.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shield_special_0 {
|
||||||
|
background: url("~assets/images/BackerOnly-Shield-TormentedSkull.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weapon_special_0 {
|
||||||
|
background: url("~assets/images/BackerOnly-Weapon-DarkSoulsBlade.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Pet-Wolf-Cerberus {
|
||||||
|
width: 105px;
|
||||||
|
height: 72px;
|
||||||
|
background: url("~assets/images/BackerOnly-Pet-CerberusPup.gif") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME figure out how to handle customize menu!!
|
/* FIXME figure out how to handle customize menu!!
|
||||||
.customize-menu .f_head_0 {
|
.customize-menu .f_head_0 {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
@@ -44,27 +111,6 @@
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.achievement {
|
|
||||||
float:left;
|
|
||||||
clear:right;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.achievement .counter {
|
|
||||||
bottom: 0;
|
|
||||||
right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.multi-achievement {
|
|
||||||
margin: auto;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
padding-right: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.achievement-container {
|
|
||||||
height: 52px;
|
|
||||||
}
|
|
||||||
|
|
||||||
[class*="Mount_Head_"],
|
[class*="Mount_Head_"],
|
||||||
[class*="Mount_Body_"] {
|
[class*="Mount_Body_"] {
|
||||||
margin-top:18px; /* Sprite accommodates 105x123 box */
|
margin-top:18px; /* Sprite accommodates 105x123 box */
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.achievement-alien {
|
.achievement-alien {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1699px -186px;
|
background-position: -1699px -239px;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
@@ -12,154 +12,160 @@
|
|||||||
}
|
}
|
||||||
.achievement-alpha2x {
|
.achievement-alpha2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -637px -1628px;
|
background-position: -686px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-armor2x {
|
.achievement-armor2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1699px -106px;
|
background-position: -1699px -159px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-bewilder2x {
|
.achievement-bewilder2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1699px -53px;
|
background-position: -1699px -106px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-birthday2x {
|
.achievement-birthday2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1699px 0px;
|
background-position: -1699px -53px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-boot2x {
|
.achievement-boot2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1617px -1628px;
|
background-position: -1699px 0px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-bow2x {
|
.achievement-bow2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1568px -1628px;
|
background-position: -1617px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-burnout2x {
|
.achievement-burnout2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1519px -1628px;
|
background-position: -1568px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-cactus2x {
|
.achievement-cactus2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1470px -1628px;
|
background-position: -1519px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-cake2x {
|
.achievement-cake2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1421px -1628px;
|
background-position: -1470px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-cave2x {
|
.achievement-cave2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1372px -1628px;
|
background-position: -1421px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-challenge2x {
|
.achievement-challenge2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1323px -1628px;
|
background-position: -1372px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-comment2x {
|
.achievement-comment2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1274px -1628px;
|
background-position: -1323px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-congrats2x {
|
.achievement-congrats2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1225px -1628px;
|
background-position: -1274px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-costumeContest2x {
|
.achievement-costumeContest2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1176px -1628px;
|
background-position: -1225px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-dilatory2x {
|
.achievement-dilatory2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1127px -1628px;
|
background-position: -1176px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-friends2x {
|
.achievement-friends2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1078px -1628px;
|
background-position: -1127px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-getwell2x {
|
.achievement-getwell2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1029px -1628px;
|
background-position: -1078px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-goodluck2x {
|
.achievement-goodluck2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -980px -1628px;
|
background-position: -1029px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-greeting2x {
|
.achievement-greeting2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -931px -1628px;
|
background-position: -980px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-guild2x {
|
.achievement-guild2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -882px -1628px;
|
background-position: -931px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-habitBirthday2x {
|
.achievement-habitBirthday2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -833px -1628px;
|
background-position: -882px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-habiticaDay2x {
|
.achievement-habiticaDay2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -784px -1628px;
|
background-position: -833px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-heart2x {
|
.achievement-heart2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -735px -1628px;
|
background-position: -784px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-karaoke-2x {
|
.achievement-karaoke-2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -686px -1628px;
|
background-position: -735px -1628px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
.achievement-karaoke {
|
.achievement-karaoke {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1699px -159px;
|
background-position: -1699px -212px;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
|
.achievement-lostMasterclasser2x {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
|
background-position: -637px -1628px;
|
||||||
|
width: 48px;
|
||||||
|
height: 52px;
|
||||||
|
}
|
||||||
.achievement-ninja2x {
|
.achievement-ninja2x {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1338px -1480px;
|
background-position: -1338px -1480px;
|
||||||
@@ -324,235 +330,235 @@
|
|||||||
}
|
}
|
||||||
.background_alpine_slopes {
|
.background_alpine_slopes {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -705px -888px;
|
background-position: -846px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_aquarium {
|
.background_aquarium {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -846px -888px;
|
background-position: -987px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_archery_range {
|
.background_archery_range {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -987px -888px;
|
background-position: -1135px 0px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_autumn_forest {
|
.background_autumn_forest {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1135px 0px;
|
background-position: -1135px -148px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_back_of_giant_beast {
|
.background_back_of_giant_beast {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -568px 0px;
|
background-position: -568px -148px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_bamboo_forest {
|
.background_bamboo_forest {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -568px -148px;
|
background-position: -568px -296px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_beach {
|
.background_beach {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -568px -296px;
|
background-position: 0px -444px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_beehive {
|
.background_beehive {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1135px -592px;
|
background-position: -1135px -740px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_bell_tower {
|
.background_bell_tower {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1135px -740px;
|
background-position: -1135px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_beside_well {
|
.background_beside_well {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px -444px;
|
background-position: -142px -444px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_blacksmithy {
|
.background_blacksmithy {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px -1036px;
|
background-position: -142px -740px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_blizzard {
|
.background_blizzard {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -142px -740px;
|
background-position: -282px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_blue {
|
.background_blue {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -282px -1036px;
|
background-position: -423px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_bug_covered_log {
|
.background_bug_covered_log {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -423px -1036px;
|
background-position: -564px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_buried_treasure {
|
.background_buried_treasure {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -142px -444px;
|
background-position: -284px -444px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_cherry_trees {
|
.background_cherry_trees {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -705px -1036px;
|
background-position: -846px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_clouds {
|
.background_clouds {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -846px -1036px;
|
background-position: -987px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_coral_reef {
|
.background_coral_reef {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -987px -1036px;
|
background-position: -1128px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_cornfields {
|
.background_cornfields {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1128px -1036px;
|
background-position: -1276px 0px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_cozy_library {
|
.background_cozy_library {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -284px -444px;
|
background-position: 0px 0px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_crystal_cave {
|
.background_crystal_cave {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -148px;
|
background-position: -1276px -296px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_deep_mine {
|
.background_deep_mine {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -296px;
|
background-position: -1276px -444px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_deep_sea {
|
.background_deep_sea {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -444px;
|
background-position: -1276px -592px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_desert_dunes {
|
.background_desert_dunes {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px 0px;
|
background-position: -568px -444px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_dilatory_castle {
|
.background_dilatory_castle {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -740px;
|
background-position: -1276px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_dilatory_ruins {
|
.background_dilatory_ruins {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -888px;
|
background-position: -1276px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_distant_castle {
|
.background_distant_castle {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -1036px;
|
background-position: 0px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_drifting_raft {
|
.background_drifting_raft {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px -1184px;
|
background-position: -141px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_dusty_canyons {
|
.background_dusty_canyons {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -141px -1184px;
|
background-position: -282px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_fairy_ring {
|
.background_fairy_ring {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -282px -1184px;
|
background-position: -423px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_farmhouse {
|
.background_farmhouse {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -423px -1184px;
|
background-position: -564px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_floating_islands {
|
.background_floating_islands {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -564px -1184px;
|
background-position: -705px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_floral_meadow {
|
.background_floral_meadow {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -705px -1184px;
|
background-position: -846px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_forest {
|
.background_forest {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -846px -1184px;
|
background-position: -987px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_frigid_peak {
|
.background_frigid_peak {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -987px -1184px;
|
background-position: -1128px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_frozen_lake {
|
.background_frozen_lake {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1128px -1184px;
|
background-position: -1269px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_garden_shed {
|
.background_garden_shed {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -568px -444px;
|
background-position: -710px 0px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_gazebo {
|
.background_gazebo {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px 0px;
|
background-position: -282px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_giant_birdhouse {
|
.background_giant_birdhouse {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -282px -888px;
|
background-position: -1417px -296px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -582,13 +588,13 @@
|
|||||||
}
|
}
|
||||||
.background_graveyard {
|
.background_graveyard {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -888px;
|
background-position: -1417px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_green {
|
.background_green {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -1036px;
|
background-position: -1417px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -600,7 +606,7 @@
|
|||||||
}
|
}
|
||||||
.background_gumdrop_land {
|
.background_gumdrop_land {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px -1332px;
|
background-position: -141px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -612,7 +618,7 @@
|
|||||||
}
|
}
|
||||||
.background_harvest_feast {
|
.background_harvest_feast {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -282px -1332px;
|
background-position: -423px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -630,7 +636,7 @@
|
|||||||
}
|
}
|
||||||
.background_haunted_house {
|
.background_haunted_house {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -705px -1332px;
|
background-position: -846px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -642,19 +648,19 @@
|
|||||||
}
|
}
|
||||||
.background_iceberg {
|
.background_iceberg {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -987px -1332px;
|
background-position: -1128px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_idyllic_cabin {
|
.background_idyllic_cabin {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1128px -1332px;
|
background-position: -1269px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_island_waterfalls {
|
.background_island_waterfalls {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1269px -1332px;
|
background-position: -1410px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -666,19 +672,19 @@
|
|||||||
}
|
}
|
||||||
.background_lighthouse_shore {
|
.background_lighthouse_shore {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px 0px;
|
background-position: -1558px -148px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_lilypad {
|
.background_lilypad {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -148px;
|
background-position: -1558px -296px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_magic_beanstalk {
|
.background_magic_beanstalk {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -296px;
|
background-position: -1558px -444px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -696,19 +702,19 @@
|
|||||||
}
|
}
|
||||||
.background_market {
|
.background_market {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -740px;
|
background-position: -1558px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_meandering_cave {
|
.background_meandering_cave {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -888px;
|
background-position: -1558px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_midnight_clouds {
|
.background_midnight_clouds {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -1036px;
|
background-position: -1558px -1184px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -720,31 +726,31 @@
|
|||||||
}
|
}
|
||||||
.background_mist_shrouded_mountain {
|
.background_mist_shrouded_mountain {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -1332px;
|
background-position: 0px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_mistiflying_circus {
|
.background_mistiflying_circus {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: 0px -1480px;
|
background-position: -141px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_mountain_lake {
|
.background_mountain_lake {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -141px -1480px;
|
background-position: -282px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_mountain_pyramid {
|
.background_mountain_pyramid {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -282px -1480px;
|
background-position: -423px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_night_dunes {
|
.background_night_dunes {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -423px -1480px;
|
background-position: -564px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -768,19 +774,19 @@
|
|||||||
}
|
}
|
||||||
.background_orchard {
|
.background_orchard {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -987px -1480px;
|
background-position: -1128px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_pagodas {
|
.background_pagodas {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1128px -1480px;
|
background-position: -1417px -148px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_pixelists_workshop {
|
.background_pixelists_workshop {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -710px 0px;
|
background-position: -568px 0px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -882,19 +888,19 @@
|
|||||||
}
|
}
|
||||||
.background_south_pole {
|
.background_south_pole {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -846px -1480px;
|
background-position: -987px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_sparkling_snowflake {
|
.background_sparkling_snowflake {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -705px -1480px;
|
background-position: -846px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_spider_web {
|
.background_spider_web {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -564px -1480px;
|
background-position: -705px -1480px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -906,55 +912,55 @@
|
|||||||
}
|
}
|
||||||
.background_spring_rain {
|
.background_spring_rain {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -592px;
|
background-position: -1558px -740px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stable {
|
.background_stable {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -444px;
|
background-position: -1558px -592px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stained_glass {
|
.background_stained_glass {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1410px -1332px;
|
background-position: -1558px 0px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_starry_skies {
|
.background_starry_skies {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -846px -1332px;
|
background-position: -987px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stoikalm_volcanoes {
|
.background_stoikalm_volcanoes {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -564px -1332px;
|
background-position: -705px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stone_circle {
|
.background_stone_circle {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -423px -1332px;
|
background-position: -564px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stormy_rooftops {
|
.background_stormy_rooftops {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -141px -1332px;
|
background-position: -282px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_stormy_ship {
|
.background_stormy_ship {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -1184px;
|
background-position: 0px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_strange_sewers {
|
.background_strange_sewers {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -740px;
|
background-position: -1417px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -966,31 +972,31 @@
|
|||||||
}
|
}
|
||||||
.background_sunken_ship {
|
.background_sunken_ship {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -444px;
|
background-position: -1417px -592px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_sunset_meadow {
|
.background_sunset_meadow {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -296px;
|
background-position: -1417px -444px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_sunset_oasis {
|
.background_sunset_oasis {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -148px;
|
background-position: -1417px 0px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_sunset_savannah {
|
.background_sunset_savannah {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1269px -1184px;
|
background-position: -1276px -740px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_swarming_darkness {
|
.background_swarming_darkness {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px -592px;
|
background-position: -1276px -148px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -1002,7 +1008,7 @@
|
|||||||
}
|
}
|
||||||
.background_tavern {
|
.background_tavern {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -564px -1036px;
|
background-position: 0px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -1062,31 +1068,31 @@
|
|||||||
}
|
}
|
||||||
.background_windy_autumn {
|
.background_windy_autumn {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1558px -1184px;
|
background-position: -1558px -1332px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_winter_fireworks {
|
.background_winter_fireworks {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1417px -592px;
|
background-position: -1417px -740px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_winter_night {
|
.background_winter_night {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1276px 0px;
|
background-position: -705px -1036px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_winter_storefront {
|
.background_winter_storefront {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1135px -888px;
|
background-position: -1135px -592px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.background_winter_town {
|
.background_winter_town {
|
||||||
background-image: url(/static/sprites/spritesmith-main-0.png);
|
background-image: url(/static/sprites/spritesmith-main-0.png);
|
||||||
background-position: -1135px -148px;
|
background-position: -705px -888px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
|
|||||||
132
website/client/assets/css/sprites/spritesmith-main-20.css
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
.Pet_HatchingPotion_Base {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -69px 0px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_CottonCandyBlue {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -207px -138px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_CottonCandyPink {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: 0px -69px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Cupid {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -69px -69px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Desert {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -138px 0px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Ember {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -138px -69px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Fairy {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: 0px -138px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Floral {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -69px -138px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Ghost {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -138px -138px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Golden {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -207px 0px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Holly {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -207px -69px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Peppermint {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: 0px 0px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Purple {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: 0px -207px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Red {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -69px -207px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_RoyalPurple {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -138px -207px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Shade {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -207px -207px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Shimmer {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -276px 0px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Skeleton {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -276px -69px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Spooky {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -276px -138px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Thunderstorm {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -276px -207px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_White {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: 0px -276px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
.Pet_HatchingPotion_Zombie {
|
||||||
|
background-image: url(/static/sprites/spritesmith-main-20.png);
|
||||||
|
background-position: -69px -276px;
|
||||||
|
width: 68px;
|
||||||
|
height: 68px;
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 872 B After Width: | Height: | Size: 872 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
0
website/raw_sprites/quest_bewilder.gif → website/client/assets/images/quest_bewilder.gif
Executable file → Normal file
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
0
website/raw_sprites/quest_burnout.gif → website/client/assets/images/quest_burnout.gif
Executable file → Normal file
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
BIN
website/client/assets/images/quest_lostMasterclasser4.gif
Normal file
|
After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 759 B After Width: | Height: | Size: 759 B |
@@ -129,11 +129,10 @@
|
|||||||
.row.rage-bar-row(v-if='questData.boss.rage')
|
.row.rage-bar-row(v-if='questData.boss.rage')
|
||||||
.col-12
|
.col-12
|
||||||
.grey-progress-bar
|
.grey-progress-bar
|
||||||
.boss-health-bar.rage-bar(:style="{width: (50 / questData.boss.rage) * 100 + '%'}")
|
.boss-health-bar.rage-bar(:style="{width: (group.quest.progress.rage / questData.boss.rage.value) * 100 + '%'}")
|
||||||
.row.boss-details.rage-details(v-if='questData.boss.rage')
|
.row.boss-details.rage-details(v-if='questData.boss.rage')
|
||||||
.col-6
|
.col-6
|
||||||
span.float-left
|
span.float-left {{ $t('rage') }} {{ parseFloat(group.quest.progress.rage).toFixed(2) }} / {{ questData.boss.rage.value }}
|
||||||
| Rage {{questData.boss.rage.value}}
|
|
||||||
button.btn.btn-secondary(v-once, @click="questAbort()", v-if='canEditQuest') {{ $t('abort') }}
|
button.btn.btn-secondary(v-once, @click="questAbort()", v-if='canEditQuest') {{ $t('abort') }}
|
||||||
|
|
||||||
.section-header(v-if='!isParty')
|
.section-header(v-if='!isParty')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
div
|
div
|
||||||
div(v-if='item.locked')
|
div(v-if='item.locked')
|
||||||
h4.popover-content-title Locked Item
|
h4.popover-content-title {{ `${$t('lockedItem')}` }}
|
||||||
.popover-content-text(v-if='item.specialClass') {{ `${$t('classLockedItem')}` }}
|
.popover-content-text(v-if='item.specialClass') {{ `${$t('classLockedItem')}` }}
|
||||||
.popover-content-text(v-else) {{ `${$t('tierLockedItem')}` }}
|
.popover-content-text(v-else) {{ `${$t('tierLockedItem')}` }}
|
||||||
p
|
p
|
||||||
|
|||||||
@@ -136,8 +136,14 @@
|
|||||||
)
|
)
|
||||||
span(slot="popoverContent")
|
span(slot="popoverContent")
|
||||||
div.questPopover
|
div.questPopover
|
||||||
h4.popover-content-title {{ item.text }}
|
div
|
||||||
questInfo(:quest="item")
|
h4.popover-content-title(v-if='item.locked') {{ `${$t('lockedItem')}` }}
|
||||||
|
h4.popover-content-title(v-else) {{ item.text }}
|
||||||
|
.popover-content-text(v-if='item.locked && item.key === "lostMasterclasser1"') {{ `${$t('questUnlockLostMasterclasser')}` }}
|
||||||
|
.popover-content-text(v-if='item.locked && item.unlockCondition && item.unlockCondition.incentiveThreshold') {{ `${$t('loginIncentiveQuest', {count: item.unlockCondition.incentiveThreshold})}` }}
|
||||||
|
.popover-content-text(v-if='item.locked && item.previous') {{ `${$t('unlockByQuesting', {title: item.previous})}` }}
|
||||||
|
.popover-content-text(v-if='item.lvl > user.stats.lvl') {{ `${$t('mustLvlQuest', {level: item.lvl})}` }}
|
||||||
|
questInfo(v-if='!item.locked', :quest="item")
|
||||||
|
|
||||||
template(slot="itemBadge", scope="ctx")
|
template(slot="itemBadge", scope="ctx")
|
||||||
span.badge.badge-pill.badge-item.badge-svg(
|
span.badge.badge-pill.badge-item.badge-svg(
|
||||||
@@ -232,8 +238,6 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.featured-label {
|
.featured-label {
|
||||||
margin: 24px auto;
|
margin: 24px auto;
|
||||||
}
|
}
|
||||||
@@ -250,7 +254,6 @@
|
|||||||
width: 33%;
|
width: 33%;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
|
|
||||||
|
|
||||||
.items {
|
.items {
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
background-color: #edecee;
|
background-color: #edecee;
|
||||||
@@ -306,7 +309,6 @@
|
|||||||
background: url('~assets/images/npc/#{$npc_quests_flavor}/quest_shop_npc.png');
|
background: url('~assets/images/npc/#{$npc_quests_flavor}/quest_shop_npc.png');
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
|
||||||
|
|
||||||
.featured-label {
|
.featured-label {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -14px;
|
bottom: -14px;
|
||||||
|
|||||||
@@ -4,32 +4,18 @@
|
|||||||
.align-self-center.right-margin(:class='baileyClass')
|
.align-self-center.right-margin(:class='baileyClass')
|
||||||
.media-body
|
.media-body
|
||||||
h1.align-self-center(v-markdown='$t("newStuff")')
|
h1.align-self-center(v-markdown='$t("newStuff")')
|
||||||
h2 10/10/2017 - SUPERNATURAL SKINS, HAUNTED HAIR COLORS, WITCHY FAMILIARS QUEST BUNDLE, AND GOALS WIKI
|
h2 10/13/2017 - GOLD-PURCHASABLE QUEST-LINE: THE MYSTERY OF THE MASTERCLASSERS
|
||||||
hr
|
hr
|
||||||
.media
|
.media
|
||||||
.promo_fall_customizations.right-margin
|
|
||||||
.media-body
|
.media-body
|
||||||
h3 Supernatural Skins and Haunted Hair Colors
|
h3 Mystery of the Masterclassers Quest Line
|
||||||
p The Seasonal Edition Haunted Hair Colors are now available for purchase in the avatar customizations shop! Now you can dye your avatar's hair Pumpkin, Midnight, Candy Corn, Ghost White, Zombie, or Halloween. Get them before October 31st!
|
p(v-markdown='"There\'s a new set of gold-purchasable quests available in the [Quest Shop](https://habitica.com/shops/quests): the Mystery of the Masterclassers Quest-Line! After some of Habitica\'s denizens are possessed by mysterious and malevolent objects, the four Masterclassers have come to you for aid in their quest to find and defeat the enigmatic foe behind these dire deeds. Can you help them save Habitica? If you can defeat the most powerful foe in the game so far, you\'ll earn the exclusive Aether Equipment Set... and a rare Mount like none other."')
|
||||||
.media
|
.quest_lostMasterclasser4.left-margin
|
||||||
.media-body
|
p The Mystery of the Masterclassers is the culmination of the story told in the gold-purchasable quests, so you need to complete all four of those previous quest-lines in order to unlock it. None of the gold-purchasable questlines are limited-edition, so you have plenty of time to save up!
|
||||||
p The Supernatural Skin Set is also available until October 31st! Now your avatar can become an Ogre, Skeleton, Pumpkin, Candy Corn, Reptile, or Dread Shade.
|
.small by SabreCat, Beffymaroo, and Lemoness
|
||||||
p Seasonal Edition items recur unchanged every year, but they are only available to purchase during a short period of time. Get them now, or you'll have to wait until next year!
|
.small Writing by Lemoness
|
||||||
.small by Lemoness, mariahm, and crystal phoenix
|
.small Art by AnnDeLune, Beffymaroo, Katy133, Tuqjoi, Kiwibot, stefalupagus, and tricksy.fox
|
||||||
h3 Witchy Familiars Quest Bundle
|
|
||||||
p If you are looking to add some pets to your Habitica stable in to match your Fall Festival gear, you're in luck! From now until October 31, you can purchase the Witchy Familiars Pet Quest Bundle and receive the Rat, Spider, and Frog quests, all for only 7 Gems! That's a discount of 5 Gems from the price of purchasing them separately. Check it out in the <a href='/shops/quests'>Quest Shop</a> today!
|
|
||||||
.small by Lemoness and SabreCat
|
|
||||||
.small Art by Pandah, UncommonCriminal, Arcosine, starsystemic, RosemonkeyCT, Jon Arjinborn, and Breadstrings
|
|
||||||
.small Writing by Token, Arcosine, and Fluitare
|
|
||||||
.promo_bundle_witchyFamiliars.left-margin
|
|
||||||
br
|
br
|
||||||
p If rats and/or spiders are something you'd prefer not to see in Habitica due to a phobia, check out the <a href='http://habitica.wikia.com/wiki/Phobia_Protection_Extension' target='_blank'>Phobia Protection Extension</a> which will hide any pets, mounts, backgrounds, quest bosses, or equipment featuring rats and/or spiders (as well as snakes, bees, zombies, skeletons, or any combination thereof). We hope that it helps make everyone's Habitica experience fun!
|
|
||||||
.media
|
|
||||||
.scene_raking_leaves.right-margin
|
|
||||||
.media-body
|
|
||||||
h3 Blog Post: Dealing with Variable Goals
|
|
||||||
p(v-markdown='"This month\'s [featured Wiki article](https://habitica.wordpress.com/2017/10/04/dealing-with-variable-goals/) is about Dealing with Variable Goals! We hope that it will help you as you add tasks with irregular deadlines to your lists. Be sure to check it out, and let us know what you think by reaching out on [Twitter](https://twitter.com/habitica), [Tumblr](http://blog.habitrpg.com/), and [Facebook](https://www.facebook.com/Habitica/)."')
|
|
||||||
.small by Beffymaroo and the Wiki Wizards
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang='scss' scoped>
|
||||||
@@ -46,13 +32,9 @@
|
|||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.small {
|
/* .small {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.small ~ .small {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -117,8 +117,7 @@ div
|
|||||||
.achievement-icon.achievement-karaoke
|
.achievement-icon.achievement-karaoke
|
||||||
h2.text-center {{$t('questsCompleted')}}
|
h2.text-center {{$t('questsCompleted')}}
|
||||||
div(v-for='(value, key) in user.achievements.quests')
|
div(v-for='(value, key) in user.achievements.quests')
|
||||||
span {{ content.quests[key].text() }}
|
span {{ content.quests[key].text() }} ({{ value }})
|
||||||
span {{ value }}
|
|
||||||
#stats.standard-page(v-show='selectedPage === "stats"', v-if='user.preferences')
|
#stats.standard-page(v-show='selectedPage === "stats"', v-if='user.preferences')
|
||||||
.row
|
.row
|
||||||
.col-6
|
.col-6
|
||||||
|
|||||||
@@ -2,5 +2,7 @@
|
|||||||
"share": "Share",
|
"share": "Share",
|
||||||
"onwards": "Onwards!",
|
"onwards": "Onwards!",
|
||||||
"levelup": "By accomplishing your real life goals, you leveled up and are now fully healed!",
|
"levelup": "By accomplishing your real life goals, you leveled up and are now fully healed!",
|
||||||
"reachedLevel": "You Reached Level <%= level %>"
|
"reachedLevel": "You Reached Level <%= level %>",
|
||||||
|
"achievementLostMasterclasser": "Quest Completionist: Masterclasser Series",
|
||||||
|
"achievementLostMasterclasserText": "Completed all sixteen quests in the Masterclasser Quest Series and solved the mystery of the Lost Masterclasser!"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,8 @@
|
|||||||
"weaponSpecialFencingFoilNotes": "Should anyone dare to impugn your honor, you'll be ready with this fine foil! Increases Strength by <%= str %>.",
|
"weaponSpecialFencingFoilNotes": "Should anyone dare to impugn your honor, you'll be ready with this fine foil! Increases Strength by <%= str %>.",
|
||||||
"weaponSpecialTachiText": "Tachi",
|
"weaponSpecialTachiText": "Tachi",
|
||||||
"weaponSpecialTachiNotes": "This light and curved sword will shred your tasks to ribbons! Increases Strength by <%= str %>.",
|
"weaponSpecialTachiNotes": "This light and curved sword will shred your tasks to ribbons! Increases Strength by <%= str %>.",
|
||||||
|
"weaponSpecialAetherCrystalsText": "Aether Crystals",
|
||||||
|
"weaponSpecialAetherCrystalsNotes": "These bracers and crystals once belonged to the Lost Masterclasser herself. Increases all attributes by <%= attrs %>.",
|
||||||
|
|
||||||
"weaponSpecialYetiText": "Yeti-Tamer Spear",
|
"weaponSpecialYetiText": "Yeti-Tamer Spear",
|
||||||
"weaponSpecialYetiNotes": "This spear allows its user to command any yeti. Increases Strength by <%= str %>. Limited Edition 2013-2014 Winter Gear.",
|
"weaponSpecialYetiNotes": "This spear allows its user to command any yeti. Increases Strength by <%= str %>. Limited Edition 2013-2014 Winter Gear.",
|
||||||
@@ -1336,6 +1338,8 @@
|
|||||||
"backSpecialTakeThisNotes": "These wings were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all attributes by <%= attrs %>.",
|
"backSpecialTakeThisNotes": "These wings were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all attributes by <%= attrs %>.",
|
||||||
"backSpecialSnowdriftVeilText": "Snowdrift Veil",
|
"backSpecialSnowdriftVeilText": "Snowdrift Veil",
|
||||||
"backSpecialSnowdriftVeilNotes": "This translucent veil makes it appear you are surrounded by an elegant flurry of snow! Confers no benefit.",
|
"backSpecialSnowdriftVeilNotes": "This translucent veil makes it appear you are surrounded by an elegant flurry of snow! Confers no benefit.",
|
||||||
|
"backSpecialAetherCloakText": "Aether Cloak",
|
||||||
|
"backSpecialAetherCloakNotes": "This cloak once belonged to the Lost Masterclasser herself. Increases Perception by <%= per %>.",
|
||||||
|
|
||||||
"body": "Body Accessory",
|
"body": "Body Accessory",
|
||||||
"bodyCapitalized": "Body Accessory",
|
"bodyCapitalized": "Body Accessory",
|
||||||
@@ -1350,6 +1354,8 @@
|
|||||||
"bodySpecialWonderconBlackNotes": "An attractive ebony collar! Confers no benefit. Special Edition Convention Item.",
|
"bodySpecialWonderconBlackNotes": "An attractive ebony collar! Confers no benefit. Special Edition Convention Item.",
|
||||||
"bodySpecialTakeThisText": "Take This Pauldrons",
|
"bodySpecialTakeThisText": "Take This Pauldrons",
|
||||||
"bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all attributes by <%= attrs %>.",
|
"bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all attributes by <%= attrs %>.",
|
||||||
|
"bodySpecialAetherAmuletText": "Aether Amulet",
|
||||||
|
"bodySpecialAetherAmuletNotes": "This amulet has a mysterious history. Increases Constitution and Strength by <%= attrs %> each.",
|
||||||
|
|
||||||
"bodySpecialSummerMageText": "Shining Capelet",
|
"bodySpecialSummerMageText": "Shining Capelet",
|
||||||
"bodySpecialSummerMageNotes": "Neither salt water nor fresh water can tarnish this metallic capelet. Confers no benefit. Limited Edition 2014 Summer Gear.",
|
"bodySpecialSummerMageNotes": "Neither salt water nor fresh water can tarnish this metallic capelet. Confers no benefit. Limited Edition 2014 Summer Gear.",
|
||||||
@@ -1467,6 +1473,9 @@
|
|||||||
"eyewearSpecialYellowTopFrameText": "Yellow Standard Eyeglasses",
|
"eyewearSpecialYellowTopFrameText": "Yellow Standard Eyeglasses",
|
||||||
"eyewearSpecialYellowTopFrameNotes": "Glasses with a yellow frame above the lenses. Confers no benefit.",
|
"eyewearSpecialYellowTopFrameNotes": "Glasses with a yellow frame above the lenses. Confers no benefit.",
|
||||||
|
|
||||||
|
"eyewearSpecialAetherMaskText": "Aether Mask",
|
||||||
|
"eyewearSpecialAetherMaskNotes": "This mask has a mysterious history. Increases Intelligence by <%= int %>.",
|
||||||
|
|
||||||
"eyewearSpecialSummerRogueText": "Roguish Eyepatch",
|
"eyewearSpecialSummerRogueText": "Roguish Eyepatch",
|
||||||
"eyewearSpecialSummerRogueNotes": "It doesn't take a scallywag to see how stylish this is! Confers no benefit. Limited Edition 2014 Summer Gear.",
|
"eyewearSpecialSummerRogueNotes": "It doesn't take a scallywag to see how stylish this is! Confers no benefit. Limited Edition 2014 Summer Gear.",
|
||||||
"eyewearSpecialSummerWarriorText": "Dashing Eyepatch",
|
"eyewearSpecialSummerWarriorText": "Dashing Eyepatch",
|
||||||
|
|||||||
@@ -3,5 +3,6 @@
|
|||||||
"foodItemType": "Food",
|
"foodItemType": "Food",
|
||||||
"eggsItemType": "Eggs",
|
"eggsItemType": "Eggs",
|
||||||
"hatchingPotionsItemType": "Hatching Potions",
|
"hatchingPotionsItemType": "Hatching Potions",
|
||||||
"specialItemType": "Special items"
|
"specialItemType": "Special items",
|
||||||
|
"lockedItem": "Locked Item"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
"phoenix": "Phoenix",
|
"phoenix": "Phoenix",
|
||||||
"magicalBee": "Magical Bee",
|
"magicalBee": "Magical Bee",
|
||||||
"royalPurpleJackalope": "Royal Purple Jackalope",
|
"royalPurpleJackalope": "Royal Purple Jackalope",
|
||||||
|
"invisibleAether": "Invisible Aether",
|
||||||
"rarePetPop1": "Click the gold paw to learn more about how you can obtain this rare pet through contributing to Habitica!",
|
"rarePetPop1": "Click the gold paw to learn more about how you can obtain this rare pet through contributing to Habitica!",
|
||||||
"rarePetPop2": "How to Get this Pet!",
|
"rarePetPop2": "How to Get this Pet!",
|
||||||
"potion": "<%= potionType %> Potion",
|
"potion": "<%= potionType %> Potion",
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
"mustLevel": "You must be level <%= level %> to begin this quest.",
|
"mustLevel": "You must be level <%= level %> to begin this quest.",
|
||||||
"mustLvlQuest": "You must be level <%= level %> to buy this quest!",
|
"mustLvlQuest": "You must be level <%= level %> to buy this quest!",
|
||||||
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
|
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
|
||||||
"unlockByQuesting": "To earn this quest, complete <%= title %>.",
|
"unlockByQuesting": "To unlock this quest, complete <%= title %>.",
|
||||||
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
|
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
|
||||||
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
|
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
|
||||||
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
|
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
"questNotPending": "There is no quest to start.",
|
"questNotPending": "There is no quest to start.",
|
||||||
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
|
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
|
||||||
"createAccountReward": "Create Account",
|
"createAccountReward": "Create Account",
|
||||||
"loginIncentiveQuest": "To earn this quest, check in to Habitica on <%= count %> different days!",
|
"loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!",
|
||||||
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
|
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
|
||||||
"loginReward": "<%= count %> Check-ins",
|
"loginReward": "<%= count %> Check-ins",
|
||||||
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
|
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
|
||||||
|
|||||||
@@ -589,5 +589,46 @@
|
|||||||
"farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until September 30.",
|
"farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until September 30.",
|
||||||
|
|
||||||
"witchyFamiliarsText": "Witchy Familiars Quest Bundle",
|
"witchyFamiliarsText": "Witchy Familiars Quest Bundle",
|
||||||
"witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'. Available until October 31."
|
"witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'. Available until October 31.",
|
||||||
|
|
||||||
|
"questGroupLostMasterclasser": "Mystery of the Masterclassers",
|
||||||
|
"questUnlockLostMasterclasser": "To unlock this quest, complete the final quests of these quest chains: 'Dilatory Distress', 'Mayhem in Mistiflying', 'Stoïkalm Calamity', and 'Terror in the Taskwoods'.",
|
||||||
|
|
||||||
|
"questLostMasterclasser1Text": "The Mystery of the Masterclassers, Part 1: Read Between the Lines",
|
||||||
|
"questLostMasterclasser1Notes": "You’re unexpectedly summoned by @beffymaroo and @Lemoness to Habit Hall, where you’re astonished to find all four of Habitica’s Masterclassers awaiting you in the wan light of dawn. Even the Joyful Reaper looks somber.<br><br>“Oho, you’re here,” says the April Fool. “Now, we would not rouse you from your rest without a truly dire—”<br><br>“Help us investigate the recent bout of possessions,” interrupts Lady Glaciate. “All the victims blamed someone named Tzina.”<br><br>The April Fool is clearly affronted by the summary. “What about my speech?” he hisses to her. “With the fog and thunderstorm effects?”<br><br>“We’re in a hurry,” she mutters back. “And my mammoths are still soggy from your incessant practicing.”<br><br>“I’m afraid that the esteemed Master of Warriors is correct,” says King Manta. “Time is of the essence. Will you aid us?”<br><br>When you nod, he waves his hands to open a portal, revealing an underwater room. “Swim down with me to Dilatory, and we will scour my library for any references that might give us a clue.” At your look of confusion, he adds, “Don’t worry, the paper was enchanted long before Dilatory sank. None of the books are the slightest bit damp!” He winks.“Unlike Lady Glaciate’s mammoths.”<br><br>“I heard that, Manta.”<br><br>As you dive into the water after the Master of Mages, your legs magically fuse into fins. Though your body is buoyant, your heart sinks when you see the thousands of bookshelves. Better start reading…",
|
||||||
|
"questLostMasterclasser1Completion": "After hours of poring through volumes, you still haven’t found any useful information.<br><br>“It seems impossible that there isn’t even the tiniest reference to anything relevant,” says head librarian @Tuqjoi, and their assistant @stefalupagus nods in frustration.<br><br>King Manta’s eyes narrow. “Not impossible…” he says. “<em>Intentional</em>.” For a moment, the water glows around his hands, and several of the books shudder. “Something is obscuring information,” he says. “Not just a static spell, but something with a will of its own. Something… alive.” He swims up from the table. “The Joyful Reaper needs to hear about this. Let’s pack a meal for the road.”",
|
||||||
|
"questLostMasterclasser1CollectAncientTomes": "Ancient Tomes",
|
||||||
|
"questLostMasterclasser1CollectForbiddenTomes": "Forbidden Tomes",
|
||||||
|
"questLostMasterclasser1CollectHiddenTomes": "Hidden Tomes",
|
||||||
|
|
||||||
|
"questLostMasterclasser2Text": "The Mystery of the Masterclassers, Part 2: Assembling the a'Voidant",
|
||||||
|
"questLostMasterclasser2Notes": "The Joyful Reaper drums her bony fingers on some of the books that you brought. “Oh, dear,” the Master of Healers says. “There is a malevolent life essence at work. I might have guessed, considering the attacks by reanimated skulls during each incident.” Her assistant @tricksy.fox brings in a chest, and you are startled to see the contents that @beffymaroo unloads: the very same objects once used by this mysterious Tzina to possess people.<br><br>“I’m going to use resonant healing magic to try to make this creature manifest,” the Joyful Reaper says, reminding you that the skeleton is a somewhat unconventional Healer. “You’ll need to read the revealed information quickly, in case it breaks loose.”<br><br>As she concentrates, a twisting mist begins to siphon from the books and twine around the objects. Quickly, you flip through the pages, trying to read the new lines of text that are writhing into view. You catch only a few snippets: “Sands of the Timewastes” — “the Great Disaster” —“split into four”— “permanently corrupted”— before a single name catches your eye: Zinnya.<br><br>Abruptly, the pages wrench free from your fingers and shred themselves as a howling creature explodes into being, coalescing around the possessed objects.<br><br>“It’s an a’Voidant!” the Joyful Reaper shouts, throwing up a protection spell. “They’re ancient creatures of confusion and obscurity. If this Tzina can control one, she must have a frightening command over life magic. Quickly, attack it before it escapes back into the books!”<br><br>",
|
||||||
|
"questLostMasterclasser2Completion": "The a’Voidant succumbs at last, and you share the snippets that you read.<br><br>“None of those references sound familiar, even for someone as old as I,” the Joyful Reaper says. “Except… the Timewastes are a distant desert at the most hostile edge of Habitica. Portals often fail nearby, but swift mounts could get you there in no time. Lady Glaciate will be glad to assist.” Her voice grows amused. “Which means that the enamored Master of Rogues will undoubtedly tag along.” She hands you the glimmering mask. “Perhaps you should try to track the lingering magic in these items to its source. I’ll go harvest some sustenance for your journey.”",
|
||||||
|
"questLostMasterclasser2Boss": "The a'Voidant",
|
||||||
|
"questLostMasterclasser2DropEyewear": "Aether Mask (Eyewear)",
|
||||||
|
|
||||||
|
"questLostMasterclasser3Text": "The Mystery of the Masterclassers, Part 3: City in the Sands",
|
||||||
|
"questLostMasterclasser3Notes": "As night unfurls over the scorching sands of the Timewastes, your guides @AnnDeLune, @Kiwibot, and @Katy133 lead you forward. Some bleached pillars poke from the shadowed dunes, and as you approach them, a strange skittering sound echoes across the seemingly-abandoned expanse.<br><br>“Invisible creatures!” says the April Fool, clearly covetous. “Oho! Just imagine the possibilities. This must be the work of a truly stealthy Rogue.”<br><br>“A Rogue who could be watching us,” says Lady Glaciate, dismounting and raising her spear. “If there’s a head-on attack, try not to irritate our opponent. I don’t want a repeat of the volcano incident.”<br><br>He beams at her. “But it was one of your most resplendent rescues.”<br><br>To your surprise, Lady Glaciate turns very pink at the compliment. She hastily stomps away to examine the ruins.<br><br>“Looks like the wreck of an ancient city,” says @AnnDeLune. “I wonder what…”<br><br>Before she can finish her sentence, a portal roars open in the sky. Wasn’t that magic supposed to be nearly impossible here? The hoofbeats of the invisible animals thunder as they flee in panic, and you steady yourself against the onslaught of shrieking skulls that flood the skies.",
|
||||||
|
"questLostMasterclasser3Completion": "The April Fool surprises the final skull with a spray of sand, and it blunders backwards into Lady Glaciate, who smashes it expertly. As you catch your breath and look up, you see a single flash of someone’s silhouette moving on the other side of the closing portal. Thinking quickly, you snatch up the amulet from the chest of previously-possessed items, and sure enough, it’s drawn towards the unseen person. Ignoring the shouts of alarm from Lady Glaciate and the April Fool, you leap through the portal just as it snaps shut, plummeting into an inky swath of nothingness.",
|
||||||
|
"questLostMasterclasser3Boss": "Void Skull Swarm",
|
||||||
|
"questLostMasterclasser3RageTitle": "Swarm Respawn",
|
||||||
|
"questLostMasterclasser3RageDescription": "Swarm Respawn: This bar fills when you don't complete your Dailies. When it is full, the Void Skull Swarm will heal 30% of its remaining health!",
|
||||||
|
"questLostMasterclasser3RageEffect": "`Void Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls scream down from the heavens, bolstering the swarm!",
|
||||||
|
"questLostMasterclasser3DropBodyAccessory": "Aether Amulet (Body Accessory)",
|
||||||
|
"questLostMasterclasser3DropBasePotion": "Base Hatching Potion",
|
||||||
|
"questLostMasterclasser3DropGoldenPotion": "Golden Hatching Potion",
|
||||||
|
"questLostMasterclasser3DropPinkPotion": "Cotton Candy Pink Hatching Potion",
|
||||||
|
"questLostMasterclasser3DropShadePotion": "Shade Hatching Potion",
|
||||||
|
"questLostMasterclasser3DropZombiePotion": "Zombie Hatching Potion",
|
||||||
|
|
||||||
|
"questLostMasterclasser4Text": "The Mystery of the Masterclassers, Part 4: The Lost Masterclasser",
|
||||||
|
"questLostMasterclasser4Notes": "You surface from the portal, but you’re still suspended in a strange, shifting netherworld. “That was bold,” says a cold voice. “I have to admit, I hadn’t planned for a direct confrontation yet.” A woman rises from the churning whirlpool of darkness. “Welcome to the Realm of Void.”<br><br>You try to fight back your rising nausea. “Are you Zinnya?” you ask.<br><br>“That old name for a young idealist,” she says, mouth twisting, and the world writhes beneath you. “No. If anything, you should call me the Anti’zinnya now, given all that I have done and undone.”<br><br>Suddenly, the portal reopens behind you, and as the four Masterclassers burst out, bolting towards you, Anti’zinnya’s eyes flash with hatred. “I see that my pathetic replacements have managed to follow you.”<br><br>You stare. “Replacements?”<br><br>“As the Master Aethermancer, I was the first Masterclasser — the only Masterclasser. These four are a mockery, each possessing only a fragment of what I once had! I commanded every spell and learned every skill. I shaped your very world to my whim — until the traitorous aether itself collapsed under the weight of my talents and my perfectly reasonable expectations. I have been trapped for millennia in this resulting void, recuperating. Imagine my disgust when I learned how my legacy had been corrupted.” She lets out a low, echoing laugh. “My plan was to destroy their domains before destroying them, but I suppose the order is irrelevant.” With a burst of uncanny strength, she charges forward, and the Realm of Void explodes into chaos.",
|
||||||
|
"questLostMasterclasser4Completion": "Under the onslaught of your final attack, the Lost Masterclasser screams in frustration, her body flickering into translucence. The thrashing void stills around her as she slumps forward, and for a moment, she seems to change, becoming younger, calmer, with an expression of peace upon her face… but then everything melts away with scarcely a whisper, and you’re kneeling once more in the desert sand.<br><br>“It seems that we have much to learn about our own history,” King Manta says, staring at the broken ruins. “After the Master Aethermancer grew overwhelmed and lost control of her abilities, the outpouring of void must have leached the life from the entire land. Everything probably became deserts like this.”<br><br>“No wonder the ancients who founded Habitica stressed a balance of productivity and wellness,” the Joyful Reaper murmurs. “Rebuilding their world would have been a daunting task requiring considerable hard work, but they would have wanted to prevent such a catastrophe from happening again.”<br><br>“Oho, look at those formerly possessed items!” says the April Fool. Sure enough, all of them shimmer with a pale, glimmering translucence from the final burst of aether released when you laid Anti’zinnya’s spirit to rest. “What a dazzling effect. I must take notes.”<br><br>“The concentrated remnants of aether in this area probably caused caused these animals to go invisible, too,” says Lady Glaciate, scratching a patch of emptiness behind the ears. You feel an unseen fluffy head nudge your hand, and suspect that you’ll have to do some explaining at the Stables back home. As you look at the ruins one last time, you spot all that remains of the first Masterclasser: her shimmering cloak. Lifting it onto your shoulders, you head back to Habit City, pondering everything that you have learned.<br><br>",
|
||||||
|
"questLostMasterclasser4Boss": "Anti'zinnya",
|
||||||
|
"questLostMasterclasser4RageTitle": "Siphoning Void",
|
||||||
|
"questLostMasterclasser4RageDescription": "Siphoning Void: This bar fills when you don't complete your Dailies. When it is full, Anti'zinnya will remove the party's Mana!",
|
||||||
|
"questLostMasterclasser4RageEffect": "`Anti'zinnya uses SIPHONING VOID!` In a twisted inversion of the Ethereal Surge spell, you feel your magic drain away into the darkness!",
|
||||||
|
"questLostMasterclasser4DropBackAccessory": "Aether Cloak (Back Accessory)",
|
||||||
|
"questLostMasterclasser4DropWeapon": "Aether Crystals (Two-Handed Weapon)",
|
||||||
|
"questLostMasterclasser4DropMount": "Invisible Aether Mount"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,11 @@ let basicAchievs = {
|
|||||||
titleKey: 'invitedFriend',
|
titleKey: 'invitedFriend',
|
||||||
textKey: 'invitedFriendText',
|
textKey: 'invitedFriendText',
|
||||||
},
|
},
|
||||||
|
lostMasterclasser: {
|
||||||
|
icon: 'achievement-lostMasterclasser',
|
||||||
|
titleKey: 'achievementLostMasterclasser',
|
||||||
|
textKey: 'achievementLostMasterclasserText',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
Object.assign(achievementsData, basicAchievs);
|
Object.assign(achievementsData, basicAchievs);
|
||||||
|
|
||||||
|
|||||||
@@ -788,6 +788,13 @@ let back = {
|
|||||||
notes: t('backSpecialSnowdriftVeilNotes'),
|
notes: t('backSpecialSnowdriftVeilNotes'),
|
||||||
value: 0,
|
value: 0,
|
||||||
},
|
},
|
||||||
|
aetherCloak: {
|
||||||
|
text: t('backSpecialAetherCloakText'),
|
||||||
|
notes: t('backSpecialAetherCloakNotes', { per: 10 }),
|
||||||
|
value: 175,
|
||||||
|
per: 10,
|
||||||
|
canOwn: ownsItem('back_special_aetherCloak'),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let body = {
|
let body = {
|
||||||
@@ -861,6 +868,14 @@ let body = {
|
|||||||
return CURRENT_SEASON === 'summer';
|
return CURRENT_SEASON === 'summer';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
aetherAmulet: {
|
||||||
|
text: t('bodySpecialAetherAmuletText'),
|
||||||
|
notes: t('bodySpecialAetherAmuletNotes', { attrs: 10 }),
|
||||||
|
value: 175,
|
||||||
|
str: 10,
|
||||||
|
con: 10,
|
||||||
|
canOwn: ownsItem('body_special_aetherAmulet'),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let eyewear = {
|
let eyewear = {
|
||||||
@@ -937,6 +952,13 @@ let eyewear = {
|
|||||||
value: 0,
|
value: 0,
|
||||||
canOwn: ownsItem('eyewear_special_yellowTopFrame'),
|
canOwn: ownsItem('eyewear_special_yellowTopFrame'),
|
||||||
},
|
},
|
||||||
|
aetherMask: {
|
||||||
|
text: t('eyewearSpecialAetherMaskText'),
|
||||||
|
notes: t('eyewearSpecialAetherMaskNotes', { int: 10 }),
|
||||||
|
value: 175,
|
||||||
|
int: 10,
|
||||||
|
canOwn: ownsItem('eyewear_special_aetherMask'),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let head = {
|
let head = {
|
||||||
@@ -2566,6 +2588,17 @@ let weapon = {
|
|||||||
value: 0,
|
value: 0,
|
||||||
canOwn: ownsItem('weapon_special_tachi'),
|
canOwn: ownsItem('weapon_special_tachi'),
|
||||||
},
|
},
|
||||||
|
aetherCrystals: {
|
||||||
|
text: t('weaponSpecialAetherCrystalsText'),
|
||||||
|
notes: t('weaponSpecialAetherCrystalsNotes', { attrs: 10 }),
|
||||||
|
con: 10,
|
||||||
|
int: 10,
|
||||||
|
per: 10,
|
||||||
|
str: 10,
|
||||||
|
value: 175,
|
||||||
|
twoHanded: true,
|
||||||
|
canOwn: ownsItem('weapon_special_aetherCrystals'),
|
||||||
|
},
|
||||||
yeti: {
|
yeti: {
|
||||||
event: EVENTS.winter,
|
event: EVENTS.winter,
|
||||||
specialClass: 'warrior',
|
specialClass: 'warrior',
|
||||||
|
|||||||
@@ -2781,6 +2781,228 @@ let quests = {
|
|||||||
unlock: t('questHippoUnlockText'),
|
unlock: t('questHippoUnlockText'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
lostMasterclasser1: {
|
||||||
|
text: t('questLostMasterclasser1Text'),
|
||||||
|
notes: t('questLostMasterclasser1Notes'),
|
||||||
|
group: 'questGroupLostMasterclasser',
|
||||||
|
completion: t('questLostMasterclasser1Completion'),
|
||||||
|
value: 4,
|
||||||
|
goldValue: 400,
|
||||||
|
category: 'gold',
|
||||||
|
collect: {
|
||||||
|
ancientTome: {
|
||||||
|
text: t('questLostMasterclasser1CollectAncientTomes'),
|
||||||
|
count: 40,
|
||||||
|
},
|
||||||
|
forbiddenTome: {
|
||||||
|
text: t('questLostMasterclasser1CollectForbiddenTomes'),
|
||||||
|
count: 40,
|
||||||
|
},
|
||||||
|
hiddenTome: {
|
||||||
|
text: t('questLostMasterclasser1CollectHiddenTomes'),
|
||||||
|
count: 40,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'food',
|
||||||
|
key: 'Potatoe',
|
||||||
|
text: t('foodPotatoe'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Potatoe',
|
||||||
|
text: t('foodPotatoe'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Potatoe',
|
||||||
|
text: t('foodPotatoe'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Meat',
|
||||||
|
text: t('foodMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Meat',
|
||||||
|
text: t('foodMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Meat',
|
||||||
|
text: t('foodMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Milk',
|
||||||
|
text: t('foodMilk'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Milk',
|
||||||
|
text: t('foodMilk'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Milk',
|
||||||
|
text: t('foodMilk'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 200,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lostMasterclasser2: {
|
||||||
|
text: t('questLostMasterclasser2Text'),
|
||||||
|
notes: t('questLostMasterclasser2Notes'),
|
||||||
|
group: 'questGroupLostMasterclasser',
|
||||||
|
previous: 'lostMasterclasser1',
|
||||||
|
completion: t('questLostMasterclasser2Completion'),
|
||||||
|
value: 4,
|
||||||
|
goldValue: 500,
|
||||||
|
category: 'gold',
|
||||||
|
boss: {
|
||||||
|
name: t('questLostMasterclasser2Boss'),
|
||||||
|
hp: 1500,
|
||||||
|
str: 2.5,
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'food',
|
||||||
|
key: 'Chocolate',
|
||||||
|
text: t('foodChocolate'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Chocolate',
|
||||||
|
text: t('foodChocolate'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Chocolate',
|
||||||
|
text: t('foodChocolate'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('foodHoney'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('foodHoney'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'Honey',
|
||||||
|
text: t('foodHoney'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('foodRottenMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('foodRottenMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'food',
|
||||||
|
key: 'RottenMeat',
|
||||||
|
text: t('foodRottenMeat'),
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'eyewear_special_aetherMask',
|
||||||
|
text: t('questLostMasterclasser2DropEyewear'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 1500,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lostMasterclasser3: {
|
||||||
|
text: t('questLostMasterclasser3Text'),
|
||||||
|
notes: t('questLostMasterclasser3Notes'),
|
||||||
|
group: 'questGroupLostMasterclasser',
|
||||||
|
completion: t('questLostMasterclasser3Completion'),
|
||||||
|
previous: 'lostMasterclasser2',
|
||||||
|
value: 4,
|
||||||
|
goldValue: 600,
|
||||||
|
category: 'gold',
|
||||||
|
boss: {
|
||||||
|
name: t('questLostMasterclasser3Boss'),
|
||||||
|
hp: 2000,
|
||||||
|
str: 3,
|
||||||
|
rage: {
|
||||||
|
title: t('questLostMasterclasser3RageTitle'),
|
||||||
|
description: t('questLostMasterclasser3RageDescription'),
|
||||||
|
value: 25,
|
||||||
|
healing: 0.3,
|
||||||
|
effect: t('questLostMasterclasser3RageEffect'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Base',
|
||||||
|
text: t('questLostMasterclasser3DropBasePotion'),
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'CottonCandyPink',
|
||||||
|
text: t('questLostMasterclasser3DropPinkPotion'),
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Golden',
|
||||||
|
text: t('questLostMasterclasser3DropGoldenPotion'),
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Shade',
|
||||||
|
text: t('questLostMasterclasser3DropShadePotion'),
|
||||||
|
}, {
|
||||||
|
type: 'hatchingPotions',
|
||||||
|
key: 'Zombie',
|
||||||
|
text: t('questLostMasterclasser3DropZombiePotion'),
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'body_special_aetherAmulet',
|
||||||
|
text: t('questLostMasterclasser3DropBodyAccessory'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 2000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lostMasterclasser4: {
|
||||||
|
text: t('questLostMasterclasser4Text'),
|
||||||
|
notes: t('questLostMasterclasser4Notes'),
|
||||||
|
group: 'questGroupLostMasterclasser',
|
||||||
|
completion: t('questLostMasterclasser4Completion'),
|
||||||
|
previous: 'lostMasterclasser3',
|
||||||
|
value: 4,
|
||||||
|
goldValue: 700,
|
||||||
|
category: 'gold',
|
||||||
|
boss: {
|
||||||
|
name: t('questLostMasterclasser4Boss'),
|
||||||
|
hp: 3000,
|
||||||
|
str: 4,
|
||||||
|
rage: {
|
||||||
|
title: t('questLostMasterclasser4RageTitle'),
|
||||||
|
description: t('questLostMasterclasser4RageDescription'),
|
||||||
|
value: 15,
|
||||||
|
mpDrain: true,
|
||||||
|
effect: t('questLostMasterclasser4RageEffect'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
drop: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'mounts',
|
||||||
|
key: 'Aether-Invisible',
|
||||||
|
text: t('questLostMasterclasser4DropMount'),
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'back_special_aetherCloak',
|
||||||
|
text: t('questLostMasterclasser4DropBackAccessory'),
|
||||||
|
}, {
|
||||||
|
type: 'gear',
|
||||||
|
key: 'weapon_special_aetherCrystals',
|
||||||
|
text: t('questLostMasterclasser4DropWeapon'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
gp: 0,
|
||||||
|
exp: 3500,
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
each(quests, (v, key) => {
|
each(quests, (v, key) => {
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ let specialMounts = {
|
|||||||
'MagicalBee-Base': 'magicalBee',
|
'MagicalBee-Base': 'magicalBee',
|
||||||
'Turkey-Gilded': 'gildedTurkey',
|
'Turkey-Gilded': 'gildedTurkey',
|
||||||
'Jackalope-RoyalPurple': 'royalPurpleJackalope',
|
'Jackalope-RoyalPurple': 'royalPurpleJackalope',
|
||||||
|
'Aether-Invisible': 'invisibleAether',
|
||||||
};
|
};
|
||||||
|
|
||||||
each(specialPets, (translationString, key) => {
|
each(specialPets, (translationString, key) => {
|
||||||
|
|||||||
@@ -183,6 +183,7 @@ function _getBasicAchievements (user, language) {
|
|||||||
_addSimple(result, user, {path: 'royallyLoyal', language});
|
_addSimple(result, user, {path: 'royallyLoyal', language});
|
||||||
_addSimple(result, user, {path: 'joinedChallenge', language});
|
_addSimple(result, user, {path: 'joinedChallenge', language});
|
||||||
_addSimple(result, user, {path: 'invitedFriend', language});
|
_addSimple(result, user, {path: 'invitedFriend', language});
|
||||||
|
_addSimple(result, user, {path: 'lostMasterclasser', language});
|
||||||
|
|
||||||
_addSimpleWithMasterCount(result, user, {path: 'beastMaster', language});
|
_addSimpleWithMasterCount(result, user, {path: 'beastMaster', language});
|
||||||
_addSimpleWithMasterCount(result, user, {path: 'mountMaster', language});
|
_addSimpleWithMasterCount(result, user, {path: 'mountMaster', language});
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import getOfficialPinnedItems from './getOfficialPinnedItems';
|
|||||||
import _mapValues from 'lodash/mapValues';
|
import _mapValues from 'lodash/mapValues';
|
||||||
|
|
||||||
function lockQuest (quest, user) {
|
function lockQuest (quest, user) {
|
||||||
|
if (quest.key === 'lostMasterclasser1') return !(user.achievements.quests.dilatoryDistress3 && user.achievements.quests.mayhemMistiflying3 && user.achievements.quests.stoikalmCalamity3 && user.achievements.quests.taskwoodsTerror3);
|
||||||
if (quest.lvl && user.stats.lvl < quest.lvl) return true;
|
if (quest.lvl && user.stats.lvl < quest.lvl) return true;
|
||||||
if (quest.unlockCondition && (quest.key === 'moon1' || quest.key === 'moon2' || quest.key === 'moon3')) {
|
if (quest.unlockCondition && (quest.key === 'moon1' || quest.key === 'moon2' || quest.key === 'moon3')) {
|
||||||
return user.loginIncentives < quest.unlockCondition.incentiveThreshold;
|
return user.loginIncentives < quest.unlockCondition.incentiveThreshold;
|
||||||
@@ -132,6 +133,7 @@ module.exports = function getItemInfo (user, type, item, officialPinnedItems, la
|
|||||||
value: item.goldValue ? item.goldValue : item.value,
|
value: item.goldValue ? item.goldValue : item.value,
|
||||||
currency: item.goldValue ? 'gold' : 'gems',
|
currency: item.goldValue ? 'gold' : 'gems',
|
||||||
locked,
|
locked,
|
||||||
|
previous: content.quests[item.previous] ? content.quests[item.previous].text(language) : null,
|
||||||
unlockCondition: item.unlockCondition,
|
unlockCondition: item.unlockCondition,
|
||||||
drop: item.drop,
|
drop: item.drop,
|
||||||
boss: item.boss,
|
boss: item.boss,
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ module.exports = function buyQuest (user, req = {}, analytics) {
|
|||||||
let item = content.quests[key];
|
let item = content.quests[key];
|
||||||
if (!item) throw new NotFound(i18n.t('questNotFound', {key}, req.language));
|
if (!item) throw new NotFound(i18n.t('questNotFound', {key}, req.language));
|
||||||
|
|
||||||
|
if (key === 'lostMasterclasser1' && !(user.achievements.quests.dilatoryDistress3 && user.achievements.quests.mayhemMistiflying3 && user.achievements.quests.stoikalmCalamity3 && user.achievements.quests.taskwoodsTerror3)) {
|
||||||
|
throw new NotAuthorized(i18n.t('questUnlockLostMasterclasser', req.language));
|
||||||
|
}
|
||||||
|
|
||||||
if (!(item.category === 'gold' && item.goldValue)) {
|
if (!(item.category === 'gold' && item.goldValue)) {
|
||||||
throw new NotAuthorized(i18n.t('questNotGoldPurchasable', {key}, req.language));
|
throw new NotAuthorized(i18n.t('questNotGoldPurchasable', {key}, req.language));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
/* These sprites are oversized until a move to 105 avatar box happens*/
|
|
||||||
|
|
||||||
/* Backer */
|
|
||||||
.weapon_special_0, .head_special_0 {
|
|
||||||
width: 105px;
|
|
||||||
height: 105px;
|
|
||||||
margin-left: -3px;
|
|
||||||
margin-top: -18px;
|
|
||||||
}
|
|
||||||
.slim_armor_special_0, .broad_armor_special_0, .shield_special_0 {
|
|
||||||
width: 90px;
|
|
||||||
height: 90px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Critical */
|
|
||||||
.weapon_special_critical {
|
|
||||||
background: url("/weapon_special_critical.gif") no-repeat;
|
|
||||||
width: 90px;
|
|
||||||
height: 90px;
|
|
||||||
margin-left:-12px;
|
|
||||||
margin-top:12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is oversized until a move to 105 avatar box happens*/
|
|
||||||
.weapon_special_1 {
|
|
||||||
margin-left: -12px;
|
|
||||||
}
|
|
||||||
.broad_armor_special_1, .slim_armor_special_1, .head_special_1 {
|
|
||||||
width: 90px;
|
|
||||||
height: 90px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.head_special_0 {
|
|
||||||
background: url("/BackerOnly-Equip-ShadeHelmet.gif") no-repeat;
|
|
||||||
}
|
|
||||||
.head_special_1 {
|
|
||||||
background: url("/ContributorOnly-Equip-CrystalHelmet.gif") no-repeat;
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.broad_armor_special_0,.slim_armor_special_0 {
|
|
||||||
background: url("/BackerOnly-Equip-ShadeArmor.gif") no-repeat;
|
|
||||||
}
|
|
||||||
.broad_armor_special_1,.slim_armor_special_1 {
|
|
||||||
background: url("/ContributorOnly-Equip-CrystalArmor.gif") no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shield_special_0 {
|
|
||||||
background: url("/BackerOnly-Shield-TormentedSkull.gif") no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.weapon_special_0 {
|
|
||||||
background: url("/BackerOnly-Weapon-DarkSoulsBlade.gif") no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Pet-Wolf-Cerberus {
|
|
||||||
width: 105px;
|
|
||||||
height: 72px;
|
|
||||||
background: url("/BackerOnly-Pet-CerberusPup.gif") no-repeat;
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
BIN
website/raw_sprites/spritesmith/gear/back/back_special_aetherCloak.png
Executable file
|
After Width: | Height: | Size: 697 B |
BIN
website/raw_sprites/spritesmith/gear/back/shop_back_special_aetherCloak.png
Executable file
|
After Width: | Height: | Size: 636 B |
BIN
website/raw_sprites/spritesmith/gear/body/body_special_aetherAmulet.png
Executable file
|
After Width: | Height: | Size: 291 B |
BIN
website/raw_sprites/spritesmith/gear/body/shop_body_special_aetherAmulet.png
Executable file
|
After Width: | Height: | Size: 246 B |
BIN
website/raw_sprites/spritesmith/gear/eyewear/eyewear_special_aetherMask.png
Executable file
|
After Width: | Height: | Size: 630 B |
|
After Width: | Height: | Size: 582 B |
|
After Width: | Height: | Size: 447 B |
BIN
website/raw_sprites/spritesmith/gear/weapon/weapon_special_aetherCrystals.png
Executable file
|
After Width: | Height: | Size: 507 B |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 644 B |
|
After Width: | Height: | Size: 574 B |
|
After Width: | Height: | Size: 622 B |
|
After Width: | Height: | Size: 728 B |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 729 B |
|
After Width: | Height: | Size: 831 B |
|
After Width: | Height: | Size: 769 B |
|
After Width: | Height: | Size: 874 B |
|
After Width: | Height: | Size: 785 B |
|
After Width: | Height: | Size: 872 B |
|
After Width: | Height: | Size: 397 B |
@@ -712,8 +712,9 @@ function _getUserUpdateForQuestReward (itemToAward, allAwardedItems) {
|
|||||||
return updates;
|
return updates;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function _updateUserWithRetries (userId, updates, numTry = 1) {
|
async function _updateUserWithRetries (userId, updates, numTry = 1, query = {}) {
|
||||||
return await User.update({_id: userId}, updates).exec()
|
query._id = userId;
|
||||||
|
return await User.update(query, updates).exec()
|
||||||
.then((raw) => {
|
.then((raw) => {
|
||||||
return raw;
|
return raw;
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@@ -772,6 +773,33 @@ schema.methods.finishQuest = async function finishQuest (quest) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (questK === 'lostMasterclasser4') {
|
||||||
|
let lostMasterclasserQuery = {
|
||||||
|
'achievements.lostMasterclasser': {$ne: true},
|
||||||
|
'achievements.quests.mayhemMistiflying1': {$gt: 0},
|
||||||
|
'achievements.quests.mayhemMistiflying2': {$gt: 0},
|
||||||
|
'achievements.quests.mayhemMistiflying3': {$gt: 0},
|
||||||
|
'achievements.quests.stoikalmCalamity1': {$gt: 0},
|
||||||
|
'achievements.quests.stoikalmCalamity2': {$gt: 0},
|
||||||
|
'achievements.quests.stoikalmCalamity3': {$gt: 0},
|
||||||
|
'achievements.quests.taskwoodsTerror1': {$gt: 0},
|
||||||
|
'achievements.quests.taskwoodsTerror2': {$gt: 0},
|
||||||
|
'achievements.quests.taskwoodsTerror3': {$gt: 0},
|
||||||
|
'achievements.quests.dilatoryDistress1': {$gt: 0},
|
||||||
|
'achievements.quests.dilatoryDistress2': {$gt: 0},
|
||||||
|
'achievements.quests.dilatoryDistress3': {$gt: 0},
|
||||||
|
'achievements.quests.lostMasterclasser1': {$gt: 0},
|
||||||
|
'achievements.quests.lostMasterclasser2': {$gt: 0},
|
||||||
|
'achievements.quests.lostMasterclasser3': {$gt: 0},
|
||||||
|
};
|
||||||
|
let lostMasterclasserUpdate = {
|
||||||
|
$set: {'achievements.lostMasterclasser': true},
|
||||||
|
};
|
||||||
|
promises.concat(participants.map(userId => {
|
||||||
|
return _updateUserWithRetries(userId, lostMasterclasserUpdate, null, lostMasterclasserQuery);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
return Bluebird.all(promises);
|
return Bluebird.all(promises);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -788,6 +816,10 @@ schema.methods._processBossQuest = async function processBossQuest (options) {
|
|||||||
let group = this;
|
let group = this;
|
||||||
let quest = questScrolls[group.quest.key];
|
let quest = questScrolls[group.quest.key];
|
||||||
let down = progress.down * quest.boss.str; // multiply by boss strength
|
let down = progress.down * quest.boss.str; // multiply by boss strength
|
||||||
|
// Everyone takes damage
|
||||||
|
let updates = {
|
||||||
|
$inc: {'stats.hp': down},
|
||||||
|
};
|
||||||
|
|
||||||
group.quest.progress.hp -= progress.up;
|
group.quest.progress.hp -= progress.up;
|
||||||
// TODO Create a party preferred language option so emits like this can be localized. Suggestion: Always display the English version too. Or, if English is not displayed to the players, at least include it in a new field in the chat object that's visible in the database - essential for admins when troubleshooting quests!
|
// TODO Create a party preferred language option so emits like this can be localized. Suggestion: Always display the English version too. Or, if English is not displayed to the players, at least include it in a new field in the chat object that's visible in the database - essential for admins when troubleshooting quests!
|
||||||
@@ -806,15 +838,19 @@ schema.methods._processBossQuest = async function processBossQuest (options) {
|
|||||||
// TODO To make Rage effects more expandable, let's turn these into functions in quest.boss.rage
|
// TODO To make Rage effects more expandable, let's turn these into functions in quest.boss.rage
|
||||||
if (quest.boss.rage.healing) group.quest.progress.hp += group.quest.progress.hp * quest.boss.rage.healing;
|
if (quest.boss.rage.healing) group.quest.progress.hp += group.quest.progress.hp * quest.boss.rage.healing;
|
||||||
if (group.quest.progress.hp > quest.boss.hp) group.quest.progress.hp = quest.boss.hp;
|
if (group.quest.progress.hp > quest.boss.hp) group.quest.progress.hp = quest.boss.hp;
|
||||||
|
if (quest.boss.rage.mpDrain) {
|
||||||
|
updates.$set = {'stats.mp': 0};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Everyone takes damage
|
await User.update(
|
||||||
await User.update({
|
{_id:
|
||||||
_id: {$in: this.getParticipatingQuestMembers()},
|
{$in: this.getParticipatingQuestMembers()},
|
||||||
}, {
|
},
|
||||||
$inc: {'stats.hp': down},
|
updates,
|
||||||
}, {multi: true}).exec();
|
{multi: true}
|
||||||
|
).exec();
|
||||||
// Apply changes the currently cronning user locally so we don't have to reload it to get the updated state
|
// Apply changes the currently cronning user locally so we don't have to reload it to get the updated state
|
||||||
// TODO how to mark not modified? https://github.com/Automattic/mongoose/pull/1167
|
// TODO how to mark not modified? https://github.com/Automattic/mongoose/pull/1167
|
||||||
// must be notModified or otherwise could overwrite future changes: if the user is saved it'll save
|
// must be notModified or otherwise could overwrite future changes: if the user is saved it'll save
|
||||||
|
|||||||
@@ -102,7 +102,6 @@ let schema = new Schema({
|
|||||||
perfect: {type: Number, default: 0},
|
perfect: {type: Number, default: 0},
|
||||||
habitBirthdays: Number,
|
habitBirthdays: Number,
|
||||||
valentine: Number,
|
valentine: Number,
|
||||||
costumeContest: Boolean, // Superseded by costumeContests
|
|
||||||
nye: Number,
|
nye: Number,
|
||||||
habiticaDays: Number,
|
habiticaDays: Number,
|
||||||
greeting: Number,
|
greeting: Number,
|
||||||
@@ -118,6 +117,7 @@ let schema = new Schema({
|
|||||||
joinedGuild: Boolean,
|
joinedGuild: Boolean,
|
||||||
joinedChallenge: Boolean,
|
joinedChallenge: Boolean,
|
||||||
invitedFriend: Boolean,
|
invitedFriend: Boolean,
|
||||||
|
lostMasterclasser: Boolean,
|
||||||
},
|
},
|
||||||
|
|
||||||
backer: {
|
backer: {
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 538 KiB After Width: | Height: | Size: 540 KiB |
|
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 165 KiB |
BIN
website/static/sprites/spritesmith-main-20.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 351 KiB After Width: | Height: | Size: 351 KiB |